Comparar commits

..

46 Commits

Autor SHA1 Mensagem Data
Olivier Goffart 1617c9d482 PropfindJob: fix xml parsing
It would only find the first property
2015-04-07 10:35:27 +02:00
Markus Goetz 750cdc1910 AbstractSslErrorHandler: Also give QSslConfiguration 2015-04-06 21:46:03 +02:00
Olivier Goffart dafc2d2b73 Sync engine: Check the blacklist for the right tree
When the operation is download, we have a INSTRUCTION_NONE for the local
tree, but we should not check the blacklist just yet.
2015-03-24 12:23:04 +01:00
Jocelyn Turcotte 0bd2edd33a Revert "Switch back to an existing sha"
This reverts commit 48c9222578.
The submodule repository now has the required commit.
2015-03-24 10:24:25 +01:00
Jenkins for ownCloud 807267cfdb [tx-robot] updated from transifex 2015-03-24 02:18:42 -04:00
Daniel Molkentin 48c9222578 Switch back to an existing sha 2015-03-23 22:40:57 +01:00
Daniel Molkentin b5ea56df73 Add docker buildscript for win32 2015-03-23 22:24:43 +01:00
Carla Schroder 2fdf6dd8f2 Merge pull request #3008 from owncloud/passman
add note re password managers
2015-03-23 10:55:24 -07:00
Carla Schroder 5b8c9eb16f add note re password managers 2015-03-23 10:52:57 -07:00
Olivier Goffart 9c05150c12 SSLButton: Fix a crash
Made with danimo.
Attempt to fix a crash seen on breakpad reports.
(cc06b990-0c10-40eb-bcec-4d3902150320)
2015-03-23 18:30:53 +01:00
Daniel Molkentin c7eb85ef78 Activity: Correctly restore column sizes
Fixes: #3005
2015-03-23 18:22:25 +01:00
Olivier Goffart 4df455f2e0 Add-folder Wizard: Select the newly created folder 2015-03-23 16:50:37 +01:00
Olivier Goffart 653a00d63d Add-folder wizard: Make sure there is a scrollbar if folder names are too long
Fixes #2962
2015-03-23 16:32:41 +01:00
Jocelyn Turcotte 3c9acdf724 Fix a crash when accessing a dangling UploadDevice pointer #2984
This is largely a guess, but this is the only place where we use
a QIODevice to push data through QNAM and that the QIODevice isn't
a direct child of the QNetworkReply.

Fix the issue by making sure that we don't go back to the event loop
and possibly handle network events between the destruction of the
upload QIODevice and the QNetworkReply, which might lead to QNAM
dereferencing a dangling QIODevice pointer.
2015-03-23 16:14:54 +01:00
Olivier Goffart e81d1ab9b8 application: --confdir option with invalid direcotry now exit
Show an error and exit if an invalid directory (eg, a file) is passed to --confdir

Fixes: #2453
2015-03-23 15:02:27 +01:00
Jocelyn Turcotte ad5620efb5 Disable asserts in official builds
Make sure that we define NDEBUG in all configurations.
Also remove inconsistent defines:
WIN32: We don't use
_DEBUG;_WINDOWS;_USRDLL: Should be defined by the compiler if necessary
OCCONTEXTMENU_EXPORTS: We currently don't use dllimport anyway

This also update the binary submodule with an updated build.
2015-03-23 13:53:09 +01:00
Daniel Molkentin f455c71338 Merge pull request #2997 from owncloud/fix_shell-integration-python3
fix python3 syntax errors
2015-03-23 11:28:28 +01:00
Olivier Goffart 033f2cd231 Merge pull request #2998 from owncloud/remove-old-mirall-translation
Remove forgotten file.
2015-03-23 11:06:14 +01:00
Hefee c9eccd729d Remove forgotten file. 2015-03-22 18:01:25 +01:00
Hefee b1100cd9e5 fix python3 syntax errors 2015-03-22 17:49:09 +01:00
Jenkins for ownCloud 8f728ddfb2 [tx-robot] updated from transifex 2015-03-20 02:18:41 -04:00
Christian Kamm 4ef0ce112c CookieJar: Session cookies should *not* be stored in cookies.db. 2015-03-19 11:57:25 +01:00
Christian Kamm 57c14a0eba Windows: Reset QNAM as a workaround. #2899 #2895 #2973
The QNetworkAccessManager is reset when we are disconnected, just
before attempting to fetch the server's status.php.

This may help fix the problem described in various issues where we
get 'Connection closed' or timeout errors after the OS has woken
from sleep.
2015-03-19 11:40:47 +01:00
Christian Kamm 89f831e7d4 Remote delete: Consider 404 a success. #2919 2015-03-19 10:04:02 +01:00
Jenkins for ownCloud 917b8409ae [tx-robot] updated from transifex 2015-03-19 02:18:50 -04:00
Jenkins for ownCloud 86fd39e3a9 [tx-robot] updated from transifex 2015-03-18 02:18:42 -04:00
Jenkins for ownCloud 04db332051 [tx-robot] updated from transifex 2015-03-18 01:15:17 -04:00
Markus Goetz 06a2f58c51 Propagator: Introduce custom property to make error soft
This can be set by a custom credential QNAM.
2015-03-17 23:31:30 +01:00
Jenkins for ownCloud b87d55758b [tx-robot] updated from transifex 2015-03-17 02:18:44 -04:00
Klaas Freitag 38ef525d5e Push version to final 1.8.0 2015-03-16 15:28:58 +01:00
Jenkins for ownCloud 367b1fcc33 [tx-robot] updated from transifex 2015-03-16 02:18:44 -04:00
Jenkins for ownCloud f5c930968e [tx-robot] updated from transifex 2015-03-14 02:18:44 -04:00
Jocelyn Turcotte 5264a8c7f6 shell_integration: Fix disappearing context menus on Windows #2898
Since each new connection to the socket API would trigger a broadcast
of REGISTER_PATH to all existing connections, opening the context menu
would trigger a SHChangeNotify call of the root directory through
the overlay icon extension, which is currently also connected to the
socket API, waiting for changes.

Fix the issue by sending the initial REGISTER_PATH automatic response
only to the connecting socket.
2015-03-13 20:53:59 +01:00
Markus Goetz 6c4b7f1479 OS X: Always return 0 from pre_install.sh 2015-03-13 16:35:44 +01:00
Markus Goetz c42c9f0002 Propagator: Add comment 2015-03-13 15:48:35 +01:00
Christian Kamm 95f299f865 Remote folder wizard: Add optional manual entry #2613 2015-03-13 09:52:21 +01:00
Jenkins for ownCloud 09749e2c7f [tx-robot] updated from transifex 2015-03-13 02:18:46 -04:00
Carla Schroder dc33784a76 spelling corrections 2015-03-12 09:48:00 -07:00
Carla Schroder 961df1fc44 fix server side permissions table 2015-03-12 09:46:27 -07:00
Jocelyn Turcotte e93c1ccb73 Install the crash handler earlier during startup
This moves the crash handler installation during the OCC::Application
contruction. This still leaves a window where crashes wouldn't be
caught, leaving the QtSingleApplication and theme initialization
code unreported, but isn't requiring any refactoring for now.

Issue #2952
2015-03-12 17:16:05 +01:00
Klaas Freitag 286ad0c478 Doc: Formatting fixes 2015-03-12 16:59:12 +01:00
Klaas Freitag e30970ff90 Some ChangeLog corrections. 2015-03-12 16:49:41 +01:00
Daniel Molkentin 14e0e4a072 Win32: More reserved file names to ignore, including Recycle Bin
Addresses #2955
2015-03-12 16:25:32 +01:00
Jocelyn Turcotte 60da0a15e6 shell_integration: Remove the incorrect usage of the MIIM_BITMAP flag
This flag should only be specified if the hbmpItem member of the
MENUITEMINFO has been set.
2015-03-12 15:22:29 +01:00
Jocelyn Turcotte 0f84510e6f Fix the build with GCC 4.7
Disable bitfields completely in SyncFileItem with that compiler.
2015-03-12 14:54:11 +01:00
Christian Kamm 1dd3488973 Uploads: Fix big seeks on Windows. #2954 2015-03-12 13:18:08 +01:00
53 arquivos alterados com 616 adições e 380 exclusões
+3 -4
Ver Arquivo
@@ -1,6 +1,6 @@
ChangeLog
=========
version 1.8.0 (release 2015-02-xx)
version 1.8.0 (release 2015-03-xx)
* Mac OS: HIDPI support
* Support Sharing from desktop: Added a share dialog that can be
opened by context menu in the file managers (Win, Mac, Nautilus)
@@ -12,7 +12,7 @@ version 1.8.0 (release 2015-02-xx)
* Added ability to build on Windows utilizing MingGW
* SQLite database fixes if running on FAT filesystems
* Improved detection of changing files to upload from local
* Preparations for the muli-account feature
* Preparations for the multi-account feature
* Fixed experience for Window manager without system tray
* Build with Qt 5.4
* Dropped libneon dependency if Qt 5.4 is available
@@ -24,8 +24,7 @@ version 1.8.0 (release 2015-02-xx)
* Prepared direct download
* Added Crashreporter feature to be switched on on demand
* A huge amount of bug fixes in all areas of the client.
* more than 7000 commits since 1.7.0
* almost 700 commits since 1.7.1
version 1.7.1 (release 2014-12-18)
* Documentation fixes and updates
+1 -1
Ver Arquivo
@@ -4,7 +4,7 @@ set( MIRALL_VERSION_PATCH 0 )
set( MIRALL_SOVERSION 0 )
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
set( MIRALL_VERSION_SUFFIX "rc1") #e.g. beta1, beta2, rc1
set( MIRALL_VERSION_SUFFIX "") #e.g. beta1, beta2, rc1
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
if( NOT DEFINED MIRALL_VERSION_BUILD )
+1
Ver Arquivo
@@ -6,3 +6,4 @@ killall @APPLICATION_EXECUTABLE@
# Unload the Finder plugin. see issue #2105
killall Finder
exit 0
Arquivo executável
+14
Ver Arquivo
@@ -0,0 +1,14 @@
#!/bin/bash
useradd user
su - user << EOF
cd /home/user/$1
rm -rf build-win32
mkdir build-win32
cd build-win32
../admin/win/download_runtimes.sh
cmake .. -DCMAKE_TOOLCHAIN_FILE=../admin/win/Toolchain-mingw32-openSUSE.cmake -DWITH_CRASHREPORTER=ON
make -j4
make package
EOF
+1 -1
Ver Arquivo
@@ -2,7 +2,7 @@
#VS2013
base_url=http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3
tmp_path=/tmp/.vcredist
tmp_path=${1:-/tmp/.vcredist}
mkdir -p $tmp_path
+2 -2
Ver Arquivo
@@ -15,6 +15,8 @@ StrCpy $PageReinstall_SAME_Field_3 "Desinstal.lar ${APPLICATION_NAME}"
StrCpy $UNINSTALLER_APPDATA_TITLE "Desinstal.lar ${APPLICATION_NAME}"
StrCpy $PageReinstall_SAME_MUI_HEADER_TEXT_SUBTITLE "Escolliu l'opció de manteniment per executar-ho."
StrCpy $SEC_APPLICATION_DETAILS "Instal·lant ${APPLICATION_NAME} essencial."
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integració per Windows Explorer"
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Instal·lant integració per Windows Explorer"
StrCpy $OPTION_SECTION_SC_START_MENU_SECTION "Accés directe del programa al menú d'inici"
StrCpy $OPTION_SECTION_SC_START_MENU_DetailPrint "Afegint la drecera per ${APPLICATION_NAME} al menú d'inici."
StrCpy $OPTION_SECTION_SC_DESKTOP_SECTION "Drecera a l'escriptori"
@@ -42,5 +44,3 @@ StrCpy $INIT_INSTALLER_RUNNING "L'instal·lador ja s'està executant."
StrCpy $UAC_UNINSTALLER_REQUIRE_ADMIN "Aquest desinstal·lador requereix accés d'administrador, intenteu-ho de nou."
StrCpy $INIT_UNINSTALLER_RUNNING "El desinstal·lador ja s'està executant."
StrCpy $SectionGroup_Shortcuts "Dreceres"
StrCpy $OPTION_SECTION_SC_SHELL_EXT_SECTION "Integration for Windows Explorer"
StrCpy $OPTION_SECTION_SC_SHELL_EXT_DetailPrint "Installing Integration for Windows Explorer"
+1 -1
Submodule binary updated: 01d73965dc...1fb9ddfa9a
+6 -5
Ver Arquivo
@@ -151,11 +151,12 @@ CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype) {
return match;
}
// See http://support.microsoft.com/kb/74496
static const char *win_reserved_words[] = {"CON","PRN","AUX", "NUL",
"COM1", "COM2", "COM3", "COM4",
"LPT1", "LPT2", "LPT3", "CLOCK$" };
// See http://support.microsoft.com/kb/74496 and
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
// Additionally, we ignore '$Recycle.Bin', see https://github.com/owncloud/client/issues/2955
static const char* win_reserved_words[] = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5",
"COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4",
"LPT5", "LPT6", "LPT7", "LPT8", "LPT9", "CLOCK$", "$Recycle.Bin" };
bool csync_is_windows_reserved_word(const char* filename) {
+41 -42
Ver Arquivo
@@ -151,9 +151,9 @@ ownCloud Client provides the ability to add custom patterns.
By default, the ownCloud Client ignores the following files:
- Files matched by one of the patterns defined in :ref:`ignoredFilesEditor-label`.
- Files containing characters that do not work on certain file systems (`\, /, :, ?, *, ", >, <, |`).
* Files starting in ``.csync_journal.db*``, as these files are reserved for journalling.
* Files matched by one of the patterns defined in the Ignored Files Editor
* Files containing characters that do not work on certain file systems ``(`\, /, :, ?, *, ", >, <, |`)``.
* Files starting in ``.csync_journal.db``, as these files are reserved for journalling.
If a pattern selected using a checkbox in the `ignoredFilesEditor-label` (or if
a line in the exclude file starts with the character `]` directly followed by
@@ -212,62 +212,61 @@ In the communication between client and server a couple of custom WebDAV propert
were introduced. They are either needed for sync functionality or help have a positive
effect on synchronization performance.
This chapter describes additional xml elemeents which the server returns in response
to a successful PROPFIND request on a file or directory. The elemnts are returned in
This chapter describes additional xml elements which the server returns in response
to a successful PROPFIND request on a file or directory. The elements are returned in
the namespace oc.
###Server Side Permissions
Server Side Permissions
------------------------
The XML element <oc:permissions> represents the permission- and sharing state of the
The XML element ``<oc:permissions>`` represents the permission- and sharing state of the
item. It is a list of characters, and each of the chars has a meaning as outlined
in the table below:
+------+-------------+-------------------------------------------+
| Code | Resource | Description |
|======+=============+===========================================|
| S | File or Folder | is shared |
+---+----------------+-------------------------------------------|
| R | File or Folder | can share (includes reshare) |
+---+----------------+-------------------------------------------|
| M | File or Folder | is mounted (like on DropBox, Samba, etc.) |
+---+----------------+-------------------------------------------|
| W | File | can write file |
+---+----------------+-------------------------------------------|
| C | Folder |can create file in folder |
+---+----------------+-------------------------------------------|
| K | Folder | can create folder (mkdir) |
+---+----------------+-------------------------------------------|
| D | File or Folder |can delete file or folder |
+---+----------------+-------------------------------------------|
| N | File or Folder | can rename file or folder |
+---+----------------+-------------------------------------------|
| V | File or Folder | can move file or folder |
+---+----------------+-------------------------------------------|
+----+----------------+-------------------------------------------+
|Code| Resource | Description |
+----+----------------+-------------------------------------------+
| S | File or Folder | is shared |
+----+----------------+-------------------------------------------+
| R | File or Folder | can share (includes reshare) |
+----+----------------+-------------------------------------------+
| M | File or Folder | is mounted (like on DropBox, Samba, etc.) |
+----+----------------+-------------------------------------------+
| W | File | can write file |
+----+----------------+-------------------------------------------+
| C | Folder |can create file in folder |
+----+----------------+-------------------------------------------+
| K | Folder | can create folder (mkdir) |
+----+----------------+-------------------------------------------+
| D | File or Folder |can delete file or folder |
+----+----------------+-------------------------------------------+
| N | File or Folder | can rename file or folder |
+----+----------------+-------------------------------------------+
| V | File or Folder | can move file or folder |
+----+----------------+-------------------------------------------+
Example:
```
<oc:permissions>RDNVCK</oc:permissions>
```
###File- or Directory Size
<oc:permissions>RDNVCK</oc:permissions>
The XML element <oc:size> represents the file- or directory size in bytes. For
File- or Directory Size
-----------------------
The XML element ``<oc:size>`` represents the file- or directory size in bytes. For
directories, the size of the whole file tree underneath the directory is accumulated.
Example:
```
<oc:size>2429176697</oc:size>
```
###FileID
<oc:size>2429176697</oc:size>
FileID
------
The XML element <oc:id> represents the so called file ID. It is a non volatile string id
The XML element ``<oc:id>`` represents the so called file ID. It is a non volatile string id
that stays constant as long as the file exists. It is not changed if the file changes or
is renamed or moved.
Example:
```
<oc:id>00000020oc5cfy6qqizm</oc:id>
```
<oc:id>00000020oc5cfy6qqizm</oc:id>
+3
Ver Arquivo
@@ -18,6 +18,9 @@ and then use their package managers to install the desktop sync client. Linux
users will also update their sync clients via package manager, and the client
will display a notification when an update is available.
Linux users must also have a password manager enabled, such as GNOME Keyring or
KWallet, so that the sync client can login automatically.
Improvements and New Features
-----------------------------
+3 -3
Ver Arquivo
@@ -67,7 +67,7 @@ class SocketConnect(GObject.GObject):
print("Sending failed.")
self.reconnect()
else:
print "Cannot send, not connected!"
print("Cannot send, not connected!")
def addListener(self, listener):
self._listeners.append(listener)
@@ -85,7 +85,7 @@ class SocketConnect(GObject.GObject):
self.connected = True
print("Setting connected to %r" % self.connected )
self._watch_id = GObject.io_add_watch(self._sock, GObject.IO_IN, self._handle_notify)
print "Socket watch id: "+str(self._watch_id)
print("Socket watch id: "+str(self._watch_id))
return False # don't run again
except Exception as e:
print("Could not connect to unix socket." + str(e))
@@ -175,7 +175,7 @@ class MenuExtension(GObject.GObject, Nautilus.MenuProvider):
def menu_share(self, menu, file):
filename = get_local_path(file.get_uri())
print "Share file "+filename
print("Share file "+filename)
socketConnect.sendCommand("SHARE:"+filename+"\n")
@@ -168,7 +168,7 @@ IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
assert(!info.shareMenuTitle.empty());
MENUITEMINFO mii = { sizeof(mii) };
mii.fMask = MIIM_BITMAP | MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
mii.wID = idCmdFirst + IDM_SHARE;
mii.fType = MFT_STRING;
mii.dwTypeData = &info.shareMenuTitle[0];
@@ -83,7 +83,6 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;OCCONTEXTMENU_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\OCUtil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
@@ -101,8 +100,8 @@
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;OCCONTEXTMENU_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\OCUtil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -132,6 +131,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\OCUtil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>..\$(Configuration)\$(Platform);</AdditionalLibraryDirectories>
@@ -127,6 +127,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>..\OCUtil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -145,6 +146,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>..\OCUtil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -120,6 +120,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PrecompiledHeader>Use</PrecompiledHeader>
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -136,6 +137,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PrecompiledHeader>Use</PrecompiledHeader>
<PreprocessorDefinitions>NDEBUG;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
+2 -1
Ver Arquivo
@@ -15,9 +15,10 @@
#include "account.h"
#include "simplesslerrorhandler.h"
bool SimpleSslErrorHandler::handleErrors(QList<QSslError> errors, QList<QSslCertificate> *certs, OCC::AccountPtr account)
bool SimpleSslErrorHandler::handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr account)
{
(void) account;
(void) conf;
if (!certs) {
qDebug() << "Certs parameter required but is NULL!";
+1 -1
Ver Arquivo
@@ -20,7 +20,7 @@ class QSslCertificate;
class SimpleSslErrorHandler : public OCC::AbstractSslErrorHandler {
public:
bool handleErrors(QList<QSslError> errors, QList<QSslCertificate> *certs, OCC::AccountPtr) Q_DECL_OVERRIDE;
bool handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr) Q_DECL_OVERRIDE;
};
#endif // SIMPLESSLERRORHANDLER_H
+9
Ver Arquivo
@@ -179,6 +179,15 @@ void AccountState::checkConnectivity()
conValidator->checkAuthentication();
} else {
// Check the server and then the auth.
#ifdef Q_OS_WIN
// There seems to be a bug in Qt on Windows where QNAM sometimes stops
// working correctly after the computer woke up from sleep. See #2895 #2899
// and #2973.
// As an attempted workaround, reset the QNAM regularly if the account is
// disconnected.
account()->resetNetworkAccessManager();
#endif
conValidator->checkServerAndAuth();
}
}
+13 -1
Ver Arquivo
@@ -42,6 +42,10 @@
#include <windows.h>
#endif
#if defined(WITH_CRASHREPORTER)
#include <libcrashreporter-handler/Handler.h>
#endif
#include <QTranslator>
#include <QMenu>
#include <QMessageBox>
@@ -106,6 +110,11 @@ Application::Application(int &argc, char **argv) :
if (isRunning())
return;
#if defined(WITH_CRASHREPORTER)
if (ConfigFile().crashReporter())
_crashHandler.reset(new CrashReporter::Handler( QDir::tempPath(), true, CRASHREPORTER_EXECUTABLE ));
#endif
setupLogging();
setupTranslations();
@@ -394,7 +403,10 @@ void Application::parseOptions(const QStringList &options)
} else if (option == QLatin1String("--confdir")) {
if (it.hasNext() && !it.peekNext().startsWith(QLatin1String("--"))) {
QString confDir = it.next();
ConfigFile::setConfDir( confDir );
if (!ConfigFile::setConfDir( confDir )) {
std::cerr << "Invalid path passed to --confdir" << std::endl;
std::exit(1);
}
} else {
showHelp();
}
+7
Ver Arquivo
@@ -34,6 +34,10 @@ class QMessageBox;
class QSystemTrayIcon;
class QSocket;
namespace CrashReporter {
class Handler;
}
namespace OCC {
class Theme;
class Folder;
@@ -109,6 +113,9 @@ private:
QTimer _checkConnectionTimer;
#if defined(WITH_CRASHREPORTER)
QScopedPointer<CrashReporter::Handler> _crashHandler;
#endif
QScopedPointer<FolderMan> _folderManager;
friend class ownCloudGui; // for _startupNetworkError
+107 -21
Ver Arquivo
@@ -239,10 +239,19 @@ FolderWizardRemotePath::FolderWizardRemotePath(AccountPtr account)
connect(_ui.addFolderButton, SIGNAL(clicked()), SLOT(slotAddRemoteFolder()));
connect(_ui.refreshButton, SIGNAL(clicked()), SLOT(slotRefreshFolders()));
connect(_ui.folderTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SIGNAL(completeChanged()));
connect(_ui.folderTreeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)), SIGNAL(completeChanged()));
connect(_ui.folderTreeWidget, SIGNAL(itemExpanded(QTreeWidgetItem*)), SLOT(slotItemExpanded(QTreeWidgetItem*)));
connect(_ui.folderTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(slotCurrentItemChanged(QTreeWidgetItem*)));
connect(_ui.folderEntry, SIGNAL(textEdited(QString)), SLOT(slotFolderEntryEdited(QString)));
_lscolTimer.setInterval(500);
_lscolTimer.setSingleShot(true);
connect(&_lscolTimer, SIGNAL(timeout()), SLOT(slotLsColFolderEntry()));
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
_ui.folderTreeWidget->header()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
// Make sure that there will be a scrollbar when the contents is too wide
_ui.folderTreeWidget->header()->setStretchLastSection(false);
#endif
}
void FolderWizardRemotePath::slotAddRemoteFolder()
@@ -288,6 +297,8 @@ void FolderWizardRemotePath::slotCreateRemoteFolderFinished(QNetworkReply::Netwo
qDebug() << "** webdav mkdir request finished";
showWarn(tr("Folder was successfully created on %1.").arg(Theme::instance()->appNameGUI()));
slotRefreshFolders();
_ui.folderEntry->setText(static_cast<MkColJob *>(sender())->path());
slotLsColFolderEntry();
}
}
@@ -315,27 +326,58 @@ static QTreeWidgetItem* findFirstChild(QTreeWidgetItem *parent, const QString& t
void FolderWizardRemotePath::recursiveInsert(QTreeWidgetItem *parent, QStringList pathTrail, QString path)
{
QFileIconProvider prov;
QIcon folderIcon = prov.icon(QFileIconProvider::Folder);
if (pathTrail.size() == 0) {
if (path.endsWith('/')) {
path.chop(1);
}
parent->setToolTip(0, path);
parent->setData(0, Qt::UserRole, path);
} else {
QTreeWidgetItem *item = findFirstChild(parent, pathTrail.first());
if (!item) {
item = new QTreeWidgetItem(parent);
item->setIcon(0, folderIcon);
item->setText(0, pathTrail.first());
item->setData(0, Qt::UserRole, pathTrail.first());
item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
}
if (pathTrail.isEmpty())
return;
pathTrail.removeFirst();
recursiveInsert(item, pathTrail, path);
const QString parentPath = parent->data(0, Qt::UserRole).toString();
const QString folderName = pathTrail.first();
QString folderPath;
if (parentPath == QLatin1String("/")) {
folderPath = folderName;
} else {
folderPath = parentPath + "/" + folderName;
}
QTreeWidgetItem *item = findFirstChild(parent, folderName);
if (!item) {
item = new QTreeWidgetItem(parent);
QFileIconProvider prov;
QIcon folderIcon = prov.icon(QFileIconProvider::Folder);
item->setIcon(0, folderIcon);
item->setText(0, folderName);
item->setData(0, Qt::UserRole, folderPath);
item->setToolTip(0, folderPath);
item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
}
pathTrail.removeFirst();
recursiveInsert(item, pathTrail, path);
}
bool FolderWizardRemotePath::selectByPath(QString path)
{
if (path.startsWith(QLatin1Char('/'))) {
path = path.mid(1);
}
if (path.endsWith(QLatin1Char('/'))) {
path.chop(1);
}
QTreeWidgetItem *it = _ui.folderTreeWidget->topLevelItem(0);
if (!path.isEmpty()) {
const QStringList pathTrail = path.split(QLatin1Char('/'));
foreach (const QString& path, pathTrail) {
if (!it) {
return false;
}
it = findFirstChild(it, path);
}
}
if (!it) {
return false;
}
_ui.folderTreeWidget->setCurrentItem(it);
return true;
}
void FolderWizardRemotePath::slotUpdateDirectories(const QStringList &list)
@@ -367,6 +409,7 @@ void FolderWizardRemotePath::slotRefreshFolders()
SLOT(slotUpdateDirectories(QStringList)));
job->start();
_ui.folderTreeWidget->clear();
_ui.folderEntry->clear();
}
void FolderWizardRemotePath::slotItemExpanded(QTreeWidgetItem *item)
@@ -379,6 +422,49 @@ void FolderWizardRemotePath::slotItemExpanded(QTreeWidgetItem *item)
job->start();
}
void FolderWizardRemotePath::slotCurrentItemChanged(QTreeWidgetItem *item)
{
if (item) {
QString dir = item->data(0, Qt::UserRole).toString();
if (!dir.startsWith(QLatin1Char('/'))) {
dir.prepend(QLatin1Char('/'));
}
_ui.folderEntry->setText(dir);
}
emit completeChanged();
}
void FolderWizardRemotePath::slotFolderEntryEdited(const QString& text)
{
if (selectByPath(text)) {
_lscolTimer.stop();
return;
}
_ui.folderTreeWidget->setCurrentItem(0);
_lscolTimer.start(); // avoid sending a request on each keystroke
}
void FolderWizardRemotePath::slotLsColFolderEntry()
{
QString path = _ui.folderEntry->text();
if (path.startsWith(QLatin1Char('/')))
path = path.mid(1);
LsColJob *job = new LsColJob(_account, path, this);
job->setProperties(QList<QByteArray>() << "resourcetype");
connect(job, SIGNAL(directoryListingSubfolders(QStringList)),
SLOT(slotTypedPathFound(QStringList)));
job->start();
}
void FolderWizardRemotePath::slotTypedPathFound(const QStringList& subpaths)
{
slotUpdateDirectories(subpaths);
selectByPath(_ui.folderEntry->text());
}
FolderWizardRemotePath::~FolderWizardRemotePath()
{
}
+6
Ver Arquivo
@@ -86,11 +86,17 @@ protected slots:
void slotUpdateDirectories(const QStringList&);
void slotRefreshFolders();
void slotItemExpanded(QTreeWidgetItem*);
void slotCurrentItemChanged(QTreeWidgetItem*);
void slotFolderEntryEdited(const QString& text);
void slotLsColFolderEntry();
void slotTypedPathFound(const QStringList& subpaths);
private:
void recursiveInsert(QTreeWidgetItem *parent, QStringList pathTrail, QString path);
bool selectByPath(QString path);
Ui_FolderWizardTargetPage _ui;
bool _warnWasVisible;
AccountPtr _account;
QTimer _lscolTimer;
};
+5 -2
Ver Arquivo
@@ -14,7 +14,10 @@
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="3" column="0">
<item row="1" column="0">
<widget class="QLineEdit" name="folderEntry"/>
</item>
<item row="2" column="0">
<widget class="QFrame" name="warnFrame">
<property name="palette">
<palette>
@@ -179,7 +182,7 @@
</layout>
</widget>
</item>
<item row="4" column="0">
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
-13
Ver Arquivo
@@ -28,13 +28,6 @@
#include "updater/updater.h"
#include "config.h"
#ifdef WITH_CRASHREPORTER
#include "configfile.h"
#include <libcrashreporter-handler/Handler.h>
#endif
#include <QTimer>
#include <QMessageBox>
@@ -59,12 +52,6 @@ int main(int argc, char **argv)
#endif
OCC::Application app(argc, argv);
#ifdef WITH_CRASHREPORTER
if (ConfigFile().crashReporter())
new CrashReporter::Handler( QDir::tempPath(), true, CRASHREPORTER_EXECUTABLE );
#endif
#ifndef Q_OS_WIN
signal(SIGPIPE, SIG_IGN);
#endif
+14 -6
Ver Arquivo
@@ -73,16 +73,10 @@ ProtocolWidget::ProtocolWidget(QWidget *parent) :
_copyBtn->setToolTip( tr("Copy the activity list to the clipboard."));
_copyBtn->setEnabled(false);
connect(_copyBtn, SIGNAL(clicked()), SLOT(copyToClipboard()));
ConfigFile cfg;
cfg.restoreGeometryHeader(_ui->_treeWidget->header());
}
ProtocolWidget::~ProtocolWidget()
{
ConfigFile cfg;
cfg.saveGeometryHeader(_ui->_treeWidget->header() );
delete _ui;
}
@@ -137,6 +131,20 @@ void ProtocolWidget::slotRetrySync()
folderMan->slotScheduleAllFolders();
}
void ProtocolWidget::showEvent(QShowEvent *ev)
{
ConfigFile cfg;
cfg.restoreGeometryHeader(_ui->_treeWidget->header());
QWidget::showEvent(ev);
}
void ProtocolWidget::hideEvent(QHideEvent *ev)
{
ConfigFile cfg;
cfg.saveGeometryHeader(_ui->_treeWidget->header() );
QWidget::hideEvent(ev);
}
void ProtocolWidget::cleanIgnoreItems(const QString& folder)
{
int itemCnt = _ui->_treeWidget->topLevelItemCount();
+4 -2
Ver Arquivo
@@ -39,8 +39,6 @@ public:
explicit ProtocolWidget(QWidget *parent = 0);
~ProtocolWidget();
signals:
public slots:
void slotProgressInfo( const QString& folder, const Progress::Info& progress );
void slotOpenFile( QTreeWidgetItem* item, int );
@@ -49,6 +47,10 @@ protected slots:
void copyToClipboard();
void slotRetrySync();
protected:
void showEvent(QShowEvent *);
void hideEvent(QHideEvent *);
signals:
void guiLog(const QString&, const QString&);
+15 -3
Ver Arquivo
@@ -185,8 +185,9 @@ void SocketApi::slotNewConnection()
broadcastMessage(QLatin1String("ICON_PATH"), iconPath );
#endif
foreach( QString alias, FolderMan::instance()->map().keys() ) {
slotRegisterPath(alias);
foreach( Folder *f, FolderMan::instance()->map() ) {
QString message = buildRegisterPathMessage(f->path());
sendMessage(socket, message);
}
}
@@ -226,7 +227,10 @@ void SocketApi::slotRegisterPath( const QString& alias )
{
Folder *f = FolderMan::instance()->folder(alias);
if (f) {
broadcastMessage(QLatin1String("REGISTER_PATH"), f->path() );
QString message = buildRegisterPathMessage(f->path());
foreach(SocketType *socket, _listeners) {
sendMessage(socket, message);
}
}
}
@@ -449,6 +453,14 @@ void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketType* socket)
sendMessage(socket, QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI()));
}
QString SocketApi::buildRegisterPathMessage(const QString& path)
{
QFileInfo fi(path);
QString message = QLatin1String("REGISTER_PATH:");
message.append(QDir::toNativeSeparators(fi.absoluteFilePath()));
return message;
}
SqlQuery* SocketApi::getSqlQuery( Folder *folder )
{
if( !folder ) {
+1
Ver Arquivo
@@ -82,6 +82,7 @@ private:
Q_INVOKABLE void command_VERSION(const QString& argument, SocketType* socket);
Q_INVOKABLE void command_SHARE_MENU_TITLE(const QString& argument, SocketType* socket);
QString buildRegisterPathMessage(const QString& path);
#ifdef SOCKETAPI_TCP
QTcpServer _localServer;
+6
Ver Arquivo
@@ -190,6 +190,12 @@ void SslButton::updateAccountState(AccountState *accountState)
setToolTip(tr("This connection is encrypted using %1 bit %2.\n").arg(cipher.usedBits()).arg(cipher.name()));
QMenu *menu = new QMenu(this);
QList<QSslCertificate> chain = account->sslConfiguration().peerCertificateChain();
if (chain.isEmpty()) {
qWarning() << "empty certificate chain";
return;
}
menu->addAction(tr("Certificate information:"))->setEnabled(false);
QList<QSslCertificate> tmpChain;
+2 -1
Ver Arquivo
@@ -34,8 +34,9 @@ namespace Utility {
}
#endif
bool SslDialogErrorHandler::handleErrors(QList<QSslError> errors, QList<QSslCertificate> *certs, AccountPtr account)
bool SslDialogErrorHandler::handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, AccountPtr account)
{
(void) conf;
if (!certs) {
qDebug() << "Certs parameter required but is NULL!";
return false;
+1 -1
Ver Arquivo
@@ -33,7 +33,7 @@ class SslErrorDialog;
class SslDialogErrorHandler : public AbstractSslErrorHandler {
public:
bool handleErrors(QList<QSslError> errors, QList<QSslCertificate> *certs, AccountPtr) Q_DECL_OVERRIDE;
bool handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, AccountPtr) Q_DECL_OVERRIDE;
};
class SslErrorDialog : public QDialog
+16 -1
Ver Arquivo
@@ -271,6 +271,21 @@ void Account::clearCookieJar()
_am->setCookieJar(new CookieJar);
}
void Account::resetNetworkAccessManager()
{
if (!_credentials || !_am) {
return;
}
qDebug() << "Resetting QNAM";
QNetworkCookieJar* jar = _am->cookieJar();
_am->deleteLater();
_am = _credentials->getQNAM();
_am->setCookieJar(jar); // takes ownership of the old cookie jar
connect(_am, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
SLOT(slotHandleErrors(QNetworkReply*,QList<QSslError>)));
}
QNetworkAccessManager *Account::networkAccessManager()
{
return _am;
@@ -460,7 +475,7 @@ void Account::slotHandleErrors(QNetworkReply *reply , QList<QSslError> errors)
return;
}
if (_sslErrorHandler->handleErrors(errors, &approvedCerts, sharedFromThis())) {
if (_sslErrorHandler->handleErrors(errors, reply->sslConfiguration(), &approvedCerts, sharedFromThis())) {
QSslSocket::addDefaultCaCertificates(approvedCerts);
addApprovedCerts(approvedCerts);
// all ssl certs are known and accepted. We can ignore the problems right away.
+2 -1
Ver Arquivo
@@ -62,7 +62,7 @@ private:
class AbstractSslErrorHandler {
public:
virtual ~AbstractSslErrorHandler() {}
virtual bool handleErrors(QList<QSslError>, QList<QSslCertificate>*, AccountPtr) = 0;
virtual bool handleErrors(QList<QSslError>, const QSslConfiguration &conf, QList<QSslCertificate>*, AccountPtr) = 0;
};
/**
@@ -156,6 +156,7 @@ public:
void clearCookieJar();
void resetNetworkAccessManager();
QNetworkAccessManager* networkAccessManager();
/// Called by network jobs on credential errors.
+6 -4
Ver Arquivo
@@ -85,10 +85,10 @@ ConfigFile::ConfigFile()
// qDebug() << Q_FUNC_INFO << "Loading config: " << config << " (URL is " << settings.value("url").toString() << ")";
}
void ConfigFile::setConfDir(const QString &value)
bool ConfigFile::setConfDir(const QString &value)
{
QString dirPath = value;
if( dirPath.isEmpty() ) return;
if( dirPath.isEmpty() ) return false;
QFileInfo fi(dirPath);
if ( !fi.exists() && !fi.isAbsolute() ) {
@@ -101,7 +101,9 @@ void ConfigFile::setConfDir(const QString &value)
dirPath = fi.absoluteFilePath();
qDebug() << "** Using custom config dir " << dirPath;
_confDir=dirPath;
return true;
}
return false;
}
bool ConfigFile::optionalDesktopNotifications() const
@@ -145,7 +147,7 @@ void ConfigFile::saveGeometryHeader(QHeaderView *header)
{
#ifndef TOKEN_AUTH_ONLY
if(!header) return;
Q_ASSERT(!header->objectName().isNull());
Q_ASSERT(!header->objectName().isEmpty());
QSettings settings(configFile(), QSettings::IniFormat);
settings.beginGroup(header->objectName());
@@ -162,7 +164,7 @@ void ConfigFile::restoreGeometryHeader(QHeaderView *header)
QSettings settings(configFile(), QSettings::IniFormat);
settings.beginGroup(header->objectName());
header->restoreState(getValue(geometryC, header->objectName()).toByteArray());
header->restoreState(settings.value(geometryC).toByteArray());
#endif
}
+1 -1
Ver Arquivo
@@ -96,7 +96,7 @@ public:
void setUploadLimit(int kbytes);
void setDownloadLimit(int kbytes);
static void setConfDir(const QString &value);
static bool setConfDir(const QString &value);
bool optionalDesktopNotifications() const;
void setOptionalDesktopNotifications(bool show);
+1 -1
Ver Arquivo
@@ -103,7 +103,7 @@ void CookieJar::save()
qDebug() << storagePath();
file.open(QIODevice::WriteOnly);
QDataStream stream(&file);
stream << allCookies();
stream << removeExpired(allCookies());
file.close();
}
+31 -18
Ver Arquivo
@@ -204,12 +204,12 @@ bool FileSystem::renameReplace(const QString& originFileName, const QString& des
return true;
}
bool FileSystem::openFileSharedRead(QFile* file, QString* error)
bool FileSystem::openAndSeekFileSharedRead(QFile* file, QString* errorOrNull, qint64 seek)
{
bool ok = false;
if (error) {
error->clear();
}
QString errorDummy;
// avoid many if (errorOrNull) later.
QString& error = errorOrNull ? *errorOrNull : errorDummy;
error.clear();
#ifdef Q_OS_WIN
//
@@ -236,9 +236,7 @@ bool FileSystem::openFileSharedRead(QFile* file, QString* error)
// Bail out on error.
if (fileHandle == INVALID_HANDLE_VALUE) {
if (error) {
*error = qt_error_string();
}
error = qt_error_string();
return false;
}
@@ -247,19 +245,34 @@ bool FileSystem::openFileSharedRead(QFile* file, QString* error)
// the fd the handle will be closed too.
int fd = _open_osfhandle((intptr_t)fileHandle, _O_RDONLY);
if (fd == -1) {
if (error) {
*error = "could not make fd from handle";
}
error = "could not make fd from handle";
return false;
}
ok = file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle);
#else
ok = file->open(QFile::ReadOnly);
#endif
if (! ok && error) {
*error = file->errorString();
if (!file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle)) {
error = file->errorString();
return false;
}
return ok;
// Seek to the right spot
LARGE_INTEGER *li = reinterpret_cast<LARGE_INTEGER*>(&seek);
DWORD newFilePointer = SetFilePointer(fileHandle, li->LowPart, &li->HighPart, FILE_BEGIN);
if (newFilePointer == 0xFFFFFFFF && GetLastError() != NO_ERROR) {
error = qt_error_string();
return false;
}
return true;
#else
if (!file->open(QFile::ReadOnly)) {
error = file->errorString();
return false;
}
if (!file->seek(seek)) {
error = file->errorString();
return false;
}
return true;
#endif
}
#ifdef Q_OS_WIN
+4 -4
Ver Arquivo
@@ -75,13 +75,13 @@ bool renameReplace(const QString &originFileName, const QString &destinationFile
QString *errorString);
/**
* Replacement for QFile::open(ReadOnly) that sets a more permissive sharing mode
* on Windows.
* Replacement for QFile::open(ReadOnly) followed by a seek().
* This version sets a more permissive sharing mode on Windows.
*
* Warning: The resuting file may have an empty fileName and be unsuitable for use
* with QFileInfo!
* with QFileInfo! Calling seek() on the QFile with >32bit signed values will fail!
*/
bool openFileSharedRead(QFile* file, QString* error);
bool openAndSeekFileSharedRead(QFile* file, QString* error, qint64 seek);
#ifdef Q_OS_WIN
/**
+8 -8
Ver Arquivo
@@ -68,11 +68,12 @@ AbstractNetworkJob::AbstractNetworkJob(AccountPtr account, const QString &path,
void AbstractNetworkJob::setReply(QNetworkReply *reply)
{
if (_reply) {
_reply->deleteLater();
}
reply->setProperty("doNotHandleAuth", true);
if (reply)
reply->setProperty("doNotHandleAuth", true);
QNetworkReply *old = _reply;
_reply = reply;
delete old;
}
void AbstractNetworkJob::setTimeout(qint64 msec)
@@ -213,9 +214,7 @@ QByteArray AbstractNetworkJob::responseTimestamp()
AbstractNetworkJob::~AbstractNetworkJob()
{
if (_reply) {
_reply->deleteLater();
}
setReply(0);
}
void AbstractNetworkJob::start()
@@ -648,8 +647,9 @@ bool PropfindJob::finished()
if (type == QXmlStreamReader::StartElement) {
if (!curElement.isEmpty() && curElement.top() == QLatin1String("prop")) {
items.insert(reader.name().toString(), reader.readElementText());
} else {
curElement.push(reader.name().toString());
}
curElement.push(reader.name().toString());
}
if (type == QXmlStreamReader::EndElement) {
if(curElement.top() == reader.name()) {
+12
Ver Arquivo
@@ -368,6 +368,7 @@ void PropagateDownloadFileQNAM::start()
_job->start();
}
const char owncloudCustomSoftErrorStringC[] = "owncloud-custom-soft-error-string";
void PropagateDownloadFileQNAM::slotGetFinished()
{
_propagator->_activeJobs--;
@@ -407,7 +408,18 @@ void PropagateDownloadFileQNAM::slotGetFinished()
return;
}
// This gives a custom QNAM (by the user of libowncloudsync) to abort() a QNetworkReply in its metaDataChanged() slot and
// set a custom error string to make this a soft error. In contrast to the default hard error this won't bring down
// the whole sync and allows for a custom error message.
QNetworkReply *reply = job->reply();
if (err == QNetworkReply::OperationCanceledError && reply->property(owncloudCustomSoftErrorStringC).isValid()) {
job->setErrorString(reply->property(owncloudCustomSoftErrorStringC).toString());
job->setErrorStatus(SyncFileItem::SoftError);
}
SyncFileItem::Status status = job->errorStatus();
if (status == SyncFileItem::NoStatus) {
status = classifyError(err, _item._httpErrorCode);
}
+2
Ver Arquivo
@@ -78,8 +78,10 @@ public:
qint64 currentDownloadPosition();
QString errorString() const;
void setErrorString(const QString& s) { _errorString = s; }
SyncFileItem::Status errorStatus() { return _errorStatus; }
void setErrorStatus(const SyncFileItem::Status & s) { _errorStatus = s; }
virtual void slotTimeout() Q_DECL_OVERRIDE;
+8 -3
Ver Arquivo
@@ -85,9 +85,10 @@ void PropagateRemoteDelete::slotDeleteJobFinished()
<< (_job->reply()->error() == QNetworkReply::NoError ? QLatin1String("") : _job->reply()->errorString());
QNetworkReply::NetworkError err = _job->reply()->error();
_item._httpErrorCode = _job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
const int httpStatus = _job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
_item._httpErrorCode = httpStatus;
if (err != QNetworkReply::NoError) {
if (err != QNetworkReply::NoError && err != QNetworkReply::ContentNotFoundError) {
if( checkForProblemsWithShared(_item._httpErrorCode,
tr("The file has been removed from a read only share. It was restored.")) ) {
@@ -102,7 +103,11 @@ void PropagateRemoteDelete::slotDeleteJobFinished()
_item._requestDuration = _job->duration();
_item._responseTimeStamp = _job->responseTimestamp();
if (_item._httpErrorCode != 204 ) {
// A 404 reply is also considered a success here: We want to make sure
// a file is gone from the server. It not being there in the first place
// is ok. This will happen for files that are in the DB but not on
// the server or the local file system.
if (httpStatus != 204 && httpStatus != 404) {
// Normaly we expect "204 No Content"
// If it is not the case, it might be because of a proxy or gateway intercepting the request, so we must
// throw an error.
+9 -6
Ver Arquivo
@@ -64,6 +64,12 @@ static qint64 chunkSize() {
return chunkSize;
}
PUTFileJob::~PUTFileJob()
{
// Make sure that we destroy the QNetworkReply before our _device of which it keeps an internal pointer.
setReply(0);
}
void PUTFileJob::start() {
QNetworkRequest req;
for(QMap<QByteArray, QByteArray>::const_iterator it = _headers.begin(); it != _headers.end(); ++it) {
@@ -232,17 +238,13 @@ bool UploadDevice::prepareAndOpen(const QString& fileName, qint64 start, qint64
QFile file(fileName);
QString openError;
if (!FileSystem::openFileSharedRead(&file, &openError)) {
if (!FileSystem::openAndSeekFileSharedRead(&file, &openError, start)) {
setErrorString(openError);
return false;
}
size = qMin(FileSystem::getSize(fileName), size);
size = qBound(0ll, size, FileSystem::getSize(fileName) - start);
_data.resize(size);
if (!file.seek(start)) {
setErrorString(file.errorString());
return false;
}
auto read = file.read(_data.data(), size);
if (read != size) {
setErrorString(file.errorString());
@@ -406,6 +408,7 @@ void PropagateUploadFileQNAM::startNextChunk()
return;
}
// 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);
_jobs.append(job);
connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished()));
+1
Ver Arquivo
@@ -74,6 +74,7 @@ public:
explicit PUTFileJob(AccountPtr account, const QString& path, QIODevice *device,
const QMap<QByteArray, QByteArray> &headers, int chunk, QObject* parent = 0)
: AbstractNetworkJob(account, path, parent), _device(device), _headers(headers), _chunk(chunk) {}
~PUTFileJob();
int _chunk;
+5 -3
Ver Arquivo
@@ -484,9 +484,11 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote )
}
item._direction = dir;
// check for blacklisting of this item.
// if the item is on blacklist, the instruction was set to IGNORE
checkErrorBlacklisting( &item );
if (instruction != CSYNC_INSTRUCTION_NONE) {
// check for blacklisting of this item.
// if the item is on blacklist, the instruction was set to ERROR
checkErrorBlacklisting( &item );
}
if (!item._isDirectory) {
_progressInfo._totalFileCount++;
+16 -9
Ver Arquivo
@@ -21,6 +21,13 @@
#include <csync.h>
#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) && (__GNUC__ * 100 + __GNUC_MINOR__ < 408)
// openSuse 12.3 didn't like enum bitfields.
#define BITFIELD(size)
#else
#define BITFIELD(size) :size
#endif
namespace OCC {
class SyncFileItem {
@@ -114,19 +121,19 @@ public:
// Variables usefull for everybody
QString _file;
QString _renameTarget;
Type _type:3;
Direction _direction:2;
bool _isDirectory:1;
Type _type BITFIELD(3);
Direction _direction BITFIELD(2);
bool _isDirectory BITFIELD(1);
/// Whether there's an entry in the blacklist table.
/// Note: that entry may have retries left, so this can be true
/// without the status being FileIgnored.
bool _hasBlacklistEntry:1;
bool _hasBlacklistEntry BITFIELD(1);
// Variables usefull to report to the user
Status _status:4;
bool _isRestoration:1; // The original operation was forbidden, and this is a restoration
bool _should_update_etag:1;
Status _status BITFIELD(4);
bool _isRestoration BITFIELD(1); // The original operation was forbidden, and this is a restoration
bool _should_update_etag BITFIELD(1);
quint16 _httpErrorCode;
QString _errorString; // Contains a string only in case of error
QByteArray _responseTimeStamp;
@@ -155,8 +162,8 @@ public:
time_t _other_modtime;
QByteArray _other_etag;
QByteArray _other_fileId;
enum csync_instructions_e _instruction:16;
enum csync_instructions_e _other_instruction:16;
enum csync_instructions_e _instruction BITFIELD(16);
enum csync_instructions_e _other_instruction BITFIELD(16);
} log;
};
+3 -3
Ver Arquivo
@@ -1783,7 +1783,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharedialog.ui" line="75"/>
<source>OwnCloud Path:</source>
<translation type="unfinished"/>
<translation>Διαδρομή ownCloud:</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="89"/>
@@ -1909,7 +1909,7 @@ It is not advisable to use it.</source>
<location filename="../src/gui/socketapi.cpp" line="431"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
<translation>Διαμοιρασμός με %1</translation>
</message>
</context>
<context>
@@ -2218,7 +2218,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="156"/>
<source>The mounted directory is temporarily not available on the server</source>
<translation type="unfinished"/>
<translation>Ο προσαρτημένος κατάλογος δεν είναι προσωρινά διαθέσιμος στον δικομιστή</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="159"/>
+3 -3
Ver Arquivo
@@ -916,7 +916,7 @@ Les items cochés seront également supprimés s&apos;ils empêchent la suppress
<message>
<location filename="../src/gui/updater/ocupdater.cpp" line="275"/>
<source>Skip this version</source>
<translation>Ignorer cette version.</translation>
<translation>Ignorer cette version</translation>
</message>
<message>
<location filename="../src/gui/updater/ocupdater.cpp" line="276"/>
@@ -1007,7 +1007,7 @@ Les items cochés seront également supprimés s&apos;ils empêchent la suppress
<message>
<location filename="../src/gui/networksettings.cpp" line="34"/>
<source>Hostname of proxy server</source>
<translation>Nom d&apos;hôte ou serveur mandataire</translation>
<translation>Nom d&apos;hôte du serveur mandataire</translation>
</message>
<message>
<location filename="../src/gui/networksettings.cpp" line="35"/>
@@ -2389,7 +2389,7 @@ Il est déconseillé de l&apos;utiliser.</translation>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="295"/>
<source>None.</source>
<translation>Aucun.</translation>
<translation>Aucune</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="299"/>
+1 -1
Ver Arquivo
@@ -2265,7 +2265,7 @@ Recomendámoslle que non o use.</translation>
<message>
<location filename="../src/libsync/syncengine.cpp" line="567"/>
<source>Unable to initialize a sync journal.</source>
<translation>Non é posíbel iniciar un rexistro de sincronización.</translation>
<translation>Non é posíbel preparar un rexistro de sincronización.</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="648"/>
+2 -2
Ver Arquivo
@@ -1926,7 +1926,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sslbutton.cpp" line="101"/>
<source>Subject Alternative Names:</source>
<translation>Subject Alternative Names():</translation>
<translation>:</translation>
</message>
<message>
<location filename="../src/gui/sslbutton.cpp" line="103"/>
@@ -1971,7 +1971,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sslbutton.cpp" line="115"/>
<source>Expires on:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<location filename="../src/gui/sslbutton.cpp" line="118"/>
+14 -14
Ver Arquivo
@@ -244,27 +244,27 @@ Total tid kvar %5</translation>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="35"/>
<source>Certificate :</source>
<translation type="unfinished"/>
<translation>Certifikat :</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="51"/>
<source>Browse...</source>
<translation type="unfinished"/>
<translation>Bläddra...</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.ui" line="60"/>
<source>Certificate password :</source>
<translation type="unfinished"/>
<translation>Certifikatlösenord :</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.cpp" line="23"/>
<source>Select a certificate</source>
<translation type="unfinished"/>
<translation>Välj ett certifikat</translation>
</message>
<message>
<location filename="../src/gui/addcertificatedialog.cpp" line="23"/>
<source>Certificate files (*.p12 *.pfx)</source>
<translation type="unfinished"/>
<translation>Certifikatfiler (*.p12 *.pfx)</translation>
</message>
</context>
<context>
@@ -329,7 +329,7 @@ Total tid kvar %5</translation>
<message>
<location filename="../src/libsync/propagateremotedelete.cpp" line="41"/>
<source>Connection timed out</source>
<translation type="unfinished"/>
<translation>Tidsgräns för anslutningen överskreds</translation>
</message>
</context>
<context>
@@ -898,7 +898,7 @@ Valda objekt kommer också att raderas om dom hindrar en mapp från att tas bort
<message>
<location filename="../src/libsync/propagateremotemove.cpp" line="45"/>
<source>Connection timed out</source>
<translation type="unfinished"/>
<translation>Tidsgräns för anslutningen överskreds</translation>
</message>
</context>
<context>
@@ -1131,7 +1131,7 @@ efter ytterligare privilegier under processen.</translation>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="297"/>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.cpp" line="318"/>
<source>(%1)</source>
<translation type="unfinished"/>
<translation>(%1)</translation>
</message>
</context>
<context>
@@ -1535,7 +1535,7 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="156"/>
<source>File Removed</source>
<translation type="unfinished"/>
<translation>Filen Raderad</translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="171"/>
@@ -1792,12 +1792,12 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/gui/sharedialog.ui" line="127"/>
<source>Set password</source>
<translation type="unfinished"/>
<translation>Ange lösenord</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="149"/>
<source>Set expiry date</source>
<translation type="unfinished"/>
<translation>Sätt utgångsdatum</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="67"/>
@@ -1813,7 +1813,7 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/gui/sharedialog.cpp" line="141"/>
<source>Password Protected</source>
<translation type="unfinished"/>
<translation>Lösenordsskyddad</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="299"/>
@@ -1858,7 +1858,7 @@ Det är inte lämpligt använda den.</translation>
<message>
<location filename="../src/gui/sharedialog.cpp" line="453"/>
<source>The file can not be synced.</source>
<translation type="unfinished"/>
<translation>Filen kan inte synkas.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="463"/>
@@ -1908,7 +1908,7 @@ Det är inte lämpligt använda den.</translation>
<location filename="../src/gui/socketapi.cpp" line="431"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
<translation>Dela med %1</translation>
</message>
</context>
<context>
+49 -43
Ver Arquivo
@@ -733,7 +733,7 @@ Are you sure you want to perform this operation?</source>
<message>
<location filename="../src/gui/generalsettings.ui" line="47"/>
<source>Show crash reporter</source>
<translation type="unfinished"/>
<translation>Показати звіти про помилки</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="57"/>
@@ -1202,7 +1202,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="193"/>
<source>Timeout while trying to connect to %1 at %2.</source>
<translation type="unfinished"/>
<translation>Перевищено час очікування з&apos;єднання до %1 на %2.</translation>
</message>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="204"/>
@@ -1212,7 +1212,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="253"/>
<source>Access forbidden by server. To verify that you have proper access, &lt;a href=&quot;%1&quot;&gt;click here&lt;/a&gt; to access the service with your browser.</source>
<translation type="unfinished"/>
<translation>Доступ заборонений сервером. Щоб довести, що у Вас є права доступу, &lt;a href=&quot;%1&quot;&gt;клікніть тут&lt;/a&gt; для входу через Ваш браузер.</translation>
</message>
<message>
<location filename="../src/gui/owncloudsetupwizard.cpp" line="275"/>
@@ -1361,7 +1361,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="121"/>
<source>Invalid JSON reply from the poll URL</source>
<translation type="unfinished"/>
<translation>Неправильна JSON відповідь на сформований URL</translation>
</message>
</context>
<context>
@@ -1420,7 +1420,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/owncloudpropagator.cpp" line="104"/>
<source>Continue blacklisting: </source>
<translation type="unfinished"/>
<translation>Продовжити занесення до чорного списку:</translation>
</message>
<message>
<location filename="../src/libsync/owncloudpropagator.cpp" line="200"/>
@@ -1477,7 +1477,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/propagateremotedelete.cpp" line="103"/>
<source>Wrong HTTP code returned by server. Expected 204, but recieved &quot;%1 %2&quot;.</source>
<translation type="unfinished"/>
<translation>Сервер відповів неправильним HTTP кодом. Очікувався 204, але отриманий &quot;%1 %2&quot;.</translation>
</message>
</context>
<context>
@@ -1485,7 +1485,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/propagateremotemkdir.cpp" line="67"/>
<source>Wrong HTTP code returned by server. Expected 201, but recieved &quot;%1 %2&quot;.</source>
<translation type="unfinished"/>
<translation>Сервер відповів неправильним HTTP кодом. Очікувався 201, але отриманий &quot;%1 %2&quot;.</translation>
</message>
</context>
<context>
@@ -1508,7 +1508,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/propagateremotemove.cpp" line="127"/>
<source>Wrong HTTP code returned by server. Expected 201, but recieved &quot;%1 %2&quot;.</source>
<translation type="unfinished"/>
<translation>Сервер відповів неправильним HTTP кодом. Очікувався 201, але отриманий &quot;%1 %2&quot;.</translation>
</message>
</context>
<context>
@@ -1551,7 +1551,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="468"/>
<source>Poll URL missing</source>
<translation type="unfinished"/>
<translation>Не вистачає сформованого URL</translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="493"/>
@@ -1645,13 +1645,19 @@ It is not advisable to use it.</source>
<location filename="../src/gui/protocolwidget.cpp" line="265"/>
<source>%n files are ignored because of previous errors.
</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>%n файл пропущено через попередні помилки.
</numerusform><numerusform>%n файлів пропущено через попередні помилки.
</numerusform><numerusform>%n файлів пропущено через попередні помилки.
</numerusform></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/protocolwidget.cpp" line="266"/>
<source>%n files are partially downloaded.
</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>%n файлів частково завантажений.
</numerusform><numerusform>%n файлів частково завантажені.
</numerusform><numerusform>%n файлів частково завантажено.
</numerusform></translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="267"/>
@@ -1669,12 +1675,12 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/selectivesyncdialog.cpp" line="318"/>
<source>Choose What to Sync: Select remote subfolders you wish to synchronize.</source>
<translation type="unfinished"/>
<translation>Виберіть Що Синхронізувати: Виберіть папки на віддаленому сервері, які Ви хотіли б синхронізувати.</translation>
</message>
<message>
<location filename="../src/gui/selectivesyncdialog.cpp" line="319"/>
<source>Choose What to Sync: Deselect remote subfolders you do not wish to synchronize.</source>
<translation type="unfinished"/>
<translation>Виберіть Що Синхронізувати: Зніміть вибір папок на віддаленому сервері, які Ви не хочете синхронізувати.</translation>
</message>
<message>
<location filename="../src/gui/selectivesyncdialog.cpp" line="325"/>
@@ -1761,12 +1767,12 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharedialog.ui" line="14"/>
<source>Share NewDocument.odt</source>
<translation type="unfinished"/>
<translation>Поділитися NewDocument.odt</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="26"/>
<source>Share Info</source>
<translation type="unfinished"/>
<translation>Поділитися Інформацією</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="34"/>
@@ -1777,12 +1783,12 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharedialog.ui" line="53"/>
<source>share label</source>
<translation type="unfinished"/>
<translation>поділитися міткою</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="75"/>
<source>OwnCloud Path:</source>
<translation type="unfinished"/>
<translation>Шлях до OwnCloud:</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="89"/>
@@ -1803,12 +1809,12 @@ It is not advisable to use it.</source>
<location filename="../src/gui/sharedialog.cpp" line="67"/>
<location filename="../src/gui/sharedialog.cpp" line="461"/>
<source>%1 path: %2</source>
<translation type="unfinished"/>
<translation>%1 шлях: %2</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="68"/>
<source>%1 Sharing</source>
<translation type="unfinished"/>
<translation>Ви поділилися %1</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="141"/>
@@ -1823,27 +1829,27 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharedialog.cpp" line="351"/>
<source>OCS API error code: %1</source>
<translation type="unfinished"/>
<translation>OCS API код помилки: %1</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="374"/>
<source>There is no sync folder configured.</source>
<translation type="unfinished"/>
<translation>Немає папок налаштованих для синхронізації.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="386"/>
<source>Can not find an folder to upload to.</source>
<translation type="unfinished"/>
<translation>Неможливо знайти папку для завантаження в неї.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="393"/>
<source>Sharing of external directories is not yet working.</source>
<translation type="unfinished"/>
<translation>Функція відкриття доступу до зовнішніх папок поки не працює.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="408"/>
<source>A sync file with the same name exists. The file can not be registered to sync.</source>
<translation type="unfinished"/>
<translation>Існує файл з ім&apos;ям як у синхронізованого. Файл не може бути прийнятий до синхронізації.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="420"/>
@@ -1853,17 +1859,17 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/sharedialog.cpp" line="422"/>
<source>Unable to register in sync space.</source>
<translation type="unfinished"/>
<translation>Неможливо зареєструватися в синхронізованому просторі.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="453"/>
<source>The file can not be synced.</source>
<translation type="unfinished"/>
<translation>Файл не може бути синхронізований.</translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="463"/>
<source>Sync of registered file was not successful yet.</source>
<translation type="unfinished"/>
<translation>Синхронізація зареєстрованого файлу поки не була успішною.</translation>
</message>
</context>
<context>
@@ -1908,7 +1914,7 @@ It is not advisable to use it.</source>
<location filename="../src/gui/socketapi.cpp" line="431"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"/>
<translation>Поділитися з %1</translation>
</message>
</context>
<context>
@@ -2122,7 +2128,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="99"/>
<source>CSync failed to load the journal file. The journal file is corrupted.</source>
<translation type="unfinished"/>
<translation>CSync не вдалося завантажити файл журналу. Файл журналу пошкоджений.</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="102"/>
@@ -2217,12 +2223,12 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/syncengine.cpp" line="156"/>
<source>The mounted directory is temporarily not available on the server</source>
<translation type="unfinished"/>
<translation>Приєднана тека тимчасово недоступна на сервері</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="159"/>
<source>An error opening a directory happened</source>
<translation type="unfinished"/>
<translation>Сталася помилка при відкритті теки</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="162"/>
@@ -2345,7 +2351,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/theme.cpp" line="237"/>
<source>&lt;p&gt;Copyright ownCloud, Incorporated&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt; Права належать ownCloud, Incorporated &lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/libsync/theme.cpp" line="238"/>
@@ -2453,7 +2459,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="435"/>
<source>Crash now</source>
<translation type="unfinished"/>
<translation>Критична помилка</translation>
</message>
<message>
<location filename="../src/gui/owncloudgui.cpp" line="446"/>
@@ -2501,7 +2507,7 @@ It is not advisable to use it.</source>
<message utf8="true">
<location filename="../src/libsync/owncloudtheme.cpp" line="48"/>
<source>&lt;p&gt;Version %2. For more information visit &lt;a href=&quot;%3&quot;&gt;%4&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;By Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz and others.&lt;/small&gt;&lt;/p&gt;&lt;p&gt;Copyright ownCloud, Inc.&lt;/p&gt;&lt;p&gt;Licensed under the GNU General Public License (GPL) Version 2.0&lt;br/&gt;ownCloud and the ownCloud Logo are registered trademarks of ownCloud, Inc. in the United States, other countries, or both.&lt;/p&gt;</source>
<translation type="unfinished"/>
<translation>&lt;p&gt;Версія %2. Для більш детальної інформації відвідайте &lt;a href=&quot;%3&quot;&gt;%4&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;small&gt; Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz та інші.&lt;/ small&gt;&lt;/p&gt; &lt;p&gt; Права належать ownCloud, Inc. &lt;/p&gt; &lt;p&gt; Під ліцензією GNU General Public License (GPL) Version 2.0 &lt;br/&gt; ownCloud і логотип ownCloud є зареєстрованими товарними знаками ownCloud, Inc. в США та інших країнах. &lt;/p&gt;</translation>
</message>
</context>
<context>
@@ -2560,7 +2566,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.ui" line="224"/>
<source>S&amp;ync everything from server</source>
<translation type="unfinished"/>
<translation>Синхронізувати все з сервером</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudadvancedsetuppage.ui" line="306"/>
@@ -2578,7 +2584,7 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudconnectionmethoddialog.ui" line="43"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Failed to connect to the secure server address specified. How do you wish to proceed?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt; Не вдалося підключитися до безпечного серверу за наданною адресою. Як Ви хочете продовжити? &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudconnectionmethoddialog.ui" line="55"/>
@@ -2588,17 +2594,17 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/gui/wizard/owncloudconnectionmethoddialog.ui" line="62"/>
<source>Retry unencrypted over HTTP (insecure)</source>
<translation type="unfinished"/>
<translation>Спробувати без шифрування через HTTP (небезпечно)</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudconnectionmethoddialog.ui" line="69"/>
<source>Configure client-side TLS certificate</source>
<translation type="unfinished"/>
<translation>Налаштувати TLS сертифікат клієнта</translation>
</message>
<message>
<location filename="../src/gui/wizard/owncloudconnectionmethoddialog.cpp" line="18"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Failed to connect to the secure server address &lt;em&gt;%1&lt;/em&gt;. How do you wish to proceed?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"/>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Не вдалося підключитися до безпечного серверу за адресою &lt;em&gt;%1&lt;/em&gt;. Як Ви хочете продовжити?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
@@ -2747,22 +2753,22 @@ It is not advisable to use it.</source>
<message>
<location filename="../src/libsync/utility.cpp" line="113"/>
<source>%L1 TiB</source>
<translation type="unfinished"/>
<translation>%L1 Тіб</translation>
</message>
<message>
<location filename="../src/libsync/utility.cpp" line="116"/>
<source>%L1 GiB</source>
<translation type="unfinished"/>
<translation>%L1 ГіБ</translation>
</message>
<message>
<location filename="../src/libsync/utility.cpp" line="119"/>
<source>%L1 MiB</source>
<translation type="unfinished"/>
<translation>%L1 МіБ</translation>
</message>
<message>
<location filename="../src/libsync/utility.cpp" line="122"/>
<source>%L1 KiB</source>
<translation type="unfinished"/>
<translation>%L1 КіБ </translation>
</message>
<message>
<location filename="../src/libsync/utility.cpp" line="125"/>
+146 -141
Ver Arquivo
@@ -32,27 +32,27 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="107"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="110"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="128"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="131"/>
<source>Select a remote destination folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="140"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="143"/>
<source>Create Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="160"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="163"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizardtargetpage.ui" line="174"/>
<location filename="../src/gui/folderwizardtargetpage.ui" line="177"/>
<source>Folders</source>
<translation type="unfinished"></translation>
</message>
@@ -476,62 +476,62 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderMan</name>
<message>
<location filename="../src/gui/folderman.cpp" line="234"/>
<location filename="../src/gui/folderman.cpp" line="233"/>
<source>Could not reset folder state</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="235"/>
<location filename="../src/gui/folderman.cpp" line="234"/>
<source>An old sync journal &apos;%1&apos; was found, but could not be removed. Please make sure that no application is currently using it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1013"/>
<location filename="../src/gui/folderman.cpp" line="1012"/>
<source>Undefined State.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1016"/>
<location filename="../src/gui/folderman.cpp" line="1015"/>
<source>Waits to start syncing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1019"/>
<location filename="../src/gui/folderman.cpp" line="1018"/>
<source>Preparing for sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1022"/>
<location filename="../src/gui/folderman.cpp" line="1021"/>
<source>Sync is running.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1025"/>
<location filename="../src/gui/folderman.cpp" line="1024"/>
<source>Last Sync was successful.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1030"/>
<location filename="../src/gui/folderman.cpp" line="1029"/>
<source>Last Sync was successful, but with warnings on individual files.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1033"/>
<location filename="../src/gui/folderman.cpp" line="1032"/>
<source>Setup Error.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1036"/>
<location filename="../src/gui/folderman.cpp" line="1035"/>
<source>User Abort.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1039"/>
<location filename="../src/gui/folderman.cpp" line="1038"/>
<source>Sync is paused.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderman.cpp" line="1045"/>
<location filename="../src/gui/folderman.cpp" line="1044"/>
<source>%1 (Sync is paused)</source>
<translation type="unfinished"></translation>
</message>
@@ -558,8 +558,8 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderWizard</name>
<message>
<location filename="../src/gui/folderwizard.cpp" line="509"/>
<location filename="../src/gui/folderwizard.cpp" line="511"/>
<location filename="../src/gui/folderwizard.cpp" line="595"/>
<location filename="../src/gui/folderwizard.cpp" line="597"/>
<source>Add Folder</source>
<translation type="unfinished"></translation>
</message>
@@ -635,47 +635,47 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderWizardRemotePath</name>
<message>
<location filename="../src/gui/folderwizard.cpp" line="259"/>
<location filename="../src/gui/folderwizard.cpp" line="268"/>
<source>Create Remote Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="260"/>
<location filename="../src/gui/folderwizard.cpp" line="269"/>
<source>Enter the name of the new folder to be created below &apos;%1&apos;:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="289"/>
<location filename="../src/gui/folderwizard.cpp" line="298"/>
<source>Folder was successfully created on %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="298"/>
<location filename="../src/gui/folderwizard.cpp" line="309"/>
<source>Authentication failed accessing %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="300"/>
<location filename="../src/gui/folderwizard.cpp" line="311"/>
<source>Failed to create the folder on %1. Please check manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="350"/>
<location filename="../src/gui/folderwizard.cpp" line="392"/>
<source>Choose this to sync the entire account</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="407"/>
<location filename="../src/gui/folderwizard.cpp" line="493"/>
<source>This folder is already being synced.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="409"/>
<location filename="../src/gui/folderwizard.cpp" line="495"/>
<source>You are already syncing &lt;i&gt;%1&lt;/i&gt;, which is a parent folder of &lt;i&gt;%2&lt;/i&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/folderwizard.cpp" line="413"/>
<location filename="../src/gui/folderwizard.cpp" line="499"/>
<source>You are already syncing all your files. Syncing another folder is &lt;b&gt;not&lt;/b&gt; supported. If you want to sync multiple folders, please remove the currently configured root folder sync.</source>
<translation type="unfinished"></translation>
</message>
@@ -683,7 +683,7 @@ Are you sure you want to perform this operation?</source>
<context>
<name>OCC::FolderWizardSelectiveSync</name>
<message>
<location filename="../src/gui/folderwizard.cpp" line="451"/>
<location filename="../src/gui/folderwizard.cpp" line="537"/>
<source>Choose What to Sync: You can optionally deselect remote subfolders you do not wish to synchronize.</source>
<translation type="unfinished"></translation>
</message>
@@ -1373,7 +1373,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::PUTFileJob</name>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="87"/>
<location filename="../src/libsync/propagateupload.cpp" line="93"/>
<source>Connection Timeout</source>
<translation type="unfinished"></translation>
</message>
@@ -1381,7 +1381,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::PollJob</name>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="137"/>
<location filename="../src/libsync/propagateupload.cpp" line="143"/>
<source>Invalid JSON reply from the poll URL</source>
<translation type="unfinished"></translation>
</message>
@@ -1422,12 +1422,12 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="449"/>
<location filename="../src/libsync/propagatedownload.cpp" line="461"/>
<source>The file could not be downloaded completely.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagatedownload.cpp" line="485"/>
<location filename="../src/libsync/propagatedownload.cpp" line="497"/>
<source>File %1 cannot be saved because of a local file name clash!</source>
<translation type="unfinished"></translation>
</message>
@@ -1492,12 +1492,12 @@ It is not advisable to use it.</source>
<context>
<name>OCC::PropagateRemoteDelete</name>
<message>
<location filename="../src/libsync/propagateremotedelete.cpp" line="93"/>
<location filename="../src/libsync/propagateremotedelete.cpp" line="94"/>
<source>The file has been removed from a read only share. It was restored.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateremotedelete.cpp" line="109"/>
<location filename="../src/libsync/propagateremotedelete.cpp" line="114"/>
<source>Wrong HTTP code returned by server. Expected 204, but received &quot;%1 %2&quot;.</source>
<translation type="unfinished"></translation>
</message>
@@ -1555,33 +1555,33 @@ It is not advisable to use it.</source>
<context>
<name>OCC::PropagateUploadFileQNAM</name>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="174"/>
<location filename="../src/libsync/propagateupload.cpp" line="180"/>
<source>File Removed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="188"/>
<location filename="../src/libsync/propagateupload.cpp" line="549"/>
<location filename="../src/libsync/propagateupload.cpp" line="194"/>
<location filename="../src/libsync/propagateupload.cpp" line="552"/>
<source>Local file changed during sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="474"/>
<location filename="../src/libsync/propagateupload.cpp" line="477"/>
<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/propagateupload.cpp" line="508"/>
<location filename="../src/libsync/propagateupload.cpp" line="511"/>
<source>Poll URL missing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="531"/>
<location filename="../src/libsync/propagateupload.cpp" line="534"/>
<source>The local file was removed during sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/propagateupload.cpp" line="564"/>
<location filename="../src/libsync/propagateupload.cpp" line="567"/>
<source>The server did not acknowledge the last chunk. (No e-tag were present)</source>
<translation type="unfinished"></translation>
</message>
@@ -1639,22 +1639,22 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="118"/>
<location filename="../src/gui/protocolwidget.cpp" line="112"/>
<source>Copied to clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="118"/>
<location filename="../src/gui/protocolwidget.cpp" line="112"/>
<source>The sync status has been copied to the clipboard.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="258"/>
<location filename="../src/gui/protocolwidget.cpp" line="261"/>
<source>Currently no files are ignored because of previous errors and no downloads are in progress.</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location filename="../src/gui/protocolwidget.cpp" line="261"/>
<location filename="../src/gui/protocolwidget.cpp" line="264"/>
<source>%n files are ignored because of previous errors.
</source>
<translation type="unfinished">
@@ -1663,7 +1663,7 @@ It is not advisable to use it.</source>
</translation>
</message>
<message numerus="yes">
<location filename="../src/gui/protocolwidget.cpp" line="262"/>
<location filename="../src/gui/protocolwidget.cpp" line="265"/>
<source>%n files are partially downloaded.
</source>
<translation type="unfinished">
@@ -1672,7 +1672,7 @@ It is not advisable to use it.</source>
</translation>
</message>
<message>
<location filename="../src/gui/protocolwidget.cpp" line="263"/>
<location filename="../src/gui/protocolwidget.cpp" line="266"/>
<source>Try to sync these again.</source>
<translation type="unfinished"></translation>
</message>
@@ -1792,17 +1792,17 @@ It is not advisable to use it.</source>
<source>Share NewDocument.odt</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="159"/>
<source>Share Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="20"/>
<location filename="../src/gui/sharedialog.ui" line="167"/>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="29"/>
<source>Share link</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="71"/>
<source>Copy &amp;Link</source>
@@ -1824,6 +1824,11 @@ It is not advisable to use it.</source>
<source>Set &amp;expiration date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="159"/>
<source>Share Info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="186"/>
<source>share label</source>
@@ -1835,8 +1840,18 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.ui" line="29"/>
<source>Share link</source>
<location filename="../src/gui/sharedialog.cpp" line="89"/>
<source>Share Directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="91"/>
<source>Share File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="99"/>
<source>Local path: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1855,11 +1870,31 @@ It is not advisable to use it.</source>
<source>Password Protected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="325"/>
<source>The file can not be shared because it was shared without sharing permission.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="410"/>
<source>Public sh&amp;aring requires a password:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="438"/>
<source>Choose a password for the public link</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="490"/>
<source>Check to &amp;share by public link</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="491"/>
<source>&amp;Shared by public link (uncheck to delete share)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="509"/>
<source>OCS API error code: %1</source>
@@ -1875,54 +1910,14 @@ It is not advisable to use it.</source>
<source>Cannot find an folder to upload to.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="565"/>
<source>A sync file with the same name exists. The file cannot be registered to sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="610"/>
<source>The file cannot be synced.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="550"/>
<source>Sharing of external directories is not yet working.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="89"/>
<source>Share Directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="91"/>
<source>Share File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="99"/>
<source>Local path: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="325"/>
<source>The file can not be shared because it was shared without sharing permission.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="410"/>
<source>Public sh&amp;aring requires a password:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="490"/>
<source>Check to &amp;share by public link</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="491"/>
<source>&amp;Shared by public link (uncheck to delete share)</source>
<location filename="../src/gui/sharedialog.cpp" line="565"/>
<source>A sync file with the same name exists. The file cannot be registered to sync.</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1935,6 +1930,11 @@ It is not advisable to use it.</source>
<source>Unable to register in sync space.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="610"/>
<source>The file cannot be synced.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sharedialog.cpp" line="620"/>
<source>Sync of registered file was not successful yet.</source>
@@ -1975,7 +1975,7 @@ It is not advisable to use it.</source>
<context>
<name>OCC::SocketApi</name>
<message>
<location filename="../src/gui/socketapi.cpp" line="449"/>
<location filename="../src/gui/socketapi.cpp" line="453"/>
<source>Share with %1</source>
<comment>parameter is ownCloud</comment>
<translation type="unfinished"></translation>
@@ -2085,12 +2085,12 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sslbutton.cpp" line="193"/>
<location filename="../src/gui/sslbutton.cpp" line="199"/>
<source>Certificate information:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/sslbutton.cpp" line="222"/>
<location filename="../src/gui/sslbutton.cpp" line="228"/>
<source>This connection is NOT secure as it is not encrypted.
</source>
<translation type="unfinished"></translation>
@@ -2257,6 +2257,11 @@ It is not advisable to use it.</source>
<source>CSync failed due to not handled permission deniend.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="145"/>
<source>CSync failed to access</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="148"/>
<source>CSync tried to create a directory that already exists.</source>
@@ -2277,21 +2282,16 @@ 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="163"/>
<source>The mounted directory is temporarily not available on the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="145"/>
<source>CSync failed to access</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="160"/>
<source>The service is temporarily unavailable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="163"/>
<source>The mounted directory is temporarily not available on the server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="166"/>
<source>An error occurred while opening a directory</source>
@@ -2348,59 +2348,59 @@ It is not advisable to use it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="937"/>
<location filename="../src/libsync/syncengine.cpp" line="944"/>
<location filename="../src/libsync/syncengine.cpp" line="938"/>
<location filename="../src/libsync/syncengine.cpp" line="945"/>
<source>Ignored because of the &quot;choose what to sync&quot; blacklist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="962"/>
<location filename="../src/libsync/syncengine.cpp" line="963"/>
<source>Not allowed because you don&apos;t have permission to add sub-directories in that directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="968"/>
<location filename="../src/libsync/syncengine.cpp" line="969"/>
<source>Not allowed because you don&apos;t have permission to add parent directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="975"/>
<location filename="../src/libsync/syncengine.cpp" line="976"/>
<source>Not allowed because you don&apos;t have permission to add files in that directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="995"/>
<location filename="../src/libsync/syncengine.cpp" line="996"/>
<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="1012"/>
<location filename="../src/libsync/syncengine.cpp" line="1032"/>
<location filename="../src/libsync/syncengine.cpp" line="1013"/>
<location filename="../src/libsync/syncengine.cpp" line="1033"/>
<source>Not allowed to remove, restoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1045"/>
<location filename="../src/libsync/syncengine.cpp" line="1046"/>
<source>Local files and share folder removed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1100"/>
<location filename="../src/libsync/syncengine.cpp" line="1101"/>
<source>Move not allowed, item restored</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1109"/>
<location filename="../src/libsync/syncengine.cpp" line="1110"/>
<source>Move not allowed because %1 is read-only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1110"/>
<location filename="../src/libsync/syncengine.cpp" line="1111"/>
<source>the destination</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="1110"/>
<location filename="../src/libsync/syncengine.cpp" line="1111"/>
<source>the source</source>
<translation type="unfinished"></translation>
</message>
@@ -2852,12 +2852,12 @@ It is not advisable to use it.</source>
<context>
<name>main.cpp</name>
<message>
<location filename="../src/gui/main.cpp" line="45"/>
<location filename="../src/gui/main.cpp" line="38"/>
<source>System Tray not available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/gui/main.cpp" line="46"/>
<location filename="../src/gui/main.cpp" line="39"/>
<source>%1 requires on a working system tray. If you are running XFCE, please follow &lt;a href=&quot;http://docs.xfce.org/xfce/xfce4-panel/systray&quot;&gt;these instructions&lt;/a&gt;. Otherwise, please install a system tray application such as &apos;trayer&apos; and try again.</source>
<translation type="unfinished"></translation>
</message>
@@ -2873,74 +2873,79 @@ It is not advisable to use it.</source>
<context>
<name>progress</name>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="32"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="31"/>
<source>Downloaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="34"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="33"/>
<source>Uploaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="37"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="36"/>
<source>Downloaded, renamed conflicting file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="38"/>
<source>Deleted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="40"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="41"/>
<source>Moved to %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="42"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="43"/>
<source>Ignored</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="44"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="45"/>
<source>Filesystem access error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="46"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="47"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="49"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="52"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="50"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="53"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="62"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="63"/>
<source>downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="64"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="65"/>
<source>uploading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="66"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="67"/>
<source>deleting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="69"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="70"/>
<source>moving</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="71"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="72"/>
<source>ignoring</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/libsync/progressdispatcher.cpp" line="73"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="75"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="74"/>
<location filename="../src/libsync/progressdispatcher.cpp" line="76"/>
<source>error</source>
<translation type="unfinished"></translation>
</message>