Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| c9e2661da1 |
+1
-1
Submodule binary updated: 741b49156b...0d89ac7766
@@ -418,8 +418,10 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
File "${QT_DLL_PATH}\Qt5Core.dll"
|
||||
File "${QT_DLL_PATH}\Qt5Gui.dll"
|
||||
File "${QT_DLL_PATH}\Qt5Network.dll"
|
||||
File "${QT_DLL_PATH}\Qt5OpenGL.dll"
|
||||
File "${QT_DLL_PATH}\Qt5PrintSupport.dll"
|
||||
File "${QT_DLL_PATH}\Qt5Qml.dll"
|
||||
File "${QT_DLL_PATH}\Qt5Quick.dll"
|
||||
File "${QT_DLL_PATH}\Qt5Sql.dll"
|
||||
File "${QT_DLL_PATH}\Qt5WebKit.dll"
|
||||
File "${QT_DLL_PATH}\Qt5WebKitWidgets.dll"
|
||||
@@ -433,9 +435,9 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
|
||||
;Qt deps
|
||||
File "${MING_BIN}\libpng16-16.dll"
|
||||
File "${MING_BIN}\icudata56.dll"
|
||||
File "${MING_BIN}\icui18n56.dll"
|
||||
File "${MING_BIN}\icuuc56.dll"
|
||||
File "${MING_BIN}\icudata53.dll"
|
||||
File "${MING_BIN}\icui18n53.dll"
|
||||
File "${MING_BIN}\icuuc53.dll"
|
||||
File "${MING_BIN}\libEGL.dll"
|
||||
File "${MING_BIN}\libGLESv2.dll"
|
||||
File "${MING_BIN}\libjpeg-8.dll"
|
||||
@@ -444,14 +446,11 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
|
||||
File "${MING_BIN}\libcrypto-10.dll"
|
||||
File "${MING_BIN}\libssl-10.dll"
|
||||
File "${MING_BIN}\libstdc++-6.dll"
|
||||
File "${MING_BIN}\libwebp-5.dll"
|
||||
File "${MING_BIN}\libwebp-4.dll"
|
||||
File "${MING_BIN}\libxslt-1.dll"
|
||||
File "${MING_BIN}\libxml2-2.dll"
|
||||
File "${MING_BIN}\zlib1.dll"
|
||||
File "${MING_BIN}\libharfbuzz-0.dll"
|
||||
File "${MING_BIN}\libfreetype-6.dll"
|
||||
File "${MING_BIN}\libglib-2.0-0.dll"
|
||||
File "${MING_BIN}\libintl-8.dll"
|
||||
File "${MING_BIN}\libsqlite3-0.dll"
|
||||
|
||||
;QtKeyChain stuff
|
||||
File "${MING_BIN}\libqt5keychain.dll"
|
||||
|
||||
@@ -77,7 +77,7 @@ a synchronization process.
|
||||
|
||||
Before the 1.3.0 release of the Desktop Client, the synchronization process
|
||||
might create false conflict files if time deviates. Original and changed files
|
||||
conflict only in their timestamp, but not in their content. This behavior was
|
||||
conflict only in their timestamp, but not in their content. This behaviour was
|
||||
changed to employ a binary check if files differ.
|
||||
|
||||
Like files, directories also hold a unique ID that changes whenever one of the
|
||||
|
||||
+20
-3
@@ -3,7 +3,7 @@ The Automatic Updater
|
||||
=====================
|
||||
|
||||
The Automatic Updater ensures that you always have the
|
||||
latest features and bug fixes for your ownCloud synchronization client.
|
||||
latest features and bugfixes for your ownCloud synchronization client.
|
||||
|
||||
The Automatic Updater updates only on Mac OS X and Windows computers; Linux
|
||||
users only need to use their normal package managers. However, on Linux systems
|
||||
@@ -49,6 +49,7 @@ the Linux operating system do not perform any updates on their own. The client
|
||||
will inform you (``Settings -> General -> Updates``) when an update is
|
||||
available.
|
||||
|
||||
|
||||
Preventing Automatic Updates
|
||||
----------------------------
|
||||
|
||||
@@ -109,8 +110,24 @@ To prevent automatic updates and disallow manual overrides:
|
||||
Preventing Automatic Updates in Mac OS X Environments
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You can disable the automatic update mechanism, in the Mac OS X operating system,
|
||||
by copying the file
|
||||
You can disable the automatic update mechanism in Mac OS X operating systems
|
||||
using the system-wide ``.plist`` file. To access this file:
|
||||
|
||||
1. Go to this directory::
|
||||
|
||||
/Library/Preferences/
|
||||
|
||||
2. Locate and open the following file::
|
||||
|
||||
com.owncloud.desktopclient.plist
|
||||
|
||||
3. Add a new root level item of type ``bool``.
|
||||
|
||||
4. Name the item ``skipUpdateCheck``.
|
||||
|
||||
5. Set the item to ``true``.
|
||||
|
||||
Alternatively, you can copy the file
|
||||
``owncloud.app/Contents/Resources/deny_autoupdate_com.owncloud.desktopclient.plist``
|
||||
to ``/Library/Preferences/com.owncloud.desktopclient.plist``.
|
||||
|
||||
|
||||
+8
-12
@@ -54,7 +54,7 @@ distribution. Make sure the repositories for source packages are enabled.
|
||||
Mac OS X
|
||||
--------
|
||||
|
||||
In addition to needing XCode (along with the command line tools), developing in
|
||||
In additon to needing XCode (along with the command line tools), developing in
|
||||
the Mac OS X environment requires extra dependencies. You can install these
|
||||
dependencies through MacPorts_ or Homebrew_. These dependencies are required
|
||||
only on the build machine, because non-standard libs are deployed in the app
|
||||
@@ -77,29 +77,25 @@ To set up your build environment for development using HomeBrew_:
|
||||
|
||||
brew tap owncloud/owncloud
|
||||
|
||||
5. Install a Qt5 version with qtwebkit support::
|
||||
|
||||
brew install qt5 --with-qtwebkit
|
||||
|
||||
6. Install any missing dependencies::
|
||||
5. Install any missing dependencies::
|
||||
|
||||
brew install $(brew deps owncloud-client)
|
||||
|
||||
7. Add Qt from brew to the path::
|
||||
3. Add Qt from brew to the path::
|
||||
|
||||
export PATH=/usr/local/Cellar/qt5/5.x.y/bin:$PATH
|
||||
|
||||
Where ``x.y`` is the current version of Qt 5 that brew has installed
|
||||
Where ``x.z`` is the current version of Qt 5 that brew has installed
|
||||
on your machine.
|
||||
8. Install qtkeychain from here: git clone https://github.com/frankosterfeld/qtkeychain.git
|
||||
4. Install qtkeychain from here: git clone https://github.com/frankosterfeld/qtkeychain.git
|
||||
make sure you make the same install prefix as later while building the client e.g. -
|
||||
``DCMAKE_INSTALL_PREFIX=/Path/to/client-install``
|
||||
|
||||
9. For compilation of the client, follow the :ref:`generic-build-instructions`.
|
||||
5. For compilation of the client, follow the :ref:`generic-build-instructions`.
|
||||
|
||||
10. Install the Packages_ package creation tool.
|
||||
6. Install the Packages_ package creation tool.
|
||||
|
||||
11. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
||||
7. In the build directory, run ``admin/osx/create_mac.sh <build_dir>
|
||||
<install_dir>``. If you have a developer signing certificate, you can specify
|
||||
its Common Name as a third parameter (use quotes) to have the package
|
||||
signed automatically.
|
||||
|
||||
+3
-8
@@ -16,20 +16,15 @@ format. You can overwrite changes using the ownCloud configuration dialog.
|
||||
.. note:: Use caution when making changes to the ownCloud Client configuration
|
||||
file. Incorrect settings can produce unintended results.
|
||||
|
||||
You can change the following configuration settings in the ``[ownCloud]`` section:
|
||||
You can change the following configuration settings (must be under the ``[ownCloud]`` section)
|
||||
|
||||
- ``remotePollInterval`` (default: ``30000``) -- Specifies the poll time for the remote repository in milliseconds.
|
||||
|
||||
- ``forceSyncInterval`` (default: ``7200000``) -- The duration of no activity after which a synchronization run shall be triggered automatically.
|
||||
|
||||
- ``notificationRefreshInterval`` (default: ``300000``) -- Specifies the default interval of checking for new server notifications in milliseconds.
|
||||
|
||||
You can change the following configuration settings in the ``[General]`` section:
|
||||
- ``maxLogLines`` (default: ``20000``) -- Specifies the maximum number of log lines displayed in the log window.
|
||||
|
||||
- ``chunkSize`` (default: ``5242880``) -- Specifies the chunk size of uploaded files in bytes.
|
||||
|
||||
- ``promptDeleteAllFiles`` (default: ``true``) -- If a UI prompt should ask for confirmation if it was detected that all files and folders were deleted.
|
||||
|
||||
- ``maxLogLines`` (default: ``20000``) -- Specifies the maximum number of log lines displayed in the log window.
|
||||
- ``notificationRefreshInterval`` (default``300,000``) -- Specifies the default interval of checking for new server notifications in milliseconds.
|
||||
|
||||
- ``timeout`` (default: ``300``) -- The timeout for network connections in seconds.
|
||||
|
||||
+6
-9
@@ -1,20 +1,17 @@
|
||||
FAQ
|
||||
===
|
||||
|
||||
**Issue:**
|
||||
|
||||
Some files are continuously uploaded to the server, even when they are not modified.
|
||||
------------------------------------------------------------------------------------
|
||||
|
||||
**Resolution:**
|
||||
|
||||
It is possible that another program is changing the modification date of the file.
|
||||
|
||||
If the file is uses the ``.eml`` extension, Windows automatically and
|
||||
continually changes all files, unless you remove
|
||||
``\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers``
|
||||
from the windows registry.
|
||||
|
||||
See http://petersteier.wordpress.com/2011/10/22/windows-indexer-changes-modification-dates-of-eml-files/ for more information.
|
||||
|
||||
Syncing breaks when attempting to sync deeper than 50 sub-directories, but the sync client does not report an error (RC=0)
|
||||
--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
The sync client has been intentionally limited to sync no deeper than
|
||||
fifty sub-directories, to help prevent memory problems.
|
||||
Unfortunately, it, *currently*, does not report an error when this occurs.
|
||||
However, a UI notification is planned for a future release of ownCloud.
|
||||
|
||||
@@ -138,7 +138,7 @@ Network
|
||||
|
||||
.. index:: proxy settings, SOCKS, bandwith, throttling, limiting
|
||||
|
||||
This tab consolidates ``Proxy Settings`` and ``Bandwith Limiting``:
|
||||
This tab consollidates ``Proxy Settings`` and ``Bandwith Limiting``:
|
||||
|
||||
.. image:: images/settings_network.png
|
||||
:scale: 50 %
|
||||
@@ -152,7 +152,7 @@ Proxy Settings
|
||||
On Linux, this will only pick up the value of the variable ``http_proxy``.
|
||||
* ``Specify proxy manually as``: Allows to specify custom proxy settings.
|
||||
If you require to go through a HTTP(S) proxy server such as Squid or Microsoft
|
||||
Forefront TMG, pick ``HTTP(S)``. ``SOCKSv5`` on the other hand is particularly
|
||||
Forefront TMG, pick ``HTTP(S)``. ``SOCKSv5`` on the other hand is particulary
|
||||
useful in special company LAN setups, or in combination with the OpenSSH
|
||||
dynamic application level forwarding feature (see ``ssh -D``).
|
||||
* ``Host``: Enter the host name or IP address of your proxy server, followed
|
||||
|
||||
@@ -37,10 +37,6 @@ Operating system:
|
||||
|
||||
OS language:
|
||||
|
||||
Qt version used by client package (Linux only, see also Settings dialog):
|
||||
|
||||
Client package (From ownCloud or distro) (Linux only):
|
||||
|
||||
Installation path of client:
|
||||
|
||||
### Logs
|
||||
|
||||
@@ -619,39 +619,6 @@ X-GNOME-Autostart-Delay=3
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
|
||||
|
||||
# Translations
|
||||
Comment[oc]=@APPLICATION_NAME@ sincronizacion del client
|
||||
GenericName[oc]=Dorsièr de Sincronizacion
|
||||
@@ -787,10 +754,7 @@ Comment[th_TH]=@APPLICATION_NAME@ ไคลเอนต์ประสานข
|
||||
GenericName[th_TH]=ประสานข้อมูลโฟลเดอร์
|
||||
Name[th_TH]= @APPLICATION_NAME@ ไคลเอนต์ประสานข้อมูลเดสก์ท็อป
|
||||
Icon[th_TH]=@APPLICATION_EXECUTABLE@
|
||||
Comment[es_MX]=Cliente de escritorio para sincronziación de @APPLICATION_NAME@
|
||||
GenericName[es_MX]=Sincronización de Carpetas
|
||||
Name[es_MX]=Cliente de escritorio para sincronziación de @APPLICATION_NAME@
|
||||
Icon[es_MX]=@APPLICATION_EXECUTABLE@
|
||||
Comment[nb_NO]=@APPLICATION_NAME@ skrivebordssynkroniseringsklient
|
||||
GenericName[nb_NO]=Mappesynkronisering
|
||||
Name[nb_NO]=@APPLICATION_NAME@ skrivebordssynkroniseringsklient
|
||||
|
||||
@@ -16,13 +16,12 @@ set(OC_OEM_SHARE_ICNS "${CMAKE_BINARY_DIR}/src/gui/ownCloud.icns")
|
||||
# those user-defined settings to build the plist.
|
||||
add_custom_target( mac_overlayplugin ALL
|
||||
xcodebuild -project ${CMAKE_SOURCE_DIR}/shell_integration/MacOSX/OwnCloudFinderSync/OwnCloudFinderSync.xcodeproj
|
||||
-target FinderSyncExt -configuration Release "SYMROOT=${CMAKE_CURRENT_BINARY_DIR}"
|
||||
"OC_OEM_SHARE_ICNS=${OC_OEM_SHARE_ICNS}"
|
||||
"OC_APPLICATION_NAME=${APPLICATION_NAME}"
|
||||
"OC_APPLICATION_REV_DOMAIN=${APPLICATION_REV_DOMAIN}"
|
||||
"OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX=${SOCKETAPI_TEAM_IDENTIFIER_PREFIX}"
|
||||
COMMENT building Mac Overlay icons
|
||||
VERBATIM)
|
||||
-target FinderSyncExt -configuration Release SYMROOT=${CMAKE_CURRENT_BINARY_DIR}
|
||||
OC_OEM_SHARE_ICNS=${OC_OEM_SHARE_ICNS}
|
||||
OC_APPLICATION_NAME="${APPLICATION_NAME}"
|
||||
OC_APPLICATION_REV_DOMAIN=${APPLICATION_REV_DOMAIN}
|
||||
OC_SOCKETAPI_TEAM_IDENTIFIER_PREFIX=${SOCKETAPI_TEAM_IDENTIFIER_PREFIX}
|
||||
COMMENT building Mac Overlay icons)
|
||||
add_dependencies(mac_overlayplugin ${APPLICATION_EXECUTABLE}) # for the ownCloud.icns to be generated
|
||||
|
||||
|
||||
|
||||
@@ -155,13 +155,9 @@
|
||||
{
|
||||
_shareMenuTitle = nil;
|
||||
|
||||
[_registeredDirectories removeAllObjects];
|
||||
// For some reason the FIFinderSync cache doesn't seem to be cleared for the root item when
|
||||
// we reset the directoryURLs (seen on macOS 10.12 at least).
|
||||
// First setting it to the FS root and then setting it to nil seems to work around the issue.
|
||||
[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]];
|
||||
// This will tell Finder that this extension isn't attached to any directory
|
||||
// until we can reconnect to the sync client.
|
||||
[_registeredDirectories removeAllObjects];
|
||||
[FIFinderSyncController defaultController].directoryURLs = nil;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,54 +36,54 @@ using namespace std;
|
||||
|
||||
OCClientInterface::ContextMenuInfo OCClientInterface::FetchInfo()
|
||||
{
|
||||
auto pipename = CommunicationSocket::DefaultPipePath();
|
||||
auto pipename = CommunicationSocket::DefaultPipePath();
|
||||
|
||||
CommunicationSocket socket;
|
||||
if (!WaitNamedPipe(pipename.data(), PIPE_TIMEOUT)) {
|
||||
return {};
|
||||
}
|
||||
if (!socket.Connect(pipename)) {
|
||||
return {};
|
||||
}
|
||||
socket.SendMsg(L"SHARE_MENU_TITLE\n");
|
||||
CommunicationSocket socket;
|
||||
if (!WaitNamedPipe(pipename.data(), PIPE_TIMEOUT)) {
|
||||
return {};
|
||||
}
|
||||
if (!socket.Connect(pipename)) {
|
||||
return {};
|
||||
}
|
||||
socket.SendMsg(L"SHARE_MENU_TITLE\n");
|
||||
|
||||
ContextMenuInfo info;
|
||||
std::wstring response;
|
||||
int sleptCount = 0;
|
||||
while (sleptCount < 5) {
|
||||
if (socket.ReadLine(&response)) {
|
||||
if (StringUtil::begins_with(response, wstring(L"REGISTER_PATH:"))) {
|
||||
wstring responsePath = response.substr(14); // length of REGISTER_PATH
|
||||
info.watchedDirectories.push_back(responsePath);
|
||||
}
|
||||
else if (StringUtil::begins_with(response, wstring(L"SHARE_MENU_TITLE:"))) {
|
||||
info.shareMenuTitle = response.substr(17); // length of SHARE_MENU_TITLE:
|
||||
break; // Stop once we received the last sent request
|
||||
}
|
||||
}
|
||||
else {
|
||||
Sleep(50);
|
||||
++sleptCount;
|
||||
}
|
||||
}
|
||||
return info;
|
||||
ContextMenuInfo info;
|
||||
std::wstring response;
|
||||
int sleptCount = 0;
|
||||
while (sleptCount < 5) {
|
||||
if (socket.ReadLine(&response)) {
|
||||
if (StringUtil::begins_with(response, wstring(L"REGISTER_PATH:"))) {
|
||||
wstring responsePath = response.substr(14); // length of REGISTER_PATH
|
||||
info.watchedDirectories.push_back(responsePath);
|
||||
}
|
||||
else if (StringUtil::begins_with(response, wstring(L"SHARE_MENU_TITLE:"))) {
|
||||
info.shareMenuTitle = response.substr(17); // length of SHARE_MENU_TITLE:
|
||||
break; // Stop once we received the last sent request
|
||||
}
|
||||
}
|
||||
else {
|
||||
Sleep(50);
|
||||
++sleptCount;
|
||||
}
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
void OCClientInterface::ShareObject(const std::wstring &path)
|
||||
{
|
||||
auto pipename = CommunicationSocket::DefaultPipePath();
|
||||
auto pipename = CommunicationSocket::DefaultPipePath();
|
||||
|
||||
CommunicationSocket socket;
|
||||
if (!WaitNamedPipe(pipename.data(), PIPE_TIMEOUT)) {
|
||||
return;
|
||||
}
|
||||
if (!socket.Connect(pipename)) {
|
||||
return;
|
||||
}
|
||||
CommunicationSocket socket;
|
||||
if (!WaitNamedPipe(pipename.data(), PIPE_TIMEOUT)) {
|
||||
return;
|
||||
}
|
||||
if (!socket.Connect(pipename)) {
|
||||
return;
|
||||
}
|
||||
|
||||
wchar_t msg[SOCK_BUFFER] = { 0 };
|
||||
if (SUCCEEDED(StringCchPrintf(msg, SOCK_BUFFER, L"SHARE:%s\n", path.c_str())))
|
||||
{
|
||||
socket.SendMsg(msg);
|
||||
}
|
||||
wchar_t msg[SOCK_BUFFER] = { 0 };
|
||||
if (SUCCEEDED(StringCchPrintf(msg, SOCK_BUFFER, L"SHARE:%s\n", path.c_str())))
|
||||
{
|
||||
socket.SendMsg(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,12 +43,12 @@ class CommunicationSocket;
|
||||
class OCClientInterface
|
||||
{
|
||||
public:
|
||||
struct ContextMenuInfo {
|
||||
std::vector<std::wstring> watchedDirectories;
|
||||
std::wstring shareMenuTitle;
|
||||
};
|
||||
static ContextMenuInfo FetchInfo();
|
||||
static void ShareObject(const std::wstring &path);
|
||||
struct ContextMenuInfo {
|
||||
std::vector<std::wstring> watchedDirectories;
|
||||
std::wstring shareMenuTitle;
|
||||
};
|
||||
static ContextMenuInfo FetchInfo();
|
||||
static void ShareObject(const std::wstring &path);
|
||||
};
|
||||
|
||||
#endif //ABSTRACTSOCKETHANDLER_H
|
||||
|
||||
@@ -30,27 +30,27 @@ extern long g_cDllRef;
|
||||
|
||||
|
||||
OCContextMenu::OCContextMenu(void)
|
||||
: m_cRef(1)
|
||||
, m_pszMenuText(L"&Share")
|
||||
, m_pszVerb("ocshare")
|
||||
, m_pwszVerb(L"ocshare")
|
||||
, m_pszVerbCanonicalName("OCShareViaOC")
|
||||
, m_pwszVerbCanonicalName(L"OCShareViaOC")
|
||||
, m_pszVerbHelpText("Share via ownCloud")
|
||||
, m_pwszVerbHelpText(L"Share via ownCloud")
|
||||
: m_cRef(1)
|
||||
, m_pszMenuText(L"&Share")
|
||||
, m_pszVerb("ocshare")
|
||||
, m_pwszVerb(L"ocshare")
|
||||
, m_pszVerbCanonicalName("OCShareViaOC")
|
||||
, m_pwszVerbCanonicalName(L"OCShareViaOC")
|
||||
, m_pszVerbHelpText("Share via ownCloud")
|
||||
, m_pwszVerbHelpText(L"Share via ownCloud")
|
||||
{
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
}
|
||||
|
||||
OCContextMenu::~OCContextMenu(void)
|
||||
{
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
}
|
||||
|
||||
|
||||
void OCContextMenu::OnVerbDisplayFileName(HWND hWnd)
|
||||
{
|
||||
OCClientInterface::ShareObject(std::wstring(m_szSelectedFile));
|
||||
OCClientInterface::ShareObject(std::wstring(m_szSelectedFile));
|
||||
}
|
||||
|
||||
|
||||
@@ -59,30 +59,30 @@ void OCContextMenu::OnVerbDisplayFileName(HWND hWnd)
|
||||
// Query to the interface the component supported.
|
||||
IFACEMETHODIMP OCContextMenu::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
static const QITAB qit[] =
|
||||
{
|
||||
QITABENT(OCContextMenu, IContextMenu),
|
||||
QITABENT(OCContextMenu, IShellExtInit),
|
||||
{ 0 },
|
||||
};
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
static const QITAB qit[] =
|
||||
{
|
||||
QITABENT(OCContextMenu, IContextMenu),
|
||||
QITABENT(OCContextMenu, IShellExtInit),
|
||||
{ 0 },
|
||||
};
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
}
|
||||
|
||||
// Increase the reference count for an interface on an object.
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenu::AddRef()
|
||||
{
|
||||
return InterlockedIncrement(&m_cRef);
|
||||
return InterlockedIncrement(&m_cRef);
|
||||
}
|
||||
|
||||
// Decrease the reference count for an interface on an object.
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenu::Release()
|
||||
{
|
||||
ULONG cRef = InterlockedDecrement(&m_cRef);
|
||||
if (0 == cRef) {
|
||||
delete this;
|
||||
}
|
||||
ULONG cRef = InterlockedDecrement(&m_cRef);
|
||||
if (0 == cRef) {
|
||||
delete this;
|
||||
}
|
||||
|
||||
return cRef;
|
||||
return cRef;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
@@ -92,40 +92,40 @@ IFACEMETHODIMP_(ULONG) OCContextMenu::Release()
|
||||
|
||||
// Initialize the context menu handler.
|
||||
IFACEMETHODIMP OCContextMenu::Initialize(
|
||||
LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDataObj, HKEY hKeyProgID)
|
||||
LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDataObj, HKEY hKeyProgID)
|
||||
{
|
||||
if (!pDataObj) {
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
if (!pDataObj) {
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
HRESULT hr = E_FAIL;
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
||||
STGMEDIUM stm;
|
||||
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
|
||||
STGMEDIUM stm;
|
||||
|
||||
if (SUCCEEDED(pDataObj->GetData(&fe, &stm))) {
|
||||
// Get an HDROP handle.
|
||||
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
|
||||
if (hDrop) {
|
||||
// Ignore multi-selections
|
||||
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
|
||||
if (nFiles == 1) {
|
||||
// Get the path of the file.
|
||||
if (0 != DragQueryFile(hDrop, 0, m_szSelectedFile, ARRAYSIZE(m_szSelectedFile)))
|
||||
{
|
||||
hr = S_OK;
|
||||
}
|
||||
}
|
||||
if (SUCCEEDED(pDataObj->GetData(&fe, &stm))) {
|
||||
// Get an HDROP handle.
|
||||
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
|
||||
if (hDrop) {
|
||||
// Ignore multi-selections
|
||||
UINT nFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
|
||||
if (nFiles == 1) {
|
||||
// Get the path of the file.
|
||||
if (0 != DragQueryFile(hDrop, 0, m_szSelectedFile, ARRAYSIZE(m_szSelectedFile)))
|
||||
{
|
||||
hr = S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
GlobalUnlock(stm.hGlobal);
|
||||
}
|
||||
GlobalUnlock(stm.hGlobal);
|
||||
}
|
||||
|
||||
ReleaseStgMedium(&stm);
|
||||
}
|
||||
ReleaseStgMedium(&stm);
|
||||
}
|
||||
|
||||
// If any value other than S_OK is returned from the method, the context
|
||||
// menu item is not displayed.
|
||||
return hr;
|
||||
// If any value other than S_OK is returned from the method, the context
|
||||
// menu item is not displayed.
|
||||
return hr;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
@@ -135,136 +135,135 @@ IFACEMETHODIMP OCContextMenu::Initialize(
|
||||
|
||||
void InsertSeperator(HMENU hMenu, UINT indexMenu)
|
||||
{
|
||||
// Add a separator.
|
||||
MENUITEMINFO sep = { sizeof(sep) };
|
||||
sep.fMask = MIIM_TYPE;
|
||||
sep.fType = MFT_SEPARATOR;
|
||||
InsertMenuItem(hMenu, indexMenu, TRUE, &sep);
|
||||
// Add a separator.
|
||||
MENUITEMINFO sep = { sizeof(sep) };
|
||||
sep.fMask = MIIM_TYPE;
|
||||
sep.fType = MFT_SEPARATOR;
|
||||
InsertMenuItem(hMenu, indexMenu, TRUE, &sep);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
||||
{
|
||||
// If uFlags include CMF_DEFAULTONLY then we should not do anything.
|
||||
if (CMF_DEFAULTONLY & uFlags)
|
||||
{
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
}
|
||||
// If uFlags include CMF_DEFAULTONLY then we should not do anything.
|
||||
if (CMF_DEFAULTONLY & uFlags)
|
||||
{
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
}
|
||||
|
||||
OCClientInterface::ContextMenuInfo info = OCClientInterface::FetchInfo();
|
||||
bool skip = true;
|
||||
size_t selectedFileLength = wcslen(m_szSelectedFile);
|
||||
for (const std::wstring path : info.watchedDirectories) {
|
||||
if (StringUtil::isDescendantOf(m_szSelectedFile, selectedFileLength, path)) {
|
||||
skip = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
OCClientInterface::ContextMenuInfo info = OCClientInterface::FetchInfo();
|
||||
bool skip = true;
|
||||
for (const std::wstring path : info.watchedDirectories) {
|
||||
if (StringUtil::begins_with(std::wstring(m_szSelectedFile), path)) {
|
||||
skip = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (skip) {
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
}
|
||||
if (skip) {
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
}
|
||||
|
||||
InsertSeperator(hMenu, indexMenu);
|
||||
indexMenu++;
|
||||
InsertSeperator(hMenu, indexMenu);
|
||||
indexMenu++;
|
||||
|
||||
assert(!info.shareMenuTitle.empty());
|
||||
MENUITEMINFO mii = { sizeof(mii) };
|
||||
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
|
||||
mii.wID = idCmdFirst + IDM_SHARE;
|
||||
mii.fType = MFT_STRING;
|
||||
mii.dwTypeData = &info.shareMenuTitle[0];
|
||||
mii.fState = MFS_ENABLED;
|
||||
if (!InsertMenuItem(hMenu, indexMenu, TRUE, &mii))
|
||||
{
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
assert(!info.shareMenuTitle.empty());
|
||||
MENUITEMINFO mii = { sizeof(mii) };
|
||||
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
|
||||
mii.wID = idCmdFirst + IDM_SHARE;
|
||||
mii.fType = MFT_STRING;
|
||||
mii.dwTypeData = &info.shareMenuTitle[0];
|
||||
mii.fState = MFS_ENABLED;
|
||||
if (!InsertMenuItem(hMenu, indexMenu, TRUE, &mii))
|
||||
{
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
|
||||
indexMenu++;
|
||||
InsertSeperator(hMenu, indexMenu);
|
||||
indexMenu++;
|
||||
InsertSeperator(hMenu, indexMenu);
|
||||
|
||||
|
||||
// Return an HRESULT value with the severity set to SEVERITY_SUCCESS.
|
||||
// Set the code value to the offset of the largest command identifier
|
||||
// that was assigned, plus one (1).
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(IDM_SHARE + 1));
|
||||
// Return an HRESULT value with the severity set to SEVERITY_SUCCESS.
|
||||
// Set the code value to the offset of the largest command identifier
|
||||
// that was assigned, plus one (1).
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(IDM_SHARE + 1));
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
||||
{
|
||||
|
||||
// For the Unicode case, if the high-order word is not zero, the
|
||||
// command's verb string is in lpcmi->lpVerbW.
|
||||
if (HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW))
|
||||
{
|
||||
// Is the verb supported by this context menu extension?
|
||||
if (StrCmpIW(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW, m_pwszVerb) == 0)
|
||||
{
|
||||
OnVerbDisplayFileName(pici->hwnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the verb is not recognized by the context menu handler, it
|
||||
// must return E_FAIL to allow it to be passed on to the other
|
||||
// context menu handlers that might implement that verb.
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
// For the Unicode case, if the high-order word is not zero, the
|
||||
// command's verb string is in lpcmi->lpVerbW.
|
||||
if (HIWORD(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW))
|
||||
{
|
||||
// Is the verb supported by this context menu extension?
|
||||
if (StrCmpIW(((CMINVOKECOMMANDINFOEX*)pici)->lpVerbW, m_pwszVerb) == 0)
|
||||
{
|
||||
OnVerbDisplayFileName(pici->hwnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the verb is not recognized by the context menu handler, it
|
||||
// must return E_FAIL to allow it to be passed on to the other
|
||||
// context menu handlers that might implement that verb.
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
// If the command cannot be identified through the verb string, then
|
||||
// check the identifier offset.
|
||||
else
|
||||
{
|
||||
// Is the command identifier offset supported by this context menu
|
||||
// extension?
|
||||
if (LOWORD(pici->lpVerb) == IDM_SHARE)
|
||||
{
|
||||
OnVerbDisplayFileName(pici->hwnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the verb is not recognized by the context menu handler, it
|
||||
// must return E_FAIL to allow it to be passed on to the other
|
||||
// context menu handlers that might implement that verb.
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
// If the command cannot be identified through the verb string, then
|
||||
// check the identifier offset.
|
||||
else
|
||||
{
|
||||
// Is the command identifier offset supported by this context menu
|
||||
// extension?
|
||||
if (LOWORD(pici->lpVerb) == IDM_SHARE)
|
||||
{
|
||||
OnVerbDisplayFileName(pici->hwnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the verb is not recognized by the context menu handler, it
|
||||
// must return E_FAIL to allow it to be passed on to the other
|
||||
// context menu handlers that might implement that verb.
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::GetCommandString(UINT_PTR idCommand,
|
||||
UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax)
|
||||
UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax)
|
||||
{
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
if (idCommand == IDM_SHARE)
|
||||
{
|
||||
switch (uFlags)
|
||||
{
|
||||
case GCS_HELPTEXTW:
|
||||
// Only useful for pre-Vista versions of Windows that have a
|
||||
// Status bar.
|
||||
hr = StringCchCopy(reinterpret_cast<PWSTR>(pszName), cchMax,
|
||||
m_pwszVerbHelpText);
|
||||
break;
|
||||
if (idCommand == IDM_SHARE)
|
||||
{
|
||||
switch (uFlags)
|
||||
{
|
||||
case GCS_HELPTEXTW:
|
||||
// Only useful for pre-Vista versions of Windows that have a
|
||||
// Status bar.
|
||||
hr = StringCchCopy(reinterpret_cast<PWSTR>(pszName), cchMax,
|
||||
m_pwszVerbHelpText);
|
||||
break;
|
||||
|
||||
case GCS_VERBW:
|
||||
// GCS_VERBW is an optional feature that enables a caller to
|
||||
// discover the canonical name for the verb passed in through
|
||||
// idCommand.
|
||||
hr = StringCchCopy(reinterpret_cast<PWSTR>(pszName), cchMax,
|
||||
m_pwszVerbCanonicalName);
|
||||
break;
|
||||
case GCS_VERBW:
|
||||
// GCS_VERBW is an optional feature that enables a caller to
|
||||
// discover the canonical name for the verb passed in through
|
||||
// idCommand.
|
||||
hr = StringCchCopy(reinterpret_cast<PWSTR>(pszName), cchMax,
|
||||
m_pwszVerbCanonicalName);
|
||||
break;
|
||||
|
||||
default:
|
||||
hr = S_OK;
|
||||
}
|
||||
}
|
||||
default:
|
||||
hr = S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// If the command (idCommand) is not supported by this context menu
|
||||
// extension handler, return E_INVALIDARG.
|
||||
// If the command (idCommand) is not supported by this context menu
|
||||
// extension handler, return E_INVALIDARG.
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
@@ -26,12 +26,12 @@ extern long g_cDllRef;
|
||||
|
||||
OCContextMenuFactory::OCContextMenuFactory() : m_cRef(1)
|
||||
{
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
}
|
||||
|
||||
OCContextMenuFactory::~OCContextMenuFactory()
|
||||
{
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,22 +39,22 @@ OCContextMenuFactory::~OCContextMenuFactory()
|
||||
|
||||
IFACEMETHODIMP OCContextMenuFactory::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
static const QITAB qit[] = { QITABENT(OCContextMenuFactory, IClassFactory), { 0 }, };
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
static const QITAB qit[] = { QITABENT(OCContextMenuFactory, IClassFactory), { 0 }, };
|
||||
return QISearch(this, qit, riid, ppv);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenuFactory::AddRef()
|
||||
{
|
||||
return InterlockedIncrement(&m_cRef);
|
||||
return InterlockedIncrement(&m_cRef);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenuFactory::Release()
|
||||
{
|
||||
ULONG cRef = InterlockedDecrement(&m_cRef);
|
||||
if (0 == cRef) {
|
||||
delete this;
|
||||
}
|
||||
return cRef;
|
||||
ULONG cRef = InterlockedDecrement(&m_cRef);
|
||||
if (0 == cRef) {
|
||||
delete this;
|
||||
}
|
||||
return cRef;
|
||||
}
|
||||
|
||||
|
||||
@@ -62,30 +62,30 @@ IFACEMETHODIMP_(ULONG) OCContextMenuFactory::Release()
|
||||
|
||||
IFACEMETHODIMP OCContextMenuFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hr = CLASS_E_NOAGGREGATION;
|
||||
HRESULT hr = CLASS_E_NOAGGREGATION;
|
||||
|
||||
// pUnkOuter is used for aggregation. We do not support it in the sample.
|
||||
if (pUnkOuter == NULL) {
|
||||
hr = E_OUTOFMEMORY;
|
||||
// pUnkOuter is used for aggregation. We do not support it in the sample.
|
||||
if (pUnkOuter == NULL) {
|
||||
hr = E_OUTOFMEMORY;
|
||||
|
||||
// Create the COM component.
|
||||
OCContextMenu *pExt = new (std::nothrow) OCContextMenu();
|
||||
if (pExt) {
|
||||
// Query the specified interface.
|
||||
hr = pExt->QueryInterface(riid, ppv);
|
||||
pExt->Release();
|
||||
}
|
||||
}
|
||||
// Create the COM component.
|
||||
OCContextMenu *pExt = new (std::nothrow) OCContextMenu();
|
||||
if (pExt) {
|
||||
// Query the specified interface.
|
||||
hr = pExt->QueryInterface(riid, ppv);
|
||||
pExt->Release();
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenuFactory::LockServer(BOOL fLock)
|
||||
{
|
||||
if (fLock) {
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
} else {
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
}
|
||||
return S_OK;
|
||||
if (fLock) {
|
||||
InterlockedIncrement(&g_cDllRef);
|
||||
} else {
|
||||
InterlockedDecrement(&g_cDllRef);
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
@@ -23,20 +23,20 @@
|
||||
class OCContextMenuFactory : public IClassFactory
|
||||
{
|
||||
public:
|
||||
// IUnknown
|
||||
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP_(ULONG) Release();
|
||||
// IUnknown
|
||||
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP_(ULONG) Release();
|
||||
|
||||
// IClassFactory
|
||||
IFACEMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP LockServer(BOOL fLock);
|
||||
// IClassFactory
|
||||
IFACEMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP LockServer(BOOL fLock);
|
||||
|
||||
OCContextMenuFactory();
|
||||
OCContextMenuFactory();
|
||||
|
||||
private:
|
||||
~OCContextMenuFactory();
|
||||
long m_cRef;
|
||||
~OCContextMenuFactory();
|
||||
long m_cRef;
|
||||
};
|
||||
|
||||
#endif //OCCONTEXTMENUFACTORY_H
|
||||
@@ -23,196 +23,196 @@ namespace {
|
||||
|
||||
HRESULT SetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PCWSTR pszData)
|
||||
{
|
||||
HRESULT hr;
|
||||
HKEY hKey = NULL;
|
||||
HRESULT hr;
|
||||
HKEY hKey = NULL;
|
||||
|
||||
// Creates the specified registry key. If the key already exists, the
|
||||
// function opens it.
|
||||
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||
NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL));
|
||||
// Creates the specified registry key. If the key already exists, the
|
||||
// function opens it.
|
||||
hr = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||
NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL));
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
if (pszData != NULL)
|
||||
{
|
||||
// Set the specified value of the key.
|
||||
DWORD cbData = lstrlen(pszData) * sizeof(*pszData);
|
||||
hr = HRESULT_FROM_WIN32(RegSetValueEx(hKey, pszValueName, 0,
|
||||
REG_SZ, reinterpret_cast<const BYTE *>(pszData), cbData));
|
||||
}
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
if (pszData != NULL)
|
||||
{
|
||||
// Set the specified value of the key.
|
||||
DWORD cbData = lstrlen(pszData) * sizeof(*pszData);
|
||||
hr = HRESULT_FROM_WIN32(RegSetValueEx(hKey, pszValueName, 0,
|
||||
REG_SZ, reinterpret_cast<const BYTE *>(pszData), cbData));
|
||||
}
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT GetHKCRRegistryKeyAndValue(PCWSTR pszSubKey, PCWSTR pszValueName, PWSTR pszData, DWORD cbData)
|
||||
{
|
||||
HRESULT hr;
|
||||
HKEY hKey = NULL;
|
||||
HRESULT hr;
|
||||
HKEY hKey = NULL;
|
||||
|
||||
// Try to open the specified registry key.
|
||||
hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||
KEY_READ, &hKey));
|
||||
// Try to open the specified registry key.
|
||||
hr = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, pszSubKey, 0,
|
||||
KEY_READ, &hKey));
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Get the data for the specified value name.
|
||||
hr = HRESULT_FROM_WIN32(RegQueryValueEx(hKey, pszValueName, NULL,
|
||||
NULL, reinterpret_cast<LPBYTE>(pszData), &cbData));
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Get the data for the specified value name.
|
||||
hr = HRESULT_FROM_WIN32(RegQueryValueEx(hKey, pszValueName, NULL,
|
||||
NULL, reinterpret_cast<LPBYTE>(pszData), &cbData));
|
||||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
HRESULT OCContextMenuRegHandler::RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel)
|
||||
{
|
||||
if (pszModule == NULL || pszThreadModel == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
if (pszModule == NULL || pszThreadModel == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
HRESULT hr;
|
||||
HRESULT hr;
|
||||
|
||||
wchar_t szCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, szCLSID, ARRAYSIZE(szCLSID));
|
||||
wchar_t szCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, szCLSID, ARRAYSIZE(szCLSID));
|
||||
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
|
||||
// Create the HKCR\CLSID\{<CLSID>} key.
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszFriendlyName);
|
||||
// Create the HKCR\CLSID\{<CLSID>} key.
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszFriendlyName);
|
||||
|
||||
// Create the HKCR\CLSID\{<CLSID>}\InprocServer32 key.
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey),
|
||||
L"CLSID\\%s\\InprocServer32", szCLSID);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Set the default value of the InprocServer32 key to the
|
||||
// path of the COM module.
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszModule);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Set the threading model of the component.
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey,
|
||||
L"ThreadingModel", pszThreadModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Create the HKCR\CLSID\{<CLSID>}\InprocServer32 key.
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey),
|
||||
L"CLSID\\%s\\InprocServer32", szCLSID);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Set the default value of the InprocServer32 key to the
|
||||
// path of the COM module.
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, pszModule);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Set the threading model of the component.
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey,
|
||||
L"ThreadingModel", pszThreadModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT OCContextMenuRegHandler::UnregisterInprocServer(const CLSID& clsid)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
wchar_t szCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, szCLSID, ARRAYSIZE(szCLSID));
|
||||
wchar_t szCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, szCLSID, ARRAYSIZE(szCLSID));
|
||||
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
|
||||
// Delete the HKCR\CLSID\{<CLSID>} key.
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(RegDelnode(HKEY_CLASSES_ROOT, szSubkey));
|
||||
}
|
||||
// Delete the HKCR\CLSID\{<CLSID>} key.
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey), L"CLSID\\%s", szCLSID);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(RegDelnode(HKEY_CLASSES_ROOT, szSubkey));
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
HRESULT OCContextMenuRegHandler::RegisterShellExtContextMenuHandler(
|
||||
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
||||
PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName)
|
||||
{
|
||||
if (pszFileType == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
if (pszFileType == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
HRESULT hr;
|
||||
HRESULT hr;
|
||||
|
||||
wchar_t szCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, szCLSID, ARRAYSIZE(szCLSID));
|
||||
wchar_t szCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, szCLSID, ARRAYSIZE(szCLSID));
|
||||
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
|
||||
// If pszFileType starts with '.', try to read the default value of the
|
||||
// HKCR\<File Type> key which contains the ProgID to which the file type
|
||||
// is linked.
|
||||
if (*pszFileType == L'.')
|
||||
{
|
||||
wchar_t szDefaultVal[260];
|
||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
||||
sizeof(szDefaultVal));
|
||||
// If pszFileType starts with '.', try to read the default value of the
|
||||
// HKCR\<File Type> key which contains the ProgID to which the file type
|
||||
// is linked.
|
||||
if (*pszFileType == L'.')
|
||||
{
|
||||
wchar_t szDefaultVal[260];
|
||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
||||
sizeof(szDefaultVal));
|
||||
|
||||
// If the key exists and its default value is not empty, use the
|
||||
// ProgID as the file type.
|
||||
if (SUCCEEDED(hr) && szDefaultVal[0] != L'\0')
|
||||
{
|
||||
pszFileType = szDefaultVal;
|
||||
}
|
||||
}
|
||||
// If the key exists and its default value is not empty, use the
|
||||
// ProgID as the file type.
|
||||
if (SUCCEEDED(hr) && szDefaultVal[0] != L'\0')
|
||||
{
|
||||
pszFileType = szDefaultVal;
|
||||
}
|
||||
}
|
||||
|
||||
// Create the key HKCR\<File Type>\shellex\ContextMenuHandlers\{friendlyName>}
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey),
|
||||
L"%s\\shellex\\ContextMenuHandlers\\%s", pszFileType, pszFriendlyName);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Set the default value of the key.
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, szCLSID);
|
||||
}
|
||||
// Create the key HKCR\<File Type>\shellex\ContextMenuHandlers\{friendlyName>}
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey),
|
||||
L"%s\\shellex\\ContextMenuHandlers\\%s", pszFileType, pszFriendlyName);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// Set the default value of the key.
|
||||
hr = SetHKCRRegistryKeyAndValue(szSubkey, NULL, szCLSID);
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT OCContextMenuRegHandler::UnregisterShellExtContextMenuHandler(
|
||||
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
||||
PCWSTR pszFileType, PCWSTR pszFriendlyName)
|
||||
{
|
||||
if (pszFileType == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
if (pszFileType == NULL)
|
||||
{
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
HRESULT hr;
|
||||
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
HRESULT hr;
|
||||
|
||||
wchar_t szSubkey[MAX_PATH];
|
||||
|
||||
// If pszFileType starts with '.', try to read the default value of the
|
||||
// HKCR\<File Type> key which contains the ProgID to which the file type
|
||||
// is linked.
|
||||
if (*pszFileType == L'.')
|
||||
{
|
||||
wchar_t szDefaultVal[260];
|
||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
||||
sizeof(szDefaultVal));
|
||||
// If pszFileType starts with '.', try to read the default value of the
|
||||
// HKCR\<File Type> key which contains the ProgID to which the file type
|
||||
// is linked.
|
||||
if (*pszFileType == L'.')
|
||||
{
|
||||
wchar_t szDefaultVal[260];
|
||||
hr = GetHKCRRegistryKeyAndValue(pszFileType, NULL, szDefaultVal,
|
||||
sizeof(szDefaultVal));
|
||||
|
||||
// If the key exists and its default value is not empty, use the
|
||||
// ProgID as the file type.
|
||||
if (SUCCEEDED(hr) && szDefaultVal[0] != L'\0')
|
||||
{
|
||||
pszFileType = szDefaultVal;
|
||||
}
|
||||
}
|
||||
// If the key exists and its default value is not empty, use the
|
||||
// ProgID as the file type.
|
||||
if (SUCCEEDED(hr) && szDefaultVal[0] != L'\0')
|
||||
{
|
||||
pszFileType = szDefaultVal;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the HKCR\<File Type>\shellex\ContextMenuHandlers\{friendlyName} key.
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey),
|
||||
L"%s\\shellex\\ContextMenuHandlers\\%s", pszFileType, pszFriendlyName);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(RegDelnode(HKEY_CLASSES_ROOT, szSubkey));
|
||||
}
|
||||
// Remove the HKCR\<File Type>\shellex\ContextMenuHandlers\{friendlyName} key.
|
||||
hr = StringCchPrintf(szSubkey, ARRAYSIZE(szSubkey),
|
||||
L"%s\\shellex\\ContextMenuHandlers\\%s", pszFileType, pszFriendlyName);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = HRESULT_FROM_WIN32(RegDelnode(HKEY_CLASSES_ROOT, szSubkey));
|
||||
}
|
||||
|
||||
return hr;
|
||||
return hr;
|
||||
}
|
||||
@@ -23,16 +23,16 @@
|
||||
class __declspec(dllexport) OCContextMenuRegHandler
|
||||
{
|
||||
public:
|
||||
static HRESULT MakeRegistryEntries(const CLSID& clsid, PCWSTR fileType);
|
||||
static HRESULT RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid);
|
||||
static HRESULT RemoveRegistryEntries(PCWSTR friendlyName);
|
||||
static HRESULT UnregisterCOMObject(const CLSID& clsid);
|
||||
static HRESULT MakeRegistryEntries(const CLSID& clsid, PCWSTR fileType);
|
||||
static HRESULT RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid);
|
||||
static HRESULT RemoveRegistryEntries(PCWSTR friendlyName);
|
||||
static HRESULT UnregisterCOMObject(const CLSID& clsid);
|
||||
|
||||
static HRESULT RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel);
|
||||
static HRESULT UnregisterInprocServer(const CLSID& clsid);
|
||||
static HRESULT RegisterInprocServer(PCWSTR pszModule, const CLSID& clsid, PCWSTR pszFriendlyName, PCWSTR pszThreadModel);
|
||||
static HRESULT UnregisterInprocServer(const CLSID& clsid);
|
||||
|
||||
static HRESULT RegisterShellExtContextMenuHandler(PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName);
|
||||
static HRESULT UnregisterShellExtContextMenuHandler(PCWSTR pszFileType, PCWSTR pszFriendlyName);
|
||||
static HRESULT RegisterShellExtContextMenuHandler(PCWSTR pszFileType, const CLSID& clsid, PCWSTR pszFriendlyName);
|
||||
static HRESULT UnregisterShellExtContextMenuHandler(PCWSTR pszFileType, PCWSTR pszFriendlyName);
|
||||
};
|
||||
|
||||
#endif //OCCONTEXTMENUREGHANDLER_H
|
||||
@@ -23,142 +23,142 @@ long dllReferenceCount = 0;
|
||||
|
||||
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
instanceHandle = hModule;
|
||||
DisableThreadLibraryCalls(hModule);
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
instanceHandle = hModule;
|
||||
DisableThreadLibraryCalls(hModule);
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HRESULT CreateFactory(REFIID riid, void **ppv, int state)
|
||||
{
|
||||
HRESULT hResult = E_OUTOFMEMORY;
|
||||
HRESULT hResult = E_OUTOFMEMORY;
|
||||
|
||||
OCOverlayFactory* ocOverlayFactory = new OCOverlayFactory(state);
|
||||
OCOverlayFactory* ocOverlayFactory = new OCOverlayFactory(state);
|
||||
|
||||
if (ocOverlayFactory) {
|
||||
hResult = ocOverlayFactory->QueryInterface(riid, ppv);
|
||||
ocOverlayFactory->Release();
|
||||
}
|
||||
return hResult;
|
||||
if (ocOverlayFactory) {
|
||||
hResult = ocOverlayFactory->QueryInterface(riid, ppv);
|
||||
ocOverlayFactory->Release();
|
||||
}
|
||||
return hResult;
|
||||
}
|
||||
|
||||
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hResult = CLASS_E_CLASSNOTAVAILABLE;
|
||||
GUID guid;
|
||||
GUID guid;
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_ERROR, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Error); }
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_ERROR, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Error); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_OK, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_OK); }
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_OK, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_OK); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_OK_SHARED, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_OKShared); }
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_OK_SHARED, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_OKShared); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_SYNC, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Sync); }
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_SYNC, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Sync); }
|
||||
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_WARNING, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Warning); }
|
||||
hResult = CLSIDFromString(OVERLAY_GUID_WARNING, (LPCLSID)&guid);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
if (IsEqualCLSID(guid, rclsid)) { return CreateFactory(riid, ppv, State_Warning); }
|
||||
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
}
|
||||
|
||||
STDAPI DllCanUnloadNow(void)
|
||||
{
|
||||
return dllReferenceCount > 0 ? S_FALSE : S_OK;
|
||||
|
||||
return S_FALSE;
|
||||
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
HRESULT RegisterCLSID(LPCOLESTR guidStr, PCWSTR overlayStr, PCWSTR szModule)
|
||||
{
|
||||
HRESULT hResult = S_OK;
|
||||
HRESULT hResult = S_OK;
|
||||
|
||||
GUID guid;
|
||||
hResult = CLSIDFromString(guidStr, (LPCLSID)&guid);
|
||||
GUID guid;
|
||||
hResult = CLSIDFromString(guidStr, (LPCLSID)&guid);
|
||||
|
||||
if (hResult != S_OK) {
|
||||
return hResult;
|
||||
}
|
||||
if (hResult != S_OK) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = OCOverlayRegistrationHandler::RegisterCOMObject(szModule, OVERLAY_GENERIC_NAME, guid);
|
||||
hResult = OCOverlayRegistrationHandler::RegisterCOMObject(szModule, OVERLAY_GENERIC_NAME, guid);
|
||||
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = OCOverlayRegistrationHandler::MakeRegistryEntries(guid, overlayStr);
|
||||
hResult = OCOverlayRegistrationHandler::MakeRegistryEntries(guid, overlayStr);
|
||||
|
||||
return hResult;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HRESULT UnregisterCLSID(LPCOLESTR guidStr, PCWSTR overlayStr)
|
||||
{
|
||||
HRESULT hResult = S_OK;
|
||||
GUID guid;
|
||||
HRESULT hResult = S_OK;
|
||||
GUID guid;
|
||||
|
||||
hResult = CLSIDFromString(guidStr, (LPCLSID)&guid);
|
||||
hResult = CLSIDFromString(guidStr, (LPCLSID)&guid);
|
||||
|
||||
if (hResult != S_OK) {
|
||||
return hResult;
|
||||
}
|
||||
if (hResult != S_OK) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = OCOverlayRegistrationHandler::UnregisterCOMObject(guid);
|
||||
hResult = OCOverlayRegistrationHandler::UnregisterCOMObject(guid);
|
||||
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = OCOverlayRegistrationHandler::RemoveRegistryEntries(overlayStr);
|
||||
hResult = OCOverlayRegistrationHandler::RemoveRegistryEntries(overlayStr);
|
||||
|
||||
return hResult;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HRESULT _stdcall DllRegisterServer(void)
|
||||
{
|
||||
HRESULT hResult = S_OK;
|
||||
HRESULT hResult = S_OK;
|
||||
|
||||
wchar_t szModule[MAX_PATH];
|
||||
wchar_t szModule[MAX_PATH];
|
||||
|
||||
if (GetModuleFileName(instanceHandle, szModule, ARRAYSIZE(szModule)) == 0) {
|
||||
hResult = HRESULT_FROM_WIN32(GetLastError());
|
||||
return hResult;
|
||||
}
|
||||
if (GetModuleFileName(instanceHandle, szModule, ARRAYSIZE(szModule)) == 0) {
|
||||
hResult = HRESULT_FROM_WIN32(GetLastError());
|
||||
return hResult;
|
||||
}
|
||||
|
||||
// Unregister any obsolete CLSID when we register here
|
||||
// Those CLSID were removed in 2.1, but we need to make sure to prevent any previous version
|
||||
// of the extension on the system from loading at the same time as a new version to avoid crashing explorer.
|
||||
UnregisterCLSID(OVERLAY_GUID_ERROR_SHARED, OVERLAY_NAME_ERROR_SHARED);
|
||||
UnregisterCLSID(OVERLAY_GUID_SYNC_SHARED, OVERLAY_NAME_SYNC_SHARED);
|
||||
UnregisterCLSID(OVERLAY_GUID_WARNING_SHARED, OVERLAY_NAME_WARNING_SHARED);
|
||||
// Unregister any obsolete CLSID when we register here
|
||||
// Those CLSID were removed in 2.1, but we need to make sure to prevent any previous version
|
||||
// of the extension on the system from loading at the same time as a new version to avoid crashing explorer.
|
||||
UnregisterCLSID(OVERLAY_GUID_ERROR_SHARED, OVERLAY_NAME_ERROR_SHARED);
|
||||
UnregisterCLSID(OVERLAY_GUID_SYNC_SHARED, OVERLAY_NAME_SYNC_SHARED);
|
||||
UnregisterCLSID(OVERLAY_GUID_WARNING_SHARED, OVERLAY_NAME_WARNING_SHARED);
|
||||
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_ERROR, OVERLAY_NAME_ERROR, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_OK, OVERLAY_NAME_OK, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_OK_SHARED, OVERLAY_NAME_OK_SHARED, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_SYNC, OVERLAY_NAME_SYNC, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_WARNING, OVERLAY_NAME_WARNING, szModule);
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_ERROR, OVERLAY_NAME_ERROR, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_OK, OVERLAY_NAME_OK, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_OK_SHARED, OVERLAY_NAME_OK_SHARED, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_SYNC, OVERLAY_NAME_SYNC, szModule);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = RegisterCLSID(OVERLAY_GUID_WARNING, OVERLAY_NAME_WARNING, szModule);
|
||||
|
||||
return hResult;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
STDAPI DllUnregisterServer(void)
|
||||
@@ -167,21 +167,21 @@ STDAPI DllUnregisterServer(void)
|
||||
|
||||
wchar_t szModule[MAX_PATH];
|
||||
|
||||
if (GetModuleFileNameW(instanceHandle, szModule, ARRAYSIZE(szModule)) == 0)
|
||||
if (GetModuleFileNameW(instanceHandle, szModule, ARRAYSIZE(szModule)) == 0)
|
||||
{
|
||||
hResult = HRESULT_FROM_WIN32(GetLastError());
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_ERROR, OVERLAY_NAME_ERROR);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_OK, OVERLAY_NAME_OK);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_OK_SHARED, OVERLAY_NAME_OK_SHARED);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_SYNC, OVERLAY_NAME_SYNC);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_WARNING, OVERLAY_NAME_WARNING);
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_ERROR, OVERLAY_NAME_ERROR);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_OK, OVERLAY_NAME_OK);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_OK_SHARED, OVERLAY_NAME_OK_SHARED);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_SYNC, OVERLAY_NAME_SYNC);
|
||||
if (!SUCCEEDED(hResult)) { return hResult; }
|
||||
hResult = UnregisterCLSID(OVERLAY_GUID_WARNING, OVERLAY_NAME_WARNING);
|
||||
|
||||
return hResult;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* Copyright (c) 2015 Daniel Molkentin <danimo@owncloud.com>. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
* Software Foundation; either version 2.1 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
#include "OCContextMenu.h"
|
||||
#include "stdafx.h"
|
||||
|
||||
#define IDM_SHARE 0
|
||||
|
||||
OCContextMenu::OCContextMenu()
|
||||
: m_pwszVerb(0)
|
||||
, m_referenceCount(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
OCContextMenu::~OCContextMenu()
|
||||
{
|
||||
}
|
||||
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenu::AddRef()
|
||||
{
|
||||
return InterlockedIncrement(&m_referenceCount);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP_(ULONG) OCContextMenu::Release()
|
||||
{
|
||||
ULONG cRef = InterlockedDecrement(&m_referenceCount);
|
||||
if (0 == cRef)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
return cRef;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
if (IsEqualIID(IID_IUnknown, riid) || IsEqualIID(IID_IContextMenu, riid))
|
||||
{
|
||||
*ppv = static_cast<IContextMenu *>(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
hr = E_NOINTERFACE;
|
||||
*ppv = NULL;
|
||||
}
|
||||
|
||||
if (*ppv)
|
||||
{
|
||||
AddRef();
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax)
|
||||
{
|
||||
HRESULT hr = E_INVALIDARG;
|
||||
|
||||
if (idCmd == IDM_SHARE)
|
||||
{
|
||||
switch (uFlags)
|
||||
{
|
||||
case GCS_HELPTEXTW:
|
||||
hr = StringCchCopyW(reinterpret_cast<PWSTR>(pszName), cchMax, L"Shares file or directory with ownCloud");
|
||||
break;
|
||||
|
||||
case GCS_VERBW:
|
||||
// GCS_VERBW is an optional feature that enables a caller
|
||||
// to discover the canonical name for the verb that is passed in
|
||||
// through idCommand.
|
||||
hr = StringCchCopyW(reinterpret_cast<PWSTR>(pszName), cchMax, L"ownCloudShare");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
|
||||
{
|
||||
if (pici->cbSize == sizeof(CMINVOKECOMMANDINFOEX) &&
|
||||
(pici->fMask & CMIC_MASK_UNICODE))
|
||||
{
|
||||
return E_FAIL;
|
||||
}
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(0));
|
||||
if (HIWORD(((CMINVOKECOMMANDINFOEX *)pici)->lpVerbW))
|
||||
{
|
||||
if (StrCmpIW(((CMINVOKECOMMANDINFOEX *)pici)->lpVerbW, m_pwszVerb))
|
||||
{
|
||||
return E_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
if (LOWORD(pici->lpVerb) != IDM_SHARE) {
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
MessageBox(pici->hwnd,
|
||||
L"ownCloud was here",
|
||||
L"ownCloud was here",
|
||||
MB_OK | MB_ICONINFORMATION);
|
||||
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
if (!(CMF_DEFAULTONLY & uFlags))
|
||||
{
|
||||
InsertMenu(hMenu, indexMenu, MF_STRING | MF_BYPOSITION, idCmdFirst + IDM_SHARE, L"&Share with ownCloud");
|
||||
}
|
||||
hr = StringCbCopyW(m_pwszVerb, sizeof(m_pwszVerb), L"ownCloudShare");
|
||||
|
||||
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(IDM_SHARE + 1));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Copyright (c) 2015 Daniel Molkentin <danimo@owncloud.com>. All rights reserved.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
* Software Foundation; either version 2.1 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||
* details.
|
||||
*/
|
||||
|
||||
#ifndef OCCONTEXTMENU_H
|
||||
#define OCCONTEXTMENU_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ShObjIdl.h"
|
||||
#include "memory"
|
||||
|
||||
class OCContextMenu :public IContextMenu
|
||||
{
|
||||
public:
|
||||
OCContextMenu();
|
||||
~OCContextMenu();
|
||||
|
||||
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP_(ULONG) Release();
|
||||
|
||||
|
||||
IFACEMETHODIMP GetCommandString(UINT_PTR idCmd, UINT uFlags, UINT *pwReserved, LPSTR pszName, UINT cchMax);
|
||||
IFACEMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO pici);
|
||||
IFACEMETHODIMP QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
|
||||
private:
|
||||
TCHAR* m_pwszVerb;
|
||||
long m_referenceCount;
|
||||
|
||||
};
|
||||
|
||||
#endif //OCCONTEXTMENU_H
|
||||
@@ -45,19 +45,19 @@ unique_ptr<RemotePathChecker> s_instance;
|
||||
|
||||
RemotePathChecker *getGlobalChecker()
|
||||
{
|
||||
// On Vista we'll run into issue #2680 if we try to create the thread+pipe connection
|
||||
// on any DllGetClassObject of our registered classes.
|
||||
// Work around the issue by creating the static RemotePathChecker only once actually needed.
|
||||
static once_flag s_onceFlag;
|
||||
call_once(s_onceFlag, [] { s_instance.reset(new RemotePathChecker); });
|
||||
// On Vista we'll run into issue #2680 if we try to create the thread+pipe connection
|
||||
// on any DllGetClassObject of our registered classes.
|
||||
// Work around the issue by creating the static RemotePathChecker only once actually needed.
|
||||
static once_flag s_onceFlag;
|
||||
call_once(s_onceFlag, [] { s_instance.reset(new RemotePathChecker); });
|
||||
|
||||
return s_instance.get();
|
||||
return s_instance.get();
|
||||
}
|
||||
|
||||
}
|
||||
OCOverlay::OCOverlay(int state)
|
||||
: _referenceCount(1)
|
||||
, _state(state)
|
||||
: _referenceCount(1)
|
||||
, _state(state)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ IFACEMETHODIMP OCOverlay::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
AddRef();
|
||||
}
|
||||
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -106,65 +106,80 @@ IFACEMETHODIMP_(ULONG) OCOverlay::Release()
|
||||
|
||||
IFACEMETHODIMP OCOverlay::GetPriority(int *pPriority)
|
||||
{
|
||||
// this defines which handler has prededence, so
|
||||
// we order this in terms of likelyhood
|
||||
switch (_state) {
|
||||
case State_OK:
|
||||
*pPriority = 0; break;
|
||||
case State_OKShared:
|
||||
*pPriority = 1; break;
|
||||
case State_Warning:
|
||||
*pPriority = 2; break;
|
||||
case State_Sync:
|
||||
*pPriority = 3; break;
|
||||
case State_Error:
|
||||
*pPriority = 4; break;
|
||||
default:
|
||||
*pPriority = 5; break;
|
||||
}
|
||||
// this defines which handler has prededence, so
|
||||
// we order this in terms of likelyhood
|
||||
switch (_state) {
|
||||
case State_OK:
|
||||
*pPriority = 0; break;
|
||||
case State_OKShared:
|
||||
*pPriority = 1; break;
|
||||
case State_Warning:
|
||||
*pPriority = 2; break;
|
||||
case State_Sync:
|
||||
*pPriority = 3; break;
|
||||
case State_Error:
|
||||
*pPriority = 4; break;
|
||||
default:
|
||||
*pPriority = 5; break;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCOverlay::IsMemberOf(PCWSTR pwszPath, DWORD dwAttrib)
|
||||
IFACEMETHODIMP OCOverlay::IsMemberOf(PCWSTR pwszPath, DWORD dwAttrib)
|
||||
{
|
||||
RemotePathChecker* checker = getGlobalChecker();
|
||||
std::shared_ptr<const std::vector<std::wstring>> watchedDirectories = checker->WatchedDirectories();
|
||||
RemotePathChecker* checker = getGlobalChecker();
|
||||
auto watchedDirectories = checker->WatchedDirectories();
|
||||
|
||||
if (watchedDirectories->empty()) {
|
||||
return MAKE_HRESULT(S_FALSE, 0, 0);
|
||||
}
|
||||
wstring wpath(pwszPath);
|
||||
wpath.append(L"\\");
|
||||
vector<wstring>::iterator it;
|
||||
bool watched = false;
|
||||
for (it = watchedDirectories.begin(); it != watchedDirectories.end(); ++it) {
|
||||
if (StringUtil::begins_with(wpath, *it)) {
|
||||
watched = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool watched = false;
|
||||
size_t pathLength = wcslen(pwszPath);
|
||||
for (auto it = watchedDirectories->begin(); it != watchedDirectories->end(); ++it) {
|
||||
if (StringUtil::isDescendantOf(pwszPath, pathLength, *it)) {
|
||||
watched = true;
|
||||
}
|
||||
}
|
||||
if (!watched) {
|
||||
return MAKE_HRESULT(S_FALSE, 0, 0);
|
||||
}
|
||||
|
||||
if (!watched) {
|
||||
return MAKE_HRESULT(S_FALSE, 0, 0);
|
||||
}
|
||||
|
||||
int state = 0;
|
||||
if (!checker->IsMonitoredPath(pwszPath, &state)) {
|
||||
return MAKE_HRESULT(S_FALSE, 0, 0);
|
||||
}
|
||||
return MAKE_HRESULT(state == _state ? S_OK : S_FALSE, 0, 0);
|
||||
int state = 0;
|
||||
if (!checker->IsMonitoredPath(pwszPath, &state)) {
|
||||
return MAKE_HRESULT(S_FALSE, 0, 0);
|
||||
}
|
||||
return MAKE_HRESULT(state == _state ? S_OK : S_FALSE, 0, 0);
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCOverlay::GetOverlayInfo(PWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags)
|
||||
{
|
||||
*pIndex = 0;
|
||||
*pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
|
||||
*pIndex = _state;
|
||||
*pIndex = 0;
|
||||
*pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
|
||||
*pIndex = _state;
|
||||
|
||||
if (GetModuleFileName(instanceHandle, pwszIconFile, cchMax) == 0) {
|
||||
HRESULT hResult = HRESULT_FROM_WIN32(GetLastError());
|
||||
wcerr << L"IsOK? " << (hResult == S_OK) << L" with path " << pwszIconFile << L", index " << *pIndex << endl;
|
||||
return hResult;
|
||||
}
|
||||
if (GetModuleFileName(instanceHandle, pwszIconFile, cchMax) == 0) {
|
||||
HRESULT hResult = HRESULT_FROM_WIN32(GetLastError());
|
||||
wcerr << L"IsOK? " << (hResult == S_OK) << L" with path " << pwszIconFile << L", index " << *pIndex << endl;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
bool OCOverlay::_IsOverlaysEnabled()
|
||||
{
|
||||
//int enable;
|
||||
bool success = false;
|
||||
|
||||
//if(RegistryUtil::ReadRegistry(REGISTRY_ROOT_KEY, REGISTRY_ENABLE_OVERLAY, &enable))
|
||||
//{
|
||||
// if(enable) {
|
||||
// success = true;
|
||||
// }
|
||||
//}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,21 +21,22 @@ class OCOverlay : public IShellIconOverlayIdentifier
|
||||
|
||||
{
|
||||
public:
|
||||
OCOverlay(int state);
|
||||
OCOverlay(int state);
|
||||
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP GetOverlayInfo(PWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags);
|
||||
IFACEMETHODIMP GetPriority(int *pPriority);
|
||||
IFACEMETHODIMP IsMemberOf(PCWSTR pwszPath, DWORD dwAttrib);
|
||||
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP GetOverlayInfo(PWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags);
|
||||
IFACEMETHODIMP GetPriority(int *pPriority);
|
||||
IFACEMETHODIMP IsMemberOf(PCWSTR pwszPath, DWORD dwAttrib);
|
||||
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP_(ULONG) Release();
|
||||
|
||||
protected:
|
||||
~OCOverlay();
|
||||
|
||||
private:
|
||||
bool _IsOverlaysEnabled();
|
||||
long _referenceCount;
|
||||
int _state;
|
||||
int _state;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -20,7 +20,7 @@
|
||||
extern long dllReferenceCount;
|
||||
|
||||
OCOverlayFactory::OCOverlayFactory(int state)
|
||||
: _referenceCount(1), _state(state)
|
||||
: _referenceCount(1), _state(state)
|
||||
{
|
||||
InterlockedIncrement(&dllReferenceCount);
|
||||
}
|
||||
@@ -32,7 +32,7 @@ OCOverlayFactory::~OCOverlayFactory()
|
||||
|
||||
IFACEMETHODIMP OCOverlayFactory::QueryInterface(REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hResult = S_OK;
|
||||
HRESULT hResult = S_OK;
|
||||
|
||||
if (IsEqualIID(IID_IUnknown, riid) ||
|
||||
IsEqualIID(IID_IClassFactory, riid))
|
||||
@@ -66,20 +66,20 @@ IFACEMETHODIMP_(ULONG) OCOverlayFactory::Release()
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCOverlayFactory::CreateInstance(
|
||||
IUnknown *pUnkOuter, REFIID riid, void **ppv)
|
||||
IUnknown *pUnkOuter, REFIID riid, void **ppv)
|
||||
{
|
||||
HRESULT hResult = CLASS_E_NOAGGREGATION;
|
||||
HRESULT hResult = CLASS_E_NOAGGREGATION;
|
||||
|
||||
if (pUnkOuter != NULL) { return hResult; }
|
||||
|
||||
hResult = E_OUTOFMEMORY;
|
||||
hResult = E_OUTOFMEMORY;
|
||||
OCOverlay *lrOverlay = new (std::nothrow) OCOverlay(_state);
|
||||
if (!lrOverlay) { return hResult; }
|
||||
if (!lrOverlay) { return hResult; }
|
||||
|
||||
hResult = lrOverlay->QueryInterface(riid, ppv);
|
||||
lrOverlay->Release();
|
||||
lrOverlay->Release();
|
||||
|
||||
return hResult;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
IFACEMETHODIMP OCOverlayFactory::LockServer(BOOL fLock)
|
||||
|
||||
@@ -18,20 +18,20 @@
|
||||
#pragma once
|
||||
|
||||
enum State {
|
||||
State_Error = 0,
|
||||
State_OK, State_OKShared,
|
||||
State_Sync,
|
||||
State_Warning
|
||||
State_Error = 0,
|
||||
State_OK, State_OKShared,
|
||||
State_Sync,
|
||||
State_Warning
|
||||
};
|
||||
|
||||
class OCOverlayFactory : public IClassFactory
|
||||
{
|
||||
public:
|
||||
OCOverlayFactory(int state);
|
||||
OCOverlayFactory(int state);
|
||||
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP_(ULONG) AddRef();
|
||||
IFACEMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP LockServer(BOOL fLock);
|
||||
IFACEMETHODIMP LockServer(BOOL fLock);
|
||||
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppv);
|
||||
IFACEMETHODIMP_(ULONG) Release();
|
||||
|
||||
@@ -40,7 +40,7 @@ protected:
|
||||
|
||||
private:
|
||||
long _referenceCount;
|
||||
int _state;
|
||||
int _state;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -23,52 +23,52 @@ using namespace std;
|
||||
|
||||
HRESULT OCOverlayRegistrationHandler::MakeRegistryEntries(const CLSID& clsid, PCWSTR friendlyName)
|
||||
{
|
||||
HRESULT hResult;
|
||||
HKEY shellOverlayKey = NULL;
|
||||
// the key may not exist yet
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &shellOverlayKey, NULL));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
hResult = RegCreateKey(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, &shellOverlayKey);
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
}
|
||||
HRESULT hResult;
|
||||
HKEY shellOverlayKey = NULL;
|
||||
// the key may not exist yet
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &shellOverlayKey, NULL));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
hResult = RegCreateKey(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, &shellOverlayKey);
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
}
|
||||
|
||||
HKEY syncExOverlayKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(shellOverlayKey, friendlyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &syncExOverlayKey, NULL));
|
||||
HKEY syncExOverlayKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(shellOverlayKey, friendlyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &syncExOverlayKey, NULL));
|
||||
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
wchar_t stringCLSID[MAX_PATH];
|
||||
wchar_t stringCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||
LPCTSTR value = stringCLSID;
|
||||
hResult = RegSetValueEx(syncExOverlayKey, NULL, 0, REG_SZ, (LPBYTE)value, (DWORD)((wcslen(value)+1) * sizeof(TCHAR)));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
LPCTSTR value = stringCLSID;
|
||||
hResult = RegSetValueEx(syncExOverlayKey, NULL, 0, REG_SZ, (LPBYTE)value, (DWORD)((wcslen(value)+1) * sizeof(TCHAR)));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
return hResult;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HRESULT OCOverlayRegistrationHandler::RemoveRegistryEntries(PCWSTR friendlyName)
|
||||
{
|
||||
HRESULT hResult;
|
||||
HKEY shellOverlayKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, KEY_WRITE, &shellOverlayKey));
|
||||
HRESULT hResult;
|
||||
HKEY shellOverlayKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_OVERLAY_KEY, 0, KEY_WRITE, &shellOverlayKey));
|
||||
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HKEY syncExOverlayKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(shellOverlayKey, friendlyName));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
HKEY syncExOverlayKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(shellOverlayKey, friendlyName));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
return hResult;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HRESULT OCOverlayRegistrationHandler::RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid)
|
||||
@@ -79,45 +79,45 @@ HRESULT OCOverlayRegistrationHandler::RegisterCOMObject(PCWSTR modulePath, PCWST
|
||||
|
||||
wchar_t stringCLSID[MAX_PATH];
|
||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||
HRESULT hResult;
|
||||
HKEY hKey = NULL;
|
||||
HRESULT hResult;
|
||||
HKEY hKey = NULL;
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, KEY_WRITE, &hKey));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, KEY_WRITE, &hKey));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HKEY clsidKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(hKey, stringCLSID, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &clsidKey, NULL));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
HKEY clsidKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(hKey, stringCLSID, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &clsidKey, NULL));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValue(clsidKey, NULL, REG_SZ, friendlyName, (DWORD) wcslen(friendlyName)));
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValue(clsidKey, NULL, REG_SZ, friendlyName, (DWORD) wcslen(friendlyName)));
|
||||
|
||||
HKEY inprocessKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(clsidKey, REGISTRY_IN_PROCESS, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &inprocessKey, NULL));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
HKEY inprocessKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegCreateKeyEx(clsidKey, REGISTRY_IN_PROCESS, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &inprocessKey, NULL));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValue(inprocessKey, NULL, REG_SZ, modulePath, (DWORD) wcslen(modulePath)));
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValue(inprocessKey, NULL, REG_SZ, modulePath, (DWORD) wcslen(modulePath)));
|
||||
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValueEx(inprocessKey, REGISTRY_THREADING, 0, REG_SZ, (LPBYTE)REGISTRY_APARTMENT, (DWORD)((wcslen(REGISTRY_APARTMENT)+1) * sizeof(TCHAR))));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValueEx(inprocessKey, REGISTRY_VERSION, 0, REG_SZ, (LPBYTE)REGISTRY_VERSION_NUMBER, (DWORD)(wcslen(REGISTRY_VERSION_NUMBER)+1) * sizeof(TCHAR)));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
hResult = HRESULT_FROM_WIN32(RegSetValueEx(inprocessKey, REGISTRY_VERSION, 0, REG_SZ, (LPBYTE)REGISTRY_VERSION_NUMBER, (DWORD)(wcslen(REGISTRY_VERSION_NUMBER)+1) * sizeof(TCHAR)));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT OCOverlayRegistrationHandler::UnregisterCOMObject(const CLSID& clsid)
|
||||
@@ -125,28 +125,28 @@ HRESULT OCOverlayRegistrationHandler::UnregisterCOMObject(const CLSID& clsid)
|
||||
wchar_t stringCLSID[MAX_PATH];
|
||||
|
||||
StringFromGUID2(clsid, stringCLSID, ARRAYSIZE(stringCLSID));
|
||||
HRESULT hResult;
|
||||
HKEY hKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, DELETE, &hKey));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
HRESULT hResult;
|
||||
HKEY hKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CLASSES_ROOT, REGISTRY_CLSID, 0, DELETE, &hKey));
|
||||
if (!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HKEY clsidKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(hKey, stringCLSID, 0, DELETE, &clsidKey));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
HKEY clsidKey = NULL;
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(hKey, stringCLSID, 0, DELETE, &clsidKey));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(clsidKey, REGISTRY_IN_PROCESS));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(clsidKey, REGISTRY_IN_PROCESS));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(hKey, stringCLSID));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
hResult = HRESULT_FROM_WIN32(RegDeleteKey(hKey, stringCLSID));
|
||||
if(!SUCCEEDED(hResult)) {
|
||||
return hResult;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
}
|
||||
@@ -19,11 +19,11 @@
|
||||
|
||||
class __declspec(dllexport) OCOverlayRegistrationHandler
|
||||
{
|
||||
public:
|
||||
static HRESULT MakeRegistryEntries(const CLSID& clsid, PCWSTR fileType);
|
||||
static HRESULT RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid);
|
||||
static HRESULT RemoveRegistryEntries(PCWSTR friendlyName);
|
||||
static HRESULT UnregisterCOMObject(const CLSID& clsid);
|
||||
public:
|
||||
static HRESULT MakeRegistryEntries(const CLSID& clsid, PCWSTR fileType);
|
||||
static HRESULT RegisterCOMObject(PCWSTR modulePath, PCWSTR friendlyName, const CLSID& clsid);
|
||||
static HRESULT RemoveRegistryEntries(PCWSTR friendlyName);
|
||||
static HRESULT UnregisterCOMObject(const CLSID& clsid);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -13,38 +13,38 @@
|
||||
*/
|
||||
|
||||
|
||||
#define OVERLAY_GUID_ERROR L"{0960F090-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_ERROR_SHARED L"{0960F091-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_OK L"{0960F092-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_OK_SHARED L"{0960F093-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_SYNC L"{0960F094-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_SYNC_SHARED L"{0960F095-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_WARNING L"{0960F096-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_ERROR L"{0960F090-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_ERROR_SHARED L"{0960F091-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_OK L"{0960F092-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_OK_SHARED L"{0960F093-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_SYNC L"{0960F094-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_SYNC_SHARED L"{0960F095-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_WARNING L"{0960F096-F328-48A3-B746-276B1E3C3722}"
|
||||
#define OVERLAY_GUID_WARNING_SHARED L"{0960F097-F328-48A3-B746-276B1E3C3722}"
|
||||
|
||||
#define OVERLAY_GENERIC_NAME L"OC Overlay Handler"
|
||||
|
||||
// two spaces to put us ahead of the competition :/
|
||||
#define OVERLAY_NAME_ERROR L" OCError"
|
||||
#define OVERLAY_NAME_ERROR_SHARED L" OCErrorShared"
|
||||
#define OVERLAY_NAME_OK L" OCOK"
|
||||
#define OVERLAY_NAME_OK_SHARED L" OCOKShared"
|
||||
#define OVERLAY_NAME_SYNC L" OCSync"
|
||||
#define OVERLAY_NAME_SYNC_SHARED L" OCSyncShared"
|
||||
#define OVERLAY_NAME_WARNING L" OCWarning"
|
||||
#define OVERLAY_NAME_WARNING_SHARED L" OCWarningShared"
|
||||
#define OVERLAY_NAME_ERROR L" OCError"
|
||||
#define OVERLAY_NAME_ERROR_SHARED L" OCErrorShared"
|
||||
#define OVERLAY_NAME_OK L" OCOK"
|
||||
#define OVERLAY_NAME_OK_SHARED L" OCOKShared"
|
||||
#define OVERLAY_NAME_SYNC L" OCSync"
|
||||
#define OVERLAY_NAME_SYNC_SHARED L" OCSyncShared"
|
||||
#define OVERLAY_NAME_WARNING L" OCWarning"
|
||||
#define OVERLAY_NAME_WARNING_SHARED L" OCWarningShared"
|
||||
|
||||
#define REGISTRY_OVERLAY_KEY L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers"
|
||||
#define REGISTRY_CLSID L"CLSID"
|
||||
#define REGISTRY_IN_PROCESS L"InprocServer32"
|
||||
#define REGISTRY_THREADING L"ThreadingModel"
|
||||
#define REGISTRY_APARTMENT L"Apartment"
|
||||
#define REGISTRY_VERSION L"Version"
|
||||
#define REGISTRY_VERSION_NUMBER L"1.0"
|
||||
#define REGISTRY_OVERLAY_KEY L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers"
|
||||
#define REGISTRY_CLSID L"CLSID"
|
||||
#define REGISTRY_IN_PROCESS L"InprocServer32"
|
||||
#define REGISTRY_THREADING L"ThreadingModel"
|
||||
#define REGISTRY_APARTMENT L"Apartment"
|
||||
#define REGISTRY_VERSION L"Version"
|
||||
#define REGISTRY_VERSION_NUMBER L"1.0"
|
||||
|
||||
//Registry values for running
|
||||
#define REGISTRY_ENABLE_OVERLAY L"EnableOverlay"
|
||||
#define REGISTRY_ENABLE_OVERLAY L"EnableOverlay"
|
||||
|
||||
#define GET_FILE_OVERLAY_ID L"getFileIconId"
|
||||
#define GET_FILE_OVERLAY_ID L"getFileIconId"
|
||||
|
||||
#define PORT 34001
|
||||
#define PORT 34001
|
||||
@@ -31,23 +31,23 @@ using namespace std;
|
||||
namespace {
|
||||
|
||||
std::wstring getUserName() {
|
||||
DWORD len = DEFAULT_BUFLEN;
|
||||
TCHAR buf[DEFAULT_BUFLEN];
|
||||
if (GetUserName(buf, &len)) {
|
||||
return std::wstring(&buf[0], len);
|
||||
} else {
|
||||
return std::wstring();
|
||||
}
|
||||
DWORD len = DEFAULT_BUFLEN;
|
||||
TCHAR buf[DEFAULT_BUFLEN];
|
||||
if (GetUserName(buf, &len)) {
|
||||
return std::wstring(&buf[0], len);
|
||||
} else {
|
||||
return std::wstring();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
std::wstring CommunicationSocket::DefaultPipePath()
|
||||
{
|
||||
auto pipename = std::wstring(L"\\\\.\\pipe\\");
|
||||
pipename += L"ownCloud-";
|
||||
pipename += getUserName();
|
||||
return pipename;
|
||||
auto pipename = std::wstring(L"\\\\.\\pipe\\");
|
||||
pipename += L"ownCloud-";
|
||||
pipename += getUserName();
|
||||
return pipename;
|
||||
}
|
||||
|
||||
CommunicationSocket::CommunicationSocket()
|
||||
@@ -57,23 +57,23 @@ CommunicationSocket::CommunicationSocket()
|
||||
|
||||
CommunicationSocket::~CommunicationSocket()
|
||||
{
|
||||
Close();
|
||||
Close();
|
||||
}
|
||||
|
||||
bool CommunicationSocket::Close()
|
||||
{
|
||||
if (_pipe == INVALID_HANDLE_VALUE) {
|
||||
return false;
|
||||
}
|
||||
CloseHandle(_pipe);
|
||||
_pipe = INVALID_HANDLE_VALUE;
|
||||
return true;
|
||||
if (_pipe == INVALID_HANDLE_VALUE) {
|
||||
return false;
|
||||
}
|
||||
CloseHandle(_pipe);
|
||||
_pipe = INVALID_HANDLE_VALUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool CommunicationSocket::Connect(const std::wstring &pipename)
|
||||
{
|
||||
_pipe = CreateFile(pipename.data(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
_pipe = CreateFile(pipename.data(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
|
||||
if (_pipe == INVALID_HANDLE_VALUE) {
|
||||
return false;
|
||||
@@ -84,7 +84,7 @@ bool CommunicationSocket::Connect(const std::wstring &pipename)
|
||||
|
||||
bool CommunicationSocket::SendMsg(const wchar_t* message) const
|
||||
{
|
||||
auto utf8_msg = StringUtil::toUtf8(message);
|
||||
auto utf8_msg = StringUtil::toUtf8(message);
|
||||
|
||||
DWORD numBytesWritten = 0;
|
||||
auto result = WriteFile( _pipe, utf8_msg.c_str(), DWORD(utf8_msg.size()), &numBytesWritten, NULL);
|
||||
@@ -92,7 +92,7 @@ bool CommunicationSocket::SendMsg(const wchar_t* message) const
|
||||
if (result) {
|
||||
return true;
|
||||
} else {
|
||||
const_cast<CommunicationSocket*>(this)->Close();
|
||||
const_cast<CommunicationSocket*>(this)->Close();
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -100,9 +100,9 @@ bool CommunicationSocket::SendMsg(const wchar_t* message) const
|
||||
|
||||
bool CommunicationSocket::ReadLine(wstring* response)
|
||||
{
|
||||
if (!response) {
|
||||
return false;
|
||||
}
|
||||
if (!response) {
|
||||
return false;
|
||||
}
|
||||
|
||||
response->clear();
|
||||
|
||||
@@ -110,7 +110,7 @@ bool CommunicationSocket::ReadLine(wstring* response)
|
||||
return false;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
while (true) {
|
||||
int lbPos = 0;
|
||||
auto it = std::find(_buffer.begin() + lbPos, _buffer.end(), '\n');
|
||||
if (it != _buffer.end()) {
|
||||
@@ -121,24 +121,24 @@ bool CommunicationSocket::ReadLine(wstring* response)
|
||||
|
||||
std::array<char, 128> resp_utf8;
|
||||
DWORD numBytesRead = 0;
|
||||
DWORD totalBytesAvailable = 0;
|
||||
DWORD totalBytesAvailable = 0;
|
||||
|
||||
if (!PeekNamedPipe(_pipe, NULL, 0, 0, &totalBytesAvailable, 0)) {
|
||||
Close();
|
||||
return false;
|
||||
}
|
||||
if (totalBytesAvailable == 0) {
|
||||
return false;
|
||||
}
|
||||
if (!PeekNamedPipe(_pipe, NULL, 0, 0, &totalBytesAvailable, 0)) {
|
||||
Close();
|
||||
return false;
|
||||
}
|
||||
if (totalBytesAvailable == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ReadFile(_pipe, resp_utf8.data(), DWORD(resp_utf8.size()), &numBytesRead, NULL)) {
|
||||
if (!ReadFile(_pipe, resp_utf8.data(), DWORD(resp_utf8.size()), &numBytesRead, NULL)) {
|
||||
Close();
|
||||
return false;
|
||||
}
|
||||
if (numBytesRead <= 0) {
|
||||
return false;
|
||||
}
|
||||
_buffer.insert(_buffer.end(), resp_utf8.begin(), resp_utf8.begin()+numBytesRead);
|
||||
_buffer.insert(_buffer.end(), resp_utf8.begin(), resp_utf8.begin()+numBytesRead);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,22 +26,22 @@
|
||||
class __declspec(dllexport) CommunicationSocket
|
||||
{
|
||||
public:
|
||||
static std::wstring DefaultPipePath();
|
||||
static std::wstring DefaultPipePath();
|
||||
|
||||
CommunicationSocket();
|
||||
~CommunicationSocket();
|
||||
CommunicationSocket();
|
||||
~CommunicationSocket();
|
||||
|
||||
bool Connect(const std::wstring& pipename);
|
||||
bool Close();
|
||||
bool Connect(const std::wstring& pipename);
|
||||
bool Close();
|
||||
|
||||
bool SendMsg(const wchar_t*) const;
|
||||
bool ReadLine(std::wstring*);
|
||||
bool SendMsg(const wchar_t*) const;
|
||||
bool ReadLine(std::wstring*);
|
||||
|
||||
HANDLE Event() { return _pipe; }
|
||||
|
||||
private:
|
||||
HANDLE _pipe;
|
||||
std::vector<char> _buffer;
|
||||
private:
|
||||
HANDLE _pipe;
|
||||
std::vector<char> _buffer;
|
||||
bool _connected;
|
||||
};
|
||||
|
||||
|
||||
@@ -22,65 +22,65 @@ using namespace std;
|
||||
|
||||
bool FileUtil::IsChildFile(const wchar_t* rootFolder, vector<wstring>* files)
|
||||
{
|
||||
for(vector<wstring>::iterator it = files->begin(); it != files->end(); it++)
|
||||
{
|
||||
wstring file = *it;
|
||||
for(vector<wstring>::iterator it = files->begin(); it != files->end(); it++)
|
||||
{
|
||||
wstring file = *it;
|
||||
|
||||
size_t found = file.find(rootFolder);
|
||||
size_t found = file.find(rootFolder);
|
||||
|
||||
if(found != string::npos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(found != string::npos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FileUtil::IsChildFile(const wchar_t* rootFolder, const wchar_t* file)
|
||||
{
|
||||
wstring* f = new wstring(file);
|
||||
wstring* f = new wstring(file);
|
||||
|
||||
size_t found = f->find(rootFolder);
|
||||
size_t found = f->find(rootFolder);
|
||||
|
||||
if(found != string::npos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
if(found != string::npos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FileUtil::IsChildFileOfRoot(std::vector<std::wstring>* files)
|
||||
{
|
||||
wstring* rootFolder = new wstring();
|
||||
bool needed = false;
|
||||
wstring* rootFolder = new wstring();
|
||||
bool needed = false;
|
||||
|
||||
if(RegistryUtil::ReadRegistry(REGISTRY_ROOT_KEY, REGISTRY_FILTER_FOLDER, rootFolder))
|
||||
{
|
||||
if(IsChildFile(rootFolder->c_str(), files))
|
||||
{
|
||||
needed = true;
|
||||
}
|
||||
}
|
||||
if(RegistryUtil::ReadRegistry(REGISTRY_ROOT_KEY, REGISTRY_FILTER_FOLDER, rootFolder))
|
||||
{
|
||||
if(IsChildFile(rootFolder->c_str(), files))
|
||||
{
|
||||
needed = true;
|
||||
}
|
||||
}
|
||||
|
||||
delete rootFolder;
|
||||
return needed;
|
||||
delete rootFolder;
|
||||
return needed;
|
||||
}
|
||||
|
||||
bool FileUtil::IsChildFileOfRoot(const wchar_t* filePath)
|
||||
{
|
||||
wstring* rootFolder = new wstring();
|
||||
bool needed = false;
|
||||
|
||||
if(RegistryUtil::ReadRegistry(REGISTRY_ROOT_KEY, REGISTRY_FILTER_FOLDER, rootFolder))
|
||||
{
|
||||
if(FileUtil::IsChildFile(rootFolder->c_str(), filePath))
|
||||
{
|
||||
needed = true;
|
||||
}
|
||||
}
|
||||
wstring* rootFolder = new wstring();
|
||||
bool needed = false;
|
||||
|
||||
if(RegistryUtil::ReadRegistry(REGISTRY_ROOT_KEY, REGISTRY_FILTER_FOLDER, rootFolder))
|
||||
{
|
||||
if(FileUtil::IsChildFile(rootFolder->c_str(), filePath))
|
||||
{
|
||||
needed = true;
|
||||
}
|
||||
}
|
||||
|
||||
delete rootFolder;
|
||||
return needed;
|
||||
delete rootFolder;
|
||||
return needed;
|
||||
}
|
||||
@@ -25,16 +25,16 @@
|
||||
class __declspec(dllexport) FileUtil
|
||||
{
|
||||
public:
|
||||
FileUtil();
|
||||
FileUtil();
|
||||
|
||||
~FileUtil();
|
||||
~FileUtil();
|
||||
|
||||
static bool IsChildFile(const wchar_t*, std::vector<std::wstring>*);
|
||||
static bool IsChildFile(const wchar_t*, const wchar_t*);
|
||||
static bool IsChildFileOfRoot(std::vector<std::wstring>*);
|
||||
static bool IsChildFileOfRoot(const wchar_t*);
|
||||
static bool IsChildFile(const wchar_t*, std::vector<std::wstring>*);
|
||||
static bool IsChildFile(const wchar_t*, const wchar_t*);
|
||||
static bool IsChildFileOfRoot(std::vector<std::wstring>*);
|
||||
static bool IsChildFileOfRoot(const wchar_t*);
|
||||
|
||||
private:
|
||||
private:
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -25,8 +25,8 @@ using namespace std;
|
||||
|
||||
OCMessage::OCMessage(void)
|
||||
{
|
||||
_command = new wstring();
|
||||
_value = new wstring();
|
||||
_command = new wstring();
|
||||
_value = new wstring();
|
||||
}
|
||||
|
||||
OCMessage::~OCMessage(void)
|
||||
@@ -35,40 +35,40 @@ OCMessage::~OCMessage(void)
|
||||
|
||||
bool OCMessage::InitFromMessage(const wstring* message)
|
||||
{
|
||||
if(message->length() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!ParserUtil::GetItem(COMMAND, message, _command))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(message->length() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!ParserUtil::GetItem(COMMAND, message, _command))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!ParserUtil::GetItem(VALUE, message, _value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!ParserUtil::GetItem(VALUE, message, _value))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
std::wstring* OCMessage::GetCommand()
|
||||
{
|
||||
return _command;
|
||||
return _command;
|
||||
}
|
||||
|
||||
std::wstring* OCMessage::GetValue()
|
||||
{
|
||||
return _value;
|
||||
return _value;
|
||||
}
|
||||
|
||||
void OCMessage::SetCommand(std::wstring* command)
|
||||
{
|
||||
_command = command;
|
||||
_command = command;
|
||||
}
|
||||
|
||||
void OCMessage::SetValue(std::wstring* value)
|
||||
{
|
||||
_value = value;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
@@ -23,20 +23,20 @@ class __declspec(dllexport) OCMessage
|
||||
{
|
||||
public:
|
||||
OCMessage(void);
|
||||
~OCMessage(void);
|
||||
~OCMessage(void);
|
||||
|
||||
bool InitFromMessage(const std::wstring*);
|
||||
bool InitFromMessage(const std::wstring*);
|
||||
|
||||
std::wstring* GetCommand();
|
||||
std::wstring* GetValue();
|
||||
std::wstring* GetCommand();
|
||||
std::wstring* GetValue();
|
||||
|
||||
void SetCommand(std::wstring*);
|
||||
void SetValue(std::wstring*);
|
||||
void SetCommand(std::wstring*);
|
||||
void SetValue(std::wstring*);
|
||||
|
||||
private:
|
||||
|
||||
std::wstring* _command;
|
||||
std::wstring* _value;
|
||||
std::wstring* _value;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -21,369 +21,369 @@ using namespace std;
|
||||
|
||||
bool ParserUtil::GetItem(const wchar_t* item, const wstring* message, wstring* result)
|
||||
{
|
||||
size_t start = message->find(item, 0);
|
||||
size_t start = message->find(item, 0);
|
||||
|
||||
if(start == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(start == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t end = message->find(COLON, start);
|
||||
size_t end = message->find(COLON, start);
|
||||
|
||||
if(end == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(end == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//Move to next character after :
|
||||
end += 1;
|
||||
//Move to next character after :
|
||||
end += 1;
|
||||
|
||||
wchar_t c = message->at(end);
|
||||
wchar_t c = message->at(end);
|
||||
|
||||
//Move to the next character, which is the start of the value
|
||||
end += 1;
|
||||
|
||||
if(c == '[')
|
||||
{
|
||||
return GetList(end - 1, message, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetValue(end, message, result);
|
||||
}
|
||||
//Move to the next character, which is the start of the value
|
||||
end += 1;
|
||||
|
||||
if(c == '[')
|
||||
{
|
||||
return GetList(end - 1, message, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetValue(end, message, result);
|
||||
}
|
||||
}
|
||||
|
||||
bool ParserUtil::GetList(size_t start, const wstring* message, wstring* result)
|
||||
{
|
||||
size_t end = start + 1;
|
||||
size_t end = start + 1;
|
||||
|
||||
int openBraceCount = 1;
|
||||
int openBraceCount = 1;
|
||||
|
||||
while(openBraceCount > 0)
|
||||
{
|
||||
size_t closeBraceLocation = message->find(CLOSE_BRACE, end);
|
||||
size_t openBraceLocation = message->find(OPEN_BRACE, end);
|
||||
while(openBraceCount > 0)
|
||||
{
|
||||
size_t closeBraceLocation = message->find(CLOSE_BRACE, end);
|
||||
size_t openBraceLocation = message->find(OPEN_BRACE, end);
|
||||
|
||||
if(closeBraceLocation < openBraceLocation)
|
||||
{
|
||||
openBraceCount--;
|
||||
end = closeBraceLocation + 1;
|
||||
}
|
||||
else if(openBraceLocation < closeBraceLocation)
|
||||
{
|
||||
openBraceCount++;
|
||||
end = openBraceLocation + 1;
|
||||
}
|
||||
if(closeBraceLocation < openBraceLocation)
|
||||
{
|
||||
openBraceCount--;
|
||||
end = closeBraceLocation + 1;
|
||||
}
|
||||
else if(openBraceLocation < closeBraceLocation)
|
||||
{
|
||||
openBraceCount++;
|
||||
end = openBraceLocation + 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
size_t length = end - start;
|
||||
}
|
||||
|
||||
size_t length = end - start;
|
||||
|
||||
return GetString(start, end, message, result);
|
||||
return GetString(start, end, message, result);
|
||||
}
|
||||
|
||||
size_t ParserUtil::GetNextStringItemInList(const wstring* message, size_t start, wstring* result)
|
||||
{
|
||||
size_t end = string::npos;
|
||||
size_t commaLocation = message->find(COMMA, start);
|
||||
size_t end = string::npos;
|
||||
size_t commaLocation = message->find(COMMA, start);
|
||||
|
||||
if(commaLocation == string::npos)
|
||||
{
|
||||
end = message->find(CLOSE_BRACE, start);
|
||||
if(end == string::npos)
|
||||
{
|
||||
end = message->length();
|
||||
}
|
||||
else
|
||||
{
|
||||
end = end - 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
end = commaLocation - 1;
|
||||
}
|
||||
if(commaLocation == string::npos)
|
||||
{
|
||||
end = message->find(CLOSE_BRACE, start);
|
||||
if(end == string::npos)
|
||||
{
|
||||
end = message->length();
|
||||
}
|
||||
else
|
||||
{
|
||||
end = end - 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
end = commaLocation - 1;
|
||||
}
|
||||
|
||||
if(!GetString(start + 2, end, message, result))
|
||||
{
|
||||
return string::npos;
|
||||
}
|
||||
if(!GetString(start + 2, end, message, result))
|
||||
{
|
||||
return string::npos;
|
||||
}
|
||||
|
||||
return end + 2;
|
||||
return end + 2;
|
||||
}
|
||||
|
||||
size_t ParserUtil::GetNextOCItemInList(const wstring* message, size_t start, wstring* result)
|
||||
{
|
||||
size_t end = message->find(OPEN_CURLY_BRACE, start) + 1;
|
||||
size_t end = message->find(OPEN_CURLY_BRACE, start) + 1;
|
||||
|
||||
int openBraceCount = 1;
|
||||
int openBraceCount = 1;
|
||||
|
||||
while(openBraceCount > 0)
|
||||
{
|
||||
size_t closeBraceLocation = message->find(CLOSE_CURLY_BRACE, end);
|
||||
size_t openBraceLocation = message->find(OPEN_CURLY_BRACE, end);
|
||||
while(openBraceCount > 0)
|
||||
{
|
||||
size_t closeBraceLocation = message->find(CLOSE_CURLY_BRACE, end);
|
||||
size_t openBraceLocation = message->find(OPEN_CURLY_BRACE, end);
|
||||
|
||||
if(closeBraceLocation < openBraceLocation)
|
||||
{
|
||||
openBraceCount--;
|
||||
end = closeBraceLocation + 1;
|
||||
}
|
||||
else if(openBraceLocation < closeBraceLocation)
|
||||
{
|
||||
openBraceCount++;
|
||||
end = openBraceLocation + 1;
|
||||
}
|
||||
}
|
||||
if(closeBraceLocation < openBraceLocation)
|
||||
{
|
||||
openBraceCount--;
|
||||
end = closeBraceLocation + 1;
|
||||
}
|
||||
else if(openBraceLocation < closeBraceLocation)
|
||||
{
|
||||
openBraceCount++;
|
||||
end = openBraceLocation + 1;
|
||||
}
|
||||
}
|
||||
|
||||
size_t length = end - start;
|
||||
size_t length = end - start;
|
||||
|
||||
if(!GetString(start, end, message, result))
|
||||
{
|
||||
return string::npos;
|
||||
}
|
||||
if(!GetString(start, end, message, result))
|
||||
{
|
||||
return string::npos;
|
||||
}
|
||||
|
||||
return end;
|
||||
return end;
|
||||
}
|
||||
|
||||
bool ParserUtil::GetValue(size_t start, const wstring* message, wstring* result)
|
||||
{
|
||||
if(message->at(start - 1) == '\"')
|
||||
{
|
||||
size_t end = message->find(QUOTE, start);
|
||||
return GetString(start, end, message, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
start = start - 1;
|
||||
if(message->at(start - 1) == '\"')
|
||||
{
|
||||
size_t end = message->find(QUOTE, start);
|
||||
return GetString(start, end, message, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
start = start - 1;
|
||||
|
||||
size_t end = message->find(COMMA, start);
|
||||
|
||||
result->append(message->substr(start, end-start));
|
||||
}
|
||||
size_t end = message->find(COMMA, start);
|
||||
|
||||
result->append(message->substr(start, end-start));
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::GetString(size_t start, size_t end, const wstring* message, wstring* result)
|
||||
{
|
||||
if(end == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(end == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t length = end - start;
|
||||
size_t length = end - start;
|
||||
|
||||
if(length > 0)
|
||||
{
|
||||
result->append(message->substr(start, length));
|
||||
}
|
||||
else
|
||||
{
|
||||
result->append(L"");
|
||||
}
|
||||
if(length > 0)
|
||||
{
|
||||
result->append(message->substr(start, length));
|
||||
}
|
||||
else
|
||||
{
|
||||
result->append(L"");
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::IsList(wstring* message)
|
||||
{
|
||||
wchar_t c = message->at(0);
|
||||
|
||||
if(c == '[')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
wchar_t c = message->at(0);
|
||||
|
||||
if(c == '[')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ParserUtil::ParseJsonList(wstring* message, vector<wstring*>* items)
|
||||
{
|
||||
|
||||
size_t currentLocation = message->find(OPEN_BRACE, 0);
|
||||
size_t currentLocation = message->find(OPEN_BRACE, 0);
|
||||
|
||||
while(currentLocation < message->size())
|
||||
{
|
||||
wstring* item = new wstring();
|
||||
while(currentLocation < message->size())
|
||||
{
|
||||
wstring* item = new wstring();
|
||||
|
||||
currentLocation = ParserUtil::GetNextStringItemInList(message, currentLocation, item);
|
||||
currentLocation = ParserUtil::GetNextStringItemInList(message, currentLocation, item);
|
||||
|
||||
if(currentLocation == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(currentLocation == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
items->push_back(item);
|
||||
}
|
||||
items->push_back(item);
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::ParseOCList(wstring* message, vector<wstring*>* items)
|
||||
{
|
||||
|
||||
size_t currentLocation = message->find(OPEN_CURLY_BRACE, 0);
|
||||
size_t currentLocation = message->find(OPEN_CURLY_BRACE, 0);
|
||||
|
||||
while(currentLocation < message->size())
|
||||
{
|
||||
wstring* item = new wstring();
|
||||
while(currentLocation < message->size())
|
||||
{
|
||||
wstring* item = new wstring();
|
||||
|
||||
currentLocation = ParserUtil::GetNextOCItemInList(message, currentLocation, item);
|
||||
currentLocation = ParserUtil::GetNextOCItemInList(message, currentLocation, item);
|
||||
|
||||
if(currentLocation == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(currentLocation == string::npos)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
items->push_back(item);
|
||||
}
|
||||
items->push_back(item);
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::ParseOCMessageList(wstring* message, vector<OCMessage*>* messages)
|
||||
{
|
||||
vector<wstring*>* items = new vector<wstring*>();
|
||||
vector<wstring*>* items = new vector<wstring*>();
|
||||
|
||||
if(!ParseOCList(message, items))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!ParseOCList(message, items))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for(vector<wstring*>::iterator it = items->begin(); it != items->end(); it++)
|
||||
{
|
||||
wstring* temp = *it;
|
||||
for(vector<wstring*>::iterator it = items->begin(); it != items->end(); it++)
|
||||
{
|
||||
wstring* temp = *it;
|
||||
|
||||
OCMessage* message = new OCMessage();
|
||||
message->InitFromMessage(temp);
|
||||
OCMessage* message = new OCMessage();
|
||||
message->InitFromMessage(temp);
|
||||
|
||||
messages->push_back(message);
|
||||
}
|
||||
messages->push_back(message);
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::SerializeList(std::vector<std::wstring>* list, std::wstring* result, bool escapeQuotes)
|
||||
{
|
||||
if(result == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(result == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
result->append(OPEN_BRACE);
|
||||
result->append(OPEN_BRACE);
|
||||
|
||||
for(vector<wstring>::iterator it = list->begin(); it != list->end(); it++)
|
||||
{
|
||||
wstring value = *it;
|
||||
for(vector<wstring>::iterator it = list->begin(); it != list->end(); it++)
|
||||
{
|
||||
wstring value = *it;
|
||||
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(value.c_str());
|
||||
result->append(QUOTE);
|
||||
result->append(value.c_str());
|
||||
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(COMMA);
|
||||
}
|
||||
result->append(QUOTE);
|
||||
result->append(COMMA);
|
||||
}
|
||||
|
||||
//Erase last comma
|
||||
result->erase(result->size() - 1, 1);
|
||||
//Erase last comma
|
||||
result->erase(result->size() - 1, 1);
|
||||
|
||||
result->append(CLOSE_BRACE);
|
||||
result->append(CLOSE_BRACE);
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::SerializeMessage(std::map<std::wstring*, std::wstring*>* arguments, std::wstring* result, bool escapeQuotes)
|
||||
{
|
||||
if(result == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(result == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
result->append(OPEN_CURLY_BRACE);
|
||||
result->append(OPEN_CURLY_BRACE);
|
||||
|
||||
for(map<wstring*, wstring*>::iterator it = arguments->begin(); it != arguments->end(); it++)
|
||||
{
|
||||
wstring key = *it->first;
|
||||
wstring value = *it->second;
|
||||
for(map<wstring*, wstring*>::iterator it = arguments->begin(); it != arguments->end(); it++)
|
||||
{
|
||||
wstring key = *it->first;
|
||||
wstring value = *it->second;
|
||||
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(key.c_str());
|
||||
result->append(QUOTE);
|
||||
result->append(key.c_str());
|
||||
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
if(escapeQuotes)
|
||||
{
|
||||
result->append(BACK_SLASH);
|
||||
}
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(COLON);
|
||||
result->append(value.c_str());
|
||||
result->append(COMMA);
|
||||
}
|
||||
result->append(QUOTE);
|
||||
result->append(COLON);
|
||||
result->append(value.c_str());
|
||||
result->append(COMMA);
|
||||
}
|
||||
|
||||
//Erase last comma
|
||||
result->erase(result->size() - 1, 1);
|
||||
//Erase last comma
|
||||
result->erase(result->size() - 1, 1);
|
||||
|
||||
result->append(CLOSE_CURLY_BRACE);
|
||||
result->append(CLOSE_CURLY_BRACE);
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParserUtil::SerializeMessage(OCMessage* OCMessage, std::wstring* result)
|
||||
{
|
||||
if(result == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(result == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
result->append(OPEN_CURLY_BRACE);
|
||||
result->append(OPEN_CURLY_BRACE);
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(COMMAND);
|
||||
result->append(QUOTE);
|
||||
result->append(QUOTE);
|
||||
result->append(COMMAND);
|
||||
result->append(QUOTE);
|
||||
|
||||
result->append(COLON);
|
||||
result->append(COLON);
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(OCMessage->GetCommand()->c_str());
|
||||
result->append(QUOTE);
|
||||
result->append(QUOTE);
|
||||
result->append(OCMessage->GetCommand()->c_str());
|
||||
result->append(QUOTE);
|
||||
|
||||
result->append(COMMA);
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(VALUE);
|
||||
result->append(QUOTE);
|
||||
result->append(COMMA);
|
||||
|
||||
result->append(QUOTE);
|
||||
result->append(VALUE);
|
||||
result->append(QUOTE);
|
||||
|
||||
result->append(COLON);
|
||||
|
||||
if(!IsList(OCMessage->GetValue()))
|
||||
{
|
||||
result->append(QUOTE);
|
||||
}
|
||||
|
||||
result->append(OCMessage->GetValue()->c_str());
|
||||
|
||||
if(!IsList(OCMessage->GetValue()))
|
||||
{
|
||||
result->append(QUOTE);
|
||||
}
|
||||
result->append(COLON);
|
||||
|
||||
if(!IsList(OCMessage->GetValue()))
|
||||
{
|
||||
result->append(QUOTE);
|
||||
}
|
||||
|
||||
result->append(OCMessage->GetValue()->c_str());
|
||||
|
||||
if(!IsList(OCMessage->GetValue()))
|
||||
{
|
||||
result->append(QUOTE);
|
||||
}
|
||||
|
||||
result->append(CLOSE_CURLY_BRACE);
|
||||
result->append(CLOSE_CURLY_BRACE);
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,49 +22,49 @@ using namespace std;
|
||||
|
||||
bool RegistryUtil::ReadRegistry(const wchar_t* key, const wchar_t* name, int* result)
|
||||
{
|
||||
wstring* strResult = new wstring();
|
||||
wstring* strResult = new wstring();
|
||||
|
||||
if(!ReadRegistry(key, name, strResult))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!ReadRegistry(key, name, strResult))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
*result = stoi( strResult->c_str() );
|
||||
*result = stoi( strResult->c_str() );
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RegistryUtil::ReadRegistry(const wchar_t* key, const wchar_t* name, wstring* result)
|
||||
{
|
||||
HRESULT hResult;
|
||||
HRESULT hResult;
|
||||
|
||||
HKEY rootKey = NULL;
|
||||
HKEY rootKey = NULL;
|
||||
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CURRENT_USER, (LPCWSTR)key, NULL, KEY_READ, &rootKey));
|
||||
hResult = HRESULT_FROM_WIN32(RegOpenKeyEx(HKEY_CURRENT_USER, (LPCWSTR)key, NULL, KEY_READ, &rootKey));
|
||||
|
||||
if(!SUCCEEDED(hResult))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!SUCCEEDED(hResult))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
wchar_t value[SIZE];
|
||||
DWORD value_length = SIZE;
|
||||
|
||||
wchar_t value[SIZE];
|
||||
DWORD value_length = SIZE;
|
||||
|
||||
hResult = RegQueryValueEx(rootKey, (LPCWSTR)name, NULL, NULL, (LPBYTE)value, &value_length );
|
||||
|
||||
if(!SUCCEEDED(hResult))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if(!SUCCEEDED(hResult))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
result->append(value);
|
||||
result->append(value);
|
||||
|
||||
HRESULT hResult2 = RegCloseKey(rootKey);
|
||||
HRESULT hResult2 = RegCloseKey(rootKey);
|
||||
|
||||
if (!SUCCEEDED(hResult2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!SUCCEEDED(hResult2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -24,12 +24,12 @@
|
||||
class __declspec(dllexport) RegistryUtil
|
||||
{
|
||||
public:
|
||||
RegistryUtil();
|
||||
RegistryUtil();
|
||||
|
||||
~RegistryUtil();
|
||||
~RegistryUtil();
|
||||
|
||||
static bool ReadRegistry(const wchar_t*, const wchar_t*, int*);
|
||||
static bool ReadRegistry(const wchar_t*, const wchar_t*, std::wstring*);
|
||||
static bool ReadRegistry(const wchar_t*, const wchar_t*, int*);
|
||||
static bool ReadRegistry(const wchar_t*, const wchar_t*, std::wstring*);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -40,7 +40,7 @@ void RemotePathChecker::workerThreadLoop()
|
||||
std::unordered_set<std::wstring> asked;
|
||||
|
||||
while(!_stop) {
|
||||
Sleep(50);
|
||||
Sleep(50);
|
||||
|
||||
if (!connected) {
|
||||
asked.clear();
|
||||
@@ -72,42 +72,33 @@ void RemotePathChecker::workerThreadLoop()
|
||||
|
||||
std::wstring response;
|
||||
while (!_stop && socket.ReadLine(&response)) {
|
||||
if (StringUtil::begins_with(response, wstring(L"REGISTER_PATH:"))) {
|
||||
wstring responsePath = response.substr(14); // length of REGISTER_PATH:
|
||||
if (StringUtil::begins_with(response, wstring(L"REGISTER_PATH:"))) {
|
||||
wstring responsePath = response.substr(14); // length of REGISTER_PATH:
|
||||
|
||||
auto sharedPtrCopy = atomic_load(&_watchedDirectories);
|
||||
auto vectorCopy = make_shared<vector<wstring>>(*sharedPtrCopy);
|
||||
vectorCopy->push_back(responsePath);
|
||||
atomic_store(&_watchedDirectories, shared_ptr<const vector<wstring>>(vectorCopy));
|
||||
|
||||
// We don't keep track of all files and can't know which file is currently visible
|
||||
// to the user, but at least reload the root dir so that any shortcut to the root
|
||||
// is updated without the user needing to refresh.
|
||||
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
||||
} else if (StringUtil::begins_with(response, wstring(L"UNREGISTER_PATH:"))) {
|
||||
{ std::unique_lock<std::mutex> lock(_mutex);
|
||||
_watchedDirectories.push_back(responsePath);
|
||||
}
|
||||
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
||||
} else if (StringUtil::begins_with(response, wstring(L"UNREGISTER_PATH:"))) {
|
||||
wstring responsePath = response.substr(16); // length of UNREGISTER_PATH:
|
||||
|
||||
auto sharedPtrCopy = atomic_load(&_watchedDirectories);
|
||||
auto vectorCopy = make_shared<vector<wstring>>(*sharedPtrCopy);
|
||||
vectorCopy->erase(
|
||||
std::remove(vectorCopy->begin(), vectorCopy->end(), responsePath),
|
||||
vectorCopy->end());
|
||||
atomic_store(&_watchedDirectories, shared_ptr<const vector<wstring>>(vectorCopy));
|
||||
|
||||
vector<wstring> removedPaths;
|
||||
{ std::unique_lock<std::mutex> lock(_mutex);
|
||||
_watchedDirectories.erase(
|
||||
std::remove(_watchedDirectories.begin(), _watchedDirectories.end(), responsePath),
|
||||
_watchedDirectories.end());
|
||||
|
||||
// Remove any item from the cache
|
||||
for (auto it = _cache.begin(); it != _cache.end() ; ) {
|
||||
if (StringUtil::isDescendantOf(it->first, responsePath)) {
|
||||
removedPaths.emplace_back(move(it->first));
|
||||
if (StringUtil::begins_with(it->first, responsePath)) {
|
||||
it = _cache.erase(it);
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
// Assume that we won't need this at this point, UNREGISTER_PATH is rare
|
||||
_oldCache.clear();
|
||||
}
|
||||
for (auto& path : removedPaths)
|
||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, path.data(), NULL);
|
||||
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
||||
} else if (StringUtil::begins_with(response, wstring(L"STATUS:")) ||
|
||||
StringUtil::begins_with(response, wstring(L"BROADCAST:"))) {
|
||||
|
||||
@@ -125,57 +116,57 @@ void RemotePathChecker::workerThreadLoop()
|
||||
auto state = _StrToFileState(responseStatus);
|
||||
bool wasAsked = asked.erase(responsePath) > 0;
|
||||
|
||||
bool updateView = false;
|
||||
bool changed = false;
|
||||
{ std::unique_lock<std::mutex> lock(_mutex);
|
||||
auto it = _cache.find(responsePath);
|
||||
if (it == _cache.end()) {
|
||||
// The client only approximates requested files, if the bloom
|
||||
// filter becomes saturated after navigating multiple directories we'll start getting
|
||||
// status pushes that we never requested and fill our cache. Ignore those.
|
||||
if (!wasAsked) {
|
||||
continue;
|
||||
}
|
||||
it = _cache.insert(make_pair(responsePath, StateNone)).first;
|
||||
bool wasCached = _cache.find(responsePath) != _cache.end();
|
||||
if (wasAsked || wasCached) {
|
||||
auto &it = _cache[responsePath];
|
||||
changed = (it != state);
|
||||
it = state;
|
||||
}
|
||||
|
||||
updateView = it->second != state;
|
||||
it->second = state;
|
||||
}
|
||||
if (updateView) {
|
||||
if (changed) {
|
||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, responsePath.data(), NULL);
|
||||
}
|
||||
}
|
||||
else if (StringUtil::begins_with(response, wstring(L"UPDATE_VIEW"))) {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
// Keep the old states to continue having something to display while the new state is
|
||||
// requested from the client, triggered by clearing _cache.
|
||||
_oldCache.insert(_cache.cbegin(), _cache.cend());
|
||||
|
||||
// Swap to make a copy of the cache under the mutex and clear the one stored.
|
||||
std::unordered_map<std::wstring, FileState> cache;
|
||||
swap(cache, _cache);
|
||||
lock.unlock();
|
||||
// Let explorer know about the invalidated cache entries, it will re-request the ones it needs.
|
||||
for (auto it = cache.begin(); it != cache.end(); ++it) {
|
||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, it->first.data(), NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (socket.Event() == INVALID_HANDLE_VALUE) {
|
||||
atomic_store(&_watchedDirectories, make_shared<const vector<wstring>>());
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
_connected = connected = false;
|
||||
if (socket.Event() == INVALID_HANDLE_VALUE) {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
_cache.clear();
|
||||
_oldCache.clear();
|
||||
_watchedDirectories.clear();
|
||||
_connected = connected = false;
|
||||
}
|
||||
|
||||
// Swap to make a copy of the cache under the mutex and clear the one stored.
|
||||
std::unordered_map<std::wstring, FileState> cache;
|
||||
swap(cache, _cache);
|
||||
lock.unlock();
|
||||
// Let explorer know about each invalidated cache entry that needs to get its icon removed.
|
||||
for (auto it = cache.begin(); it != cache.end(); ++it) {
|
||||
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, it->first.data(), NULL);
|
||||
}
|
||||
}
|
||||
if (_stop) return;
|
||||
|
||||
if (_stop) return;
|
||||
|
||||
HANDLE handles[2] = { _newQueries, socket.Event() };
|
||||
WaitForMultipleObjects(2, handles, false, 0);
|
||||
HANDLE handles[2] = { _newQueries, socket.Event() };
|
||||
WaitForMultipleObjects(2, handles, false, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
RemotePathChecker::RemotePathChecker()
|
||||
: _watchedDirectories(make_shared<const vector<wstring>>())
|
||||
, _connected(false)
|
||||
: _connected(false)
|
||||
, _newQueries(CreateEvent(NULL, true, true, NULL))
|
||||
, _thread([this]{ this->workerThreadLoop(); })
|
||||
, _thread([this]{ this->workerThreadLoop(); })
|
||||
{
|
||||
}
|
||||
|
||||
@@ -188,9 +179,10 @@ RemotePathChecker::~RemotePathChecker()
|
||||
CloseHandle(_newQueries);
|
||||
}
|
||||
|
||||
std::shared_ptr<const std::vector<std::wstring>> RemotePathChecker::WatchedDirectories() const
|
||||
vector<wstring> RemotePathChecker::WatchedDirectories()
|
||||
{
|
||||
return atomic_load(&_watchedDirectories);
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
return _watchedDirectories;
|
||||
}
|
||||
|
||||
bool RemotePathChecker::IsMonitoredPath(const wchar_t* filePath, int* state)
|
||||
@@ -206,39 +198,44 @@ bool RemotePathChecker::IsMonitoredPath(const wchar_t* filePath, int* state)
|
||||
|
||||
auto it = _cache.find(path);
|
||||
if (it != _cache.end()) {
|
||||
// The path is in our cache, and we'll get updates pushed if the status changes.
|
||||
*state = it->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Re-request the status while we display what we have in _oldCache
|
||||
_pending.push(filePath);
|
||||
|
||||
it = _oldCache.find(path);
|
||||
bool foundInOldCache = it != _oldCache.end();
|
||||
if (foundInOldCache)
|
||||
*state = it->second;
|
||||
|
||||
lock.unlock();
|
||||
SetEvent(_newQueries);
|
||||
return false;
|
||||
return foundInOldCache;
|
||||
}
|
||||
|
||||
RemotePathChecker::FileState RemotePathChecker::_StrToFileState(const std::wstring &str)
|
||||
{
|
||||
if (str == L"NOP" || str == L"NONE") {
|
||||
return StateNone;
|
||||
} else if (str == L"SYNC" || str == L"NEW") {
|
||||
return StateSync;
|
||||
} else if (str == L"SYNC+SWM" || str == L"NEW+SWM") {
|
||||
return StateSync;
|
||||
} else if (str == L"OK") {
|
||||
return StateOk;
|
||||
} else if (str == L"OK+SWM") {
|
||||
return StateOkSWM;
|
||||
} else if (str == L"IGNORE") {
|
||||
return StateWarning;
|
||||
} else if (str == L"IGNORE+SWM") {
|
||||
return StateWarning;
|
||||
} else if (str == L"ERROR") {
|
||||
return StateError;
|
||||
} else if (str == L"ERROR+SWM") {
|
||||
return StateError;
|
||||
}
|
||||
if (str == L"NOP" || str == L"NONE") {
|
||||
return StateNone;
|
||||
} else if (str == L"SYNC" || str == L"NEW") {
|
||||
return StateSync;
|
||||
} else if (str == L"SYNC+SWM" || str == L"NEW+SWM") {
|
||||
return StateSync;
|
||||
} else if (str == L"OK") {
|
||||
return StateOk;
|
||||
} else if (str == L"OK+SWM") {
|
||||
return StateOkSWM;
|
||||
} else if (str == L"IGNORE") {
|
||||
return StateWarning;
|
||||
} else if (str == L"IGNORE+SWM") {
|
||||
return StateWarning;
|
||||
} else if (str == L"ERROR") {
|
||||
return StateError;
|
||||
} else if (str == L"ERROR+SWM") {
|
||||
return StateError;
|
||||
}
|
||||
|
||||
return StateNone;
|
||||
return StateNone;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <unordered_map>
|
||||
#include <queue>
|
||||
#include <thread>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <atomic>
|
||||
#include <condition_variable>
|
||||
@@ -28,21 +27,21 @@
|
||||
|
||||
class __declspec(dllexport) RemotePathChecker {
|
||||
public:
|
||||
enum FileState {
|
||||
// Order synced with OCOverlay
|
||||
StateError = 0,
|
||||
StateOk, StateOkSWM,
|
||||
StateSync,
|
||||
StateWarning,
|
||||
StateNone
|
||||
};
|
||||
RemotePathChecker();
|
||||
enum FileState {
|
||||
// Order synced with OCOverlay
|
||||
StateError = 0,
|
||||
StateOk, StateOkSWM,
|
||||
StateSync,
|
||||
StateWarning,
|
||||
StateNone
|
||||
};
|
||||
RemotePathChecker();
|
||||
~RemotePathChecker();
|
||||
std::shared_ptr<const std::vector<std::wstring>> WatchedDirectories() const;
|
||||
bool IsMonitoredPath(const wchar_t* filePath, int* state);
|
||||
std::vector<std::wstring> WatchedDirectories();
|
||||
bool IsMonitoredPath(const wchar_t* filePath, int* state);
|
||||
|
||||
private:
|
||||
FileState _StrToFileState(const std::wstring &str);
|
||||
FileState _StrToFileState(const std::wstring &str);
|
||||
std::mutex _mutex;
|
||||
std::atomic<bool> _stop;
|
||||
|
||||
@@ -53,9 +52,8 @@ private:
|
||||
std::queue<std::wstring> _pending;
|
||||
|
||||
std::unordered_map<std::wstring, FileState> _cache;
|
||||
// The vector is const since it will be accessed from multiple threads through OCOverlay::IsMemberOf.
|
||||
// Each modification needs to be made onto a copy and then atomically replaced in the shared_ptr.
|
||||
std::shared_ptr<const std::vector<std::wstring>> _watchedDirectories;
|
||||
std::unordered_map<std::wstring, FileState> _oldCache;
|
||||
std::vector<std::wstring> _watchedDirectories;
|
||||
bool _connected;
|
||||
|
||||
|
||||
@@ -63,7 +61,7 @@ private:
|
||||
//std::condition_variable _newQueries;
|
||||
HANDLE _newQueries;
|
||||
|
||||
std::thread _thread;
|
||||
std::thread _thread;
|
||||
void workerThreadLoop();
|
||||
};
|
||||
|
||||
|
||||
@@ -21,18 +21,18 @@
|
||||
|
||||
std::string StringUtil::toUtf8(const wchar_t *utf16, int len)
|
||||
{
|
||||
if (len < 0) {
|
||||
len = (int) wcslen(utf16);
|
||||
}
|
||||
if (len < 0) {
|
||||
len = (int) wcslen(utf16);
|
||||
}
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> > converter;
|
||||
return converter.to_bytes(utf16, utf16+len);
|
||||
}
|
||||
|
||||
std::wstring StringUtil::toUtf16(const char *utf8, int len)
|
||||
{
|
||||
if (len < 0) {
|
||||
len = (int) strlen(utf8);
|
||||
}
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> > converter;
|
||||
if (len < 0) {
|
||||
len = (int) strlen(utf8);
|
||||
}
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> > converter;
|
||||
return converter.from_bytes(utf8, utf8+len);
|
||||
}
|
||||
|
||||
@@ -20,30 +20,15 @@
|
||||
|
||||
class __declspec(dllexport) StringUtil {
|
||||
public:
|
||||
static std::string toUtf8(const wchar_t* utf16, int len = -1);
|
||||
static std::wstring toUtf16(const char* utf8, int len = -1);
|
||||
static std::string toUtf8(const wchar_t* utf16, int len = -1);
|
||||
static std::wstring toUtf16(const char* utf8, int len = -1);
|
||||
|
||||
template<class T>
|
||||
static bool begins_with(const T& input, const T& match)
|
||||
{
|
||||
return input.size() >= match.size()
|
||||
&& std::equal(match.begin(), match.end(), input.begin());
|
||||
}
|
||||
|
||||
static bool isDescendantOf(const std::wstring& child, const std::wstring& parent) {
|
||||
return isDescendantOf(child.c_str(), child.size(), parent.c_str(), parent.size());
|
||||
}
|
||||
|
||||
static bool isDescendantOf(PCWSTR child, size_t childLength, const std::wstring& parent) {
|
||||
return isDescendantOf(child, childLength, parent.c_str(), parent.size());
|
||||
}
|
||||
|
||||
static bool isDescendantOf(PCWSTR child, size_t childLength, PCWSTR parent, size_t parentLength) {
|
||||
if (!parentLength)
|
||||
return false;
|
||||
return (childLength == parentLength || childLength > parentLength && (child[parentLength] == L'\\' || child[parentLength - 1] == L'\\'))
|
||||
&& wcsncmp(child, parent, parentLength) == 0;
|
||||
}
|
||||
template<class T>
|
||||
static bool begins_with(const T& input, const T& match)
|
||||
{
|
||||
return input.size() >= match.size()
|
||||
&& std::equal(match.begin(), match.end(), input.begin());
|
||||
}
|
||||
};
|
||||
|
||||
#endif // STRINGUTIL_H
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
// This is the number that will end up in the version window of the DLLs.
|
||||
// Increment this version before committing a new build if you are today's shell_integration build master.
|
||||
#define OCEXT_BUILD_NUM 44
|
||||
#define OCEXT_BUILD_NUM 43
|
||||
|
||||
#define STRINGIZE2(s) #s
|
||||
#define STRINGIZE(s) STRINGIZE2(s)
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
project(cmd)
|
||||
set(CMAKE_AUTOMOC TRUE)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
||||
|
||||
set(cmd_NAME ${APPLICATION_EXECUTABLE}cmd)
|
||||
set(cmd_SRC
|
||||
cmd.cpp
|
||||
|
||||
@@ -3,8 +3,6 @@ set(CMAKE_AUTOMOC TRUE)
|
||||
|
||||
add_subdirectory(updater)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
||||
|
||||
#TODO Move resources files
|
||||
qt_add_resources(MIRALL_RC_SRC ../../client.qrc)
|
||||
if ( IS_DIRECTORY ${OEM_THEME_DIR} )
|
||||
|
||||
@@ -235,9 +235,6 @@ AccountPtr AccountManager::loadAccountHelper(QSettings& settings)
|
||||
} else {
|
||||
acc->setUrl(urlConfig.toUrl());
|
||||
}
|
||||
|
||||
qDebug() << "Account for" << acc->url() << "using auth type" << authType;
|
||||
|
||||
acc->_serverVersion = settings.value(QLatin1String(serverVersionC)).toString();
|
||||
|
||||
// We want to only restore settings for that auth type and the user value
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
|
||||
namespace OCC {
|
||||
|
||||
const char oldJournalPath[] = ".csync_journal.db";
|
||||
|
||||
Folder::Folder(const FolderDefinition& definition,
|
||||
AccountState* accountState,
|
||||
QObject* parent)
|
||||
|
||||
@@ -115,7 +115,7 @@ void FolderMan::unloadFolder( Folder *f )
|
||||
disconnect(f, SIGNAL(syncPausedChanged(Folder*,bool)),
|
||||
this, SLOT(slotFolderSyncPaused(Folder*,bool)));
|
||||
disconnect(&f->syncEngine().syncFileStatusTracker(), SIGNAL(fileStatusChanged(const QString &, SyncFileStatus)),
|
||||
_socketApi.data(), SLOT(broadcastStatusPushMessage(const QString &, SyncFileStatus)));
|
||||
_socketApi.data(), SLOT(slotFileStatusChanged(const QString &, SyncFileStatus)));
|
||||
disconnect(f, SIGNAL(watchedFileChangedExternally(QString)),
|
||||
&f->syncEngine().syncFileStatusTracker(), SLOT(slotPathTouched(QString)));
|
||||
}
|
||||
@@ -938,7 +938,7 @@ Folder* FolderMan::addFolderInternal(FolderDefinition folderDefinition,
|
||||
connect(folder, SIGNAL(syncPausedChanged(Folder*,bool)), SLOT(slotFolderSyncPaused(Folder*,bool)));
|
||||
connect(folder, SIGNAL(canSyncChanged()), SLOT(slotFolderCanSyncChanged()));
|
||||
connect(&folder->syncEngine().syncFileStatusTracker(), SIGNAL(fileStatusChanged(const QString &, SyncFileStatus)),
|
||||
_socketApi.data(), SLOT(broadcastStatusPushMessage(const QString &, SyncFileStatus)));
|
||||
_socketApi.data(), SLOT(slotFileStatusChanged(const QString &, SyncFileStatus)));
|
||||
connect(folder, SIGNAL(watchedFileChangedExternally(QString)),
|
||||
&folder->syncEngine().syncFileStatusTracker(), SLOT(slotPathTouched(QString)));
|
||||
|
||||
|
||||
@@ -110,8 +110,7 @@ void GeneralSettings::loadMiscSettings()
|
||||
|
||||
void GeneralSettings::slotUpdateInfo()
|
||||
{
|
||||
// Note: the sparkle-updater is not an OCUpdater
|
||||
OCUpdater *updater = qobject_cast<OCUpdater*>(Updater::instance());
|
||||
OCUpdater *updater = dynamic_cast<OCUpdater*>(Updater::instance());
|
||||
if (ConfigFile().skipUpdateCheck()) {
|
||||
updater = 0; // don't show update info if updates are disabled
|
||||
}
|
||||
|
||||
+1
-2
@@ -107,8 +107,7 @@ int main(int argc, char **argv)
|
||||
// if handleStartup returns true, main()
|
||||
// needs to terminate here, e.g. because
|
||||
// the updater is triggered
|
||||
Updater *updater = Updater::instance();
|
||||
if ( updater && updater->handleStartup()) {
|
||||
if (Updater::instance()->handleStartup()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ void ShareLinkWidget::slotSharesFetched(const QList<QSharedPointer<Share>> &shar
|
||||
Q_FOREACH(auto share, shares) {
|
||||
|
||||
if (share->getShareType() == Share::TypeLink) {
|
||||
_share = qSharedPointerObjectCast<LinkShare>(share);
|
||||
_share = qSharedPointerDynamicCast<LinkShare>(share);
|
||||
_ui->pushButton_copy->show();
|
||||
_ui->pushButton_mail->show();
|
||||
|
||||
|
||||
+100
-153
@@ -32,10 +32,8 @@
|
||||
#include "account.h"
|
||||
#include "capabilities.h"
|
||||
|
||||
#include <QBitArray>
|
||||
#include <QDebug>
|
||||
#include <QUrl>
|
||||
#include <QMetaMethod>
|
||||
#include <QMetaObject>
|
||||
#include <QStringList>
|
||||
#include <QScopedPointer>
|
||||
@@ -58,11 +56,6 @@
|
||||
// The second number should be changed when there are new features.
|
||||
#define MIRALL_SOCKET_API_VERSION "1.0"
|
||||
|
||||
#define DEBUG qDebug() << "SocketApi: "
|
||||
|
||||
Q_DECLARE_METATYPE(OCC::SocketListener)
|
||||
|
||||
|
||||
static inline QString removeTrailingSlash(QString path)
|
||||
{
|
||||
Q_ASSERT(path.endsWith(QLatin1Char('/')));
|
||||
@@ -70,89 +63,9 @@ static inline QString removeTrailingSlash(QString path)
|
||||
return path;
|
||||
}
|
||||
|
||||
static QString buildMessage(const QString& verb, const QString &path, const QString &status = QString::null )
|
||||
{
|
||||
QString msg(verb);
|
||||
|
||||
if( !status.isEmpty() ) {
|
||||
msg.append(QLatin1Char(':'));
|
||||
msg.append(status);
|
||||
}
|
||||
if( !path.isEmpty() ) {
|
||||
msg.append(QLatin1Char(':'));
|
||||
QFileInfo fi(path);
|
||||
msg.append(QDir::toNativeSeparators(fi.absoluteFilePath()));
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
namespace OCC {
|
||||
|
||||
class BloomFilter {
|
||||
// Initialize with m=1024 bits and k=2 (high and low 16 bits of a qHash).
|
||||
// For a client navigating in less than 100 directories, this gives us a probability less than (1-e^(-2*100/1024))^2 = 0.03147872136 false positives.
|
||||
const static int NumBits = 1024;
|
||||
|
||||
public:
|
||||
BloomFilter() : hashBits(NumBits) { }
|
||||
|
||||
void storeHash(uint hash) {
|
||||
hashBits.setBit((hash & 0xFFFF) % NumBits);
|
||||
hashBits.setBit((hash >> 16) % NumBits);
|
||||
}
|
||||
bool isHashMaybeStored(uint hash) const {
|
||||
return hashBits.testBit((hash & 0xFFFF) % NumBits)
|
||||
&& hashBits.testBit((hash >> 16) % NumBits);
|
||||
}
|
||||
|
||||
private:
|
||||
QBitArray hashBits;
|
||||
};
|
||||
|
||||
class SocketListener {
|
||||
public:
|
||||
QIODevice* socket;
|
||||
|
||||
SocketListener(QIODevice* socket = nullptr) : socket(socket) { }
|
||||
|
||||
void sendMessage(const QString& message, bool doWait = false) const
|
||||
{
|
||||
DEBUG << "Sending message: " << message;
|
||||
QString localMessage = message;
|
||||
if( ! localMessage.endsWith(QLatin1Char('\n'))) {
|
||||
localMessage.append(QLatin1Char('\n'));
|
||||
}
|
||||
|
||||
QByteArray bytesToSend = localMessage.toUtf8();
|
||||
qint64 sent = socket->write(bytesToSend);
|
||||
if( doWait ) {
|
||||
socket->waitForBytesWritten(1000);
|
||||
}
|
||||
if( sent != bytesToSend.length() ) {
|
||||
qDebug() << "WARN: Could not send all data on socket for " << localMessage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void sendMessageIfDirectoryMonitored(const QString& message, uint systemDirectoryHash) const
|
||||
{
|
||||
if (_monitoredDirectoriesBloomFilter.isHashMaybeStored(systemDirectoryHash))
|
||||
sendMessage(message, false);
|
||||
}
|
||||
|
||||
void registerMonitoredDirectory(uint systemDirectoryHash)
|
||||
{
|
||||
_monitoredDirectoriesBloomFilter.storeHash(systemDirectoryHash);
|
||||
}
|
||||
private:
|
||||
BloomFilter _monitoredDirectoriesBloomFilter;
|
||||
};
|
||||
|
||||
struct ListenerHasSocketPred {
|
||||
QIODevice *socket;
|
||||
ListenerHasSocketPred(QIODevice *socket) : socket(socket) { }
|
||||
bool operator()(const SocketListener &listener) const { return listener.socket == socket; }
|
||||
};
|
||||
#define DEBUG qDebug() << "SocketApi: "
|
||||
|
||||
SocketApi::SocketApi(QObject* parent)
|
||||
: QObject(parent)
|
||||
@@ -216,7 +129,7 @@ SocketApi::~SocketApi()
|
||||
DEBUG << "dtor";
|
||||
_localServer.close();
|
||||
// All remaining sockets will be destroyed with _localServer, their parent
|
||||
Q_ASSERT(_listeners.isEmpty() || _listeners.first().socket->parent() == &_localServer);
|
||||
Q_ASSERT(_listeners.isEmpty() || _listeners.first()->parent() == &_localServer);
|
||||
_listeners.clear();
|
||||
}
|
||||
|
||||
@@ -230,16 +143,14 @@ void SocketApi::slotNewConnection()
|
||||
DEBUG << "New connection" << socket;
|
||||
connect(socket, SIGNAL(readyRead()), this, SLOT(slotReadSocket()));
|
||||
connect(socket, SIGNAL(disconnected()), this, SLOT(onLostConnection()));
|
||||
connect(socket, SIGNAL(destroyed(QObject*)), this, SLOT(slotSocketDestroyed(QObject*)));
|
||||
Q_ASSERT(socket->readAll().isEmpty());
|
||||
|
||||
_listeners.append(SocketListener(socket));
|
||||
SocketListener &listener = _listeners.last();
|
||||
_listeners.append(socket);
|
||||
|
||||
foreach( Folder *f, FolderMan::instance()->map() ) {
|
||||
if (f->canSync()) {
|
||||
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
|
||||
listener.sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -247,33 +158,32 @@ void SocketApi::slotNewConnection()
|
||||
void SocketApi::onLostConnection()
|
||||
{
|
||||
DEBUG << "Lost connection " << sender();
|
||||
sender()->deleteLater();
|
||||
|
||||
QIODevice* socket = qobject_cast<QIODevice*>(sender());
|
||||
_listeners.removeAll(socket);
|
||||
socket->deleteLater();
|
||||
}
|
||||
|
||||
void SocketApi::slotSocketDestroyed(QObject* obj)
|
||||
{
|
||||
QIODevice* socket = static_cast<QIODevice*>(obj);
|
||||
_listeners.erase(std::remove_if(_listeners.begin(), _listeners.end(), ListenerHasSocketPred(socket)), _listeners.end());
|
||||
}
|
||||
|
||||
void SocketApi::slotReadSocket()
|
||||
{
|
||||
QIODevice* socket = qobject_cast<QIODevice*>(sender());
|
||||
Q_ASSERT(socket);
|
||||
SocketListener *listener = &*std::find_if(_listeners.begin(), _listeners.end(), ListenerHasSocketPred(socket));
|
||||
|
||||
while(socket->canReadLine()) {
|
||||
// Make sure to normalize the input from the socket to
|
||||
// make sure that the path will match, especially on OS X.
|
||||
QString line = QString::fromUtf8(socket->readLine()).normalized(QString::NormalizationForm_C);
|
||||
line.chop(1); // remove the '\n'
|
||||
QByteArray command = line.split(":").value(0).toAscii();
|
||||
QByteArray functionWithArguments = "command_" + command + "(QString,SocketListener*)";
|
||||
int indexOfMethod = staticMetaObject.indexOfMethod(functionWithArguments);
|
||||
QString command = line.split(":").value(0);
|
||||
QString function = QString(QLatin1String("command_")).append(command);
|
||||
|
||||
QString functionWithArguments = function + QLatin1String("(QString,QIODevice*)");
|
||||
int indexOfMethod = this->metaObject()->indexOfMethod(functionWithArguments.toAscii());
|
||||
|
||||
QString argument = line.remove(0, command.length()+1);
|
||||
if(indexOfMethod != -1) {
|
||||
staticMetaObject.method(indexOfMethod).invoke(this, Q_ARG(QString, argument), Q_ARG(SocketListener*, listener));
|
||||
QMetaObject::invokeMethod(this, function.toAscii(), Q_ARG(QString, argument), Q_ARG(QIODevice*, socket));
|
||||
} else {
|
||||
DEBUG << "The command is not supported by this version of the client:" << command << "with argument:" << argument;
|
||||
}
|
||||
@@ -289,8 +199,8 @@ void SocketApi::slotRegisterPath( const QString& alias )
|
||||
Folder *f = FolderMan::instance()->folder(alias);
|
||||
if (f) {
|
||||
QString message = buildRegisterPathMessage(removeTrailingSlash(f->path()));
|
||||
foreach (auto &listener, _listeners) {
|
||||
listener.sendMessage(message);
|
||||
foreach(QIODevice *socket, _listeners) {
|
||||
sendMessage(socket, message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -304,7 +214,7 @@ void SocketApi::slotUnregisterPath( const QString& alias )
|
||||
|
||||
Folder *f = FolderMan::instance()->folder(alias);
|
||||
if (f)
|
||||
broadcastMessage(buildMessage(QLatin1String("UNREGISTER_PATH"), removeTrailingSlash(f->path()), QString::null), true);
|
||||
broadcastMessage(QLatin1String("UNREGISTER_PATH"), removeTrailingSlash(f->path()), QString::null, true );
|
||||
|
||||
_registeredAliases.remove(alias);
|
||||
}
|
||||
@@ -325,42 +235,74 @@ void SocketApi::slotUpdateFolderView(Folder *f)
|
||||
f->syncResult().status() == SyncResult::SetupError ) {
|
||||
|
||||
QString rootPath = removeTrailingSlash(f->path());
|
||||
broadcastStatusPushMessage(rootPath, f->syncEngine().syncFileStatusTracker().fileStatus(""));
|
||||
broadcastMessage(QLatin1String("STATUS"), rootPath,
|
||||
f->syncEngine().syncFileStatusTracker().fileStatus("").toSocketAPIString());
|
||||
|
||||
broadcastMessage(buildMessage(QLatin1String("UPDATE_VIEW"), rootPath));
|
||||
broadcastMessage(QLatin1String("UPDATE_VIEW"), rootPath);
|
||||
} else {
|
||||
qDebug() << "Not sending UPDATE_VIEW for" << f->alias() << "because status() is" << f->syncResult().status();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SocketApi::broadcastMessage(const QString& msg, bool doWait)
|
||||
void SocketApi::slotFileStatusChanged(const QString& systemFileName, SyncFileStatus fileStatus)
|
||||
{
|
||||
foreach (auto &listener, _listeners) {
|
||||
listener.sendMessage(msg, doWait);
|
||||
broadcastMessage(QLatin1String("STATUS"), systemFileName, fileStatus.toSocketAPIString());
|
||||
}
|
||||
|
||||
void SocketApi::sendMessage(QIODevice *socket, const QString& message, bool doWait)
|
||||
{
|
||||
DEBUG << "Sending message: " << message;
|
||||
QString localMessage = message;
|
||||
if( ! localMessage.endsWith(QLatin1Char('\n'))) {
|
||||
localMessage.append(QLatin1Char('\n'));
|
||||
}
|
||||
|
||||
QByteArray bytesToSend = localMessage.toUtf8();
|
||||
qint64 sent = socket->write(bytesToSend);
|
||||
if( doWait ) {
|
||||
socket->waitForBytesWritten(1000);
|
||||
}
|
||||
if( sent != bytesToSend.length() ) {
|
||||
qDebug() << "WARN: Could not send all data on socket for " << localMessage;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void SocketApi::broadcastMessage( const QString& verb, const QString& path, const QString& status, bool doWait )
|
||||
{
|
||||
QString msg(verb);
|
||||
|
||||
if( !status.isEmpty() ) {
|
||||
msg.append(QLatin1Char(':'));
|
||||
msg.append(status);
|
||||
}
|
||||
if( !path.isEmpty() ) {
|
||||
msg.append(QLatin1Char(':'));
|
||||
QFileInfo fi(path);
|
||||
msg.append(QDir::toNativeSeparators(fi.absoluteFilePath()));
|
||||
}
|
||||
|
||||
foreach(QIODevice *socket, _listeners) {
|
||||
sendMessage(socket, msg, doWait);
|
||||
}
|
||||
}
|
||||
|
||||
void SocketApi::broadcastStatusPushMessage(const QString& systemPath, SyncFileStatus fileStatus)
|
||||
{
|
||||
QString msg = buildMessage(QLatin1String("STATUS"), systemPath, fileStatus.toSocketAPIString());
|
||||
Q_ASSERT(!systemPath.endsWith('/'));
|
||||
uint directoryHash = qHash(systemPath.left(systemPath.lastIndexOf('/')));
|
||||
foreach (auto &listener, _listeners) {
|
||||
listener.sendMessageIfDirectoryMonitored(msg, directoryHash);
|
||||
}
|
||||
}
|
||||
|
||||
void SocketApi::command_RETRIEVE_FOLDER_STATUS(const QString& argument, SocketListener* listener)
|
||||
void SocketApi::command_RETRIEVE_FOLDER_STATUS(const QString& argument, QIODevice* socket)
|
||||
{
|
||||
// This command is the same as RETRIEVE_FILE_STATUS
|
||||
|
||||
//qDebug() << Q_FUNC_INFO << argument;
|
||||
command_RETRIEVE_FILE_STATUS(argument, listener);
|
||||
command_RETRIEVE_FILE_STATUS(argument, socket);
|
||||
}
|
||||
|
||||
void SocketApi::command_RETRIEVE_FILE_STATUS(const QString& argument, SocketListener* listener)
|
||||
void SocketApi::command_RETRIEVE_FILE_STATUS(const QString& argument, QIODevice* socket)
|
||||
{
|
||||
if( !socket ) {
|
||||
qDebug() << "No valid socket object.";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << Q_FUNC_INFO << argument;
|
||||
|
||||
QString statusString;
|
||||
@@ -370,27 +312,27 @@ void SocketApi::command_RETRIEVE_FILE_STATUS(const QString& argument, SocketList
|
||||
// this can happen in offline mode e.g.: nothing to worry about
|
||||
statusString = QLatin1String("NOP");
|
||||
} else {
|
||||
QString systemPath = QDir::cleanPath(argument);
|
||||
if( systemPath.endsWith(QLatin1Char('/')) ) {
|
||||
systemPath.truncate(systemPath.length()-1);
|
||||
qWarning() << "Removed trailing slash for directory: " << systemPath << "Status pushes won't have one.";
|
||||
QString relativePath = QDir::cleanPath(argument).mid(syncFolder->cleanPath().length()+1);
|
||||
if( relativePath.endsWith(QLatin1Char('/')) ) {
|
||||
relativePath.truncate(relativePath.length()-1);
|
||||
qWarning() << "Removed trailing slash for directory: " << relativePath << "Status pushes won't have one.";
|
||||
}
|
||||
// The user probably visited this directory in the file shell.
|
||||
// Let the listener know that it should now send status pushes for sibblings of this file.
|
||||
QString directory = systemPath.left(systemPath.lastIndexOf('/'));
|
||||
listener->registerMonitoredDirectory(qHash(directory));
|
||||
|
||||
QString relativePath = systemPath.mid(syncFolder->cleanPath().length()+1);
|
||||
SyncFileStatus fileStatus = syncFolder->syncEngine().syncFileStatusTracker().fileStatus(relativePath);
|
||||
|
||||
statusString = fileStatus.toSocketAPIString();
|
||||
}
|
||||
|
||||
const QString message = QLatin1String("STATUS:") % statusString % QLatin1Char(':') % QDir::toNativeSeparators(argument);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
}
|
||||
|
||||
void SocketApi::command_SHARE(const QString& localFile, SocketListener* listener)
|
||||
void SocketApi::command_SHARE(const QString& localFile, QIODevice* socket)
|
||||
{
|
||||
if (!socket) {
|
||||
qDebug() << Q_FUNC_INFO << "No valid socket object.";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << Q_FUNC_INFO << localFile;
|
||||
|
||||
auto theme = Theme::instance();
|
||||
@@ -399,16 +341,16 @@ void SocketApi::command_SHARE(const QString& localFile, SocketListener* listener
|
||||
if (!shareFolder) {
|
||||
const QString message = QLatin1String("SHARE:NOP:")+QDir::toNativeSeparators(localFile);
|
||||
// files that are not within a sync folder are not synced.
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
} else if (!shareFolder->accountState()->isConnected()) {
|
||||
const QString message = QLatin1String("SHARE:NOTCONNECTED:")+QDir::toNativeSeparators(localFile);
|
||||
// if the folder isn't connected, don't open the share dialog
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
} else if (!theme->linkSharing() && (
|
||||
!theme->userGroupSharing() ||
|
||||
shareFolder->accountState()->account()->serverVersionInt() < ((8 << 16) + (2 << 8)))) {
|
||||
const QString message = QLatin1String("SHARE:NOP:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
} else {
|
||||
const QString localFileClean = QDir::cleanPath(localFile);
|
||||
const QString file = localFileClean.mid(shareFolder->cleanPath().length()+1);
|
||||
@@ -417,7 +359,7 @@ void SocketApi::command_SHARE(const QString& localFile, SocketListener* listener
|
||||
// Verify the file is on the server (to our knowledge of course)
|
||||
if (fileStatus.tag() != SyncFileStatus::StatusUpToDate) {
|
||||
const QString message = QLatin1String("SHARE:NOTSYNCED:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -426,7 +368,7 @@ void SocketApi::command_SHARE(const QString& localFile, SocketListener* listener
|
||||
// Can't share root folder
|
||||
if (remotePath == "/") {
|
||||
const QString message = QLatin1String("SHARE:CANNOTSHAREROOT:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -440,26 +382,31 @@ void SocketApi::command_SHARE(const QString& localFile, SocketListener* listener
|
||||
}
|
||||
}
|
||||
const QString message = QLatin1String("SHARE:OK:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
|
||||
emit shareCommandReceived(remotePath, localFileClean, allowReshare);
|
||||
}
|
||||
}
|
||||
|
||||
void SocketApi::command_VERSION(const QString&, SocketListener* listener)
|
||||
void SocketApi::command_VERSION(const QString&, QIODevice* socket)
|
||||
{
|
||||
listener->sendMessage(QLatin1String("VERSION:" MIRALL_VERSION_STRING ":" MIRALL_SOCKET_API_VERSION));
|
||||
sendMessage(socket, QLatin1String("VERSION:" MIRALL_VERSION_STRING ":" MIRALL_SOCKET_API_VERSION));
|
||||
}
|
||||
|
||||
void SocketApi::command_SHARE_STATUS(const QString &localFile, SocketListener* listener)
|
||||
void SocketApi::command_SHARE_STATUS(const QString &localFile, QIODevice *socket)
|
||||
{
|
||||
if (!socket) {
|
||||
qDebug() << Q_FUNC_INFO << "No valid socket object.";
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() << Q_FUNC_INFO << localFile;
|
||||
|
||||
Folder *shareFolder = FolderMan::instance()->folderForPath(localFile);
|
||||
|
||||
if (!shareFolder) {
|
||||
const QString message = QLatin1String("SHARE_STATUS:NOP:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
} else {
|
||||
const QString file = QDir::cleanPath(localFile).mid(shareFolder->cleanPath().length()+1);
|
||||
SyncFileStatus fileStatus = shareFolder->syncEngine().syncFileStatusTracker().fileStatus(file);
|
||||
@@ -467,7 +414,7 @@ void SocketApi::command_SHARE_STATUS(const QString &localFile, SocketListener* l
|
||||
// Verify the file is on the server (to our knowledge of course)
|
||||
if (fileStatus.tag() != SyncFileStatus::StatusUpToDate) {
|
||||
const QString message = QLatin1String("SHARE_STATUS:NOTSYNCED:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -475,7 +422,7 @@ void SocketApi::command_SHARE_STATUS(const QString &localFile, SocketListener* l
|
||||
|
||||
if (!capabilities.shareAPI()) {
|
||||
const QString message = QLatin1String("SHARE_STATUS:DISABLED:")+QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
} else {
|
||||
auto theme = Theme::instance();
|
||||
QString available;
|
||||
@@ -494,18 +441,18 @@ void SocketApi::command_SHARE_STATUS(const QString &localFile, SocketListener* l
|
||||
|
||||
if (available.isEmpty()) {
|
||||
const QString message = QLatin1String("SHARE_STATUS:DISABLED") + ":" + QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
} else {
|
||||
const QString message = QLatin1String("SHARE_STATUS:") + available + ":" + QDir::toNativeSeparators(localFile);
|
||||
listener->sendMessage(message);
|
||||
sendMessage(socket, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketListener* listener)
|
||||
void SocketApi::command_SHARE_MENU_TITLE(const QString &, QIODevice* socket)
|
||||
{
|
||||
listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI()));
|
||||
sendMessage(socket, QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI()));
|
||||
}
|
||||
|
||||
QString SocketApi::buildRegisterPathMessage(const QString& path)
|
||||
|
||||
+10
-11
@@ -35,7 +35,6 @@ namespace OCC {
|
||||
|
||||
class SyncFileStatus;
|
||||
class Folder;
|
||||
class SocketListener;
|
||||
|
||||
/**
|
||||
* @brief The SocketApi class
|
||||
@@ -61,25 +60,25 @@ signals:
|
||||
private slots:
|
||||
void slotNewConnection();
|
||||
void onLostConnection();
|
||||
void slotSocketDestroyed(QObject* obj);
|
||||
void slotReadSocket();
|
||||
void broadcastStatusPushMessage(const QString& systemPath, SyncFileStatus fileStatus);
|
||||
void slotFileStatusChanged(const QString& systemFileName, SyncFileStatus fileStatus);
|
||||
|
||||
private:
|
||||
void broadcastMessage(const QString& msg, bool doWait = false);
|
||||
void sendMessage(QIODevice* socket, const QString& message, bool doWait = false);
|
||||
void broadcastMessage(const QString& verb, const QString &path, const QString &status = QString::null, bool doWait = false);
|
||||
|
||||
Q_INVOKABLE void command_RETRIEVE_FOLDER_STATUS(const QString& argument, SocketListener* listener);
|
||||
Q_INVOKABLE void command_RETRIEVE_FILE_STATUS(const QString& argument, SocketListener* listener);
|
||||
Q_INVOKABLE void command_SHARE(const QString& localFile, SocketListener* listener);
|
||||
Q_INVOKABLE void command_RETRIEVE_FOLDER_STATUS(const QString& argument, QIODevice* socket);
|
||||
Q_INVOKABLE void command_RETRIEVE_FILE_STATUS(const QString& argument, QIODevice* socket);
|
||||
Q_INVOKABLE void command_SHARE(const QString& localFile, QIODevice* socket);
|
||||
|
||||
Q_INVOKABLE void command_VERSION(const QString& argument, SocketListener* listener);
|
||||
Q_INVOKABLE void command_VERSION(const QString& argument, QIODevice* socket);
|
||||
|
||||
Q_INVOKABLE void command_SHARE_STATUS(const QString& localFile, SocketListener* listener);
|
||||
Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString& argument, SocketListener* listener);
|
||||
Q_INVOKABLE void command_SHARE_STATUS(const QString& localFile, QIODevice *socket);
|
||||
Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString& argument, QIODevice* socket);
|
||||
QString buildRegisterPathMessage(const QString& path);
|
||||
|
||||
QSet<QString> _registeredAliases;
|
||||
QList<SocketListener> _listeners;
|
||||
QList<QIODevice*> _listeners;
|
||||
SocketApiServer _localServer;
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
#include "updater/ocupdater.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QtCore>
|
||||
#include <QtNetwork>
|
||||
#include <QtGui>
|
||||
@@ -44,8 +43,9 @@ UpdaterScheduler::UpdaterScheduler(QObject *parent) :
|
||||
connect( &_updateCheckTimer, SIGNAL(timeout()),
|
||||
this, SLOT(slotTimerFired()) );
|
||||
|
||||
// Note: the sparkle-updater is not an OCUpdater
|
||||
if (OCUpdater *updater = qobject_cast<OCUpdater*>(Updater::instance())) {
|
||||
// Note: the sparkle-updater is not an OCUpdater and thus the dynamic_cast
|
||||
// returns NULL. Clever detail.
|
||||
if (OCUpdater *updater = dynamic_cast<OCUpdater*>(Updater::instance())) {
|
||||
connect(updater, SIGNAL(newUpdateAvailable(QString,QString)),
|
||||
this, SIGNAL(updaterAnnouncement(QString,QString)) );
|
||||
connect(updater, SIGNAL(requestRestart()), SIGNAL(requestRestart()));
|
||||
@@ -76,17 +76,14 @@ void UpdaterScheduler::slotTimerFired()
|
||||
return;
|
||||
}
|
||||
|
||||
Updater *updater = Updater::instance();
|
||||
if (updater) {
|
||||
updater->backgroundCheckForUpdate();
|
||||
}
|
||||
Updater::instance()->backgroundCheckForUpdate();
|
||||
}
|
||||
|
||||
|
||||
/* ----------------------------------------------------------------- */
|
||||
|
||||
OCUpdater::OCUpdater(const QUrl &url) :
|
||||
Updater()
|
||||
OCUpdater::OCUpdater(const QUrl &url, QObject *parent) :
|
||||
QObject(parent)
|
||||
, _updateUrl(url)
|
||||
, _state(Unknown)
|
||||
, _accessManager(new AccessManager(this))
|
||||
@@ -245,8 +242,8 @@ void OCUpdater::slotTimedOut()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
NSISUpdater::NSISUpdater(const QUrl &url)
|
||||
: OCUpdater(url)
|
||||
NSISUpdater::NSISUpdater(const QUrl &url, QObject *parent)
|
||||
: OCUpdater(url, parent)
|
||||
, _showFallbackMessage(false)
|
||||
{
|
||||
}
|
||||
@@ -424,8 +421,8 @@ void NSISUpdater::slotSetSeenVersion()
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PassiveUpdateNotifier::PassiveUpdateNotifier(const QUrl &url)
|
||||
: OCUpdater(url)
|
||||
PassiveUpdateNotifier::PassiveUpdateNotifier(const QUrl &url, QObject *parent)
|
||||
: OCUpdater(url, parent)
|
||||
{
|
||||
// remember the version of the currently running binary. On Linux it might happen that the
|
||||
// package management updates the package while the app is running. This is detected in the
|
||||
|
||||
@@ -86,7 +86,7 @@ private:
|
||||
* @brief Class that uses an ownCloud proprietary XML format to fetch update information
|
||||
* @ingroup gui
|
||||
*/
|
||||
class OCUpdater : public Updater
|
||||
class OCUpdater : public QObject, public Updater
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
@@ -94,7 +94,7 @@ public:
|
||||
Downloading, DownloadComplete,
|
||||
DownloadFailed, DownloadTimedOut,
|
||||
UpdateOnlyAvailableThroughSystem };
|
||||
explicit OCUpdater(const QUrl &url);
|
||||
explicit OCUpdater(const QUrl &url, QObject *parent = 0);
|
||||
|
||||
bool performUpdate();
|
||||
|
||||
@@ -141,7 +141,7 @@ class NSISUpdater : public OCUpdater {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum UpdateState { NoUpdate = 0, UpdateAvailable, UpdateFailed };
|
||||
explicit NSISUpdater(const QUrl &url);
|
||||
explicit NSISUpdater(const QUrl &url, QObject *parent = 0);
|
||||
bool handleStartup() Q_DECL_OVERRIDE;
|
||||
private slots:
|
||||
void slotSetSeenVersion();
|
||||
@@ -167,7 +167,7 @@ private:
|
||||
class PassiveUpdateNotifier : public OCUpdater {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PassiveUpdateNotifier(const QUrl &url);
|
||||
explicit PassiveUpdateNotifier(const QUrl &url, QObject *parent = 0);
|
||||
bool handleStartup() Q_DECL_OVERRIDE { return false; }
|
||||
void backgroundCheckForUpdate() Q_DECL_OVERRIDE;
|
||||
|
||||
|
||||
@@ -87,10 +87,6 @@ Updater *Updater::create()
|
||||
if (updateBaseUrl.isEmpty()) {
|
||||
updateBaseUrl = QUrl(QLatin1String(APPLICATION_UPDATE_URL));
|
||||
}
|
||||
if (!updateBaseUrl.isValid() || updateBaseUrl.host() == ".") {
|
||||
qDebug() << "Not a valid updater URL, will not do update check";
|
||||
return 0;
|
||||
}
|
||||
updateBaseUrl = addQueryParams(updateBaseUrl);
|
||||
#if defined(Q_OS_MAC) && defined(HAVE_SPARKLE)
|
||||
updateBaseUrl.addQueryItem( QLatin1String("sparkle"), QLatin1String("true"));
|
||||
|
||||
@@ -21,8 +21,7 @@ class QUrl;
|
||||
|
||||
namespace OCC {
|
||||
|
||||
class Updater : public QObject {
|
||||
Q_OBJECT
|
||||
class Updater {
|
||||
public:
|
||||
struct Helper {
|
||||
static qint64 stringVersionToInt(const QString& version);
|
||||
@@ -38,7 +37,6 @@ public:
|
||||
|
||||
protected:
|
||||
static QString clientVersion();
|
||||
Updater() : QObject(0) {}
|
||||
|
||||
private:
|
||||
static QString getSystemInfo();
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
project(libsync)
|
||||
set(CMAKE_AUTOMOC TRUE)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
||||
|
||||
configure_file( version.h.in "${CMAKE_CURRENT_BINARY_DIR}/version.h" )
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
|
||||
@@ -57,7 +55,6 @@ set(libsync_SRCS
|
||||
propagateremotedelete.cpp
|
||||
propagateremotemove.cpp
|
||||
propagateremotemkdir.cpp
|
||||
propagatefiles.cpp
|
||||
syncengine.cpp
|
||||
syncfilestatus.cpp
|
||||
syncfilestatustracker.cpp
|
||||
|
||||
@@ -116,27 +116,9 @@ bool Capabilities::chunkingNg() const
|
||||
return _capabilities["dav"].toMap()["chunking"].toByteArray() >= "1.0";
|
||||
}
|
||||
|
||||
bool Capabilities::scheduling() const
|
||||
{
|
||||
static const auto scheduling = qgetenv("OWNCLOUD_SCHEDULING");
|
||||
if (scheduling == "0") return false;
|
||||
if (scheduling == "1") return true;
|
||||
|
||||
return _capabilities["dav"].toMap()["scheduling"].toByteArray() >= "1.0";
|
||||
}
|
||||
|
||||
bool Capabilities::chunkingParallelUploadDisabled() const
|
||||
{
|
||||
return _capabilities["dav"].toMap()["chunkingParallelUploadDisabled"].toBool();
|
||||
}
|
||||
|
||||
QList<int> Capabilities::httpErrorCodesThatResetFailingChunkedUploads() const
|
||||
{
|
||||
QList<int> list;
|
||||
foreach (const auto & t, _capabilities["dav"].toMap()["httpErrorCodesThatResetFailingChunkedUploads"].toList()) {
|
||||
list.push_back(t.toInt());
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -41,7 +41,6 @@ public:
|
||||
int sharePublicLinkExpireDateDays() const;
|
||||
bool shareResharing() const;
|
||||
bool chunkingNg() const;
|
||||
bool scheduling() const;
|
||||
|
||||
/// disable parallel upload in chunking
|
||||
bool chunkingParallelUploadDisabled() const;
|
||||
@@ -82,25 +81,6 @@ public:
|
||||
*/
|
||||
QByteArray uploadChecksumType() const;
|
||||
|
||||
/**
|
||||
* List of HTTP error codes should be guaranteed to eventually reset
|
||||
* failing chunked uploads.
|
||||
*
|
||||
* The resetting works by tracking UploadInfo::errorCount.
|
||||
*
|
||||
* Note that other error codes than the ones listed here may reset the
|
||||
* upload as well.
|
||||
*
|
||||
* Motivation: See #5344. They should always be reset on 412 (possibly
|
||||
* checksum error), but broken servers may also require resets on
|
||||
* unusual error codes such as 503.
|
||||
*
|
||||
* Path: dav/httpErrorCodesThatResetFailingChunkedUploads
|
||||
* Default: []
|
||||
* Example: [503, 500]
|
||||
*/
|
||||
QList<int> httpErrorCodesThatResetFailingChunkedUploads() const;
|
||||
|
||||
private:
|
||||
QVariantMap _capabilities;
|
||||
};
|
||||
|
||||
@@ -52,7 +52,6 @@ static const char updateCheckIntervalC[] = "updateCheckInterval";
|
||||
static const char geometryC[] = "geometry";
|
||||
static const char timeoutC[] = "timeout";
|
||||
static const char chunkSizeC[] = "chunkSize";
|
||||
static const char smallFileSizeC[] = "smallFileSize";
|
||||
|
||||
static const char proxyHostC[] = "Proxy/host";
|
||||
static const char proxyTypeC[] = "Proxy/type";
|
||||
@@ -129,12 +128,6 @@ quint64 ConfigFile::chunkSize() const
|
||||
return settings.value(QLatin1String(chunkSizeC), 10*1000*1000).toLongLong(); // default to 10 MB
|
||||
}
|
||||
|
||||
quint64 ConfigFile::smallFileSize() const
|
||||
{
|
||||
QSettings settings(configFile(), QSettings::IniFormat);
|
||||
return settings.value(QLatin1String(smallFileSizeC), 500*1000).toLongLong(); // default to 500 kB
|
||||
}
|
||||
|
||||
void ConfigFile::setOptionalDesktopNotifications(bool show)
|
||||
{
|
||||
QSettings settings(configFile(), QSettings::IniFormat);
|
||||
|
||||
@@ -113,7 +113,6 @@ public:
|
||||
|
||||
int timeout() const;
|
||||
quint64 chunkSize() const;
|
||||
quint64 smallFileSize() const;
|
||||
|
||||
void saveGeometry(QWidget *w);
|
||||
void restoreGeometry(QWidget *w);
|
||||
|
||||
@@ -74,17 +74,7 @@ OwncloudPropagator::~OwncloudPropagator()
|
||||
/* The maximum number of active jobs in parallel */
|
||||
int OwncloudPropagator::maximumActiveJob()
|
||||
{
|
||||
static int max = qgetenv("OWNCLOUD_MAX_PARALLEL").toUInt();
|
||||
if (!max) {
|
||||
max = 3; //default
|
||||
}
|
||||
|
||||
if (_downloadLimit.fetchAndAddAcquire(0) != 0 || _uploadLimit.fetchAndAddAcquire(0) != 0) {
|
||||
// disable parallelism when there is a network limit.
|
||||
return 1;
|
||||
}
|
||||
|
||||
return max;
|
||||
return 50;
|
||||
}
|
||||
|
||||
int OwncloudPropagator::hardMaximumActiveJob()
|
||||
@@ -99,7 +89,7 @@ int OwncloudPropagator::hardMaximumActiveJob()
|
||||
|
||||
/** Updates, creates or removes a blacklist entry for the given item.
|
||||
*
|
||||
* Returns whether the error should be suppressed.
|
||||
* Returns whether the file is in the blacklist now.
|
||||
*/
|
||||
static bool blacklistCheck(SyncJournalDb* journal, const SyncFileItem& item)
|
||||
{
|
||||
@@ -108,13 +98,16 @@ static bool blacklistCheck(SyncJournalDb* journal, const SyncFileItem& item)
|
||||
|
||||
if (newEntry.isValid()) {
|
||||
journal->updateErrorBlacklistEntry(newEntry);
|
||||
// Also clear upload info if any so we don't resume from the same transfer-id if there was too many failures (#5344)
|
||||
// (maybe the reason is that the state for this transfer id is broken on the server.)
|
||||
if (newEntry._retryCount > 3) {
|
||||
journal->setUploadInfo(item._file, SyncJournalDb::UploadInfo());
|
||||
}
|
||||
} else if (oldEntry.isValid()) {
|
||||
journal->wipeErrorBlacklistEntry(item._file);
|
||||
}
|
||||
|
||||
// In some cases we add errors to the blacklist for tracking, but don't
|
||||
// want to actively suppress them.
|
||||
return newEntry.isValid() && newEntry._ignoreDuration > 0;
|
||||
return newEntry.isValid();
|
||||
}
|
||||
|
||||
void PropagateItemJob::done(SyncFileItem::Status status, const QString &errorString)
|
||||
@@ -132,7 +125,7 @@ void PropagateItemJob::done(SyncFileItem::Status status, const QString &errorStr
|
||||
}
|
||||
}
|
||||
|
||||
if( propagator()->_abortRequested.fetchAndAddRelaxed(0) &&
|
||||
if( _propagator->_abortRequested.fetchAndAddRelaxed(0) &&
|
||||
(status == SyncFileItem::NormalError || status == SyncFileItem::FatalError)) {
|
||||
// an abort request is ongoing. Change the status to Soft-Error
|
||||
status = SyncFileItem::SoftError;
|
||||
@@ -141,12 +134,10 @@ void PropagateItemJob::done(SyncFileItem::Status status, const QString &errorStr
|
||||
switch( status ) {
|
||||
case SyncFileItem::SoftError:
|
||||
case SyncFileItem::FatalError:
|
||||
// do not blacklist in case of soft error or fatal error.
|
||||
break;
|
||||
case SyncFileItem::NormalError:
|
||||
// For normal errors, we blacklist aggressively, otherwise only on
|
||||
// explicit request.
|
||||
if ((status == SyncFileItem::NormalError || _item->_errorMayBeBlacklisted)
|
||||
&& blacklistCheck(propagator()->_journal, *_item)
|
||||
&& _item->_hasBlacklistEntry) {
|
||||
if (blacklistCheck(_propagator->_journal, *_item) && _item->_hasBlacklistEntry) {
|
||||
// do not error if the item was, and continues to be, blacklisted
|
||||
status = SyncFileItem::FileIgnored;
|
||||
_item->_errorString.prepend(tr("Continue blacklisting:") + " ");
|
||||
@@ -156,10 +147,10 @@ void PropagateItemJob::done(SyncFileItem::Status status, const QString &errorStr
|
||||
case SyncFileItem::Restoration:
|
||||
if( _item->_hasBlacklistEntry ) {
|
||||
// wipe blacklist entry.
|
||||
propagator()->_journal->wipeErrorBlacklistEntry(_item->_file);
|
||||
_propagator->_journal->wipeErrorBlacklistEntry(_item->_file);
|
||||
// remove a blacklist entry in case the file was moved.
|
||||
if( _item->_originalFile != _item->_file ) {
|
||||
propagator()->_journal->wipeErrorBlacklistEntry(_item->_originalFile);
|
||||
_propagator->_journal->wipeErrorBlacklistEntry(_item->_originalFile);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -186,7 +177,7 @@ bool PropagateItemJob::checkForProblemsWithShared(int httpStatusCode, const QStr
|
||||
{
|
||||
PropagateItemJob *newJob = NULL;
|
||||
|
||||
if( httpStatusCode == 403 && propagator()->isInSharedDirectory(_item->_file )) {
|
||||
if( httpStatusCode == 403 && _propagator->isInSharedDirectory(_item->_file )) {
|
||||
if( !_item->_isDirectory ) {
|
||||
SyncFileItemPtr downloadItem(new SyncFileItem(*_item));
|
||||
if (downloadItem->_instruction == CSYNC_INSTRUCTION_NEW
|
||||
@@ -205,18 +196,18 @@ bool PropagateItemJob::checkForProblemsWithShared(int httpStatusCode, const QStr
|
||||
downloadItem->_instruction = CSYNC_INSTRUCTION_SYNC;
|
||||
}
|
||||
downloadItem->_direction = SyncFileItem::Down;
|
||||
newJob = new PropagateDownloadFile(propagator(), downloadItem);
|
||||
newJob = new PropagateDownloadFile(_propagator, downloadItem);
|
||||
} else {
|
||||
// Directories are harder to recover.
|
||||
// But just re-create the directory, next sync will be able to recover the files
|
||||
SyncFileItemPtr mkdirItem(new SyncFileItem(*_item));
|
||||
mkdirItem->_instruction = CSYNC_INSTRUCTION_NEW;
|
||||
mkdirItem->_direction = SyncFileItem::Down;
|
||||
newJob = new PropagateLocalMkdir(propagator(), mkdirItem);
|
||||
newJob = new PropagateLocalMkdir(_propagator, mkdirItem);
|
||||
// Also remove the inodes and fileid from the db so no further renames are tried for
|
||||
// this item.
|
||||
propagator()->_journal->avoidRenamesOnNextSync(_item->_file);
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_journal->avoidRenamesOnNextSync(_item->_file);
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
if( newJob ) {
|
||||
newJob->setRestoreJobMsg(msg);
|
||||
@@ -312,13 +303,6 @@ void OwncloudPropagator::start(const SyncFileItemVector& items)
|
||||
directories.push(qMakePair(QString(), _rootJob.data()));
|
||||
QVector<PropagatorJob*> directoriesToRemove;
|
||||
QString removedDirectory;
|
||||
|
||||
// This needs to be changed before marging - capability to switch on/off scheduling, since
|
||||
// server needs to decide if to do that - scheduling will also bring more features in the future
|
||||
// TODO: change it before marging to -> bool enableScheduledRequests = account()->capabilities().scheduling();
|
||||
bool enableScheduledRequests = true;
|
||||
|
||||
PropagateFiles* filesJob = new PropagateFiles(this);
|
||||
foreach(const SyncFileItemPtr &item, items) {
|
||||
|
||||
if (!removedDirectory.isEmpty() && item->_file.startsWith(removedDirectory)) {
|
||||
@@ -395,9 +379,6 @@ void OwncloudPropagator::start(const SyncFileItemVector& items)
|
||||
currentDirJob->append(dir);
|
||||
}
|
||||
directories.push(qMakePair(item->destination() + "/" , dir));
|
||||
} else if (enableScheduledRequests
|
||||
&& (item->_instruction == CSYNC_INSTRUCTION_NEW || item->_instruction == CSYNC_INSTRUCTION_SYNC)) {
|
||||
filesJob->append(item);
|
||||
} else if (PropagateItemJob* current = createJob(item)) {
|
||||
if (item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE) {
|
||||
// will delete directories, so defer execution
|
||||
@@ -409,18 +390,10 @@ void OwncloudPropagator::start(const SyncFileItemVector& items)
|
||||
}
|
||||
}
|
||||
|
||||
if (enableScheduledRequests && !filesJob->isEmpty()){
|
||||
// This job has parallelism WaitForFinished to allow directoriesToRemove be last
|
||||
_rootJob->append(filesJob);
|
||||
} else {
|
||||
delete filesJob;
|
||||
}
|
||||
|
||||
foreach(PropagatorJob* it, directoriesToRemove) {
|
||||
_rootJob->append(it);
|
||||
}
|
||||
|
||||
|
||||
connect(_rootJob.data(), SIGNAL(itemCompleted(const SyncFileItem &, const PropagatorJob &)),
|
||||
this, SIGNAL(itemCompleted(const SyncFileItem &, const PropagatorJob &)));
|
||||
connect(_rootJob.data(), SIGNAL(progress(const SyncFileItem &,quint64)), this, SIGNAL(progress(const SyncFileItem &,quint64)));
|
||||
@@ -476,20 +449,6 @@ quint64 OwncloudPropagator::chunkSize()
|
||||
return chunkSize;
|
||||
}
|
||||
|
||||
quint64 OwncloudPropagator::smallFileSize()
|
||||
{
|
||||
// A small filesize item is a file whose transfer time
|
||||
// typically will be lower than its bookkeeping time.
|
||||
static uint smallFileSize;
|
||||
if (!smallFileSize) {
|
||||
smallFileSize = qgetenv("OWNCLOUD_SMALLFILE_SIZE").toUInt();
|
||||
if (smallFileSize == 0) {
|
||||
ConfigFile cfg;
|
||||
smallFileSize = cfg.smallFileSize();
|
||||
}
|
||||
}
|
||||
return smallFileSize;
|
||||
}
|
||||
|
||||
bool OwncloudPropagator::localFileNameClash( const QString& relFile )
|
||||
{
|
||||
@@ -605,18 +564,6 @@ OwncloudPropagator::DiskSpaceResult OwncloudPropagator::diskSpaceCheck() const
|
||||
|
||||
// ================================================================================
|
||||
|
||||
PropagatorJob::PropagatorJob(OwncloudPropagator *propagator)
|
||||
: QObject(propagator)
|
||||
, _state(NotYetStarted)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
OwncloudPropagator *PropagatorJob::propagator() const
|
||||
{
|
||||
return qobject_cast<OwncloudPropagator*>(parent());
|
||||
}
|
||||
|
||||
PropagatorJob::JobParallelism PropagateDirectory::parallelism()
|
||||
{
|
||||
// If any of the non-finished sub jobs is not parallel, we have to wait
|
||||
@@ -732,7 +679,7 @@ void PropagateDirectory::finalize()
|
||||
if(_item->_instruction == CSYNC_INSTRUCTION_RENAME
|
||||
&& _item->_originalFile != _item->_renameTarget) {
|
||||
// Remove the stale entries from the database.
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile, true);
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile, true);
|
||||
}
|
||||
|
||||
_item->_file = _item->_renameTarget;
|
||||
@@ -750,8 +697,8 @@ void PropagateDirectory::finalize()
|
||||
_item->_fileId = mkdir->_item->_fileId;
|
||||
}
|
||||
}
|
||||
SyncJournalFileRecord record(*_item, propagator()->_localDir + _item->_file);
|
||||
ok = propagator()->_journal->setFileRecordMetadata(record);
|
||||
SyncJournalFileRecord record(*_item, _propagator->_localDir + _item->_file);
|
||||
ok = _propagator->_journal->setFileRecordMetadata(record);
|
||||
if (!ok) {
|
||||
_hasError = _item->_status = SyncFileItem::FatalError;
|
||||
_item->_errorString = tr("Error writing metadata to the database");
|
||||
|
||||
@@ -56,9 +56,11 @@ class OwncloudPropagator;
|
||||
*/
|
||||
class PropagatorJob : public QObject {
|
||||
Q_OBJECT
|
||||
protected:
|
||||
OwncloudPropagator *_propagator;
|
||||
|
||||
public:
|
||||
explicit PropagatorJob(OwncloudPropagator* propagator);
|
||||
explicit PropagatorJob(OwncloudPropagator* propagator) : _propagator(propagator), _state(NotYetStarted) {}
|
||||
|
||||
enum JobState {
|
||||
NotYetStarted,
|
||||
@@ -124,8 +126,6 @@ signals:
|
||||
|
||||
void progress(const SyncFileItem& item, quint64 bytes);
|
||||
|
||||
protected:
|
||||
OwncloudPropagator *propagator() const;
|
||||
};
|
||||
|
||||
|
||||
@@ -262,6 +262,7 @@ public:
|
||||
class OwncloudPropagator : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
PropagateItemJob *createJob(const SyncFileItemPtr& item);
|
||||
QScopedPointer<PropagateDirectory> _rootJob;
|
||||
|
||||
public:
|
||||
@@ -326,7 +327,6 @@ public:
|
||||
|
||||
/** returns the size of chunks in bytes */
|
||||
static quint64 chunkSize();
|
||||
static quint64 smallFileSize();
|
||||
|
||||
AccountPtr account() const;
|
||||
|
||||
@@ -342,11 +342,7 @@ public:
|
||||
*/
|
||||
DiskSpaceResult diskSpaceCheck() const;
|
||||
|
||||
PropagateItemJob *createJob(const SyncFileItemPtr& item);
|
||||
|
||||
int runningAtRootJob(){
|
||||
return _rootJob.data()->_runningNow;
|
||||
}
|
||||
|
||||
private slots:
|
||||
|
||||
@@ -419,106 +415,6 @@ private slots:
|
||||
void slotPollFinished();
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief The PropagateFiles class is a container class.
|
||||
*
|
||||
* It will also ensure proper bandwidth utilization vs bookkeeping balance
|
||||
*
|
||||
* @ingroup libsync
|
||||
*
|
||||
* State Machine:
|
||||
*
|
||||
* _________________________________________________ ___________________________________________
|
||||
* | | |
|
||||
* | (Empty DB items queue and populated Data items queue?) |
|
||||
* | | | |
|
||||
* | Yes | | No |
|
||||
* | | | |
|
||||
* |<-----------[Schedule Data job] (Empty Data items queue and populated DB items queue?) |
|
||||
* | | | |
|
||||
* | No | | Yes |
|
||||
* | | | |
|
||||
* | | [Schedule DB job]--------------->|
|
||||
* | | |
|
||||
* | | |
|
||||
* | (Populated Data items queue and populated DB items queue?) |
|
||||
* | | | |
|
||||
* | Yes | | No |
|
||||
* | | | |
|
||||
* | (Active running Data items number exceeded limit?) [Finish - no items] |
|
||||
* | | | |
|
||||
* | No | | Yes |
|
||||
* | | | |
|
||||
* <---[Schedule Data job] [Schedule DB job]------------------------------------------>
|
||||
*
|
||||
*
|
||||
*/
|
||||
class PropagateFiles : public PropagatorJob {
|
||||
Q_OBJECT
|
||||
public:
|
||||
QVector<PropagatorJob *> _subJobs;
|
||||
|
||||
QVector<SyncFileItemPtr> _syncDBItems; // Items which bookkeeping on the server is longer then the transfer of its payload
|
||||
|
||||
QVector<SyncFileItemPtr> _syncDataItems; // Items which transfer of the payload is longer then bookkeeping on the server
|
||||
|
||||
int _jobsFinished; // number of jobs that have completed
|
||||
SyncFileItem::Status _hasError; // NoStatus, or NormalError / SoftError if there was an error
|
||||
int _firstUnfinishedSubJob;
|
||||
int _totalItems;
|
||||
int _activeDBJobsNow;
|
||||
int _activeDataJobsNow;
|
||||
|
||||
explicit PropagateFiles(OwncloudPropagator *propagator)
|
||||
: PropagatorJob(propagator)
|
||||
, _jobsFinished(0), _hasError(SyncFileItem::NoStatus), _firstUnfinishedSubJob(0), _totalItems(0), _activeDBJobsNow(0), _activeDataJobsNow(0) { }
|
||||
|
||||
virtual ~PropagateFiles() {
|
||||
qDeleteAll(_subJobs);
|
||||
}
|
||||
|
||||
bool isEmpty() {
|
||||
return _syncDBItems.isEmpty() && _syncDataItems.isEmpty();
|
||||
}
|
||||
|
||||
void append(const SyncFileItemPtr &item);
|
||||
virtual bool scheduleNextJob() Q_DECL_OVERRIDE;
|
||||
bool scheduleNewJob(QVector<SyncFileItemPtr> &syncJobs);
|
||||
bool scheduleNextItem();
|
||||
|
||||
virtual void abort() Q_DECL_OVERRIDE {
|
||||
foreach (PropagatorJob *n, _subJobs)
|
||||
n->abort();
|
||||
}
|
||||
|
||||
void finalize();
|
||||
|
||||
qint64 committedDiskSpace() const Q_DECL_OVERRIDE;
|
||||
|
||||
JobParallelism parallelism() Q_DECL_OVERRIDE { return OCC::PropagatorJob::WaitForFinished; }
|
||||
|
||||
private slots:
|
||||
bool possiblyRunNextJob(PropagatorJob *next) {
|
||||
if (next->_state == NotYetStarted) {
|
||||
connect(next, SIGNAL(finished(SyncFileItem::Status)), this, SLOT(slotSubJobFinished(SyncFileItem::Status)), Qt::QueuedConnection);
|
||||
connect(next, SIGNAL(itemCompleted(const SyncFileItem &, const PropagatorJob &)),
|
||||
this, SIGNAL(itemCompleted(const SyncFileItem &, const PropagatorJob &)));
|
||||
connect(next, SIGNAL(progress(const SyncFileItem &,quint64)), this, SIGNAL(progress(const SyncFileItem &,quint64)));
|
||||
connect(next, SIGNAL(ready()), this, SIGNAL(ready()));
|
||||
|
||||
PropagateItemJob *job = qobject_cast<PropagateItemJob *>(next);
|
||||
if(job->_item->_size <= propagator()->smallFileSize()){
|
||||
_activeDBJobsNow++;
|
||||
} else {
|
||||
_activeDataJobsNow++;
|
||||
}
|
||||
}
|
||||
return next->scheduleNextJob();
|
||||
}
|
||||
|
||||
void slotSubJobFinished(SyncFileItem::Status status);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -310,10 +310,10 @@ QString GETFileJob::errorString() const
|
||||
|
||||
void PropagateDownloadFile::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
qDebug() << Q_FUNC_INFO << _item->_file << propagator()->_activeJobList.count();
|
||||
qDebug() << Q_FUNC_INFO << _item->_file << _propagator->_activeJobList.count();
|
||||
_stopwatch.start();
|
||||
|
||||
if (_deleteExisting) {
|
||||
@@ -326,7 +326,7 @@ void PropagateDownloadFile::start()
|
||||
}
|
||||
|
||||
// do a klaas' case clash check.
|
||||
if( propagator()->localFileNameClash(_item->_file) ) {
|
||||
if( _propagator->localFileNameClash(_item->_file) ) {
|
||||
done( SyncFileItem::NormalError, tr("File %1 can not be downloaded because of a local file name clash!")
|
||||
.arg(QDir::toNativeSeparators(_item->_file)) );
|
||||
return;
|
||||
@@ -336,12 +336,12 @@ void PropagateDownloadFile::start()
|
||||
|
||||
QString tmpFileName;
|
||||
QByteArray expectedEtagForResume;
|
||||
const SyncJournalDb::DownloadInfo progressInfo = propagator()->_journal->getDownloadInfo(_item->_file);
|
||||
const SyncJournalDb::DownloadInfo progressInfo = _propagator->_journal->getDownloadInfo(_item->_file);
|
||||
if (progressInfo._valid) {
|
||||
// if the etag has changed meanwhile, remove the already downloaded part.
|
||||
if (progressInfo._etag != _item->_etag) {
|
||||
FileSystem::remove(propagator()->getFilePath(progressInfo._tmpfile));
|
||||
propagator()->_journal->setDownloadInfo(_item->_file, SyncJournalDb::DownloadInfo());
|
||||
FileSystem::remove(_propagator->getFilePath(progressInfo._tmpfile));
|
||||
_propagator->_journal->setDownloadInfo(_item->_file, SyncJournalDb::DownloadInfo());
|
||||
} else {
|
||||
tmpFileName = progressInfo._tmpfile;
|
||||
expectedEtagForResume = progressInfo._etag;
|
||||
@@ -353,7 +353,7 @@ void PropagateDownloadFile::start()
|
||||
tmpFileName = createDownloadTmpFileName(_item->_file);
|
||||
}
|
||||
|
||||
_tmpFile.setFileName(propagator()->getFilePath(tmpFileName));
|
||||
_tmpFile.setFileName(_propagator->getFilePath(tmpFileName));
|
||||
if (!_tmpFile.open(QIODevice::Append | QIODevice::Unbuffered)) {
|
||||
done(SyncFileItem::NormalError, _tmpFile.errorString());
|
||||
return;
|
||||
@@ -372,7 +372,7 @@ void PropagateDownloadFile::start()
|
||||
}
|
||||
|
||||
// If there's not enough space to fully download this file, stop.
|
||||
const auto diskSpaceResult = propagator()->diskSpaceCheck();
|
||||
const auto diskSpaceResult = _propagator->diskSpaceCheck();
|
||||
if (diskSpaceResult == OwncloudPropagator::DiskSpaceFailure) {
|
||||
_item->_errorMayBeBlacklisted = true;
|
||||
done(SyncFileItem::NormalError,
|
||||
@@ -391,16 +391,16 @@ void PropagateDownloadFile::start()
|
||||
pi._etag = _item->_etag;
|
||||
pi._tmpfile = tmpFileName;
|
||||
pi._valid = true;
|
||||
propagator()->_journal->setDownloadInfo(_item->_file, pi);
|
||||
propagator()->_journal->commit("download file start");
|
||||
_propagator->_journal->setDownloadInfo(_item->_file, pi);
|
||||
_propagator->_journal->commit("download file start");
|
||||
}
|
||||
|
||||
QMap<QByteArray, QByteArray> headers;
|
||||
|
||||
if (_item->_directDownloadUrl.isEmpty()) {
|
||||
// Normal job, download from oC instance
|
||||
_job = new GETFileJob(propagator()->account(),
|
||||
propagator()->_remoteFolder + _item->_file,
|
||||
_job = new GETFileJob(_propagator->account(),
|
||||
_propagator->_remoteFolder + _item->_file,
|
||||
&_tmpFile, headers, expectedEtagForResume, _resumeStart, this);
|
||||
} else {
|
||||
// We were provided a direct URL, use that one
|
||||
@@ -411,14 +411,14 @@ void PropagateDownloadFile::start()
|
||||
}
|
||||
|
||||
QUrl url = QUrl::fromUserInput(_item->_directDownloadUrl);
|
||||
_job = new GETFileJob(propagator()->account(),
|
||||
_job = new GETFileJob(_propagator->account(),
|
||||
url,
|
||||
&_tmpFile, headers, expectedEtagForResume, _resumeStart, this);
|
||||
}
|
||||
_job->setBandwidthManager(&propagator()->_bandwidthManager);
|
||||
_job->setBandwidthManager(&_propagator->_bandwidthManager);
|
||||
connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotGetFinished()));
|
||||
connect(_job, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(slotDownloadProgress(qint64,qint64)));
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
_job->start();
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@ void PropagateDownloadFile::setDeleteExistingFolder(bool enabled)
|
||||
const char owncloudCustomSoftErrorStringC[] = "owncloud-custom-soft-error-string";
|
||||
void PropagateDownloadFile::slotGetFinished()
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
GETFileJob *job = qobject_cast<GETFileJob *>(sender());
|
||||
Q_ASSERT(job);
|
||||
@@ -459,7 +459,7 @@ void PropagateDownloadFile::slotGetFinished()
|
||||
const bool badRangeHeader = job->resumeStart() > 0 && _item->_httpErrorCode == 416;
|
||||
if (badRangeHeader) {
|
||||
qDebug() << Q_FUNC_INFO << "server replied 416 to our range request, trying again without";
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
|
||||
// Getting a 404 probably means that the file was deleted on the server.
|
||||
@@ -473,7 +473,7 @@ void PropagateDownloadFile::slotGetFinished()
|
||||
if (_tmpFile.size() == 0 || badRangeHeader || fileNotFound) {
|
||||
_tmpFile.close();
|
||||
FileSystem::remove(_tmpFile.fileName());
|
||||
propagator()->_journal->setDownloadInfo(_item->_file, SyncJournalDb::DownloadInfo());
|
||||
_propagator->_journal->setDownloadInfo(_item->_file, SyncJournalDb::DownloadInfo());
|
||||
}
|
||||
|
||||
if(!_item->_directDownloadUrl.isEmpty() && err != QNetworkReply::OperationCanceledError) {
|
||||
@@ -503,7 +503,7 @@ void PropagateDownloadFile::slotGetFinished()
|
||||
SyncFileItem::Status status = job->errorStatus();
|
||||
if (status == SyncFileItem::NoStatus) {
|
||||
status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
}
|
||||
|
||||
done(status, job->errorString());
|
||||
@@ -544,7 +544,7 @@ void PropagateDownloadFile::slotGetFinished()
|
||||
|
||||
if(bodySize > 0 && bodySize != _tmpFile.size() - job->resumeStart() ) {
|
||||
qDebug() << bodySize << _tmpFile.size() << job->resumeStart();
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
done(SyncFileItem::SoftError, tr("The file could not be downloaded completely."));
|
||||
return;
|
||||
}
|
||||
@@ -572,13 +572,13 @@ void PropagateDownloadFile::slotGetFinished()
|
||||
void PropagateDownloadFile::slotChecksumFail( const QString& errMsg )
|
||||
{
|
||||
FileSystem::remove(_tmpFile.fileName());
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
done(SyncFileItem::SoftError, errMsg ); // tr("The file downloaded with a broken checksum, will be redownloaded."));
|
||||
}
|
||||
|
||||
void PropagateDownloadFile::deleteExistingFolder()
|
||||
{
|
||||
QString existingDir = propagator()->getFilePath(_item->_file);
|
||||
QString existingDir = _propagator->getFilePath(_item->_file);
|
||||
if (!QFileInfo(existingDir).isDir()) {
|
||||
return;
|
||||
}
|
||||
@@ -595,8 +595,8 @@ void PropagateDownloadFile::deleteExistingFolder()
|
||||
QString conflictDir = FileSystem::makeConflictFileName(
|
||||
existingDir, Utility::qDateTimeFromTime_t(FileSystem::getModTime(existingDir)));
|
||||
|
||||
emit propagator()->touchedFile(existingDir);
|
||||
emit propagator()->touchedFile(conflictDir);
|
||||
emit _propagator->touchedFile(existingDir);
|
||||
emit _propagator->touchedFile(conflictDir);
|
||||
QString renameError;
|
||||
if (!FileSystem::rename(existingDir, conflictDir, &renameError)) {
|
||||
done(SyncFileItem::NormalError, renameError);
|
||||
@@ -706,11 +706,11 @@ void PropagateDownloadFile::contentChecksumComputed(const QByteArray &checksumTy
|
||||
|
||||
void PropagateDownloadFile::downloadFinished()
|
||||
{
|
||||
QString fn = propagator()->getFilePath(_item->_file);
|
||||
QString fn = _propagator->getFilePath(_item->_file);
|
||||
|
||||
// In case of file name clash, report an error
|
||||
// This can happen if another parallel download saved a clashing file.
|
||||
if (propagator()->localFileNameClash(_item->_file)) {
|
||||
if (_propagator->localFileNameClash(_item->_file)) {
|
||||
done( SyncFileItem::NormalError, tr("File %1 cannot be saved because of a local file name clash!")
|
||||
.arg(QDir::toNativeSeparators(_item->_file)) );
|
||||
return;
|
||||
@@ -730,7 +730,7 @@ void PropagateDownloadFile::downloadFinished()
|
||||
// If the file is locked, we want to retry this sync when it
|
||||
// becomes available again.
|
||||
if (FileSystem::isFileLocked(fn)) {
|
||||
emit propagator()->seenLockedFile(fn);
|
||||
emit _propagator->seenLockedFile(fn);
|
||||
}
|
||||
|
||||
done(SyncFileItem::SoftError, renameError);
|
||||
@@ -759,7 +759,7 @@ void PropagateDownloadFile::downloadFinished()
|
||||
const qint64 expectedSize = _item->log._other_size;
|
||||
const time_t expectedMtime = _item->log._other_modtime;
|
||||
if (! FileSystem::verifyFileUnchanged(fn, expectedSize, expectedMtime)) {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
done(SyncFileItem::SoftError, tr("File has changed since discovery"));
|
||||
return;
|
||||
}
|
||||
@@ -769,13 +769,13 @@ void PropagateDownloadFile::downloadFinished()
|
||||
// Older server versions sometimes provide empty remote permissions
|
||||
// see #4450 - don't adjust the write permissions there.
|
||||
const int serverVersionGoodRemotePerm = 0x070000; // 7.0.0
|
||||
if (propagator()->account()->serverVersionInt() >= serverVersionGoodRemotePerm) {
|
||||
if (_propagator->account()->serverVersionInt() >= serverVersionGoodRemotePerm) {
|
||||
FileSystem::setFileReadOnlyWeak(_tmpFile.fileName(),
|
||||
!_item->_remotePerm.contains('W'));
|
||||
}
|
||||
|
||||
QString error;
|
||||
emit propagator()->touchedFile(fn);
|
||||
emit _propagator->touchedFile(fn);
|
||||
// The fileChanged() check is done above to generate better error messages.
|
||||
if (!FileSystem::uncheckedRenameReplace(_tmpFile.fileName(), fn, &error)) {
|
||||
qDebug() << Q_FUNC_INFO << QString("Rename failed: %1 => %2").arg(_tmpFile.fileName()).arg(fn);
|
||||
@@ -788,16 +788,16 @@ void PropagateDownloadFile::downloadFinished()
|
||||
// which makes it look like we're just about to initially download
|
||||
// it.
|
||||
if (isConflict) {
|
||||
propagator()->_journal->deleteFileRecord(fn);
|
||||
propagator()->_journal->commit("download finished");
|
||||
_propagator->_journal->deleteFileRecord(fn);
|
||||
_propagator->_journal->commit("download finished");
|
||||
}
|
||||
|
||||
// If the file is locked, we want to retry this sync when it
|
||||
// becomes available again, otherwise try again directly
|
||||
if (FileSystem::isFileLocked(fn)) {
|
||||
emit propagator()->seenLockedFile(fn);
|
||||
emit _propagator->seenLockedFile(fn);
|
||||
} else {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
|
||||
done(SyncFileItem::SoftError, error);
|
||||
@@ -809,19 +809,19 @@ void PropagateDownloadFile::downloadFinished()
|
||||
// Get up to date information for the journal.
|
||||
_item->_size = FileSystem::getSize(fn);
|
||||
|
||||
if (!propagator()->_journal->setFileRecord(SyncJournalFileRecord(*_item, fn))) {
|
||||
if (!_propagator->_journal->setFileRecord(SyncJournalFileRecord(*_item, fn))) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
propagator()->_journal->setDownloadInfo(_item->_file, SyncJournalDb::DownloadInfo());
|
||||
propagator()->_journal->commit("download file start2");
|
||||
_propagator->_journal->setDownloadInfo(_item->_file, SyncJournalDb::DownloadInfo());
|
||||
_propagator->_journal->commit("download file start2");
|
||||
done(isConflict ? SyncFileItem::Conflict : SyncFileItem::Success);
|
||||
|
||||
// handle the special recall file
|
||||
if(!_item->_remotePerm.contains("S")
|
||||
&& (_item->_file == QLatin1String(".sys.admin#recall#")
|
||||
|| _item->_file.endsWith("/.sys.admin#recall#"))) {
|
||||
handleRecallFile(fn, propagator()->_localDir, *propagator()->_journal);
|
||||
handleRecallFile(fn, _propagator->_localDir, *_propagator->_journal);
|
||||
}
|
||||
|
||||
qint64 duration = _stopwatch.elapsed();
|
||||
|
||||
@@ -115,7 +115,7 @@ public:
|
||||
qint64 committedDiskSpace() const Q_DECL_OVERRIDE;
|
||||
|
||||
// We think it might finish quickly because it is a small file.
|
||||
bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return _item->_size < propagator()->smallFileSize(); }
|
||||
bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return _item->_size < 100*1024; }
|
||||
|
||||
/**
|
||||
* Whether an existing folder with the same name may be deleted before
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) by Piotr Mrowczynski <piotr@owncloud.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*/
|
||||
|
||||
#include "owncloudpropagator.h"
|
||||
|
||||
namespace OCC {
|
||||
|
||||
|
||||
qint64 PropagateFiles::committedDiskSpace() const
|
||||
{
|
||||
qint64 needed = 0;
|
||||
foreach (PropagatorJob* job, _subJobs) {
|
||||
needed += job->committedDiskSpace();
|
||||
}
|
||||
return needed;
|
||||
}
|
||||
|
||||
void PropagateFiles::append(const SyncFileItemPtr &item)
|
||||
{
|
||||
_totalItems++;
|
||||
if(item->_size <= propagator()->smallFileSize()){
|
||||
_syncDBItems.append(item);
|
||||
} else {
|
||||
_syncDataItems.append(item);
|
||||
}
|
||||
}
|
||||
|
||||
bool PropagateFiles::scheduleNextJob()
|
||||
{
|
||||
if (_state == Finished) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_state == NotYetStarted) {
|
||||
_state = Running;
|
||||
|
||||
if (isEmpty()) {
|
||||
finalize();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (_state == Running) {
|
||||
// This will ensure that all other jobs in the earlier PropagateDirectory are finished, so we can start with data transfers
|
||||
if (propagator()->runningAtRootJob() != 1){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// cache the value of first unfinished subjob
|
||||
int i = _firstUnfinishedSubJob;
|
||||
int subJobsCount = _subJobs.count();
|
||||
while (i < subJobsCount && _subJobs.at(i)->_state == Finished) {
|
||||
_firstUnfinishedSubJob = ++i;
|
||||
}
|
||||
for (int i = _firstUnfinishedSubJob; i < subJobsCount; ++i) {
|
||||
if (_subJobs.at(i)->_state == Finished) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (possiblyRunNextJob(_subJobs.at(i))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Q_ASSERT(_subJobs.at(i)->_state == Running);
|
||||
}
|
||||
|
||||
return scheduleNextItem();
|
||||
}
|
||||
|
||||
bool PropagateFiles::scheduleNewJob(QVector<SyncFileItemPtr> &syncJobs){
|
||||
// This function is used to schedule new job and lazily create job from sync items
|
||||
Q_ASSERT(!syncJobs.isEmpty());
|
||||
|
||||
// Equivalent to Qt5 takeFirst()
|
||||
const SyncFileItemPtr &item = syncJobs.first();
|
||||
PropagateItemJob* job = propagator()->createJob(item);
|
||||
_subJobs.append(job);
|
||||
syncJobs.pop_front();
|
||||
return possiblyRunNextJob(job);
|
||||
}
|
||||
|
||||
bool PropagateFiles::scheduleNextItem()
|
||||
{
|
||||
/// This function holds the whole bookkeeping/data-transfers balance logic
|
||||
|
||||
bool syncDBItemsEmpty = _syncDBItems.isEmpty();
|
||||
bool syncDataItemsEmpty = _syncDataItems.isEmpty();
|
||||
|
||||
if (syncDBItemsEmpty && !syncDataItemsEmpty){
|
||||
// There are no more DB jobs, ensure to maximally parallelise Data Transfers now
|
||||
return scheduleNewJob(_syncDataItems);
|
||||
} else if (!syncDBItemsEmpty && syncDataItemsEmpty){
|
||||
// There are no more data transfer jobs, ensure to maximally parallelise DB jobs now
|
||||
return scheduleNewJob(_syncDBItems);
|
||||
} else if (!syncDBItemsEmpty && !syncDataItemsEmpty){
|
||||
// Both queues have items, ensure bookkeeping and data transfer balance
|
||||
if (_activeDataJobsNow < 2){
|
||||
// By default, we have max 3 connections available for bigger files
|
||||
// On the other hand, we have max 6 for isLikelyToFinishQuickly files (also small files)
|
||||
// It makes sense to use 2 queues for bigger data transfers, and leave the remaining 1-4 for faster operations
|
||||
return scheduleNewJob(_syncDataItems);
|
||||
} else {
|
||||
return scheduleNewJob(_syncDBItems);
|
||||
}
|
||||
}
|
||||
|
||||
// This means that we have no more file-items to sync -> finish
|
||||
return false;
|
||||
}
|
||||
|
||||
void PropagateFiles::slotSubJobFinished(SyncFileItem::Status status)
|
||||
{
|
||||
if (status == SyncFileItem::FatalError) {
|
||||
abort();
|
||||
_state = Finished;
|
||||
emit finished(status);
|
||||
return;
|
||||
} else if (status == SyncFileItem::NormalError || status == SyncFileItem::SoftError) {
|
||||
_hasError = status;
|
||||
}
|
||||
|
||||
PropagateItemJob *job = qobject_cast<PropagateItemJob *>(sender());
|
||||
if(job->_item->_size <= propagator()->smallFileSize()){
|
||||
_activeDBJobsNow--;
|
||||
} else {
|
||||
_activeDataJobsNow--;
|
||||
}
|
||||
Q_ASSERT(job);
|
||||
|
||||
_jobsFinished++;
|
||||
|
||||
// We finished processing all the jobs
|
||||
// check if we finished
|
||||
if (_jobsFinished >= _totalItems) {
|
||||
Q_ASSERT(!_activeDBJobsNow && !_activeDataJobsNow); // how can we be finished if there are still jobs running now
|
||||
finalize();
|
||||
} else {
|
||||
emit ready();
|
||||
}
|
||||
}
|
||||
|
||||
void PropagateFiles::finalize()
|
||||
{
|
||||
_state = Finished;
|
||||
emit finished(_hasError == SyncFileItem::NoStatus ? SyncFileItem::Success : _hasError);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -58,16 +58,16 @@ bool DeleteJob::finished()
|
||||
|
||||
void PropagateRemoteDelete::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
qDebug() << Q_FUNC_INFO << _item->_file;
|
||||
|
||||
_job = new DeleteJob(propagator()->account(),
|
||||
propagator()->_remoteFolder + _item->_file,
|
||||
_job = new DeleteJob(_propagator->account(),
|
||||
_propagator->_remoteFolder + _item->_file,
|
||||
this);
|
||||
connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotDeleteJobFinished()));
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
_job->start();
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ void PropagateRemoteDelete::abort()
|
||||
|
||||
void PropagateRemoteDelete::slotDeleteJobFinished()
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
Q_ASSERT(_job);
|
||||
|
||||
@@ -99,7 +99,7 @@ void PropagateRemoteDelete::slotDeleteJobFinished()
|
||||
}
|
||||
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
done(status, _job->errorString());
|
||||
return;
|
||||
}
|
||||
@@ -120,8 +120,8 @@ void PropagateRemoteDelete::slotDeleteJobFinished()
|
||||
return;
|
||||
}
|
||||
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->_isDirectory);
|
||||
propagator()->_journal->commit("Remote Remove");
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile, _item->_isDirectory);
|
||||
_propagator->_journal->commit("Remote Remove");
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,19 +23,19 @@ namespace OCC {
|
||||
|
||||
void PropagateRemoteMkdir::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
qDebug() << Q_FUNC_INFO << _item->_file;
|
||||
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
|
||||
if (!_deleteExisting) {
|
||||
return slotStartMkcolJob();
|
||||
}
|
||||
|
||||
_job = new DeleteJob(propagator()->account(),
|
||||
propagator()->_remoteFolder + _item->_file,
|
||||
_job = new DeleteJob(_propagator->account(),
|
||||
_propagator->_remoteFolder + _item->_file,
|
||||
this);
|
||||
connect(_job, SIGNAL(finishedSignal()), SLOT(slotStartMkcolJob()));
|
||||
_job->start();
|
||||
@@ -43,13 +43,13 @@ void PropagateRemoteMkdir::start()
|
||||
|
||||
void PropagateRemoteMkdir::slotStartMkcolJob()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
qDebug() << Q_FUNC_INFO << _item->_file;
|
||||
|
||||
_job = new MkColJob(propagator()->account(),
|
||||
propagator()->_remoteFolder + _item->_file,
|
||||
_job = new MkColJob(_propagator->account(),
|
||||
_propagator->_remoteFolder + _item->_file,
|
||||
this);
|
||||
connect(_job, SIGNAL(finished(QNetworkReply::NetworkError)), this, SLOT(slotMkcolJobFinished()));
|
||||
_job->start();
|
||||
@@ -68,7 +68,7 @@ void PropagateRemoteMkdir::setDeleteExisting(bool enabled)
|
||||
|
||||
void PropagateRemoteMkdir::slotMkcolJobFinished()
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
Q_ASSERT(_job);
|
||||
|
||||
@@ -83,7 +83,7 @@ void PropagateRemoteMkdir::slotMkcolJobFinished()
|
||||
// This happens when the directory already exists. Nothing to do.
|
||||
} else if (err != QNetworkReply::NoError) {
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
auto errorString = _job->reply()->errorString();
|
||||
if (_job->reply()->hasRawHeader("OC-ErrorString")) {
|
||||
errorString = _job->reply()->rawHeader("OC-ErrorString");
|
||||
@@ -109,7 +109,7 @@ void PropagateRemoteMkdir::slotMkcolJobFinished()
|
||||
// So we must get the file id using a PROPFIND
|
||||
// This is required so that we can detect moves even if the folder is renamed on the server
|
||||
// while files are still uploading
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
auto propfindJob = new PropfindJob(_job->account(), _job->path(), this);
|
||||
propfindJob->setProperties(QList<QByteArray>() << "getetag" << "http://owncloud.org/ns:id");
|
||||
QObject::connect(propfindJob, SIGNAL(result(QVariantMap)), this, SLOT(propfindResult(QVariantMap)));
|
||||
@@ -123,7 +123,7 @@ void PropagateRemoteMkdir::slotMkcolJobFinished()
|
||||
|
||||
void PropagateRemoteMkdir::propfindResult(const QVariantMap &result)
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
if (result.contains("getetag")) {
|
||||
_item->_etag = result["getetag"].toByteArray();
|
||||
}
|
||||
@@ -136,15 +136,15 @@ void PropagateRemoteMkdir::propfindResult(const QVariantMap &result)
|
||||
void PropagateRemoteMkdir::propfindError()
|
||||
{
|
||||
// ignore the PROPFIND error
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
|
||||
void PropagateRemoteMkdir::success()
|
||||
{
|
||||
// save the file id already so we can detect rename or remove
|
||||
SyncJournalFileRecord record(*_item, propagator()->_localDir + _item->destination());
|
||||
if (!propagator()->_journal->setFileRecord(record)) {
|
||||
SyncJournalFileRecord record(*_item, _propagator->_localDir + _item->destination());
|
||||
if (!_propagator->_journal->setFileRecord(record)) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -71,12 +71,12 @@ bool MoveJob::finished()
|
||||
|
||||
void PropagateRemoteMove::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
qDebug() << Q_FUNC_INFO << _item->_file << _item->_renameTarget;
|
||||
|
||||
QString targetFile(propagator()->getFilePath(_item->_renameTarget));
|
||||
QString targetFile(_propagator->getFilePath(_item->_renameTarget));
|
||||
|
||||
if (_item->_file == _item->_renameTarget) {
|
||||
// The parent has been renamed already so there is nothing more to do.
|
||||
@@ -87,11 +87,11 @@ void PropagateRemoteMove::start()
|
||||
// Before owncloud 7, there was no permissions system. At the time all the shared files were
|
||||
// in a directory called "Shared" and were not supposed to be moved, otherwise bad things happened
|
||||
|
||||
QString versionString = propagator()->account()->serverVersion();
|
||||
QString versionString = _propagator->account()->serverVersion();
|
||||
if (versionString.contains('.') && versionString.split('.')[0].toInt() < 7) {
|
||||
QString originalFile(propagator()->getFilePath(QLatin1String("Shared")));
|
||||
emit propagator()->touchedFile(originalFile);
|
||||
emit propagator()->touchedFile(targetFile);
|
||||
QString originalFile(_propagator->getFilePath(QLatin1String("Shared")));
|
||||
emit _propagator->touchedFile(originalFile);
|
||||
emit _propagator->touchedFile(targetFile);
|
||||
QString renameError;
|
||||
if( FileSystem::rename(targetFile, originalFile, &renameError) ) {
|
||||
done(SyncFileItem::NormalError, tr("This folder must not be renamed. It is renamed back to its original name."));
|
||||
@@ -102,13 +102,13 @@ void PropagateRemoteMove::start()
|
||||
}
|
||||
}
|
||||
|
||||
QString destination = QDir::cleanPath(propagator()->account()->url().path() + QLatin1Char('/')
|
||||
+ propagator()->account()->davPath() + propagator()->_remoteFolder + _item->_renameTarget);
|
||||
_job = new MoveJob(propagator()->account(),
|
||||
propagator()->_remoteFolder + _item->_file,
|
||||
QString destination = QDir::cleanPath(_propagator->account()->url().path() + QLatin1Char('/')
|
||||
+ _propagator->account()->davPath() + _propagator->_remoteFolder + _item->_renameTarget);
|
||||
_job = new MoveJob(_propagator->account(),
|
||||
_propagator->_remoteFolder + _item->_file,
|
||||
destination, this);
|
||||
connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotMoveJobFinished()));
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
_job->start();
|
||||
|
||||
}
|
||||
@@ -121,7 +121,7 @@ void PropagateRemoteMove::abort()
|
||||
|
||||
void PropagateRemoteMove::slotMoveJobFinished()
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
Q_ASSERT(_job);
|
||||
|
||||
@@ -140,7 +140,7 @@ void PropagateRemoteMove::slotMoveJobFinished()
|
||||
}
|
||||
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
done(status, _job->errorString());
|
||||
return;
|
||||
}
|
||||
@@ -164,14 +164,14 @@ void PropagateRemoteMove::slotMoveJobFinished()
|
||||
void PropagateRemoteMove::finalize()
|
||||
{
|
||||
SyncJournalFileRecord oldRecord =
|
||||
propagator()->_journal->getFileRecord(_item->_originalFile);
|
||||
_propagator->_journal->getFileRecord(_item->_originalFile);
|
||||
// if reading from db failed still continue hoping that deleteFileRecord
|
||||
// reopens the db successfully.
|
||||
// The db is only queried to transfer the content checksum from the old
|
||||
// to the new record. It is not a problem to skip it here.
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile);
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile);
|
||||
|
||||
SyncJournalFileRecord record(*_item, propagator()->getFilePath(_item->_renameTarget));
|
||||
SyncJournalFileRecord record(*_item, _propagator->getFilePath(_item->_renameTarget));
|
||||
record._path = _item->_renameTarget;
|
||||
if (oldRecord.isValid()) {
|
||||
record._contentChecksum = oldRecord._contentChecksum;
|
||||
@@ -182,19 +182,19 @@ void PropagateRemoteMove::finalize()
|
||||
}
|
||||
}
|
||||
|
||||
if (!propagator()->_journal->setFileRecord(record)) {
|
||||
if (!_propagator->_journal->setFileRecord(record)) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (_item->_isDirectory) {
|
||||
if (!adjustSelectiveSync(propagator()->_journal, _item->_file, _item->_renameTarget)) {
|
||||
if (!adjustSelectiveSync(_propagator->_journal, _item->_file, _item->_renameTarget)) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
propagator()->_journal->commit("Remote Rename");
|
||||
_propagator->_journal->commit("Remote Rename");
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
|
||||
|
||||
@@ -193,18 +193,18 @@ void PropagateUploadFileCommon::setDeleteExisting(bool enabled)
|
||||
|
||||
void PropagateUploadFileCommon::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0)) {
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
|
||||
if (!_deleteExisting) {
|
||||
return slotComputeContentChecksum();
|
||||
}
|
||||
|
||||
auto job = new DeleteJob(propagator()->account(),
|
||||
propagator()->_remoteFolder + _item->_file,
|
||||
auto job = new DeleteJob(_propagator->account(),
|
||||
_propagator->_remoteFolder + _item->_file,
|
||||
this);
|
||||
_jobs.append(job);
|
||||
connect(job, SIGNAL(finishedSignal()), SLOT(slotComputeContentChecksum()));
|
||||
@@ -214,11 +214,11 @@ void PropagateUploadFileCommon::start()
|
||||
|
||||
void PropagateUploadFileCommon::slotComputeContentChecksum()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0)) {
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const QString filePath = propagator()->getFilePath(_item->_file);
|
||||
const QString filePath = _propagator->getFilePath(_item->_file);
|
||||
|
||||
// remember the modtime before checksumming to be able to detect a file
|
||||
// change during the checksum calculation
|
||||
@@ -256,7 +256,7 @@ void PropagateUploadFileCommon::slotComputeTransmissionChecksum(const QByteArray
|
||||
|
||||
// Reuse the content checksum as the transmission checksum if possible
|
||||
const auto supportedTransmissionChecksums =
|
||||
propagator()->account()->capabilities().supportedChecksumTypes();
|
||||
_propagator->account()->capabilities().supportedChecksumTypes();
|
||||
if (supportedTransmissionChecksums.contains(contentChecksumType)) {
|
||||
slotStartUpload(contentChecksumType, contentChecksum);
|
||||
return;
|
||||
@@ -265,7 +265,7 @@ void PropagateUploadFileCommon::slotComputeTransmissionChecksum(const QByteArray
|
||||
// Compute the transmission checksum.
|
||||
auto computeChecksum = new ComputeChecksum(this);
|
||||
if (uploadChecksumEnabled()) {
|
||||
computeChecksum->setChecksumType(propagator()->account()->capabilities().uploadChecksumType());
|
||||
computeChecksum->setChecksumType(_propagator->account()->capabilities().uploadChecksumType());
|
||||
} else {
|
||||
computeChecksum->setChecksumType(QByteArray());
|
||||
}
|
||||
@@ -274,7 +274,7 @@ void PropagateUploadFileCommon::slotComputeTransmissionChecksum(const QByteArray
|
||||
SLOT(slotStartUpload(QByteArray,QByteArray)));
|
||||
connect(computeChecksum, SIGNAL(done(QByteArray,QByteArray)),
|
||||
computeChecksum, SLOT(deleteLater()));
|
||||
const QString filePath = propagator()->getFilePath(_item->_file);
|
||||
const QString filePath = _propagator->getFilePath(_item->_file);
|
||||
computeChecksum->start(filePath);
|
||||
}
|
||||
|
||||
@@ -282,7 +282,7 @@ void PropagateUploadFileCommon::slotStartUpload(const QByteArray& transmissionCh
|
||||
{
|
||||
// Remove ourselfs from the list of active job, before any posible call to done()
|
||||
// When we start chunks, we will add it again, once for every chunks.
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
_transmissionChecksum = transmissionChecksum;
|
||||
_transmissionChecksumType = transmissionChecksumType;
|
||||
@@ -293,7 +293,7 @@ void PropagateUploadFileCommon::slotStartUpload(const QByteArray& transmissionCh
|
||||
_item->_contentChecksumType = transmissionChecksumType;
|
||||
}
|
||||
|
||||
const QString fullFilePath = propagator()->getFilePath(_item->_file);
|
||||
const QString fullFilePath = _propagator->getFilePath(_item->_file);
|
||||
|
||||
if (!FileSystem::fileExists(fullFilePath)) {
|
||||
done(SyncFileItem::SoftError, tr("File Removed"));
|
||||
@@ -307,7 +307,7 @@ void PropagateUploadFileCommon::slotStartUpload(const QByteArray& transmissionCh
|
||||
|
||||
_item->_modtime = FileSystem::getModTime(fullFilePath);
|
||||
if( prevModtime != _item->_modtime ) {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
done(SyncFileItem::SoftError, tr("Local file changed during syncing. It will be resumed."));
|
||||
return;
|
||||
}
|
||||
@@ -319,7 +319,7 @@ void PropagateUploadFileCommon::slotStartUpload(const QByteArray& transmissionCh
|
||||
// That usually indicates a file that is still being changed
|
||||
// or not yet fully copied to the destination.
|
||||
if (fileIsStillChanging(*_item)) {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
done(SyncFileItem::SoftError, tr("Local file changed during sync."));
|
||||
return;
|
||||
}
|
||||
@@ -464,16 +464,16 @@ void UploadDevice::setChoked(bool b) {
|
||||
|
||||
void PropagateUploadFileCommon::startPollJob(const QString& path)
|
||||
{
|
||||
PollJob* job = new PollJob(propagator()->account(), path, _item,
|
||||
propagator()->_journal, propagator()->_localDir, this);
|
||||
PollJob* job = new PollJob(_propagator->account(), path, _item,
|
||||
_propagator->_journal, _propagator->_localDir, this);
|
||||
connect(job, SIGNAL(finishedSignal()), SLOT(slotPollFinished()));
|
||||
SyncJournalDb::PollInfo info;
|
||||
info._file = _item->_file;
|
||||
info._url = path;
|
||||
info._modtime = _item->_modtime;
|
||||
propagator()->_journal->setPollInfo(info);
|
||||
propagator()->_journal->commit("add poll info");
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_journal->setPollInfo(info);
|
||||
_propagator->_journal->commit("add poll info");
|
||||
_propagator->_activeJobList.append(this);
|
||||
job->start();
|
||||
}
|
||||
|
||||
@@ -482,7 +482,7 @@ void PropagateUploadFileCommon::slotPollFinished()
|
||||
PollJob *job = qobject_cast<PollJob *>(sender());
|
||||
Q_ASSERT(job);
|
||||
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
if (job->_item->_status != SyncFileItem::Success) {
|
||||
_finished = true;
|
||||
@@ -493,27 +493,6 @@ void PropagateUploadFileCommon::slotPollFinished()
|
||||
finalize();
|
||||
}
|
||||
|
||||
void PropagateUploadFileCommon::checkResettingErrors()
|
||||
{
|
||||
if (_item->_httpErrorCode == 412
|
||||
|| propagator()->account()->capabilities().httpErrorCodesThatResetFailingChunkedUploads()
|
||||
.contains(_item->_httpErrorCode)) {
|
||||
auto uploadInfo = propagator()->_journal->getUploadInfo(_item->_file);
|
||||
uploadInfo._errorCount += 1;
|
||||
if (uploadInfo._errorCount > 3) {
|
||||
qDebug() << "Reset transfer of" << _item->_file
|
||||
<< "due to repeated error" << _item->_httpErrorCode;
|
||||
uploadInfo = SyncJournalDb::UploadInfo();
|
||||
} else {
|
||||
qDebug() << "Error count for maybe-reset error" << _item->_httpErrorCode
|
||||
<< "on file" << _item->_file
|
||||
<< "is" << uploadInfo._errorCount;
|
||||
}
|
||||
propagator()->_journal->setUploadInfo(_item->_file, uploadInfo);
|
||||
propagator()->_journal->commit("Upload info");
|
||||
}
|
||||
}
|
||||
|
||||
void PropagateUploadFileCommon::slotJobDestroyed(QObject* job)
|
||||
{
|
||||
_jobs.erase(std::remove(_jobs.begin(), _jobs.end(), job) , _jobs.end());
|
||||
@@ -572,13 +551,13 @@ void PropagateUploadFileCommon::finalize()
|
||||
_item->_requestDuration = _duration.elapsed();
|
||||
_finished = true;
|
||||
|
||||
if (!propagator()->_journal->setFileRecord(SyncJournalFileRecord(*_item, propagator()->getFilePath(_item->_file)))) {
|
||||
if (!_propagator->_journal->setFileRecord(SyncJournalFileRecord(*_item, _propagator->getFilePath(_item->_file)))) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
// Remove from the progress database:
|
||||
propagator()->_journal->setUploadInfo(_item->_file, SyncJournalDb::UploadInfo());
|
||||
propagator()->_journal->commit("upload file start");
|
||||
_propagator->_journal->setUploadInfo(_item->_file, SyncJournalDb::UploadInfo());
|
||||
_propagator->_journal->commit("upload file start");
|
||||
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@ public:
|
||||
|
||||
void start() Q_DECL_OVERRIDE;
|
||||
|
||||
bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return _item->_size < propagator()->smallFileSize(); }
|
||||
bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return _item->_size < 100*1024; }
|
||||
|
||||
private slots:
|
||||
void slotComputeContentChecksum();
|
||||
@@ -232,13 +232,6 @@ private slots:
|
||||
void slotPollFinished();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Checks whether the current error is one that should reset the whole
|
||||
* transfer if it happens too often. If so: Bump UploadInfo::errorCount
|
||||
* and maybe perform the reset.
|
||||
*/
|
||||
void checkResettingErrors();
|
||||
|
||||
// Bases headers that need to be sent with every chunk
|
||||
QMap<QByteArray, QByteArray> headers();
|
||||
|
||||
@@ -269,7 +262,7 @@ private:
|
||||
int _chunkCount; /// Total number of chunks for this file
|
||||
int _transferId; /// transfer id (part of the url)
|
||||
|
||||
quint64 chunkSize() const { return propagator()->chunkSize(); }
|
||||
quint64 chunkSize() const { return _propagator->chunkSize(); }
|
||||
|
||||
|
||||
public:
|
||||
@@ -300,10 +293,9 @@ private:
|
||||
|
||||
// Map chunk number with its size from the PROPFIND on resume.
|
||||
// (Only used from slotPropfindIterate/slotPropfindFinished because the LsColJob use signals to report data.)
|
||||
struct ServerChunkInfo { quint64 size; QString originalName; };
|
||||
QMap<int, ServerChunkInfo> _serverChunks;
|
||||
QMap<int, quint64> _serverChunks;
|
||||
|
||||
quint64 chunkSize() const { return propagator()->chunkSize(); }
|
||||
quint64 chunkSize() const { return _propagator->chunkSize(); }
|
||||
/**
|
||||
* Return the URL of a chunk.
|
||||
* If chunk == -1, returns the URL of the parent folder containing the chunks
|
||||
|
||||
@@ -38,13 +38,12 @@ namespace OCC {
|
||||
QUrl PropagateUploadFileNG::chunkUrl(int chunk)
|
||||
{
|
||||
QString path = QLatin1String("remote.php/dav/uploads/")
|
||||
+ propagator()->account()->davUser()
|
||||
+ _propagator->account()->davUser()
|
||||
+ QLatin1Char('/') + QString::number(_transferId);
|
||||
if (chunk >= 0) {
|
||||
// We need to do add leading 0 because the server orders the chunk alphabetically
|
||||
path += QLatin1Char('/') + QString::number(chunk).rightJustified(8, '0');
|
||||
path += QLatin1Char('/') + QString::number(chunk);
|
||||
}
|
||||
return Utility::concatUrlPath(propagator()->account()->url(), path);
|
||||
return Utility::concatUrlPath(_propagator->account()->url(), path);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -81,13 +80,13 @@ QUrl PropagateUploadFileNG::chunkUrl(int chunk)
|
||||
void PropagateUploadFileNG::doStartUpload()
|
||||
{
|
||||
_duration.start();
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
|
||||
const SyncJournalDb::UploadInfo progressInfo = propagator()->_journal->getUploadInfo(_item->_file);
|
||||
const SyncJournalDb::UploadInfo progressInfo = _propagator->_journal->getUploadInfo(_item->_file);
|
||||
if (progressInfo._valid && Utility::qDateTimeToTime_t(progressInfo._modtime) == _item->_modtime ) {
|
||||
_transferId = progressInfo._transferid;
|
||||
auto url = chunkUrl();
|
||||
auto job = new LsColJob(propagator()->account(), url, this);
|
||||
auto job = new LsColJob(_propagator->account(), url, this);
|
||||
_jobs.append(job);
|
||||
job->setProperties(QList<QByteArray>() << "resourcetype" << "getcontentlength");
|
||||
connect(job, SIGNAL(finishedWithoutError()), this, SLOT(slotPropfindFinished()));
|
||||
@@ -109,11 +108,9 @@ void PropagateUploadFileNG::slotPropfindIterate(const QString &name, const QMap<
|
||||
return; // skip the info about the path itself
|
||||
}
|
||||
bool ok = false;
|
||||
QString chunkName = name.mid(name.lastIndexOf('/')+1);
|
||||
auto chunkId = chunkName.toUInt(&ok);
|
||||
auto chunkId = name.mid(name.lastIndexOf('/')+1).toUInt(&ok);
|
||||
if (ok) {
|
||||
ServerChunkInfo chunkinfo = { properties["getcontentlength"].toULongLong(), chunkName };
|
||||
_serverChunks[chunkId] = chunkinfo;
|
||||
_serverChunks[chunkId] = properties["getcontentlength"].toULongLong();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,12 +118,12 @@ void PropagateUploadFileNG::slotPropfindFinished()
|
||||
{
|
||||
auto job = qobject_cast<LsColJob *>(sender());
|
||||
slotJobDestroyed(job); // remove it from the _jobs list
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
_currentChunk = 0;
|
||||
_sent = 0;
|
||||
while (_serverChunks.contains(_currentChunk)) {
|
||||
_sent += _serverChunks[_currentChunk].size;
|
||||
_sent += _serverChunks[_currentChunk];
|
||||
_serverChunks.remove(_currentChunk);
|
||||
++_currentChunk;
|
||||
}
|
||||
@@ -144,20 +141,19 @@ void PropagateUploadFileNG::slotPropfindFinished()
|
||||
qDebug() << "Resuming "<< _item->_file << " from chunk " << _currentChunk << "; sent ="<< _sent;
|
||||
|
||||
if (!_serverChunks.isEmpty()) {
|
||||
qDebug() << "To Delete" << _serverChunks.keys();
|
||||
propagator()->_activeJobList.append(this);
|
||||
qDebug() << "To Delete" << _serverChunks;
|
||||
_propagator->_activeJobList.append(this);
|
||||
_removeJobError = false;
|
||||
|
||||
// Make sure that if there is a "hole" and then a few more chunks, on the server
|
||||
// we should remove the later chunks. Otherwise when we do dynamic chunk sizing, we may end up
|
||||
// with corruptions if there are too many chunks, or if we abort and there are still stale chunks.
|
||||
for (auto it = _serverChunks.begin(); it != _serverChunks.end(); ++it) {
|
||||
auto job = new DeleteJob(propagator()->account(), Utility::concatUrlPath(chunkUrl(), it->originalName), this);
|
||||
auto job = new DeleteJob(_propagator->account(), Utility::concatUrlPath(chunkUrl(), QString::number(it.key())), this);
|
||||
QObject::connect(job, SIGNAL(finishedSignal()), this, SLOT(slotDeleteJobFinished()));
|
||||
_jobs.append(job);
|
||||
job->start();
|
||||
}
|
||||
_serverChunks.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -170,9 +166,9 @@ void PropagateUploadFileNG::slotPropfindFinishedWithError()
|
||||
slotJobDestroyed(job); // remove it from the _jobs list
|
||||
QNetworkReply::NetworkError err = job->reply()->error();
|
||||
auto httpErrorCode = job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
auto status = classifyError(err, httpErrorCode, &propagator()->_anotherSyncNeeded);
|
||||
auto status = classifyError(err, httpErrorCode, &_propagator->_anotherSyncNeeded);
|
||||
if (status == SyncFileItem::FatalError) {
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
QString errorString = errorMessage(job->reply()->errorString(), job->reply()->readAll());
|
||||
abortWithError(status, errorString);
|
||||
return;
|
||||
@@ -201,7 +197,7 @@ void PropagateUploadFileNG::slotDeleteJobFinished()
|
||||
}
|
||||
|
||||
if (_jobs.isEmpty()) {
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
if (_removeJobError) {
|
||||
// There was an error removing some files, just start over
|
||||
startNewUpload();
|
||||
@@ -215,7 +211,7 @@ void PropagateUploadFileNG::slotDeleteJobFinished()
|
||||
|
||||
void PropagateUploadFileNG::startNewUpload()
|
||||
{
|
||||
Q_ASSERT(propagator()->_activeJobList.count(this) == 1);
|
||||
Q_ASSERT(_propagator->_activeJobList.count(this) == 1);
|
||||
_transferId = qrand() ^ _item->_modtime ^ (_item->_size << 16) ^ qHash(_item->_file);
|
||||
_sent = 0;
|
||||
_currentChunk = 0;
|
||||
@@ -226,11 +222,11 @@ void PropagateUploadFileNG::startNewUpload()
|
||||
pi._valid = true;
|
||||
pi._transferid = _transferId;
|
||||
pi._modtime = Utility::qDateTimeFromTime_t(_item->_modtime);
|
||||
propagator()->_journal->setUploadInfo(_item->_file, pi);
|
||||
propagator()->_journal->commit("Upload info");
|
||||
_propagator->_journal->setUploadInfo(_item->_file, pi);
|
||||
_propagator->_journal->commit("Upload info");
|
||||
QMap<QByteArray, QByteArray> headers;
|
||||
headers["OC-Total-Length"] = QByteArray::number(_item->_size);
|
||||
auto job = new MkColJob(propagator()->account(), chunkUrl(), headers, this);
|
||||
auto job = new MkColJob(_propagator->account(), chunkUrl(), headers, this);
|
||||
|
||||
connect(job, SIGNAL(finished(QNetworkReply::NetworkError)),
|
||||
this, SLOT(slotMkColFinished(QNetworkReply::NetworkError)));
|
||||
@@ -240,7 +236,7 @@ void PropagateUploadFileNG::startNewUpload()
|
||||
|
||||
void PropagateUploadFileNG::slotMkColFinished(QNetworkReply::NetworkError)
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
auto job = qobject_cast<MkColJob *>(sender());
|
||||
slotJobDestroyed(job); // remove it from the _jobs list
|
||||
QNetworkReply::NetworkError err = job->reply()->error();
|
||||
@@ -248,7 +244,7 @@ void PropagateUploadFileNG::slotMkColFinished(QNetworkReply::NetworkError)
|
||||
|
||||
if (err != QNetworkReply::NoError || _item->_httpErrorCode != 201) {
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
QString errorString = errorMessage(job->reply()->errorString(), job->reply()->readAll());
|
||||
if (job->reply()->hasRawHeader("OC-ErrorString")) {
|
||||
errorString = job->reply()->rawHeader("OC-ErrorString");
|
||||
@@ -261,7 +257,7 @@ void PropagateUploadFileNG::slotMkColFinished(QNetworkReply::NetworkError)
|
||||
|
||||
void PropagateUploadFileNG::startNextChunk()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
quint64 fileSize = _item->_size;
|
||||
@@ -272,8 +268,8 @@ void PropagateUploadFileNG::startNextChunk()
|
||||
Q_ASSERT(_jobs.isEmpty()); // There should be no running job anymore
|
||||
_finished = true;
|
||||
// Finish with a MOVE
|
||||
QString destination = QDir::cleanPath(propagator()->account()->url().path() + QLatin1Char('/')
|
||||
+ propagator()->account()->davPath() + propagator()->_remoteFolder + _item->_file);
|
||||
QString destination = QDir::cleanPath(_propagator->account()->url().path() + QLatin1Char('/')
|
||||
+ _propagator->account()->davPath() + _propagator->_remoteFolder + _item->_file);
|
||||
auto headers = PropagateUploadFileCommon::headers();
|
||||
|
||||
// "If-Match applies to the source, but we are interested in comparing the etag of the destination
|
||||
@@ -286,18 +282,18 @@ void PropagateUploadFileNG::startNextChunk()
|
||||
_transmissionChecksumType, _transmissionChecksum);
|
||||
}
|
||||
|
||||
auto job = new MoveJob(propagator()->account(), Utility::concatUrlPath(chunkUrl(), "/.file"),
|
||||
auto job = new MoveJob(_propagator->account(), Utility::concatUrlPath(chunkUrl(), "/.file"),
|
||||
destination, headers, this);
|
||||
_jobs.append(job);
|
||||
connect(job, SIGNAL(finishedSignal()), this, SLOT(slotMoveJobFinished()));
|
||||
connect(job, SIGNAL(destroyed(QObject*)), this, SLOT(slotJobDestroyed(QObject*)));
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
job->start();
|
||||
return;
|
||||
}
|
||||
|
||||
auto device = new UploadDevice(&propagator()->_bandwidthManager);
|
||||
const QString fileName = propagator()->getFilePath(_item->_file);
|
||||
auto device = new UploadDevice(&_propagator->_bandwidthManager);
|
||||
const QString fileName = _propagator->getFilePath(_item->_file);
|
||||
|
||||
if (! device->prepareAndOpen(fileName, _sent, currentChunkSize)) {
|
||||
qDebug() << "ERR: Could not prepare upload device: " << device->errorString();
|
||||
@@ -305,7 +301,7 @@ void PropagateUploadFileNG::startNextChunk()
|
||||
// If the file is currently locked, we want to retry the sync
|
||||
// when it becomes available again.
|
||||
if (FileSystem::isFileLocked(fileName)) {
|
||||
emit propagator()->seenLockedFile(fileName);
|
||||
emit _propagator->seenLockedFile(fileName);
|
||||
}
|
||||
// Soft error because this is likely caused by the user modifying his files while syncing
|
||||
abortWithError( SyncFileItem::SoftError, device->errorString() );
|
||||
@@ -319,7 +315,7 @@ void PropagateUploadFileNG::startNextChunk()
|
||||
QUrl url = chunkUrl(_currentChunk);
|
||||
|
||||
// job takes ownership of device via a QScopedPointer. Job deletes itself when finishing
|
||||
PUTFileJob* job = new PUTFileJob(propagator()->account(), url, device, headers, _currentChunk, this);
|
||||
PUTFileJob* job = new PUTFileJob(_propagator->account(), url, device, headers, _currentChunk, this);
|
||||
_jobs.append(job);
|
||||
connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished()));
|
||||
connect(job, SIGNAL(uploadProgress(qint64,qint64)),
|
||||
@@ -328,7 +324,7 @@ void PropagateUploadFileNG::startNextChunk()
|
||||
device, SLOT(slotJobUploadProgress(qint64,qint64)));
|
||||
connect(job, SIGNAL(destroyed(QObject*)), this, SLOT(slotJobDestroyed(QObject*)));
|
||||
job->start();
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
_currentChunk++;
|
||||
|
||||
// FIXME! parallel chunk?
|
||||
@@ -347,7 +343,7 @@ void PropagateUploadFileNG::slotPutFinished()
|
||||
<< job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute)
|
||||
<< job->reply()->attribute(QNetworkRequest::HttpReasonPhraseAttribute);
|
||||
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
if (_finished) {
|
||||
// We have sent the finished signal already. We don't need to handle any remaining jobs
|
||||
@@ -361,7 +357,7 @@ void PropagateUploadFileNG::slotPutFinished()
|
||||
// Abort the job and try again later.
|
||||
// This works around a bug in QNAM wich might reuse a non-empty buffer for the next request.
|
||||
qDebug() << "Forcing job abort on HTTP connection reset with Qt < 5.4.2.";
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
abortWithError(SyncFileItem::SoftError, tr("Forcing job abort on HTTP connection reset with Qt < 5.4.2."));
|
||||
return;
|
||||
}
|
||||
@@ -377,11 +373,16 @@ void PropagateUploadFileNG::slotPutFinished()
|
||||
errorString = job->reply()->rawHeader("OC-ErrorString");
|
||||
}
|
||||
|
||||
// Ensure errors that should eventually reset the chunked upload are tracked.
|
||||
checkResettingErrors();
|
||||
// FIXME! can this happen for the chunks?
|
||||
if (_item->_httpErrorCode == 412) {
|
||||
// Precondition Failed: Maybe the bad etag is in the database, we need to clear the
|
||||
// parent folder etag so we won't read from DB next sync.
|
||||
_propagator->_journal->avoidReadFromDbOnNextSync(_item->_file);
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
abortWithError(status, errorString);
|
||||
return;
|
||||
}
|
||||
@@ -390,19 +391,19 @@ void PropagateUploadFileNG::slotPutFinished()
|
||||
bool finished = _sent == _item->_size;
|
||||
|
||||
// Check if the file still exists
|
||||
const QString fullFilePath(propagator()->getFilePath(_item->_file));
|
||||
const QString fullFilePath(_propagator->getFilePath(_item->_file));
|
||||
if( !FileSystem::fileExists(fullFilePath) ) {
|
||||
if (!finished) {
|
||||
abortWithError(SyncFileItem::SoftError, tr("The local file was removed during sync."));
|
||||
return;
|
||||
} else {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check whether the file changed since discovery.
|
||||
if (! FileSystem::verifyFileUnchanged(fullFilePath, _item->_size, _item->_modtime)) {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
if( !finished ) {
|
||||
abortWithError(SyncFileItem::SoftError, tr("Local file changed during sync."));
|
||||
return;
|
||||
@@ -412,42 +413,24 @@ void PropagateUploadFileNG::slotPutFinished()
|
||||
if (!finished) {
|
||||
// Deletes an existing blacklist entry on successful chunk upload
|
||||
if (_item->_hasBlacklistEntry) {
|
||||
propagator()->_journal->wipeErrorBlacklistEntry(_item->_file);
|
||||
_propagator->_journal->wipeErrorBlacklistEntry(_item->_file);
|
||||
_item->_hasBlacklistEntry = false;
|
||||
}
|
||||
|
||||
// Reset the error count on successful chunk upload
|
||||
auto uploadInfo = propagator()->_journal->getUploadInfo(_item->_file);
|
||||
uploadInfo._errorCount = 0;
|
||||
propagator()->_journal->setUploadInfo(_item->_file, uploadInfo);
|
||||
propagator()->_journal->commit("Upload info");
|
||||
}
|
||||
startNextChunk();
|
||||
}
|
||||
|
||||
void PropagateUploadFileNG::slotMoveJobFinished()
|
||||
{
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
auto job = qobject_cast<MoveJob *>(sender());
|
||||
slotJobDestroyed(job); // remove it from the _jobs list
|
||||
QNetworkReply::NetworkError err = job->reply()->error();
|
||||
_item->_httpErrorCode = job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
|
||||
if (err != QNetworkReply::NoError) {
|
||||
if (_item->_httpErrorCode == 412) {
|
||||
// Precondition Failed: Either an etag or a checksum mismatch.
|
||||
|
||||
// Maybe the bad etag is in the database, we need to clear the
|
||||
// parent folder etag so we won't read from DB next sync.
|
||||
propagator()->_journal->avoidReadFromDbOnNextSync(_item->_file);
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
}
|
||||
|
||||
// Ensure errors that should eventually reset the chunked upload are tracked.
|
||||
checkResettingErrors();
|
||||
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
QString errorString = errorMessage(job->errorString(), job->reply()->readAll());
|
||||
abortWithError(status, errorString);
|
||||
return;
|
||||
|
||||
@@ -40,7 +40,7 @@ void PropagateUploadFileV1::doStartUpload()
|
||||
_startChunk = 0;
|
||||
_transferId = qrand() ^ _item->_modtime ^ (_item->_size << 16);
|
||||
|
||||
const SyncJournalDb::UploadInfo progressInfo = propagator()->_journal->getUploadInfo(_item->_file);
|
||||
const SyncJournalDb::UploadInfo progressInfo = _propagator->_journal->getUploadInfo(_item->_file);
|
||||
|
||||
if (progressInfo._valid && Utility::qDateTimeToTime_t(progressInfo._modtime) == _item->_modtime ) {
|
||||
_startChunk = progressInfo._chunk;
|
||||
@@ -57,7 +57,7 @@ void PropagateUploadFileV1::doStartUpload()
|
||||
|
||||
void PropagateUploadFileV1::startNextChunk()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
if (! _jobs.isEmpty() && _currentChunk + _startChunk >= _chunkCount - 1) {
|
||||
@@ -75,7 +75,7 @@ void PropagateUploadFileV1::startNextChunk()
|
||||
|
||||
QString path = _item->_file;
|
||||
|
||||
UploadDevice *device = new UploadDevice(&propagator()->_bandwidthManager);
|
||||
UploadDevice *device = new UploadDevice(&_propagator->_bandwidthManager);
|
||||
qint64 chunkStart = 0;
|
||||
qint64 currentChunkSize = fileSize;
|
||||
bool isFinalChunk = false;
|
||||
@@ -101,21 +101,20 @@ void PropagateUploadFileV1::startNextChunk()
|
||||
// if there's only one chunk, it's the final one
|
||||
isFinalChunk = true;
|
||||
}
|
||||
qDebug() << _chunkCount << isFinalChunk << chunkStart << currentChunkSize;
|
||||
|
||||
if (isFinalChunk && !_transmissionChecksumType.isEmpty()) {
|
||||
headers[checkSumHeaderC] = makeChecksumHeader(
|
||||
_transmissionChecksumType, _transmissionChecksum);
|
||||
}
|
||||
|
||||
const QString fileName = propagator()->getFilePath(_item->_file);
|
||||
const QString fileName = _propagator->getFilePath(_item->_file);
|
||||
if (! device->prepareAndOpen(fileName, chunkStart, currentChunkSize)) {
|
||||
qDebug() << "ERR: Could not prepare upload device: " << device->errorString();
|
||||
|
||||
// If the file is currently locked, we want to retry the sync
|
||||
// when it becomes available again.
|
||||
if (FileSystem::isFileLocked(fileName)) {
|
||||
emit propagator()->seenLockedFile(fileName);
|
||||
emit _propagator->seenLockedFile(fileName);
|
||||
}
|
||||
// Soft error because this is likely caused by the user modifying his files while syncing
|
||||
abortWithError( SyncFileItem::SoftError, device->errorString() );
|
||||
@@ -124,19 +123,19 @@ void PropagateUploadFileV1::startNextChunk()
|
||||
}
|
||||
|
||||
// job takes ownership of device via a QScopedPointer. Job deletes itself when finishing
|
||||
PUTFileJob* job = new PUTFileJob(propagator()->account(), propagator()->_remoteFolder + path, device, headers, _currentChunk, this);
|
||||
PUTFileJob* job = new PUTFileJob(_propagator->account(), _propagator->_remoteFolder + path, device, headers, _currentChunk, this);
|
||||
_jobs.append(job);
|
||||
connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished()));
|
||||
connect(job, SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(slotUploadProgress(qint64,qint64)));
|
||||
connect(job, SIGNAL(uploadProgress(qint64,qint64)), device, SLOT(slotJobUploadProgress(qint64,qint64)));
|
||||
connect(job, SIGNAL(destroyed(QObject*)), this, SLOT(slotJobDestroyed(QObject*)));
|
||||
job->start();
|
||||
propagator()->_activeJobList.append(this);
|
||||
_propagator->_activeJobList.append(this);
|
||||
_currentChunk++;
|
||||
|
||||
bool parallelChunkUpload = true;
|
||||
|
||||
if (propagator()->account()->capabilities().chunkingParallelUploadDisabled()) {
|
||||
if (_propagator->account()->capabilities().chunkingParallelUploadDisabled()) {
|
||||
// Server may also disable parallel chunked upload for any higher version
|
||||
parallelChunkUpload = false;
|
||||
} else {
|
||||
@@ -144,7 +143,7 @@ void PropagateUploadFileV1::startNextChunk()
|
||||
if (!env.isEmpty()) {
|
||||
parallelChunkUpload = env != "false" && env != "0";
|
||||
} else {
|
||||
int versionNum = propagator()->account()->serverVersionInt();
|
||||
int versionNum = _propagator->account()->serverVersionInt();
|
||||
if (versionNum < 0x080003) {
|
||||
// Disable parallel chunk upload severs older than 8.0.3 to avoid too many
|
||||
// internal sever errors (#2743, #2938)
|
||||
@@ -160,7 +159,7 @@ void PropagateUploadFileV1::startNextChunk()
|
||||
parallelChunkUpload = false;
|
||||
}
|
||||
|
||||
if (parallelChunkUpload && (propagator()->_activeJobList.count() < propagator()->maximumActiveJob())
|
||||
if (parallelChunkUpload && (_propagator->_activeJobList.count() < _propagator->maximumActiveJob())
|
||||
&& _currentChunk < _chunkCount ) {
|
||||
startNextChunk();
|
||||
}
|
||||
@@ -181,7 +180,7 @@ void PropagateUploadFileV1::slotPutFinished()
|
||||
<< job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute)
|
||||
<< job->reply()->attribute(QNetworkRequest::HttpReasonPhraseAttribute);
|
||||
|
||||
propagator()->_activeJobList.removeOne(this);
|
||||
_propagator->_activeJobList.removeOne(this);
|
||||
|
||||
if (_finished) {
|
||||
// We have sent the finished signal already. We don't need to handle any remaining jobs
|
||||
@@ -194,7 +193,7 @@ void PropagateUploadFileV1::slotPutFinished()
|
||||
if (err == QNetworkReply::OperationCanceledError && job->reply()->property("owncloud-should-soft-cancel").isValid()) { // Abort the job and try again later.
|
||||
// This works around a bug in QNAM wich might reuse a non-empty buffer for the next request.
|
||||
qDebug() << "Forcing job abort on HTTP connection reset with Qt < 5.4.2.";
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
abortWithError(SyncFileItem::SoftError, tr("Forcing job abort on HTTP connection reset with Qt < 5.4.2."));
|
||||
return;
|
||||
}
|
||||
@@ -216,19 +215,14 @@ void PropagateUploadFileV1::slotPutFinished()
|
||||
}
|
||||
|
||||
if (_item->_httpErrorCode == 412) {
|
||||
// Precondition Failed: Either an etag or a checksum mismatch.
|
||||
|
||||
// Maybe the bad etag is in the database, we need to clear the
|
||||
// Precondition Failed: Maybe the bad etag is in the database, we need to clear the
|
||||
// parent folder etag so we won't read from DB next sync.
|
||||
propagator()->_journal->avoidReadFromDbOnNextSync(_item->_file);
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_journal->avoidReadFromDbOnNextSync(_item->_file);
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
|
||||
// Ensure errors that should eventually reset the chunked upload are tracked.
|
||||
checkResettingErrors();
|
||||
|
||||
SyncFileItem::Status status = classifyError(err, _item->_httpErrorCode,
|
||||
&propagator()->_anotherSyncNeeded);
|
||||
&_propagator->_anotherSyncNeeded);
|
||||
abortWithError(status, errorString);
|
||||
return;
|
||||
}
|
||||
@@ -259,19 +253,19 @@ void PropagateUploadFileV1::slotPutFinished()
|
||||
bool finished = etag.length() > 0;
|
||||
|
||||
// Check if the file still exists
|
||||
const QString fullFilePath(propagator()->getFilePath(_item->_file));
|
||||
const QString fullFilePath(_propagator->getFilePath(_item->_file));
|
||||
if( !FileSystem::fileExists(fullFilePath) ) {
|
||||
if (!finished) {
|
||||
abortWithError(SyncFileItem::SoftError, tr("The local file was removed during sync."));
|
||||
return;
|
||||
} else {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Check whether the file changed since discovery.
|
||||
if (! FileSystem::verifyFileUnchanged(fullFilePath, _item->_size, _item->_modtime)) {
|
||||
propagator()->_anotherSyncNeeded = true;
|
||||
_propagator->_anotherSyncNeeded = true;
|
||||
if( !finished ) {
|
||||
abortWithError(SyncFileItem::SoftError, tr("Local file changed during sync."));
|
||||
// FIXME: the legacy code was retrying for a few seconds.
|
||||
@@ -294,7 +288,7 @@ void PropagateUploadFileV1::slotPutFinished()
|
||||
|
||||
// Deletes an existing blacklist entry on successful chunk upload
|
||||
if (_item->_hasBlacklistEntry) {
|
||||
propagator()->_journal->wipeErrorBlacklistEntry(_item->_file);
|
||||
_propagator->_journal->wipeErrorBlacklistEntry(_item->_file);
|
||||
_item->_hasBlacklistEntry = false;
|
||||
}
|
||||
|
||||
@@ -310,9 +304,8 @@ void PropagateUploadFileV1::slotPutFinished()
|
||||
pi._chunk = (currentChunk + _startChunk + 1) % _chunkCount ; // next chunk to start with
|
||||
pi._transferid = _transferId;
|
||||
pi._modtime = Utility::qDateTimeFromTime_t(_item->_modtime);
|
||||
pi._errorCount = 0; // successful chunk upload resets
|
||||
propagator()->_journal->setUploadInfo(_item->_file, pi);
|
||||
propagator()->_journal->commit("Upload info");
|
||||
_propagator->_journal->setUploadInfo(_item->_file, pi);
|
||||
_propagator->_journal->commit("Upload info");
|
||||
startNextChunk();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -46,12 +46,12 @@ namespace OCC {
|
||||
* in the database. But in case of error, we need to remove the entries from the database of the files
|
||||
* that were deleted.
|
||||
*
|
||||
* \a path is relative to propagator()->_localDir + _item->_file and should start with a slash
|
||||
* \a path is relative to _propagator->_localDir + _item->_file and should start with a slash
|
||||
*/
|
||||
bool PropagateLocalRemove::removeRecursively(const QString& path)
|
||||
{
|
||||
bool success = true;
|
||||
QString absolute = propagator()->_localDir + _item->_file + path;
|
||||
QString absolute = _propagator->_localDir + _item->_file + path;
|
||||
QDirIterator di(absolute, QDir::AllEntries | QDir::Hidden | QDir::System | QDir::NoDotAndDotDot);
|
||||
|
||||
QVector<QPair<QString, bool>> deleted;
|
||||
@@ -77,7 +77,7 @@ bool PropagateLocalRemove::removeRecursively(const QString& path)
|
||||
if (success && !ok) {
|
||||
// We need to delete the entries from the database now from the deleted vector
|
||||
foreach(const auto &it, deleted) {
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile + path + QLatin1Char('/') + it.first,
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile + path + QLatin1Char('/') + it.first,
|
||||
it.second);
|
||||
}
|
||||
success = false;
|
||||
@@ -88,7 +88,7 @@ bool PropagateLocalRemove::removeRecursively(const QString& path)
|
||||
}
|
||||
if (!success && ok) {
|
||||
// This succeeded, so we need to delete it from the database now because the caller won't
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile + path + QLatin1Char('/') + di.fileName(),
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile + path + QLatin1Char('/') + di.fileName(),
|
||||
isDir);
|
||||
}
|
||||
}
|
||||
@@ -105,14 +105,14 @@ bool PropagateLocalRemove::removeRecursively(const QString& path)
|
||||
|
||||
void PropagateLocalRemove::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
QString filename = propagator()->_localDir + _item->_file;
|
||||
QString filename = _propagator->_localDir + _item->_file;
|
||||
|
||||
qDebug() << filename;
|
||||
|
||||
if( propagator()->localFileNameClash(_item->_file)) {
|
||||
if( _propagator->localFileNameClash(_item->_file)) {
|
||||
done(SyncFileItem::NormalError, tr("Could not remove %1 because of a local file name clash")
|
||||
.arg(QDir::toNativeSeparators(filename)));
|
||||
return;
|
||||
@@ -132,17 +132,17 @@ void PropagateLocalRemove::start()
|
||||
}
|
||||
}
|
||||
emit progress(*_item, 0);
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->_isDirectory);
|
||||
propagator()->_journal->commit("Local remove");
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile, _item->_isDirectory);
|
||||
_propagator->_journal->commit("Local remove");
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
|
||||
void PropagateLocalMkdir::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
QDir newDir(propagator()->getFilePath(_item->_file));
|
||||
QDir newDir(_propagator->getFilePath(_item->_file));
|
||||
QString newDirStr = QDir::toNativeSeparators(newDir.path());
|
||||
|
||||
// When turning something that used to be a file into a directory
|
||||
@@ -158,13 +158,13 @@ void PropagateLocalMkdir::start()
|
||||
}
|
||||
}
|
||||
|
||||
if( Utility::fsCasePreserving() && propagator()->localFileNameClash(_item->_file ) ) {
|
||||
if( Utility::fsCasePreserving() && _propagator->localFileNameClash(_item->_file ) ) {
|
||||
qDebug() << "WARN: new folder to create locally already exists!";
|
||||
done( SyncFileItem::NormalError, tr("Attention, possible case sensitivity clash with %1").arg(newDirStr) );
|
||||
return;
|
||||
}
|
||||
emit propagator()->touchedFile(newDirStr);
|
||||
QDir localDir(propagator()->_localDir);
|
||||
emit _propagator->touchedFile(newDirStr);
|
||||
QDir localDir(_propagator->_localDir);
|
||||
if (!localDir.mkpath(_item->_file)) {
|
||||
done( SyncFileItem::NormalError, tr("could not create folder %1").arg(newDirStr) );
|
||||
return;
|
||||
@@ -177,11 +177,11 @@ void PropagateLocalMkdir::start()
|
||||
// before the correct etag is stored.
|
||||
SyncJournalFileRecord record(*_item, newDirStr);
|
||||
record._etag = "_invalid_";
|
||||
if (!propagator()->_journal->setFileRecord(record)) {
|
||||
if (!_propagator->_journal->setFileRecord(record)) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
propagator()->_journal->commit("localMkdir");
|
||||
_propagator->_journal->commit("localMkdir");
|
||||
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
@@ -193,11 +193,11 @@ void PropagateLocalMkdir::setDeleteExistingFile(bool enabled)
|
||||
|
||||
void PropagateLocalRename::start()
|
||||
{
|
||||
if (propagator()->_abortRequested.fetchAndAddRelaxed(0))
|
||||
if (_propagator->_abortRequested.fetchAndAddRelaxed(0))
|
||||
return;
|
||||
|
||||
QString existingFile = propagator()->getFilePath(_item->_file);
|
||||
QString targetFile = propagator()->getFilePath(_item->_renameTarget);
|
||||
QString existingFile = _propagator->getFilePath(_item->_file);
|
||||
QString targetFile = _propagator->getFilePath(_item->_renameTarget);
|
||||
|
||||
// if the file is a file underneath a moved dir, the _item->file is equal
|
||||
// to _item->renameTarget and the file is not moved as a result.
|
||||
@@ -206,7 +206,7 @@ void PropagateLocalRename::start()
|
||||
qDebug() << "MOVE " << existingFile << " => " << targetFile;
|
||||
|
||||
if (QString::compare(_item->_file, _item->_renameTarget, Qt::CaseInsensitive) != 0
|
||||
&& propagator()->localFileNameClash(_item->_renameTarget)) {
|
||||
&& _propagator->localFileNameClash(_item->_renameTarget)) {
|
||||
// Only use localFileNameClash for the destination if we know that the source was not
|
||||
// the one conflicting (renaming A.txt -> a.txt is OK)
|
||||
|
||||
@@ -217,8 +217,8 @@ void PropagateLocalRename::start()
|
||||
return;
|
||||
}
|
||||
|
||||
emit propagator()->touchedFile(existingFile);
|
||||
emit propagator()->touchedFile(targetFile);
|
||||
emit _propagator->touchedFile(existingFile);
|
||||
emit _propagator->touchedFile(targetFile);
|
||||
QString renameError;
|
||||
if (!FileSystem::rename(existingFile, targetFile, &renameError)) {
|
||||
done(SyncFileItem::NormalError, renameError);
|
||||
@@ -227,8 +227,8 @@ void PropagateLocalRename::start()
|
||||
}
|
||||
|
||||
SyncJournalFileRecord oldRecord =
|
||||
propagator()->_journal->getFileRecord(_item->_originalFile);
|
||||
propagator()->_journal->deleteFileRecord(_item->_originalFile);
|
||||
_propagator->_journal->getFileRecord(_item->_originalFile);
|
||||
_propagator->_journal->deleteFileRecord(_item->_originalFile);
|
||||
|
||||
// store the rename file name in the item.
|
||||
const auto oldFile = _item->_file;
|
||||
@@ -242,18 +242,18 @@ void PropagateLocalRename::start()
|
||||
}
|
||||
|
||||
if (!_item->_isDirectory) { // Directories are saved at the end
|
||||
if (!propagator()->_journal->setFileRecord(record)) {
|
||||
if (!_propagator->_journal->setFileRecord(record)) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (!PropagateRemoteMove::adjustSelectiveSync(propagator()->_journal, oldFile, _item->_renameTarget)) {
|
||||
if (!PropagateRemoteMove::adjustSelectiveSync(_propagator->_journal, oldFile, _item->_renameTarget)) {
|
||||
done(SyncFileItem::FatalError, tr("Error writing metadata to the database"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
propagator()->_journal->commit("localRename");
|
||||
_propagator->_journal->commit("localRename");
|
||||
|
||||
done(SyncFileItem::Success);
|
||||
}
|
||||
|
||||
@@ -440,23 +440,7 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote )
|
||||
item->_errorString = tr("File is listed on the ignore list.");
|
||||
break;
|
||||
case CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS:
|
||||
if (item->_file.endsWith('.')) {
|
||||
item->_errorString = tr("File names ending with a period are not supported on this file system.");
|
||||
} else {
|
||||
char invalid = '\0';
|
||||
foreach(char x, QByteArray("\\:?*\"<>|")) {
|
||||
if (item->_file.contains(x)) {
|
||||
invalid = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (invalid) {
|
||||
item->_errorString = tr("File names containing the character '%1' are not supported on this file system.")
|
||||
.arg(QLatin1Char(invalid));
|
||||
} else {
|
||||
item->_errorString = tr("The file name is a reserved name on this file system.");
|
||||
}
|
||||
}
|
||||
item->_errorString = tr("Filename contains invalid characters that can not be synced cross platform.");
|
||||
break;
|
||||
case CSYNC_STATUS_INDIVIDUAL_TRAILING_SPACE:
|
||||
item->_errorString = tr("Filename contains trailing spaces.");
|
||||
|
||||
@@ -129,46 +129,42 @@ void SyncFileStatusTracker::slotPathTouched(const QString& fileName)
|
||||
emit fileStatusChanged(fileName, SyncFileStatus::StatusSync);
|
||||
}
|
||||
|
||||
void SyncFileStatusTracker::incSyncCountAndEmitStatusChanged(const QString &relativePath, SharedFlag sharedFlag)
|
||||
void SyncFileStatusTracker::incSyncCount(const QString &relativePath, EmitStatusChangeFlag emitStatusChange)
|
||||
{
|
||||
// Will return 0 (and increase to 1) if the path wasn't in the map yet
|
||||
int count = _syncCount[relativePath]++;
|
||||
if (!count) {
|
||||
SyncFileStatus status = sharedFlag == UnknownShared
|
||||
? fileStatus(relativePath)
|
||||
: resolveSyncAndErrorStatus(relativePath, sharedFlag);
|
||||
emit fileStatusChanged(getSystemDestination(relativePath), status);
|
||||
if (emitStatusChange)
|
||||
emit fileStatusChanged(getSystemDestination(relativePath), fileStatus(relativePath));
|
||||
|
||||
// We passed from OK to SYNC, increment the parent to keep it marked as
|
||||
// SYNC while we propagate ourselves and our own children.
|
||||
Q_ASSERT(!relativePath.endsWith('/'));
|
||||
int lastSlashIndex = relativePath.lastIndexOf('/');
|
||||
if (lastSlashIndex != -1)
|
||||
incSyncCountAndEmitStatusChanged(relativePath.left(lastSlashIndex), UnknownShared);
|
||||
incSyncCount(relativePath.left(lastSlashIndex), EmitStatusChange);
|
||||
else if (!relativePath.isEmpty())
|
||||
incSyncCountAndEmitStatusChanged(QString(), UnknownShared);
|
||||
incSyncCount(QString(), EmitStatusChange);
|
||||
}
|
||||
}
|
||||
|
||||
void SyncFileStatusTracker::decSyncCountAndEmitStatusChanged(const QString &relativePath, SharedFlag sharedFlag)
|
||||
void SyncFileStatusTracker::decSyncCount(const QString &relativePath, EmitStatusChangeFlag emitStatusChange)
|
||||
{
|
||||
int count = --_syncCount[relativePath];
|
||||
if (!count) {
|
||||
// Remove from the map, same as 0
|
||||
_syncCount.remove(relativePath);
|
||||
|
||||
SyncFileStatus status = sharedFlag == UnknownShared
|
||||
? fileStatus(relativePath)
|
||||
: resolveSyncAndErrorStatus(relativePath, sharedFlag);
|
||||
emit fileStatusChanged(getSystemDestination(relativePath), status);
|
||||
if (emitStatusChange)
|
||||
emit fileStatusChanged(getSystemDestination(relativePath), fileStatus(relativePath));
|
||||
|
||||
// We passed from SYNC to OK, decrement our parent.
|
||||
Q_ASSERT(!relativePath.endsWith('/'));
|
||||
int lastSlashIndex = relativePath.lastIndexOf('/');
|
||||
if (lastSlashIndex != -1)
|
||||
decSyncCountAndEmitStatusChanged(relativePath.left(lastSlashIndex), UnknownShared);
|
||||
decSyncCount(relativePath.left(lastSlashIndex), EmitStatusChange);
|
||||
else if (!relativePath.isEmpty())
|
||||
decSyncCountAndEmitStatusChanged(QString(), UnknownShared);
|
||||
decSyncCount(QString(), EmitStatusChange);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +177,6 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector& items)
|
||||
|
||||
foreach (const SyncFileItemPtr &item, items) {
|
||||
// qDebug() << Q_FUNC_INFO << "Investigating" << item->destination() << item->_status << item->_instruction;
|
||||
_dirtyPaths.remove(item->destination());
|
||||
|
||||
if (showErrorInSocketApi(*item)) {
|
||||
_syncProblems[item->_file] = SyncFileStatus::StatusError;
|
||||
@@ -190,16 +185,18 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector& items)
|
||||
_syncProblems[item->_file] = SyncFileStatus::StatusWarning;
|
||||
}
|
||||
|
||||
SharedFlag sharedFlag = item->_remotePerm.contains("S") ? Shared : NotShared;
|
||||
// Mark this path as syncing for instructions that will result in propagation,
|
||||
// but DontEmitStatusChange since we're going to emit for ourselves using the
|
||||
// info in the SyncFileItem we received, parents will still be emit if needed.
|
||||
if (item->_instruction != CSYNC_INSTRUCTION_NONE
|
||||
&& item->_instruction != CSYNC_INSTRUCTION_UPDATE_METADATA
|
||||
&& item->_instruction != CSYNC_INSTRUCTION_IGNORE
|
||||
&& item->_instruction != CSYNC_INSTRUCTION_ERROR) {
|
||||
// Mark this path as syncing for instructions that will result in propagation.
|
||||
incSyncCountAndEmitStatusChanged(item->destination(), sharedFlag);
|
||||
} else {
|
||||
emit fileStatusChanged(getSystemDestination(item->destination()), resolveSyncAndErrorStatus(item->destination(), sharedFlag));
|
||||
incSyncCount(item->destination(), DontEmitStatusChange);
|
||||
}
|
||||
|
||||
_dirtyPaths.remove(item->destination());
|
||||
emit fileStatusChanged(getSystemDestination(item->destination()), resolveSyncAndErrorStatus(item->destination(), item->_remotePerm.contains("S") ? Shared : NotShared));
|
||||
}
|
||||
|
||||
// Some metadata status won't trigger files to be synced, make sure that we
|
||||
@@ -236,16 +233,14 @@ void SyncFileStatusTracker::slotItemCompleted(const SyncFileItem &item)
|
||||
_syncProblems.erase(item._file);
|
||||
}
|
||||
|
||||
SharedFlag sharedFlag = item._remotePerm.contains("S") ? Shared : NotShared;
|
||||
// decSyncCount calls *must* be symetric with incSyncCount calls in slotAboutToPropagate
|
||||
if (item._instruction != CSYNC_INSTRUCTION_NONE
|
||||
&& item._instruction != CSYNC_INSTRUCTION_UPDATE_METADATA
|
||||
&& item._instruction != CSYNC_INSTRUCTION_IGNORE
|
||||
&& item._instruction != CSYNC_INSTRUCTION_ERROR) {
|
||||
// decSyncCount calls *must* be symetric with incSyncCount calls in slotAboutToPropagate
|
||||
decSyncCountAndEmitStatusChanged(item.destination(), sharedFlag);
|
||||
} else {
|
||||
emit fileStatusChanged(getSystemDestination(item.destination()), resolveSyncAndErrorStatus(item.destination(), sharedFlag));
|
||||
decSyncCount(item.destination(), DontEmitStatusChange);
|
||||
}
|
||||
emit fileStatusChanged(getSystemDestination(item.destination()), resolveSyncAndErrorStatus(item.destination(), item._remotePerm.contains("S") ? Shared : NotShared));
|
||||
}
|
||||
|
||||
void SyncFileStatusTracker::slotSyncFinished()
|
||||
@@ -259,10 +254,10 @@ void SyncFileStatusTracker::slotSyncFinished()
|
||||
|
||||
void SyncFileStatusTracker::slotSyncEngineRunningChanged()
|
||||
{
|
||||
emit fileStatusChanged(getSystemDestination(QString()), resolveSyncAndErrorStatus(QString(), NotShared));
|
||||
emit fileStatusChanged(_syncEngine->localPath(), resolveSyncAndErrorStatus(QString(), NotShared));
|
||||
}
|
||||
|
||||
SyncFileStatus SyncFileStatusTracker::resolveSyncAndErrorStatus(const QString &relativePath, SharedFlag sharedFlag, PathKnownFlag isPathKnown)
|
||||
SyncFileStatus SyncFileStatusTracker::resolveSyncAndErrorStatus(const QString &relativePath, SharedFlag isShared, PathKnownFlag isPathKnown)
|
||||
{
|
||||
// If it's a new file and that we're not syncing it yet,
|
||||
// don't show any icon and wait for the filesystem watcher to trigger a sync.
|
||||
@@ -277,9 +272,7 @@ SyncFileStatus SyncFileStatusTracker::resolveSyncAndErrorStatus(const QString &r
|
||||
status.set(problemStatus);
|
||||
}
|
||||
|
||||
// The shared status needs to have been fetched from a SyncFileItem or the DB at this point.
|
||||
Q_ASSERT(sharedFlag != UnknownShared);
|
||||
if (sharedFlag == Shared)
|
||||
if (isShared)
|
||||
status.setSharedWithMe(true);
|
||||
|
||||
return status;
|
||||
|
||||
@@ -51,22 +51,20 @@ private slots:
|
||||
void slotSyncEngineRunningChanged();
|
||||
|
||||
private:
|
||||
enum SharedFlag { UnknownShared, NotShared, Shared };
|
||||
enum SharedFlag { NotShared = 0, Shared };
|
||||
enum PathKnownFlag { PathUnknown = 0, PathKnown };
|
||||
SyncFileStatus resolveSyncAndErrorStatus(const QString &relativePath, SharedFlag sharedState, PathKnownFlag isPathKnown = PathKnown);
|
||||
enum EmitStatusChangeFlag { DontEmitStatusChange = 0, EmitStatusChange };
|
||||
SyncFileStatus resolveSyncAndErrorStatus(const QString &relativePath, SharedFlag isShared, PathKnownFlag isPathKnown = PathKnown);
|
||||
|
||||
void invalidateParentPaths(const QString& path);
|
||||
QString getSystemDestination(const QString& relativePath);
|
||||
void incSyncCountAndEmitStatusChanged(const QString &relativePath, SharedFlag sharedState);
|
||||
void decSyncCountAndEmitStatusChanged(const QString &relativePath, SharedFlag sharedState);
|
||||
void incSyncCount(const QString &relativePath, EmitStatusChangeFlag emitStatusChange);
|
||||
void decSyncCount(const QString &relativePath, EmitStatusChangeFlag emitStatusChange);
|
||||
|
||||
SyncEngine* _syncEngine;
|
||||
|
||||
std::map<QString, SyncFileStatus::SyncFileStatusTag> _syncProblems;
|
||||
QSet<QString> _dirtyPaths;
|
||||
// Counts the number direct children currently being synced (has unfinished propagation jobs).
|
||||
// We'll show a file/directory as SYNC as long as its sync count is > 0.
|
||||
// A directory that starts/ends propagation will in turn increase/decrease its own parent by 1.
|
||||
QHash<QString, int> _syncCount;
|
||||
};
|
||||
|
||||
|
||||
@@ -64,12 +64,8 @@ bool SyncJournalDb::maybeMigrateDb(const QString& localPath, const QString& abso
|
||||
if( !FileSystem::fileExists(oldDbName) ) {
|
||||
return true;
|
||||
}
|
||||
const QString oldDbNameShm = oldDbName + "-shm";
|
||||
const QString oldDbNameWal = oldDbName + "-wal";
|
||||
|
||||
const QString newDbName = absoluteJournalPath;
|
||||
const QString newDbNameShm = newDbName + "-shm";
|
||||
const QString newDbNameWal = newDbName + "-wal";
|
||||
|
||||
// Whenever there is an old db file, migrate it to the new db path.
|
||||
// This is done to make switching from older versions to newer versions
|
||||
@@ -84,36 +80,12 @@ bool SyncJournalDb::maybeMigrateDb(const QString& localPath, const QString& abso
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if( FileSystem::fileExists( newDbNameWal ) ) {
|
||||
if( !FileSystem::remove(newDbNameWal, &error) ) {
|
||||
qDebug() << "Database migration: Could not remove db WAL file" << newDbNameWal
|
||||
<< "due to" << error;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if( FileSystem::fileExists( newDbNameShm ) ) {
|
||||
if( !FileSystem::remove(newDbNameShm, &error) ) {
|
||||
qDebug() << "Database migration: Could not remove db SHM file" << newDbNameShm
|
||||
<< "due to" << error;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if( !FileSystem::rename(oldDbName, newDbName, &error) ) {
|
||||
qDebug() << "Database migration: could not rename " << oldDbName
|
||||
<< "to" << newDbName << ":" << error;
|
||||
return false;
|
||||
}
|
||||
if( !FileSystem::rename(oldDbNameWal, newDbNameWal, &error) ) {
|
||||
qDebug() << "Database migration: could not rename " << oldDbNameWal
|
||||
<< "to" << newDbNameWal << ":" << error;
|
||||
return false;
|
||||
}
|
||||
if( !FileSystem::rename(oldDbNameShm, newDbNameShm, &error) ) {
|
||||
qDebug() << "Database migration: could not rename " << oldDbNameShm
|
||||
<< "to" << newDbNameShm << ":" << error;
|
||||
return false;
|
||||
}
|
||||
|
||||
qDebug() << "Journal successfully migrated from" << oldDbName << "to" << newDbName;
|
||||
return true;
|
||||
|
||||
@@ -121,7 +121,7 @@ bool SyncJournalErrorBlacklistRecord::isValid() const
|
||||
{
|
||||
return ! _file.isEmpty()
|
||||
&& (!_lastTryEtag.isEmpty() || _lastTryModtime != 0)
|
||||
&& _lastTryTime > 0;
|
||||
&& _lastTryTime > 0 && _ignoreDuration > 0;
|
||||
}
|
||||
|
||||
SyncJournalErrorBlacklistRecord SyncJournalErrorBlacklistRecord::update(
|
||||
@@ -163,7 +163,6 @@ SyncJournalErrorBlacklistRecord SyncJournalErrorBlacklistRecord::update(
|
||||
qDebug() << "Fatal Error condition" << item._httpErrorCode << ", maximum blacklist ignore time!";
|
||||
entry._ignoreDuration = maxBlacklistTime;
|
||||
}
|
||||
|
||||
entry._ignoreDuration = qBound(minBlacklistTime, entry._ignoreDuration, maxBlacklistTime);
|
||||
|
||||
qDebug() << "blacklisting " << item._file
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
._*
|
||||
]Thumbs.db
|
||||
desktop.ini
|
||||
System Volume Information
|
||||
|
||||
.*.sw?
|
||||
.*.*sw?
|
||||
|
||||
@@ -2,7 +2,6 @@ include_directories(${CMAKE_BINARY_DIR}/csync ${CMAKE_BINARY_DIR}/csync/src ${CM
|
||||
include_directories(${CMAKE_SOURCE_DIR}/csync/src/)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/csync/src/std ${CMAKE_SOURCE_DIR}/src)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
||||
|
||||
include(QtVersionAbstraction)
|
||||
setup_qt()
|
||||
@@ -49,7 +48,6 @@ if(HAVE_QT5 AND NOT BUILD_WITH_QT4)
|
||||
owncloud_add_test(SyncEngine "syncenginetestutils.h")
|
||||
owncloud_add_test(SyncFileStatusTracker "syncenginetestutils.h")
|
||||
owncloud_add_test(ChunkingNg "syncenginetestutils.h")
|
||||
owncloud_add_test(UploadReset "syncenginetestutils.h")
|
||||
endif(HAVE_QT5 AND NOT BUILD_WITH_QT4)
|
||||
|
||||
SET(FolderMan_SRC ../src/gui/folderman.cpp)
|
||||
|
||||
@@ -64,7 +64,6 @@ public:
|
||||
virtual void appendByte(const QString &relativePath) = 0;
|
||||
virtual void mkdir(const QString &relativePath) = 0;
|
||||
virtual void rename(const QString &relativePath, const QString &relativeDestinationDirectory) = 0;
|
||||
virtual void setModTime(const QString &relativePath, const QDateTime &modTime) = 0;
|
||||
};
|
||||
|
||||
class DiskFileModifier : public FileModifier
|
||||
@@ -115,9 +114,6 @@ public:
|
||||
QVERIFY(_rootDir.exists(from));
|
||||
QVERIFY(_rootDir.rename(from, to));
|
||||
}
|
||||
void setModTime(const QString &relativePath, const QDateTime &modTime) override {
|
||||
OCC::FileSystem::setModTime(_rootDir.filePath(relativePath), OCC::Utility::qDateTimeToTime_t(modTime));
|
||||
}
|
||||
};
|
||||
|
||||
class FileInfo : public FileModifier
|
||||
@@ -205,12 +201,6 @@ public:
|
||||
dir->children.insert(newPathComponents.fileName(), std::move(fi));
|
||||
}
|
||||
|
||||
void setModTime(const QString &relativePath, const QDateTime &modTime) override {
|
||||
FileInfo *file = findInvalidatingEtags(relativePath);
|
||||
Q_ASSERT(file);
|
||||
file->lastModified = modTime;
|
||||
}
|
||||
|
||||
FileInfo *find(const PathComponents &pathComponents, const bool invalidateEtags = false) {
|
||||
if (pathComponents.isEmpty()) {
|
||||
if (invalidateEtags)
|
||||
@@ -589,10 +579,9 @@ public:
|
||||
char payload = '*';
|
||||
|
||||
do {
|
||||
QString chunkName = QString::number(count).rightJustified(8, '0');
|
||||
if (!sourceFolder->children.contains(chunkName))
|
||||
if (!sourceFolder->children.contains(QString::number(count)))
|
||||
break;
|
||||
auto &x = sourceFolder->children[chunkName];
|
||||
auto &x = sourceFolder->children[QString::number(count)];
|
||||
Q_ASSERT(!x.isDir);
|
||||
Q_ASSERT(x.size > 0); // There should not be empty chunks
|
||||
size += x.size;
|
||||
@@ -652,7 +641,6 @@ public:
|
||||
|
||||
Q_INVOKABLE void respond() {
|
||||
setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 500);
|
||||
setError(InternalServerError, "Internal Server Fake Error");
|
||||
emit metaDataChanged();
|
||||
emit finished();
|
||||
}
|
||||
|
||||
@@ -28,24 +28,6 @@ public:
|
||||
}
|
||||
return SyncFileStatus();
|
||||
}
|
||||
|
||||
bool statusEmittedBefore(const QString &firstPath, const QString &secondPath) const {
|
||||
QFileInfo firstFile(_syncEngine.localPath(), firstPath);
|
||||
QFileInfo secondFile(_syncEngine.localPath(), secondPath);
|
||||
// Start from the end to get the latest status
|
||||
int i = size() - 1;
|
||||
for (; i >= 0; --i) {
|
||||
if (QFileInfo(at(i)[0].toString()) == secondFile)
|
||||
break;
|
||||
else if (QFileInfo(at(i)[0].toString()) == firstFile)
|
||||
return false;
|
||||
}
|
||||
for (; i >= 0; --i) {
|
||||
if (QFileInfo(at(i)[0].toString()) == firstFile)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class TestSyncFileStatusTracker : public QObject
|
||||
@@ -387,28 +369,6 @@ private slots:
|
||||
QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("A/a"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
|
||||
}
|
||||
|
||||
// Even for status pushes immediately following each other, macOS
|
||||
// can sometimes have 1s delays between updates, so make sure that
|
||||
// children are marked as OK before their parents do.
|
||||
void childOKEmittedBeforeParent() {
|
||||
FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
|
||||
fakeFolder.localModifier().appendByte("B/b1");
|
||||
fakeFolder.remoteModifier().appendByte("C/c1");
|
||||
StatusPushSpy statusSpy(fakeFolder.syncEngine());
|
||||
|
||||
fakeFolder.syncOnce();
|
||||
verifyThatPushMatchesPull(fakeFolder, statusSpy);
|
||||
QVERIFY(statusSpy.statusEmittedBefore("B/b1", "B"));
|
||||
QVERIFY(statusSpy.statusEmittedBefore("C/c1", "C"));
|
||||
QVERIFY(statusSpy.statusEmittedBefore("B", ""));
|
||||
QVERIFY(statusSpy.statusEmittedBefore("C", ""));
|
||||
QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusUpToDate));
|
||||
QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
|
||||
QCOMPARE(statusSpy.statusOf("B/b1"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
|
||||
QCOMPARE(statusSpy.statusOf("C"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
|
||||
QCOMPARE(statusSpy.statusOf("C/c1"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
|
||||
}
|
||||
|
||||
void sharedStatus() {
|
||||
SyncFileStatus sharedUpToDateStatus(SyncFileStatus::StatusUpToDate);
|
||||
sharedUpToDateStatus.setSharedWithMe(true);
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
* This software is in the public domain, furnished "as is", without technical
|
||||
* support, and with no warranty, express or implied, as to its usefulness for
|
||||
* any purpose.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <QtTest>
|
||||
#include "syncenginetestutils.h"
|
||||
#include <syncengine.h>
|
||||
#include <syncjournaldb.h>
|
||||
|
||||
using namespace OCC;
|
||||
|
||||
class TestUploadReset : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
|
||||
// Verify that the chunked transfer eventually gets reset with the new chunking
|
||||
void testFileUploadNg() {
|
||||
FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
|
||||
|
||||
fakeFolder.syncEngine().account()->setCapabilities({ { "dav", QVariantMap{
|
||||
{"chunking", "1.0"},
|
||||
{"httpErrorCodesThatResetFailingChunkedUploads", QVariantList{500} } } } });
|
||||
|
||||
const int size = 100 * 1000 * 1000; // 100 MB
|
||||
fakeFolder.localModifier().insert("A/a0", size);
|
||||
QDateTime modTime = QDateTime::currentDateTime();
|
||||
fakeFolder.localModifier().setModTime("A/a0", modTime);
|
||||
|
||||
// Create a transfer id, so we can make the final MOVE fail
|
||||
SyncJournalDb::UploadInfo uploadInfo;
|
||||
uploadInfo._transferid = 1;
|
||||
uploadInfo._valid = true;
|
||||
uploadInfo._modtime = modTime;
|
||||
fakeFolder.syncEngine().journal()->setUploadInfo("A/a0", uploadInfo);
|
||||
|
||||
fakeFolder.uploadState().mkdir("1");
|
||||
fakeFolder.serverErrorPaths().append("1/.file");
|
||||
|
||||
QVERIFY(!fakeFolder.syncOnce());
|
||||
|
||||
uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
|
||||
QCOMPARE(uploadInfo._errorCount, 1);
|
||||
QCOMPARE(uploadInfo._transferid, 1);
|
||||
|
||||
fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
|
||||
QVERIFY(!fakeFolder.syncOnce());
|
||||
|
||||
uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
|
||||
QCOMPARE(uploadInfo._errorCount, 2);
|
||||
QCOMPARE(uploadInfo._transferid, 1);
|
||||
|
||||
fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
|
||||
QVERIFY(!fakeFolder.syncOnce());
|
||||
|
||||
uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
|
||||
QCOMPARE(uploadInfo._errorCount, 3);
|
||||
QCOMPARE(uploadInfo._transferid, 1);
|
||||
|
||||
fakeFolder.syncEngine().journal()->wipeErrorBlacklist();
|
||||
QVERIFY(!fakeFolder.syncOnce());
|
||||
|
||||
uploadInfo = fakeFolder.syncEngine().journal()->getUploadInfo("A/a0");
|
||||
QCOMPARE(uploadInfo._errorCount, 0);
|
||||
QCOMPARE(uploadInfo._transferid, 0);
|
||||
QVERIFY(!uploadInfo._valid);
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_GUILESS_MAIN(TestUploadReset)
|
||||
#include "testuploadreset.moc"
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Error en escriure les metadades a la base de dades</translation>
|
||||
</message>
|
||||
@@ -604,160 +604,160 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>El fitxer local %1 no existeix.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 hauria de ser una carpeta, però no ho és.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>No es pot llegir %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>S'ha esborrat '%1'</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>S'ha descarregat %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>S'ha actualitzat %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 s'ha reanomenat a %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 s'ha mogut a %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 i %n altre fitxer s'ha esborrat.</numerusform><numerusform>%1 i %n altres fitxers s'han esborrat.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 i %n altre fitxer s'han descarregat.</numerusform><numerusform>%1 i %n altres fitxers s'han descarregat.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 i %n altre fitxer s'han actualitzat.</numerusform><numerusform>%1 i %n altres fitxers s'han actualitzat.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 s'ha reanomenat a %2 i %n altre fitxer s'ha reanomenat.</numerusform><numerusform>%1 s'ha reanomenat a %2 i %n altres fitxers s'han reanomenat.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 s'ha mogut a %2 i %n altre fitxer s'ha mogut.</numerusform><numerusform>%1 s'ha mogut a %2 i %n altres fitxers s'han mogut.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 i %n altre fitxer tenen conflictes de sincronització</numerusform><numerusform>%1 i %n altres fitxers tenen conflictes de sincronització</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>%1 té conflictes de sincronització. Comproveu el fitxer conflictiu!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 i %n altre fitxer no s'han sincronitzat per errors.
|
||||
Consulteu el registre per obtenir més informació.</numerusform><numerusform>%1 i %n altres fitxers no s'han sincronitzat per errors.
|
||||
Consulteu el registre per obtenir més informació.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 no s'ha pogut sincronitzar degut a un error. Mireu el registre per més detalls.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Activitat de sincronització</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>No s'ha pogut llegir el fitxer d'exclusió del sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>S'ha afegit una carpeta nova de més de %1 MB: %2.
|
||||
Aneu a arranjament per seleccionar-la si voleu descarregar-la.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Esborra tots els fitxers?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Esborra tots els fitxers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Mantén els fitxers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Copia de seguretat detectada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Sincronització normal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Manté els fitxers locals com a conflicte</translation>
|
||||
</message>
|
||||
@@ -1406,27 +1406,27 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Versió nova disponible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Hi ha una nova versió del client %1 disponible.</p><p><b>%2</b> està disponible per a la baixada. La versió instal·lada és la %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Omet aquesta versió</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Omet aquesta vegada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Obtingueu l'actualització</translation>
|
||||
</message>
|
||||
@@ -1572,59 +1572,59 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Nova actualització de %1 preparada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>S'instal·lara un nova actualització per %1. L'actualitzador pot demanar
|
||||
privilegis addicionals durant el procés.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Descarregat la versió %1. Espeu si us play...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>No s'ha pogut decarregar l'actualització. Si us plau, cliqueu <a href='%1'>aqui</a>per descarregar l'actualització manualment.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>No s'ha pogut comprovar si hi ha actualitzacions.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>Versió %2 de %1 disponible. Reinicieu l'aplicació per començar l'actualització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Nova versió %1 de %2 disponible. Utilitzeu l'eina d'actualització del sistema per instal·lar-la.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Comprovació d'actualitzacions al servidor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Es desconeix l'estat de les actualitzacions: no s'ha comprovat si hi ha actualitzacions noves.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>No hi ha actualitzacions disponibles. La instal·lació ja es troba en la versió més recent.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Comprova les actualitzacions</translation>
|
||||
</message>
|
||||
@@ -1949,7 +1949,7 @@ No és aconsellada usar-la.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Error en escriure les metadades a la base de dades</translation>
|
||||
</message>
|
||||
@@ -2005,17 +2005,17 @@ No és aconsellada usar-la.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Ha fallat la restauració: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2148,7 +2148,7 @@ No és aconsellada usar-la.</translation>
|
||||
<translation>El fitxer local ha canviat durant la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Error en escriure les metadades a la base de dades</translation>
|
||||
</message>
|
||||
@@ -2156,32 +2156,32 @@ No és aconsellada usar-la.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>El fitxer local s'ha eliminat durant la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>El fitxer local ha canviat durant la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2189,32 +2189,32 @@ No és aconsellada usar-la.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>El fitxer s'ha editat localment però és part d'una compartició només de lectura. S'ha restaurat i la vostra edició és en el fitxer en conflicte.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>El fitxer local s'ha eliminat durant la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>El fitxer local ha canviat durant la sincronització.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2656,7 +2656,7 @@ No és aconsellada usar-la.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Comparteix amb %1</translation>
|
||||
@@ -2950,23 +2950,23 @@ No és aconsellada usar-la.</translation>
|
||||
<translation>Error en llegir la carpeta.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>El fitxer/carpeta s'ha ignorat perquè és ocult.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2985,6 +2985,11 @@ No és aconsellada usar-la.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Aturat per l'usuari</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>El nom del fitxer conté caràcters no vàlids que no es poden sincronitzar entre plataformes.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3036,114 +3041,99 @@ No és aconsellada usar-la.</translation>
|
||||
<translation>El fitxer està a la llista d'ignorats.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>El nom de fitxer és massa llarg.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>La codificació del nom de fitxer no és vàlida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Caràcters no vàlids. Reanomeneu "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>No es pot inicialitzar un periòdic de sincronització</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>No es pot obrir el diari de sincronització</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>El nom del fitxer conté al menys un caràcter invàlid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>S'ignora degut al filtre a «Trieu què sincronitzar»</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>No es permet l'eliminació, es restaura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Fitxers locals i carpeta compartida esborrats.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>No es permet moure'l, l'element es restaura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>No es permet moure perquè %1 només és de lectura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>el destí</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>l'origen</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Chyba zápisu metadat do databáze</translation>
|
||||
</message>
|
||||
@@ -604,119 +604,119 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Místní adresář %1 neexistuje.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 by měl být adresář, ale není.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 není čitelný.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 byl odebrán.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 byl stažen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 byl aktualizován.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 byl přejmenován na %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 byl přemístěn do %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 soubor bude smazán.</numerusform><numerusform>%1 a %n další soubory budou smazány.</numerusform><numerusform>%1 a %n další soubory budou smazány.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 soubor byl stažen.</numerusform><numerusform>%1 a %n další soubory byly staženy.</numerusform><numerusform>%1 a %n další soubory byly staženy.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 soubor byl aktualizován.</numerusform><numerusform>%1 a %n další soubory byly aktualizovány.</numerusform><numerusform>%1 a %n další soubory byly aktualizovány.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 byl přejmenován na %2.</numerusform><numerusform>%1 byl přejmenován na %2 a %n další soubory byly přejmenovány.</numerusform><numerusform>%1 byl přejmenován na %2 a %n další soubory byly přejmenovány.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 byl přesunut do %2.</numerusform><numerusform>%1 byl přesunut do %2 a %n dalších souborů bylo přesunuto.</numerusform><numerusform>%1 byl přesunut do %2 a %n dalších souborů bylo přesunuto.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 má problém se synchronizací.</numerusform><numerusform>%1 a %n dalších souborů má problém se synchronizací.</numerusform><numerusform>%1 a %n dalších souborů má problém se synchronizací.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>%1 má problém se synchronizací. Prosím zkontrolujte chybový soubor.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 soubor nemůže být synchronizován kvůli chybám. Shlédněte log pro detaily.</numerusform><numerusform>%1 a %n dalších souborů nemohou být synchronizovány kvůli chybám. Shlédněte log pro detaily.</numerusform><numerusform>%1 a %n dalších souborů nemohou být synchronizovány kvůli chybám. Shlédněte log pro detaily.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 nebyl kvůli chybě synchronizován. Detaily jsou k nalezení v logu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Průběh synchronizace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Nezdařilo se přečtení systémového exclude souboru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Byl přidán nový adresář %2 větší než %1 MB.
|
||||
Pokud ho chcete stáhnout, přejděte prosím do nastavení a označte ho.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -725,22 +725,22 @@ Toto může být způsobeno změnou v nastavení synchronizace adresáře nebo t
|
||||
Opravdu chcete provést tuto akci?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Odstranit všechny soubory?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Odstranit všechny soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Ponechat soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -749,17 +749,17 @@ Toto může být způsobeno obnovením zálohy na straně serveru.
|
||||
Pokračováním v synchronizaci způsobí přepsání všech vašich souborů staršími soubory z dřívějšího stavu. Přejete si ponechat své místní nejaktuálnější soubory jako konfliktní soubory?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Záloha nalezena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Normální synchronizace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Ponechat místní soubory jako konflikt</translation>
|
||||
</message>
|
||||
@@ -1408,27 +1408,27 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Je dostupná nová verze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Je k dispozici nová verze klienta %1.</p><p><b>%2</b> je k dispozici ke stažení. Momentálně je nainstalována verze %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Přeskoč tuto verzi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Tentokrát přeskočit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Získat aktualizaci</translation>
|
||||
</message>
|
||||
@@ -1574,59 +1574,59 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Je připravena nová aktualizace %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Bude instalována nová aktualizace pro %1. V průběhu aktualizace
|
||||
můžete být požádáni o dodatečná oprávnění.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Stahuji verzi %1. Počkejte prosím ...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Nemohu stáhnout aktualizaci. Klikněte prosím na <a href='%1'>tento odkaz</a> pro ruční stažení aktualizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Nemohu zkontrolovat aktualizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>Je dostupná %1 verze %2. Restartujte aplikaci pro spuštění aktualizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Je dostupná nová %1 verze %2. Pro instalaci prosím použijte systémového správce aktualizací.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Kontroluji aktualizační server...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Stav aktualizace neznámý: Nové aktualizace nebyly zkontrolovány.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Žádne aktualizace nejsou k dispozici. Používáte aktuální verzi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Ověřit aktualizace</translation>
|
||||
</message>
|
||||
@@ -1951,7 +1951,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Chyba zápisu metadat do databáze</translation>
|
||||
</message>
|
||||
@@ -2007,17 +2007,17 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Obnovení selhalo: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Pokračovat v blacklistingu:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation>Soubor nebo adresář by odebrán ze sdílení pouze pro čtení, ale jeho obnovení selhalo: %1</translation>
|
||||
</message>
|
||||
@@ -2150,7 +2150,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Místní soubor byl změněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Chyba zápisu metadat do databáze</translation>
|
||||
</message>
|
||||
@@ -2158,32 +2158,32 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Místní soubor byl odstraněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Místní soubor byl změněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation>Neočekávaný návratový kód ze serveru (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation>Chybějící souborové ID ze serveru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation>Chybějící ETag ze serveru</translation>
|
||||
</message>
|
||||
@@ -2191,32 +2191,32 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Soubor zde byl editován, ale je součástí sdílení pouze pro čtení. Původní soubor byl obnoven a editovaná verze je uložena v konfliktním souboru.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Chybí adresa URL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Místní soubor byl odstraněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Místní soubor byl změněn během synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Server nepotvrdil poslední část dat. (Nebyl nalezen e-tag)</translation>
|
||||
</message>
|
||||
@@ -2658,7 +2658,7 @@ Nedoporučuje se jí používat.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Sdílet s %1</translation>
|
||||
@@ -2952,23 +2952,23 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Chyba při čtení adresáře.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Soubor/adresář je ignorován, protože je skrytý.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Je dostupných pouze %1, pro spuštění je potřeba alespoň %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře</translation>
|
||||
</message>
|
||||
@@ -2987,6 +2987,11 @@ Nedoporučuje se jí používat.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Zrušeno uživatelem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>Jméno souboru obsahuje neplatné znaky, které neumožňují synchronizaci mezi různými platformami.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3038,114 +3043,99 @@ Nedoporučuje se jí používat.</translation>
|
||||
<translation>Soubor se nachází na seznamu ignorovaných.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation>Jméno souboru obsahuje mezery na konci řádky.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Jméno souboru je moc dlouhé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Stat selhal.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>Kódování znaků jména soubor je neplatné</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Neplatné znaky, prosím přejmenujte "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Nemohu inicializovat synchronizační žurnál.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation>Nelze načíst blacklist z místní databáze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation>Nelze číst ze žurnálu synchronizace.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Nelze otevřít synchronizační žurnál</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Jméno souboru obsahuje aelspoň jeden neplatný znak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Ignorováno podle nastavení "vybrat co synchronizovat"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Odstranění není povoleno, obnovuji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Místní soubory a sdílený adresář byly odstraněny.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Přesun není povolen, položka obnovena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Přesun není povolen, protože %1 je pouze pro čtení</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>cílové umístění</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>zdroj</translation>
|
||||
</message>
|
||||
|
||||
+95
-105
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Fehler beim Schreiben der Metadaten in die Datenbank</translation>
|
||||
</message>
|
||||
@@ -604,118 +604,118 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Lokales Verzeichnis %1 existiert nicht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 sollte ein Ordner sein, ist es aber nicht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 ist nicht lesbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 wurde gelöscht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 wurde heruntergeladen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 wurde aktualisiert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 wurde in %2 umbenannt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 wurde in %2 verschoben.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei wurde gelöscht.</numerusform><numerusform>%1 und %n andere Dateien wurden gelöscht.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei wurde heruntergeladen.</numerusform><numerusform>%1 und %n andere Dateien wurden heruntergeladen.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei wurde aktualisiert.</numerusform><numerusform>%1 und %n andere Dateien wurden aktualisiert.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 wurde in %2 umbenannt und %n andere Datei wurde umbenannt.</numerusform><numerusform>%1 wurde in %2 umbenannt und %n andere Dateien wurden umbenannt.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 wurde in %2 verschoben und %n andere Datei wurde verschoben.</numerusform><numerusform>%1 wurde in %2 verschoben und %n andere Dateien wurden verschoben.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 und %n andere Datei haben Konflikte beim Abgleichen.</numerusform><numerusform>%1 und %n andere Dateien haben Konflikte beim Abgleichen.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.</numerusform><numerusform>%1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Synchronisierungsaktivität</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Systemeigene Ausschlussdatei kann nicht gelesen werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Ein neue Order größer als %1 MB wurde hinzugefügt: %2. Bitte besuchen Sie die Einstellungen, falls sie ihn herunterladen wollen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -724,22 +724,22 @@ Die Ursache ist, dass der Ordner entweder neu konfiguriert wurde, oder weil alle
|
||||
Sind Sie sicher, dass Sie diese Operation durchführen möchten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Alle Dateien löschen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Lösche alle Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Dateien behalten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -748,17 +748,17 @@ Der Grund dafür ist möglicherweise, dass auf dem Server ein Backup eingespielt
|
||||
Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älteren Versionen überschrieben. Möchten Sie die neueren Dateien als Konflikt-Dateien behalten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Backup erkannt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Normale Synchronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Lokale Konfliktdateien behalten</translation>
|
||||
</message>
|
||||
@@ -1407,27 +1407,27 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Eine neue Version ist verfügbar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Eine neue Version des %1 - Klients ist verfügbar.</p><p><b>%2</b> steht zum Herunterladen bereit. Die installierte Version ist %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Diese Version auslassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Dieses Mal überspringen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Update durchführen</translation>
|
||||
</message>
|
||||
@@ -1573,58 +1573,58 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Neues %1 Update verfügbar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Ein neues Update für %1 wird installiert. Während des Updatevorganges werden Sie eventuell gefragt zusätzliche Rechte im Rahmen des Updatevorganges zu gewähren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Version %1 wird heruntergeladen. Bitte warten …</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Aktualisierung kann nicht herunter geladen werden. Bitte klicken Sie <a href='%1'>hier</a> um die Aktualisierung manuell herunter zu laden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Auf neue Aktualisierungen kann nicht geprüft werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>%1-Version %2 verfügbar. Anwendung zum Start der Aktualisierung neustarten.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Neue %1-Version %2 verfügbar. Bitte nutzen Sie das System-Updatetool zur Installation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Aktualisierungsserver wird überprüft …</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Updatestatus unbekannt: Auf neue Updates wurde nicht geprüft.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Keine Aktualisierungen verfügbar. Ihre Installation ist die aktuelle Version.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Aktualitätsprüfung</translation>
|
||||
</message>
|
||||
@@ -1794,7 +1794,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="212"/>
|
||||
<source>Invalid URL</source>
|
||||
<translation>Ungültige URL</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="369"/>
|
||||
@@ -1949,7 +1949,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Fehler beim Schreiben der Metadaten in die Datenbank</translation>
|
||||
</message>
|
||||
@@ -2005,17 +2005,17 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Wiederherstellung fehlgeschlagen: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Blacklisting fortsetzen:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation>Eine Datei oder ein Ordner wurde von einer Nur-Lese-Freigabe wiederhergestellt, aber die Wiederherstellung ist mit folgendem Fehler fehlgeschlagen: %1</translation>
|
||||
</message>
|
||||
@@ -2148,7 +2148,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Eine lokale Datei wurde während der Synchronisation geändert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Fehler beim Schreiben der Metadaten in die Datenbank</translation>
|
||||
</message>
|
||||
@@ -2156,32 +2156,32 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Die lokale Datei wurde während der Synchronisation gelöscht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Eine lokale Datei wurde während der Synchronisation geändert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation>Unerwarteter Rückgabe-Code Antwort vom Server (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation>Fehlende Datei-ID vom Server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation>Fehlender ETag vom Server</translation>
|
||||
</message>
|
||||
@@ -2189,32 +2189,32 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Die Datei wurde von einer Nur-Lese-Freigabe lokal bearbeitet. Die Datei wurde wiederhergestellt und Ihre Bearbeitung ist in der Konflikte-Datei.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Poll-URL fehlt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Die lokale Datei wurde während der Synchronisation gelöscht.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Eine lokale Datei wurde während der Synchronisation geändert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Der Server hat den letzten Block nicht bestätigt. (Der E-Tag war nicht vorhanden)</translation>
|
||||
</message>
|
||||
@@ -2656,7 +2656,7 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Via %1 teilen</translation>
|
||||
@@ -2950,23 +2950,23 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Fehler beim Lesen eines Ordners.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Datei wird ignoriert, weil sie versteckt ist.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben</translation>
|
||||
</message>
|
||||
@@ -2985,6 +2985,11 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Abbruch durch den Benutzer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>Dateiname enthält Zeichen die nicht auf allen Betriebssystemen dargestellt werden können.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3036,114 +3041,99 @@ Es ist nicht ratsam, diese zu benutzen.</translation>
|
||||
<translation>Die Datei ist in der Ignorierliste geführt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation>Dateinamen enden mit einem Punkt, die in diesem Dateisystem nicht unterstützt wird.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation>Dateinamen beinhalten das Zeichen '%1' und diese werden in diesem Dateisystems nicht unterstützt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation>Der Dateiname ist ein reservierter Name in diesem Dateisystem.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation>Dateiname enthält Leerzeichen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Der Dateiname ist zu lang.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Stat fehlgeschlagen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>Dateikodierung ist ungültig</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Ungültige Zeichenm bitte benennen Sie "%1" um</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Synchronisationsbericht konnte nicht initialisiert werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation>Fehler beim Einlesen der Blacklist aus der lokalen Datenbank</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation>Fehler beim Einlesen des Synchronisierungsprotokolls.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Synchronisationsbericht kann nicht geöffnet werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Der Dateiname enthält mindestens ein ungültiges Zeichen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Löschen nicht erlaubt, Wiederherstellung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Lokale Dateien und Freigabeordner wurden entfernt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Verschieben nicht erlaubt, Element wiederhergestellt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Verschieben nicht erlaubt, da %1 schreibgeschützt ist</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>Das Ziel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>Die Quelle</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων</translation>
|
||||
</message>
|
||||
@@ -604,119 +604,119 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Δεν υπάρχει ο τοπικός φάκελος %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>Το %1 θα έπρεπε να είναι φάκελος αλλά δεν είναι.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation> Το %1 δεν είναι αναγνώσιμο. </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>Το %1 αφαιρέθηκε.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>Το %1 έχει ληφθεί.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>Το %1 έχει ενημερωθεί.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>Το %1 έχει μετονομαστεί σε %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>Το %1 έχει μετακινηθεί στο %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 δεν ήταν δυνατό να συγχρονιστεί εξαιτίας ενός σφάλματος. Δείτε το αρχείο καταγραφής για λεπτομέρειες.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Δραστηριότητα Συγχρονισμού</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Αδυναμία ανάγνωσης αρχείου αποκλεισμού συστήματος</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Ένας νέος φάκελος μεγαλύτερος από %1 MB έχει προστεθεί: %2.
|
||||
Παρακαλούμε πηγαίνετε στις ρυθμίσεις για να επιλέξετε αν επιθυμείτε να τον κατεβάσετε.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -725,39 +725,39 @@ Are you sure you want to perform this operation?</source>
|
||||
Είστε σίγουροι ότι θέλετε να εκτελέσετε αυτή τη λειτουργία;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Αφαίρεση Όλων των Αρχείων;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Αφαίρεση όλων των αρχείων</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Διατήρηση αρχείων</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Ανιχνεύθηκε αντίγραφο ασφαλείας</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1406,27 +1406,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Νέα Έκδοση Διαθέσιμη </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Μια νέα έκδοση του %1 Δέκτη είναι διαθέσιμη.</p><p><b>%2</b> είναι διαθέσιμη για λήψη. Η εγκατεστημένη έκδοση είναι %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Παράλειψη αυτής της έκδοσης</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Παράλειψη αυτή τη φορά</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Λήψη ενημέρωσης</translation>
|
||||
</message>
|
||||
@@ -1572,59 +1572,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Νέα %1 Ενημέρωση Έτοιμη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Μια νέα ενημέρωση για %1 πρόκειται να εγκατασταθεί. Ο βοηθός ενημέρωσης μπορεί να ζητήσει
|
||||
επιπλέον παραχωρήσεις δικαιωμάτων κατά τη διαδικασία.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Λήψη έκδοσης %1. Παρακαλώ περιμένετε...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Αδυναμία λήψης της ενημέρωσης. Παρακαλώ κλικάρετε <a href='%1'>εδώ</a> για να κατεβάσετε την ενημέρωση χειροκίνητα.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Αδυναμία ελέγχου για νέες ενημερώσεις.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>Είναι διαθέσιμη η έκδοση %1 %2. Επανεκκινήστε την εφαρμογή για να ξεκινήσει η αναβάθμιση.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Είναι διαθέσιμη η έκδοση %1 %2. Χρησιμοποιήστε το εργαλείο αναβάθμισης του συστήματός σας για να την εγκαταστήσετε.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Έλεγχος διακομιστή ενημερώσεων...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Η κατάσταση ενημέρωσης είναι άγνωστη: Δεν έγινε έλεγχος για για νέες ενημερώσεις.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Δεν υπάρχουν ενημερώσεις διαθέσιμες. Η εγκατάστασή σας βρίσκεται στην τελευταία έκδοση.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Έλεγχος για ενημερώσεις</translation>
|
||||
</message>
|
||||
@@ -1949,7 +1949,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων</translation>
|
||||
</message>
|
||||
@@ -2005,17 +2005,17 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Η Αποκατάσταση Απέτυχε: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Συνέχιση αποκλεισμού:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation>Ένα αρχείο ή ένας κατάλογος αφαιρέθηκε από ένα διαμοιρασμένο κατάλογο μόνο για ανάγνωση, αλλά η επαναφορά απέτυχε: %1</translation>
|
||||
</message>
|
||||
@@ -2148,7 +2148,7 @@ It is not advisable to use it.</source>
|
||||
<translation>Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων</translation>
|
||||
</message>
|
||||
@@ -2156,32 +2156,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Εξαναγκασμός ακύρωσης εργασίας στην επαναφορά σύνδεσης HTTP με Qt < 5.4.2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2189,32 +2189,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Εξαναγκασμός ακύρωσης εργασίας στην επαναφορά σύνδεσης HTTP με Qt < 5.4.2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Το αρχείο υπέστη επεξεργασία τοπικά αλλά είναι τμήμα ενός διαμοιρασμένου καταλόγου μόνο για ανάγνωση. Επαναφέρθηκε και το επεξεργασμένο βρίσκεται στο αρχείο συγκρούσεων.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Η διεύθυνση poll URL λείπει</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Ο διακομιστής δεν αναγνώρισε το τελευταίο τμήμα. (Δεν υπήρχε e-tag)</translation>
|
||||
</message>
|
||||
@@ -2656,7 +2656,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Διαμοιρασμός με %1</translation>
|
||||
@@ -2950,23 +2950,23 @@ It is not advisable to use it.</source>
|
||||
<translation>Σφάλμα κατά την ανάγνωση του φακέλου.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Το Αρχείο/ο Φάκελος αγνοήθηκε επειδή είναι κρυφό.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο</translation>
|
||||
</message>
|
||||
@@ -2985,6 +2985,11 @@ It is not advisable to use it.</source>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Ματαιώθηκε από το χρήστη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>Το όνομα αρχείου περιέχει χαρακτήρες που δεν μπορούν να συγχρονιστούν σε όλα τα συστήματα.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3036,114 +3041,99 @@ It is not advisable to use it.</source>
|
||||
<translation>Το αρχείο περιέχεται στη λίστα αρχείων προς αγνόηση.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Το όνομα αρχείου είνια πολύ μεγάλο.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Απέτυχε.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Αδυναμία προετοιμασίας αρχείου συγχρονισμού.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation>Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Αδυναμία ανοίγματος του αρχείου συγχρονισμού</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>ο προορισμός</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>η προέλευση</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -555,7 +555,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -612,57 +612,57 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -670,7 +670,7 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -678,7 +678,7 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -686,7 +686,7 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -694,7 +694,7 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -702,7 +702,7 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -710,12 +710,12 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
@@ -723,67 +723,67 @@
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -1433,27 +1433,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -1599,58 +1599,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -1974,7 +1974,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2030,17 +2030,17 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2173,7 +2173,7 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2181,32 +2181,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2214,32 +2214,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -2681,7 +2681,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
@@ -2973,23 +2973,23 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -3008,6 +3008,11 @@ It is not advisable to use it.</source>
|
||||
<source>Aborted by the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3059,114 +3064,99 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
+96
-106
@@ -498,7 +498,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
|
||||
<source>Certificate & Key (pkcs12) :</source>
|
||||
<translation>Certificate & Key (pkcs12) :</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
|
||||
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Error al escribir los metadatos en la base de datos</translation>
|
||||
</message>
|
||||
@@ -604,119 +604,119 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>La carpeta local %1 no existe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 debería ser un directorio, pero no lo es.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 es ilegible.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ha sido eliminado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ha sido descargado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ha sido actualizado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 ha sido renombrado a %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 ha sido movido a %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 y otro archivo han sido borrados.</numerusform><numerusform>%1 y otros %n archivos han sido borrados.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 y otro archivo han sido descargados.</numerusform><numerusform>%1 y otros %n archivos han sido descargados.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 y otro archivo han sido actualizados.</numerusform><numerusform>%1 y otros %n archivos han sido actualizados.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 ha sido renombrado a %2 y otro archivo ha sido renombrado.</numerusform><numerusform>%1 ha sido renombrado a %2 y otros %n archivos han sido renombrado.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 ha sido movido a %2 y otro archivo ha sido movido.</numerusform><numerusform>%1 ha sido movido a %2 y otros %n archivos han sido movidos.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 y otro archivo han tenido conflictos al sincronizar.</numerusform><numerusform>%1 y otros %n archivos han tenido conflictos al sincronizar.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>Conflicto al sincronizar %1. Por favor compruebe el archivo!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro.</numerusform><numerusform>%1 y otros %n archivos no pudieron ser sincronizados debido a errores. Para más detalles vea el registro.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 no pudo ser sincronizado debido a un error. Para más detalles, vea el registro.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Actividad de la sincronización</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>No se ha podido leer el archivo de exclusión del sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Se ha añadido una nueva carpeta más grande de %1 MB: %2.
|
||||
Por favor diríjase a los ajustes para seleccionarlo si desea descargarlo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -725,22 +725,22 @@ Esto se puede deber a que la carpeta fue reconfigurada de forma silenciosa o a q
|
||||
¿Está seguro de que desea realizar esta operación?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>¿Eliminar todos los archivos?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Eliminar todos los archivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Conservar archivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -749,17 +749,17 @@ Esto puede deberse a que una copia de seguridad fue restaurada en el servidor.
|
||||
Si continua con la sincronización todos los archivos serán remplazados por su versión previa. ¿Desea mantener los archivos locales en su versión actual como archivos en conflicto?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Backup detectado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Sincronización Normal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Mantener los archivos locales en caso de conflicto</translation>
|
||||
</message>
|
||||
@@ -1408,27 +1408,27 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Nueva versión disponible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Una nueva versión del programa cliente de %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Saltarse esta versión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Omitir esta vez</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Actualizar</translation>
|
||||
</message>
|
||||
@@ -1574,58 +1574,58 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Nueva %1 actualización está lista</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Se instalará una nueva actualización de %1. Durante esta actualización puede que se soliciten privilegios adicionales.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Descargando la versión %1. Espere...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>No se puede descargar la actualización. Por favor, haga clic <a href='%1'>aquí</a> para iniciar una descarga manual.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>No se puede comprobar si hay actualizaciones.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>%1 versión %2 disponible. Reiniciar aplicación para comenzar la actualización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Nueva %1 versión %2 está disponible. Use la herramienta de actualización de su sistema para instalarla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Consultando al servidor de actualizaciones...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Estado de actualización desconocido: no se buscaron nuevas actualizaciones.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>No hay actualizaciones disponibles. Tiene la última versión.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Comprobar si hay actualizaciones</translation>
|
||||
</message>
|
||||
@@ -1795,7 +1795,7 @@ No se recomienda usarla.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="212"/>
|
||||
<source>Invalid URL</source>
|
||||
<translation>URL inválida.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="369"/>
|
||||
@@ -1950,7 +1950,7 @@ No se recomienda usarla.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Error al escribir los metadatos en la base de datos</translation>
|
||||
</message>
|
||||
@@ -2006,17 +2006,17 @@ No se recomienda usarla.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Falló la restauración: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Continuar añadiendo a su lista negra:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation>Un archivo o directorio fue eliminado de una carpeta de compartida de solo lectura pero la recuperación falló: %1</translation>
|
||||
</message>
|
||||
@@ -2149,7 +2149,7 @@ No se recomienda usarla.</translation>
|
||||
<translation>Un archivo local fue modificado durante la sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Error al escribir los metadatos en la base de datos</translation>
|
||||
</message>
|
||||
@@ -2157,32 +2157,32 @@ No se recomienda usarla.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Forzar el trabajo en una conexión HTTP, causará un Reset si Qt< 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>El archivo local ha sido eliminado durante la sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Un archivo local fue modificado durante la sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation>Respuesta inesperada del servidor (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation>Perdido archivo ID del servidor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation>Perdido ETag del servidor</translation>
|
||||
</message>
|
||||
@@ -2190,32 +2190,32 @@ No se recomienda usarla.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Forzar el trabajo en una conexión HTTP, causará un Reset si Qt< 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>El archivo fue modificado localmente; pero es parte de una carpeta compartida en modo de sólo lectura. Ha sido recuperado y su modificación está en el archivo de conflicto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Falta la URL de la encuesta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>El archivo local ha sido eliminado durante la sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Un archivo local fue modificado durante la sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>El servidor no reconoció la última parte. (No había una e-tag presente)</translation>
|
||||
</message>
|
||||
@@ -2657,7 +2657,7 @@ No se recomienda usarla.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Compartir con %1</translation>
|
||||
@@ -2951,23 +2951,23 @@ No se recomienda usarla.</translation>
|
||||
<translation>Error al leer el directorio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Se ignoran los Archivos/Carpetas ocultos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Solo %1 disponible, se necesita por lo menos %2 para comenzar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>No permitido porque no tienes permiso para añadir un directorio padre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>No permitido porque no tienes permiso para añadir archivos a ese directorio</translation>
|
||||
</message>
|
||||
@@ -2986,6 +2986,11 @@ No se recomienda usarla.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Interrumpido por el usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>El nombre del archivo contiene caracteres inválidos que no pueden ser sincronizados entre las plataformas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3037,114 +3042,99 @@ No se recomienda usarla.</translation>
|
||||
<translation>El fichero está en la lista de ignorados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation>El nombre del archivo contiene espacios finales.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>El nombre del archivo es demasiado largo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Stat ha fallado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>Los caracteres del nombre de fichero no son válidos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Caracteres inválidos, por favor renombre "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>No se pudo inicializar un registro (journal) de sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation>No se pudo leer la lista de bloqueo de la base de datos local</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation>No se ha podido leer desde el registro de sincronización</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>No es posible abrir el diario de sincronización</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Nombre de archivo contiene al menos un caracter no válido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>No permitido porque no tienes permiso para añadir subdirectorios a ese directorio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>No está permitido borrar, restaurando.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Se han eliminado los archivos locales y la carpeta compartida.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>No está permitido mover, elemento restaurado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>No está permitido mover, porque %1 es de sólo lectura.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>destino</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>origen</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -604,157 +604,157 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>El directorio local %1 no existe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 debé ser una carpeta pero no lo es.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>No se puede leer %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ha sido eliminado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ha sido descargado.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ha sido actualizado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Actividad de Sync</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>¿Borrar todos los archivos?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Borrar todos los archivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Conservar archivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1401,27 +1401,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Nueva versión disponible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Saltear esta vez</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Obtener actualización</translation>
|
||||
</message>
|
||||
@@ -1567,58 +1567,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1942,7 +1942,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1998,17 +1998,17 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2141,7 +2141,7 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2149,32 +2149,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2182,32 +2182,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2649,7 +2649,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation type="unfinished"/>
|
||||
@@ -2941,23 +2941,23 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2976,6 +2976,11 @@ It is not advisable to use it.</source>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Interrumpido por el usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3027,114 +3032,99 @@ It is not advisable to use it.</source>
|
||||
<translation>El archivo está en la lista de ignorados.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Imposible inicializar un diario de sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -604,157 +604,157 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Kohalikku kausta %1 pole olemas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 pole loetav.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 on eemaldatud.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 on alla laaditud.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 on uuendatud.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 on ümber nimetatud %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 on tõstetud %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 sünkroniseerimine ebaõnnestus tõrke tõttu. Lisainfot vaata logist.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Sünkroniseerimise tegevus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Süsteemi väljajätmiste faili lugemine ebaõnnestus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Kustutada kõik failid?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Kustutada kõik failid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Säilita failid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Leiti varukoopia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Tavaline sünkroonimine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1401,27 +1401,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Saadaval on uuem versioon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Uus versioon %1 kliendist on saadaval.</p><p><b>%2</b> on saadaval alla laadimiseks. Paigaldatud on versioon %3.<p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Jäta see versioon vahele</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Jäta seekord vahele</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Hangi uuendus</translation>
|
||||
</message>
|
||||
@@ -1567,58 +1567,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Uus %1 uuendus on valmis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Laadin alla versiooni %1. Palun oota...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Ei suutnud uuendust alla laadida. Palun klõpsa käsitsi uuenduse alla laadimiseks <a href='%1'>siia</a> %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Uuenduste kontrollimine ebaõnnestus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Kontrollin uuendusserverit...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Uuenduse staatus on teadmata: Uuendusi ei kontrollitud.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Uuendusi pole saadaval. Kasutad kõige viimast versiooni.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Uuenduste kontrollimine</translation>
|
||||
</message>
|
||||
@@ -1943,7 +1943,7 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1999,17 +1999,17 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Taastamine ebaõnnestus: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Jätka mustas nimekirjas hoidmist:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2142,7 +2142,7 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<translation>Kohalik fail muutus sünkroniseeringu käigus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2150,32 +2150,32 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Kohalik fail on eemaldatud sünkroniseeringu käigus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Kohalik fail muutus sünkroniseeringu käigus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2183,32 +2183,32 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Faili on lokaalselt muudetud, kuid see on osa kirjutamisõiguseta jagamisest. See on taastatud ning sinu muudatus on konfliktses failis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Küsitluse URL puudub</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Kohalik fail on eemaldatud sünkroniseeringu käigus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Kohalik fail muutus sünkroniseeringu käigus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2650,7 +2650,7 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Jagatud kasutajaga %1</translation>
|
||||
@@ -2944,23 +2944,23 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2979,6 +2979,11 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Kasutaja poolt tühistatud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3030,114 +3035,99 @@ Selle kasutamine pole soovitatav.</translation>
|
||||
<translation>Fail on märgitud ignoreeritavate nimistus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Faili nimi on liiga pikk.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>Failinime kodeering pole kehtiv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Ei suuda lähtestada sünkroniseeringu zurnaali.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Ei suuda avada sünkroniseeringu zurnaali</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Faili nimesonvähemalt üks keelatud märk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>"Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Eemaldamine pole lubatud, taastan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Kohalikud failid ja jagatud kaustad eemaldatud.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Liigutamine pole lubatud, üksus taastatud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Liigutamien pole võimalik kuna %1 on ainult lugemiseks</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>sihtkoht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>allikas</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -604,157 +604,157 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Bertako %1 karpeta ez da existitzen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 karpeta bat izan behar zen baina ez da.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 ezin da irakurri.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 ezabatua izan da.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 deskargatu da.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 kargatu da.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 %2-(e)ra berrizendatu da.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 %2-(e)ra mugitu da.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 ezin izan da sinkronizatu akats bat dela eta. Ikusi egunerkoa zehaztapen gehiago izateko.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Sinkronizazio Jarduerak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Ezin izan da sistemako baztertutakoen fitxategia irakurri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Ezabatu Fitxategi Guztiak?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Ezabatu fitxategi guztiak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Mantendu fitxategiak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1403,27 +1403,27 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Bertsio berria eskuragarri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p> %1 bezeroaren bertsio berri bat eskuragarri dago.</p><p><b>%2</b>deskargatzeko prest dago. Instalatuta dagoen bersioa %3 da.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Ez eguneratu bertsio hau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Utzi aldi honetan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Eskuratu eguneraketa</translation>
|
||||
</message>
|
||||
@@ -1569,58 +1569,58 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>%1 Bertsioa deskargatzen. Mesedez itxoin...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Ezin da eguneraketarik bilatu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Eguneraketa zerbitzaria galdetzen...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Ez dago eguneraketarik eskuragarri. Zure instalazioa azkenengo bertsioa da.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1945,7 +1945,7 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2001,17 +2001,17 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2144,7 +2144,7 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<translation>Fitxategi lokala aldatu da sinkronizazioan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2152,32 +2152,32 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Fitxategi lokala ezabatu da sinkronizazioan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Fitxategi lokala aldatu da sinkronizazioan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2185,32 +2185,32 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Fitxategi lokala ezabatu da sinkronizazioan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Fitxategi lokala aldatu da sinkronizazioan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2652,7 +2652,7 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation type="unfinished"/>
|
||||
@@ -2944,23 +2944,23 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2979,6 +2979,11 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Erabiltzaileak bertan behera utzita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3030,114 +3035,99 @@ Ez da gomendagarria erabltzea.</translation>
|
||||
<translation>Fitxategia baztertutakoen zerrendan dago.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Ezin izan da sinkronizazio egunerokoa hasieratu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Ezin da sinkronizazio egunerokoa ireki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Fitxategi izenak behintzat baliogabeko karaktere bat du</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Ezabatzeko baimenik gabe, berrezartzen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Mugitzea ez dago baimenduta, elementua berrezarri da</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>helburua</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>jatorria</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -604,157 +604,157 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>پوشه محلی %1 موجود نیست.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 قابل خواندن نیست.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 حذف شده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 بارگزاری شد.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 بروز رسانی شده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 به %2 تغییر نام داده شده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 به %2 انتقال داده شده است.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>فعالیت همگام سازی</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>حذف تمام فایل ها؟</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>حذف تمام فایل ها</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>نگه داشتن فایل ها</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1401,27 +1401,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>نسخه جدید در دسترس است</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>نادیده گرفتن این نسخه</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>نادیده گرفتن این زمان</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>به دست آوردن به روز رسانی</translation>
|
||||
</message>
|
||||
@@ -1567,58 +1567,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>بررسی بروز رسانی</translation>
|
||||
</message>
|
||||
@@ -1942,7 +1942,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1998,17 +1998,17 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2141,7 +2141,7 @@ It is not advisable to use it.</source>
|
||||
<translation>فایل محلی در حین همگامسازی تغییر کرده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2149,32 +2149,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>فایل محلی در حین همگامسازی حذف شده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>فایل محلی در حین همگامسازی تغییر کرده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2182,32 +2182,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>فایل محلی در حین همگامسازی حذف شده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>فایل محلی در حین همگامسازی تغییر کرده است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2649,7 +2649,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>اشتراکگذاری با %1</translation>
|
||||
@@ -2941,23 +2941,23 @@ It is not advisable to use it.</source>
|
||||
<translation>خطا در هنگام خواندن پوشه</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2976,6 +2976,11 @@ It is not advisable to use it.</source>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>متوقف شده توسط کاربر</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3027,114 +3032,99 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>نام فایل خیلی طولانی است.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>وضعیت ناموفق</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>رمزگذاری نام فایل معتبر نیست</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>نام فایل دارای حداقل یک کاراکتر نامعتبر است</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>با توجه به عدم اجازهی شما به ایجاد زیرپوشه به پوشه مجاز نیست</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>حذف مجاز نیست، در حال بازگردادن</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>فایلهای محلی و پوشهی اشتراک حذف شد.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>انتقال مجاز نیست، مورد بازگردانده شد</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>مقصد</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>مبدا</translation>
|
||||
</message>
|
||||
|
||||
+103
-113
@@ -116,7 +116,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.ui" line="203"/>
|
||||
<source>Apply manual changes</source>
|
||||
<translation>Toteuta manuaalimuutokset</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.ui" line="251"/>
|
||||
@@ -168,7 +168,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="237"/>
|
||||
<source>Restart sync</source>
|
||||
<translation>Käynnistä synkronointi uudelleen</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/accountsettings.cpp" line="246"/>
|
||||
@@ -498,7 +498,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
|
||||
<source>Certificate & Key (pkcs12) :</source>
|
||||
<translation>Varmenne ja avain (pkcs12) :</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
|
||||
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Virhe kirjoittaessa metadataa tietokantaan</translation>
|
||||
</message>
|
||||
@@ -604,158 +604,158 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Paikallista kansiota %1 ei ole olemassa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>Kohteen %1 pitäisi olla kansio, mutta se ei kuitenkaan ole kansio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 ei ole luettavissa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 on poistettu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 on ladattu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 on päivitetty.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 on nimetty uudeelleen muotoon %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 on siirretty kohteeseen %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>Kohdetta %1 ei voi synkronoida virheen vuoksi. Katso tarkemmat tiedot lokista.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Synkronointiaktiviteetti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Uusi kansio, joka on suurempi kuin %1 Mt, on lisätty: %2.
|
||||
Siirry asetuksiin valitaksesi sen, jos haluat ladata kyseisen kansion.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Poistetaanko kaikki tiedostot?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Poista kaikki tiedostot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Säilytä tiedostot</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Varmuuskopio poistettu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Normaali synkronointi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -996,7 +996,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<location filename="../src/gui/folderstatusmodel.cpp" line="941"/>
|
||||
<source>%5 left, %1 of %2, file %3 of %4</source>
|
||||
<extracomment>Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7"</extracomment>
|
||||
<translation>%5 jäljellä, %1/%2, tiedosto %3/%4</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folderstatusmodel.cpp" line="948"/>
|
||||
@@ -1232,7 +1232,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an
|
||||
<message>
|
||||
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="35"/>
|
||||
<source>Please enter %1 password:<br><br>User: %2<br>Account: %3<br></source>
|
||||
<translation>Anna %1-salasana:<br><br>Käyttäjä: %2<br>Tili: %3<br></translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/creds/httpcredentialsgui.cpp" line="48"/>
|
||||
@@ -1404,27 +1404,27 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Uusi versio saatavilla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Uusi versio %1-asiakasohjelmistosta on saatavilla.</p><p><b>%2</b> on ladattavissa. Asennettu versio on %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Ohita tämä versio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Ohita tämän kerran</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Päivitä</translation>
|
||||
</message>
|
||||
@@ -1547,7 +1547,7 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam
|
||||
<message>
|
||||
<location filename="../src/gui/notificationwidget.cpp" line="51"/>
|
||||
<source>Created at %1</source>
|
||||
<translation>Luotu %1</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/notificationwidget.cpp" line="100"/>
|
||||
@@ -1564,64 +1564,64 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam
|
||||
<location filename="../src/gui/notificationwidget.cpp" line="140"/>
|
||||
<source>'%1' selected at %2</source>
|
||||
<extracomment>The second parameter is a time, such as 'selected at 09:58pm'</extracomment>
|
||||
<translation>'%1' valittu %2</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Uusi %1-päivitys valmiina</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Uusi %1-päivitys on valmiina asennettavaksi. Päivitysohjelma saattaa pyytää lisäoikeuksia päivityksen aikana.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Ladataan versiota %1. Odota hetki...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Päivityksen lataaminen epäonnistui. Napsauta <a href='%1'>tästä</a> ladataksesi päivityksen manuaalisesti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Päivitysten tarkistus epäonnistui.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>%1-versio %2 saatavilla. Käynnistä sovellus uudelleen aloittaaksesi päivityksen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Uusi %1-versio %2 on saatavilla. Käytä järjestelmän päivitystyökalua asentaaksesi sen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Tarkistetaan päivityspalvelinta...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Päivityksen tila on tuntematon: uusia päivityksiä ei tarkistettu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Päivityksiä ei ole saatavilla. Käytössäsi on uusin versio.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Päivitystarkistus</translation>
|
||||
</message>
|
||||
@@ -1791,7 +1791,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="212"/>
|
||||
<source>Invalid URL</source>
|
||||
<translation>Virheellinen verkko-osoite</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="369"/>
|
||||
@@ -1946,7 +1946,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Virhe kirjoittaessa metadataa tietokantaan</translation>
|
||||
</message>
|
||||
@@ -2002,17 +2002,17 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2145,7 +2145,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<translation>Paikallinen tiedosto muuttui synkronoinnin aikana.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Virhe kirjoittaessa metadataa tietokantaan</translation>
|
||||
</message>
|
||||
@@ -2153,32 +2153,32 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Paikallinen tiedosto poistettiin synkronoinnin aikana.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Paikallinen tiedosto muuttui synkronoinnin aikana.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation>Odottamaton paluukoodi palvelimelta (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2186,32 +2186,32 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Paikallinen tiedosto poistettiin synkronoinnin aikana.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Paikallinen tiedosto muuttui synkronoinnin aikana.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2498,7 +2498,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/sharelinkwidget.ui" line="201"/>
|
||||
<source>&Mail link</source>
|
||||
<translation>&Lähetä linkki sähköpostitse</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/sharelinkwidget.ui" line="208"/>
|
||||
@@ -2653,7 +2653,7 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation type="unfinished"/>
|
||||
@@ -2947,23 +2947,23 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<translation>Kansiota lukiessa tapahtui virhe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Tiedosto/kansi ohitetaan, koska se on piilotettu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon</translation>
|
||||
</message>
|
||||
@@ -2982,6 +2982,11 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Keskeytetty käyttäjän toimesta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>Tiedoston nimi sisältää virheellisiä merkkejä, joita ei voi synkronoida alustariippumattomasti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3033,114 +3038,99 @@ Osoitteen käyttäminen ei ole suositeltavaa.</translation>
|
||||
<translation>Tiedosto on ohituslistalla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Tiedoston nimi on liian pitkä.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Stat epäonnistui.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>Tiedostonimen merkistökoodaus ei ole kelvollista</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Virheellisiä merkkejä, anna uusi nimi kohteelle "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Tiedoston nimi sisältää ainakin yhden virheellisen merkin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Poistaminen ei ole sallittua, palautetaan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Paikalliset tiedostot ja jakokansio poistettu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Siirtäminen ei ole sallittua, kohde palautettu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>kohde</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>lähde</translation>
|
||||
</message>
|
||||
|
||||
+100
-110
@@ -498,7 +498,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
|
||||
<source>Certificate & Key (pkcs12) :</source>
|
||||
<translation>Certificat et clé (pkcs12)</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
|
||||
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Erreur à l'écriture des métadonnées dans la base de données</translation>
|
||||
</message>
|
||||
@@ -604,119 +604,119 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>Le dossier local %1 n'existe pas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 devrait être un dossier mais ne l'est pas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 ne peut pas être lu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1 : %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 a été supprimé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 a été téléchargé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 a été mis à jour.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 a été renommé en %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 a été déplacé vers %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 a été supprimé.</numerusform><numerusform>%1 et %n autres fichiers ont été supprimés.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 a été téléchargé.</numerusform><numerusform>%1 et %n autres fichiers ont été téléchargés.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 a été mis à jour.</numerusform><numerusform>%1 et %n autres fichiers ont été mis à jour.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 a été renommé en %2.</numerusform><numerusform>%1 a été renommé en %2 et %n autres fichiers ont été renommés.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 a été déplacé vers %2.</numerusform><numerusform>%1 a été déplacé vers %2 et %n autres fichiers ont été déplacés.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 a un conflit de synchronisation.</numerusform><numerusform>%1 et %n autres fichiers ont des problèmes de synchronisation.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>%1 a un problème de synchronisation. Merci de vérifier le fichier conflit !</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails.</numerusform><numerusform>%1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 n'a pu être synchronisé pour cause d'erreur. Consultez les logs pour les détails.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Activité de synchronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Impossible de lire le fichier d'exclusion du système</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2.
|
||||
Veuillez le sélectionner dans la fenêtre des paramètres pour le télécharger.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -725,22 +725,22 @@ Peut-être la configuration a-t-elle été modifiée, ou les fichiers supprimé
|
||||
Êtes-vous sûr de vouloir effectuer cette opération ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Supprimer tous les fichiers ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Supprimer tous les fichiers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Garder les fichiers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -749,17 +749,17 @@ Cela peut être dû à une copie de sauvegarde restaurée sur le serveur.
|
||||
Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous garder les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Sauvegarde détectée</translation>
|
||||
<translation>Sauvegarde détecté</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Synchronisation normale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Garder les fichiers locaux comme Conflits</translation>
|
||||
</message>
|
||||
@@ -1408,27 +1408,27 @@ Les éléments dont la suppression automatique est permise seront supprimés s&a
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Nouvelle version disponible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Une nouvelle version du client %1 est disponible.</p><p><b>%2</b> est disponible au téléchargement. La version actuellement installée est %3.<p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Ignorer cette version</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Ignorer pour cette fois</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Obtenir la mise à jour</translation>
|
||||
</message>
|
||||
@@ -1574,59 +1574,59 @@ Les éléments dont la suppression automatique est permise seront supprimés s&a
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Une nouvelle mise à jour de %1 est disponible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Une nouvelle mise à jour de %1 est sur le point d'être installée.
|
||||
L'assistant peut demander des privilèges additionnels durant le processus.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Téléchargement de la version %1. Merci de patienter...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Impossible de télécharger la mise à jour. Veuillez la <a href='%1'>télécharger manuellement</a>.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Impossible de vérifier la présence de nouvelles mises à jour.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>%1 version %2 disponible. Redémarrez l'application pour commencer la mise à jour.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Une nouvelle version (%2) de %1 est disponible. Pour l'installer, veuillez utiliser l'outil de mise à jour du système.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Interrogation du serveur de mises à jour...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Aucune mise à jour disponible. Votre installation est à jour.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Recherche de mise à jour</translation>
|
||||
</message>
|
||||
@@ -1796,7 +1796,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="212"/>
|
||||
<source>Invalid URL</source>
|
||||
<translation>URL invalide</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="369"/>
|
||||
@@ -1951,7 +1951,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Erreur à l'écriture des métadonnées dans la base de données</translation>
|
||||
</message>
|
||||
@@ -2007,17 +2007,17 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Échec de la restauration : %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Conserver sur liste noire :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation>Un fichier ou un dossier a été supprimé d'un partage en lecture seule, mais la restauration a échoué : %1</translation>
|
||||
</message>
|
||||
@@ -2150,7 +2150,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<translation>Fichier local modifié pendant la synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Erreur à l'écriture des métadonnées dans la base de données</translation>
|
||||
</message>
|
||||
@@ -2158,32 +2158,32 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Arrêt forcé du job après réinitialisation de connexion HTTP avec Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Fichier local supprimé pendant la synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Fichier local modifié pendant la synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation>Le serveur a retourné un code inattendu (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2191,32 +2191,32 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Arrêt forcé du job après réinitialisation de connexion HTTP avec Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Le fichier a été modifié localement mais appartient à un partage en lecture seule. Il a été restauré et vos modifications sont présentes dans le fichiers de conflit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>URL de sondage manquante</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Fichier local supprimé pendant la synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Fichier local modifié pendant la synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Le serveur n'a pas confirmé la réception du dernier morceau. (Aucun e-tag n'était présent).</translation>
|
||||
</message>
|
||||
@@ -2658,7 +2658,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Partager avec %1</translation>
|
||||
@@ -2952,23 +2952,23 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<translation>Erreur lors de la lecture du dossier.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Le fichier/dossier est ignoré car il est caché.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Seulement %1 disponibles, il faut au moins %2 pour démarrer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier</translation>
|
||||
</message>
|
||||
@@ -2987,6 +2987,11 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Interrompu par l'utilisateur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>Le nom de fichier contient des caractères non valides qui ne peuvent être synchronisés entre plate-formes.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3038,114 +3043,99 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<translation>Le fichier est dans la liste des fichiers à ignorer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation>Le nom du fichier se fini par des espaces.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Le nom de fichier est trop long.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Stat échoué.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>L'encodage du nom de fichier n'est pas valide</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Caractères non valides. Veuillez renommer "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Impossible d'initialiser un journal de synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation>Impossible de lire la liste noire de la base de données locale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation>Impossible de lire le journal de synchronisation.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Impossible d'ouvrir le journal de synchronisation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Le nom de fichier contient au moins un caractère non valable</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Ignoré à cause de la liste noire "Choisir le contenu à synchroniser".</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Non autorisé à supprimer. Restauration</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Fichiers locaux et répertoire de partage supprimés.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Déplacement non autorisé, élément restauré</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Déplacement non autorisé car %1 est en mode lecture seule</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>la destination</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>la source</translation>
|
||||
</message>
|
||||
@@ -3336,12 +3326,12 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="619"/>
|
||||
<source>Unpause all synchronization</source>
|
||||
<translation>Relancer toutes les synchronisations</translation>
|
||||
<translation>relancer toutes les synchronisations</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="621"/>
|
||||
<source>Unpause synchronization</source>
|
||||
<translation>Relancer la synchronisation</translation>
|
||||
<translation>relancer la synchronisation </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="629"/>
|
||||
@@ -3351,7 +3341,7 @@ Il est déconseillé de l'utiliser.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="631"/>
|
||||
<source>Pause synchronization</source>
|
||||
<translation>Mettre en pause la synchronisation </translation>
|
||||
<translation>Mettre en pause la synchronisation </translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudgui.cpp" line="638"/>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -604,158 +604,158 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>O cartafol local %1 non existe.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 non é lexíbel.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 foi retirado satisfactoriamente.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 foi descargado satisfactoriamente.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 foi enviado satisfactoriamente.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 foi renomeado satisfactoriamente a %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 foi movido satisfactoriamente a %2</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 non puido sincronizarse por mor dun erro. Vexa os detalles no rexistro.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Actividade de sincronización</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Non foi posíbel ler o ficheiro de exclusión do sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Foi engadido un novo cartafol maior de %1 MB: %2.
|
||||
Vaia aos axustes e seleccióneo se quere descargalo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Retirar todos os ficheiros?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Retirar todos os ficheiros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Manter os ficheiros</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1402,27 +1402,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Hai dispoñíbel unha nova versión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Hai dispoñíbel unha nova versión do cliente %1.</p><p>Pode descargar a versión <b>%2</b>. A versión instalada é a %3</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Omitir esta versión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Omitir polo de agora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Obter a actualización</translation>
|
||||
</message>
|
||||
@@ -1568,59 +1568,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Preparada a nova actualización %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Está a piques de instalarse unha nova actualización para %1. O proceso de
|
||||
actualización pode pedir privilexios adicionais durante o procedemento.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Descargando a versión %1. Agarde...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Non foi posíbel descargar a actualización. Prema <a href='%1'>aquí</a> para descargar manualmente a actualización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Non foi posíbel comprobar se hai novas actualizacións.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Comprobando o servidor de actualizacións...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>O estado da actualización é descoñecido: non se comprobaron as actualizacións.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Non hai actualizacións dispoñíbeis. A instalación xa está na versión máis recente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Comprobar actualizacións</translation>
|
||||
</message>
|
||||
@@ -1945,7 +1945,7 @@ Recomendámoslle que non o use.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2001,17 +2001,17 @@ Recomendámoslle que non o use.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Fallou a restauración: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Continuar as listas negras:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2144,7 +2144,7 @@ Recomendámoslle que non o use.</translation>
|
||||
<translation>O ficheiro local cambiou durante a sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2152,32 +2152,32 @@ Recomendámoslle que non o use.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Forzando a interrupción do traballo na conexión HTTP reiniciandoa con Qt <5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>O ficheiro local retirarase durante a sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>O ficheiro local cambiou durante a sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2185,32 +2185,32 @@ Recomendámoslle que non o use.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Forzando a interrupción do traballo na conexión HTTP reiniciandoa con Qt <5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>O ficheiro foi editado localmente mais é parte dunha compartición de só lectura. O ficheiro foi restaurado e a súa edición atopase no ficheiro de conflitos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>Non se atopa o URL requirido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>O ficheiro local retirarase durante a sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>O ficheiro local cambiou durante a sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2652,7 +2652,7 @@ Recomendámoslle que non o use.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Compartir con %1</translation>
|
||||
@@ -2946,23 +2946,23 @@ Recomendámoslle que non o use.</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2981,6 +2981,11 @@ Recomendámoslle que non o use.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Interrompido polo usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>O nome de ficheiro conten caracteres incorrectos que non poden sincronizarse entre distintas plataformas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3032,114 +3037,99 @@ Recomendámoslle que non o use.</translation>
|
||||
<translation>O ficheiro está na lista de ignorados.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>O nome de ficheiro é longo de máis.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Fallou a obtención de estatísticas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>O nome de ficheiro codificado non é correcto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Caracteres incorrectos, déalle outro nome a «%1»</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Non é posíbel preparar un rexistro de sincronización.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Non foi posíbel abrir o rexistro de sincronización</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>O nome de ficheiro contén algún carácter incorrecto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Ignorado por mor da lista negra de «escolla que sincronizar»</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Non está permitido retiralo, restaurando</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>Retirados os ficheiros locais e o cartafol compartido.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Nos está permitido movelo, elemento restaurado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Bon está permitido movelo xa que %1 é só de lectura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>o destino</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>a orixe</translation>
|
||||
</message>
|
||||
|
||||
+94
-104
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -604,157 +604,157 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>%1 helyi mappa nem létezik.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 valószínűleg könyvtár, de nem az.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 nem olvasható.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 sikeresen törölve.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 sikeresen letöltve.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 sikeresen feltöltve.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 átnevezve erre: %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 áthelyezve ide: %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 és %n további fájl törölve.</numerusform><numerusform>%1 és %n további fájl törölve.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 és %n további fájl letöltve.</numerusform><numerusform>%1 és %n további fájl letöltve.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 és %n további fájl feltöltve.</numerusform><numerusform>%1 és %n további fájl feltöltve.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 átnevezve erre: %2 és még %n további fájl átnevezve.</numerusform><numerusform>%1 átnevezve erre: %2 és még %n további fájl átnevezve.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 áthelyezve ide: %2 és még %n további fájl áthelyezve.</numerusform><numerusform>%1 áthelyezve ide: %2 és még %n további fájl áthelyezve.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 és %n további fájl szinkronizálási konfliktussal rendelkezik.</numerusform><numerusform>%1 és %n további fájl szinkronizálási konfliktussal rendelkezik.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>%1 fájl szinkronizálási konfliktussal rendelkezik. Kérjük ellenőrizze a konfliktus fájlt!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>%1 és %n további fájlt nem sikerült szinkronizálni. Bővebb információ a naplófájlban.</numerusform><numerusform>%1 és %n további fájlt nem sikerült szinkronizálni. Bővebb információ a naplófájlban.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 nem sikerült szinkronizálni. Bővebb információ a naplófájlban.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Szinkronizálási aktivitás</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Törli az összes fájlt?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Összes fájl eltávolítása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Fájlok megtartása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Biztonsági mentés észlelve</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Normal szinkronizáció</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Helyi file-ok megtartása konfliktusként</translation>
|
||||
</message>
|
||||
@@ -1401,27 +1401,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Új verzió érhető el</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Egy új verzió érhető el a(z) %1 kliensből.</p><p><b>%2</b> elérhető letöltésre. A telepített verzió: %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Verzió kihagyása</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Kihagyás ezalkalommal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Frissítés beszerzése</translation>
|
||||
</message>
|
||||
@@ -1567,58 +1567,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Elérhető új %1 frissítés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>%1 verzió letöltése. Kérjük, várjon...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Nem lehetett letölteni a frissítést. Kérjük, kattints <a href='%1'>ide</a> a frissítés kézi letöltéséhez.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Nem lehet ellenőrzi a frissítéseket.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>%1 verzió %2 elérhető. Kérjük, indítsa újra az alkalmazást a frissítés elkezdéséhez.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Új %1 verzió %2 elérhető. Kérjük, a telepítéshez a rendszer frissítési eszközét használja.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Frissítési szerver ellenőrzése...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Frissítési állapot ismeretlen: Nem lehet ellenőrizni a frissítéseket.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Nincs újabb kiadás. Ez a legfrissebb verzió.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Frissítés ellenőrzése</translation>
|
||||
</message>
|
||||
@@ -1942,7 +1942,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -1998,17 +1998,17 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2141,7 +2141,7 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2149,32 +2149,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>A helyi fájl el lett távolítva a szinkronizálás alatt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2182,32 +2182,32 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>A helyi fájl el lett távolítva a szinkronizálás alatt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2649,7 +2649,7 @@ It is not advisable to use it.</source>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Megosztás vele: %1</translation>
|
||||
@@ -2942,23 +2942,23 @@ It is not advisable to use it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
@@ -2977,6 +2977,11 @@ It is not advisable to use it.</source>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Felhasználó megszakította</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3028,114 +3033,99 @@ It is not advisable to use it.</source>
|
||||
<translation>Fájl a kizárási listán.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Fájlnév túl nagy.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Érvénytelen karakterek, kérjük nevezd át: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>A fájlnév legalább egy érvénytelen karaktert tartalmaz!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>a cél</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>a forrás</translation>
|
||||
</message>
|
||||
|
||||
+96
-106
@@ -498,7 +498,7 @@
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
|
||||
<source>Certificate & Key (pkcs12) :</source>
|
||||
<translation>Certificato e chiave (pkcs12):</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
|
||||
@@ -547,7 +547,7 @@
|
||||
<context>
|
||||
<name>OCC::CleanupPollsJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="779"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="768"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Errore durante la scrittura dei metadati nel database</translation>
|
||||
</message>
|
||||
@@ -604,119 +604,119 @@
|
||||
<context>
|
||||
<name>OCC::Folder</name>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="141"/>
|
||||
<location filename="../src/gui/folder.cpp" line="143"/>
|
||||
<source>Local folder %1 does not exist.</source>
|
||||
<translation>La cartella locale %1 non esiste.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="144"/>
|
||||
<location filename="../src/gui/folder.cpp" line="146"/>
|
||||
<source>%1 should be a folder but is not.</source>
|
||||
<translation>%1 dovrebbe essere una cartella, ma non lo è.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="147"/>
|
||||
<location filename="../src/gui/folder.cpp" line="149"/>
|
||||
<source>%1 is not readable.</source>
|
||||
<translation>%1 non è leggibile.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="350"/>
|
||||
<location filename="../src/gui/folder.cpp" line="352"/>
|
||||
<source>%1: %2</source>
|
||||
<extracomment>this displays an error string (%2) for a file %1</extracomment>
|
||||
<translation>%1: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<location filename="../src/gui/folder.cpp" line="459"/>
|
||||
<source>%1 has been removed.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 è stato rimosso.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<location filename="../src/gui/folder.cpp" line="466"/>
|
||||
<source>%1 has been downloaded.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 è stato scaricato.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<location filename="../src/gui/folder.cpp" line="473"/>
|
||||
<source>%1 has been updated.</source>
|
||||
<comment>%1 names a file.</comment>
|
||||
<translation>%1 è stato aggiornato.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<location filename="../src/gui/folder.cpp" line="480"/>
|
||||
<source>%1 has been renamed to %2.</source>
|
||||
<comment>%1 and %2 name files.</comment>
|
||||
<translation>%1 è stato rinominato in %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<location filename="../src/gui/folder.cpp" line="487"/>
|
||||
<source>%1 has been moved to %2.</source>
|
||||
<translation>%1 è stato spostato in %2.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="455"/>
|
||||
<location filename="../src/gui/folder.cpp" line="457"/>
|
||||
<source>%1 and %n other file(s) have been removed.</source>
|
||||
<translation><numerusform>%1 e %n altro file sono stati rimossi.</numerusform><numerusform>%1 e %n altri file sono stati rimossi.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="462"/>
|
||||
<location filename="../src/gui/folder.cpp" line="464"/>
|
||||
<source>%1 and %n other file(s) have been downloaded.</source>
|
||||
<translation><numerusform>%1 e %n altro file sono stati scaricati.</numerusform><numerusform>%1 e %n altri file sono stati scaricati.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="469"/>
|
||||
<location filename="../src/gui/folder.cpp" line="471"/>
|
||||
<source>%1 and %n other file(s) have been updated.</source>
|
||||
<translation><numerusform>%1 e %n altro file sono stati aggiornati.</numerusform><numerusform>%1 e %n altri file sono stati aggiornati.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="476"/>
|
||||
<location filename="../src/gui/folder.cpp" line="478"/>
|
||||
<source>%1 has been renamed to %2 and %n other file(s) have been renamed.</source>
|
||||
<translation><numerusform>%1 è stato rinominato in %2 e %n altro file sono stati rinominati.</numerusform><numerusform>%1 è stato rinominato in %2 e %n altri file sono stati rinominati.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="483"/>
|
||||
<location filename="../src/gui/folder.cpp" line="485"/>
|
||||
<source>%1 has been moved to %2 and %n other file(s) have been moved.</source>
|
||||
<translation><numerusform>%1 è stato spostato in %2 e %n altro file sono stati spostati.</numerusform><numerusform>%1 è stato spostato in %2 e %n altri file sono stati spostati.</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="490"/>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<source>%1 has and %n other file(s) have sync conflicts.</source>
|
||||
<translation><numerusform>%1 e %n altro file hanno conflitti di sincronizzazione.</numerusform><numerusform>%1 e %n altri file hanno conflitti di sincronizzazione.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="492"/>
|
||||
<location filename="../src/gui/folder.cpp" line="494"/>
|
||||
<source>%1 has a sync conflict. Please check the conflict file!</source>
|
||||
<translation>%1 ha un conflitto di sincronizzazione. Controlla il file in conflitto!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../src/gui/folder.cpp" line="497"/>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<source>%1 and %n other file(s) could not be synced due to errors. See the log for details.</source>
|
||||
<translation><numerusform>1% e %n altro file non sono stati sincronizzati a causa di errori. Controlla il log per i dettagli.</numerusform><numerusform>1% e %n altri file non sono stati sincronizzati a causa di errori. Controlla il log per i dettagli.</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="499"/>
|
||||
<location filename="../src/gui/folder.cpp" line="501"/>
|
||||
<source>%1 could not be synced due to an error. See the log for details.</source>
|
||||
<translation>%1 non può essere sincronizzato a causa di un errore. Controlla il log per i dettagli.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="505"/>
|
||||
<location filename="../src/gui/folder.cpp" line="507"/>
|
||||
<source>Sync Activity</source>
|
||||
<translation>Sincronizza attività</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="744"/>
|
||||
<location filename="../src/gui/folder.cpp" line="746"/>
|
||||
<source>Could not read system exclude file</source>
|
||||
<translation>Impossibile leggere il file di esclusione di sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="956"/>
|
||||
<location filename="../src/gui/folder.cpp" line="958"/>
|
||||
<source>A new folder larger than %1 MB has been added: %2.
|
||||
Please go in the settings to select it if you wish to download it.</source>
|
||||
<translation>Una nuova cartella più grande di %1 MB è stata aggiunta: %2.
|
||||
Vai nelle impostazioni per selezionarla se desideri scaricarla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="994"/>
|
||||
<location filename="../src/gui/folder.cpp" line="996"/>
|
||||
<source>This sync would remove all the files in the sync folder '%1'.
|
||||
This might be because the folder was silently reconfigured, or that all the files were manually removed.
|
||||
Are you sure you want to perform this operation?</source>
|
||||
@@ -725,22 +725,22 @@ Ciò potrebbe accadere in caso di riconfigurazione della cartella o di rimozione
|
||||
Sei sicuro di voler eseguire questa operazione?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="998"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<source>Remove All Files?</source>
|
||||
<translation>Vuoi rimuovere tutti i file?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1000"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1002"/>
|
||||
<source>Remove all files</source>
|
||||
<translation>Rimuovi tutti i file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1001"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1003"/>
|
||||
<source>Keep files</source>
|
||||
<translation>Mantieni i file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1017"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1019"/>
|
||||
<source>This sync would reset the files to an earlier time in the sync folder '%1'.
|
||||
This might be because a backup was restored on the server.
|
||||
Continuing the sync as normal will cause all your files to be overwritten by an older file in an earlier state. Do you want to keep your local most recent files as conflict files?</source>
|
||||
@@ -749,17 +749,17 @@ Ciò potrebbe verificarsi in seguito al ripristino di un backup sul server.
|
||||
Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tutti i tuoi file con file più datati in uno stato precedente. Vuoi mantenere i tuoi file locali più recenti come file di conflitto?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1022"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<source>Backup detected</source>
|
||||
<translation>Backup rilevato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1024"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1026"/>
|
||||
<source>Normal Synchronisation</source>
|
||||
<translation>Sincronizzazione normale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/folder.cpp" line="1025"/>
|
||||
<location filename="../src/gui/folder.cpp" line="1027"/>
|
||||
<source>Keep Local Files as Conflict</source>
|
||||
<translation>Mantieni i file locali come conflitto</translation>
|
||||
</message>
|
||||
@@ -1408,27 +1408,27 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se
|
||||
<context>
|
||||
<name>OCC::NSISUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="334"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="331"/>
|
||||
<source>New Version Available</source>
|
||||
<translation>Nuova versione disponibile</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="340"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="337"/>
|
||||
<source><p>A new version of the %1 Client is available.</p><p><b>%2</b> is available for download. The installed version is %3.</p></source>
|
||||
<translation><p>Una nuova versione del client %1 è disponibile.</p><p><b>%2</b> è disponibile per lo scaricamento. La versione installata è %3.</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="353"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="350"/>
|
||||
<source>Skip this version</source>
|
||||
<translation>Salta questa versione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="354"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="351"/>
|
||||
<source>Skip this time</source>
|
||||
<translation>Salta questa volta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="355"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="352"/>
|
||||
<source>Get update</source>
|
||||
<translation>Ottieni l'aggiornamento</translation>
|
||||
</message>
|
||||
@@ -1574,58 +1574,58 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se
|
||||
<context>
|
||||
<name>OCC::OCUpdater</name>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="106"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="103"/>
|
||||
<source>New %1 Update Ready</source>
|
||||
<translation>Un nuovo aggiornamento di %1 è pronto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="107"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="104"/>
|
||||
<source>A new update for %1 is about to be installed. The updater may ask
|
||||
for additional privileges during the process.</source>
|
||||
<translation>Un nuovo aggiornamento di %1 sta per essere installato. L'aggiornamento potrebbe richiedere privilegi aggiuntivi durante l'avanzamento.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="144"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="141"/>
|
||||
<source>Downloading version %1. Please wait...</source>
|
||||
<translation>Scaricamento della versione %1. Attendi...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="148"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="145"/>
|
||||
<source>Could not download update. Please click <a href='%1'>here</a> to download the update manually.</source>
|
||||
<translation>Impossibile scaricare l'aggiornamento. Fai clic <a href='%1'>qui</a> per scaricare l'aggiornamento manualmente.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="150"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="147"/>
|
||||
<source>Could not check for new updates.</source>
|
||||
<translation>Impossibile verificare la presenza di nuovi aggiornamenti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="146"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="143"/>
|
||||
<source>%1 version %2 available. Restart application to start the update.</source>
|
||||
<translation>La versione %2 di %1 è disponibile. Riavvia l'applicazione per iniziare l'aggiornamento.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="152"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="149"/>
|
||||
<source>New %1 version %2 available. Please use the system's update tool to install it.</source>
|
||||
<translation>Nuova versione %2 di %1 disponibile. Utilizza lo strumento di aggiornamento di sistema per installarla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="154"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="151"/>
|
||||
<source>Checking update server...</source>
|
||||
<translation>Controllo server degli aggiornamenti...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="156"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="153"/>
|
||||
<source>Update status is unknown: Did not check for new updates.</source>
|
||||
<translation>Lo stato di aggiornamento è sconosciuto. Non è possibile verificare la presenza di nuovi aggiornamenti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="160"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="157"/>
|
||||
<source>No updates available. Your installation is at the latest version.</source>
|
||||
<translation>Non ci sono aggiornamenti disponibili. La tua installazione è aggiornata all'ultima versione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="180"/>
|
||||
<location filename="../src/gui/updater/ocupdater.cpp" line="177"/>
|
||||
<source>Update Check</source>
|
||||
<translation>Controllo aggiornamenti</translation>
|
||||
</message>
|
||||
@@ -1795,7 +1795,7 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="212"/>
|
||||
<source>Invalid URL</source>
|
||||
<translation>URL non valido</translation>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/gui/owncloudsetupwizard.cpp" line="369"/>
|
||||
@@ -1950,7 +1950,7 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateDirectory</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="725"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="714"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Errore durante la scrittura dei metadati nel database</translation>
|
||||
</message>
|
||||
@@ -2006,17 +2006,17 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateItemJob</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="127"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="130"/>
|
||||
<source>; Restoration Failed: %1</source>
|
||||
<translation>; Ripristino non riuscito: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="152"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="153"/>
|
||||
<source>Continue blacklisting:</source>
|
||||
<translation>Continua la lista nera:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="245"/>
|
||||
<location filename="../src/libsync/owncloudpropagator.cpp" line="246"/>
|
||||
<source>A file or folder was removed from a read only share, but restoring failed: %1</source>
|
||||
<translation>Un file o una cartella è stato rimosso da una condivisione in sola lettura, ma il ripristino non è riuscito: %1</translation>
|
||||
</message>
|
||||
@@ -2149,7 +2149,7 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<translation>Un file locale è cambiato durante la sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="576"/>
|
||||
<location filename="../src/libsync/propagateupload.cpp" line="555"/>
|
||||
<source>Error writing metadata to the database</source>
|
||||
<translation>Errore durante la scrittura dei metadati nel database</translation>
|
||||
</message>
|
||||
@@ -2157,32 +2157,32 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileNG</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="365"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="361"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Forzare l'interruzione dell'operazione in caso di ripristino della connessione HTTP con Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="396"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="397"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Il file locale è stato rimosso durante la sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="407"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="408"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Un file locale è cambiato durante la sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="456"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="439"/>
|
||||
<source>Unexpected return code from server (%1)</source>
|
||||
<translation>Codice di uscita inatteso dal server (%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="463"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="446"/>
|
||||
<source>Missing File ID from server</source>
|
||||
<translation>File ID mancante dal server</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="476"/>
|
||||
<location filename="../src/libsync/propagateuploadng.cpp" line="459"/>
|
||||
<source>Missing ETag from server</source>
|
||||
<translation>ETag mancante dal server</translation>
|
||||
</message>
|
||||
@@ -2190,32 +2190,32 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<context>
|
||||
<name>OCC::PropagateUploadFileV1</name>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="198"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="197"/>
|
||||
<source>Forcing job abort on HTTP connection reset with Qt < 5.4.2.</source>
|
||||
<translation>Forzare l'interruzione dell'operazione in caso di ripristino della connessione HTTP con Qt < 5.4.2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="206"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="205"/>
|
||||
<source>The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file.</source>
|
||||
<translation>Il file è stato modificato localmente, ma è parte di una condivisione in sola lettura. È stato ripristinato e la tua modifica è nel file di conflitto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="242"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="236"/>
|
||||
<source>Poll URL missing</source>
|
||||
<translation>URL di richiesta mancante</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="265"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="259"/>
|
||||
<source>The local file was removed during sync.</source>
|
||||
<translation>Il file locale è stato rimosso durante la sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="276"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="270"/>
|
||||
<source>Local file changed during sync.</source>
|
||||
<translation>Un file locale è cambiato durante la sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="291"/>
|
||||
<location filename="../src/libsync/propagateuploadv1.cpp" line="285"/>
|
||||
<source>The server did not acknowledge the last chunk. (No e-tag was present)</source>
|
||||
<translation>Il server non ha riconosciuto l'ultimo pezzo. (Non era presente alcun e-tag)</translation>
|
||||
</message>
|
||||
@@ -2657,7 +2657,7 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<context>
|
||||
<name>OCC::SocketApi</name>
|
||||
<message>
|
||||
<location filename="../src/gui/socketapi.cpp" line="508"/>
|
||||
<location filename="../src/gui/socketapi.cpp" line="455"/>
|
||||
<source>Share with %1</source>
|
||||
<comment>parameter is ownCloud</comment>
|
||||
<translation>Condividi con %1</translation>
|
||||
@@ -2951,23 +2951,23 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<translation>Errore durante la lettura della cartella.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="468"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="452"/>
|
||||
<source>File/Folder is ignored because it's hidden.</source>
|
||||
<translation>Il file/cartella è ignorato poiché è nascosto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="735"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="719"/>
|
||||
<source>Only %1 are available, need at least %2 to start</source>
|
||||
<comment>Placeholders are postfixed with file sizes using Utility::octetsToString()</comment>
|
||||
<translation>Sono disponibili solo %1, servono almeno %2 per iniziare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1201"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1185"/>
|
||||
<source>Not allowed because you don't have permission to add parent folder</source>
|
||||
<translation>Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1208"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1192"/>
|
||||
<source>Not allowed because you don't have permission to add files in that folder</source>
|
||||
<translation>Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella</translation>
|
||||
</message>
|
||||
@@ -2986,6 +2986,11 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<source>Aborted by the user</source>
|
||||
<translation>Interrotto dall'utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="443"/>
|
||||
<source>Filename contains invalid characters that can not be synced cross platform.</source>
|
||||
<translation>Il nome del file contiene caratteri non validi che non possono essere sincronizzati su diverse piattaforme.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="168"/>
|
||||
<source>CSync failed to access</source>
|
||||
@@ -3037,114 +3042,99 @@ Non è consigliabile utilizzarlo.</translation>
|
||||
<translation>Il file è stato aggiunto alla lista ignorati.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="444"/>
|
||||
<source>File names ending with a period are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="454"/>
|
||||
<source>File names containing the character '%1' are not supported on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="457"/>
|
||||
<source>The file name is a reserved name on this file system.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="462"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="446"/>
|
||||
<source>Filename contains trailing spaces.</source>
|
||||
<translation>Il nome del file contiene spazi alla fine.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="465"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="449"/>
|
||||
<source>Filename is too long.</source>
|
||||
<translation>Il nome del file è troppo lungo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="474"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="458"/>
|
||||
<source>Stat failed.</source>
|
||||
<translation>Stat non riuscita.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="501"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="485"/>
|
||||
<source>Filename encoding is not valid</source>
|
||||
<translation>La codifica del nome del file non è valida</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="675"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="659"/>
|
||||
<source>Invalid characters, please rename "%1"</source>
|
||||
<translation>Caratteri non validi, rinomina "%1"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="772"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="756"/>
|
||||
<source>Unable to initialize a sync journal.</source>
|
||||
<translation>Impossibile inizializzare il registro di sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="791"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="775"/>
|
||||
<source>Unable to read the blacklist from the local database</source>
|
||||
<translation>Impossibile leggere la lista nera dal database locale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="828"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="812"/>
|
||||
<source>Unable to read from the sync journal.</source>
|
||||
<translation>Impossibile leggere dal registro di sincronizzazione.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="873"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="857"/>
|
||||
<source>Cannot open the sync journal</source>
|
||||
<translation>Impossibile aprire il registro di sincronizzazione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="930"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="914"/>
|
||||
<source>File name contains at least one invalid character</source>
|
||||
<translation>Il nome del file contiene almeno un carattere non valido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1160"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1167"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1144"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1151"/>
|
||||
<source>Ignored because of the "choose what to sync" blacklist</source>
|
||||
<translation>Ignorato in base alla lista nera per la scelta di cosa sincronizzare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1186"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1170"/>
|
||||
<source>Not allowed because you don't have permission to add subfolders to that folder</source>
|
||||
<translation>Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1211"/>
|
||||
<source>Not allowed to upload this file because it is read-only on the server, restoring</source>
|
||||
<translation>Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1243"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1262"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1227"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1246"/>
|
||||
<source>Not allowed to remove, restoring</source>
|
||||
<translation>Rimozione non consentita, ripristino</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1275"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1259"/>
|
||||
<source>Local files and share folder removed.</source>
|
||||
<translation>I file locali e la cartella condivisa sono stati rimossi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1331"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1315"/>
|
||||
<source>Move not allowed, item restored</source>
|
||||
<translation>Spostamento non consentito, elemento ripristinato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1342"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1326"/>
|
||||
<source>Move not allowed because %1 is read-only</source>
|
||||
<translation>Spostamento non consentito poiché %1 è in sola lettura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the destination</source>
|
||||
<translation>la destinazione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1343"/>
|
||||
<location filename="../src/libsync/syncengine.cpp" line="1327"/>
|
||||
<source>the source</source>
|
||||
<translation>l'origine</translation>
|
||||
</message>
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário