Comparar commits

..

30 Commits

Autor SHA1 Mensagem Data
Olivier Goffart 2039cfb56c PropagateDownload: disable fallback to owncloud if direct download fails 2015-09-18 15:15:07 +02:00
Christian Kamm 17b4c0e3bd Nicer fix for the security issue #3283.
(cherry picked from commit 89376e14d6)
2015-09-18 15:14:43 +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
36 arquivos alterados com 300 adições e 186 exclusões
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
+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")
@@ -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();
}
}
+4 -1
Ver Arquivo
@@ -403,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();
}
+8
Ver Arquivo
@@ -246,6 +246,12 @@ FolderWizardRemotePath::FolderWizardRemotePath(AccountPtr account)
_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()
@@ -291,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();
}
}
+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&);
+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
+21 -2
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,12 +475,16 @@ 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.
// qDebug() << out << "Certs are known and trusted! This is not an actual error.";
reply->ignoreSslErrors();
// Warning: Do *not* use ignoreSslErrors() (without args) here:
// it permanently ignores all SSL errors for this host, even
// certificate changes.
reply->ignoreSslErrors(errors);
} else {
_treatSslErrorsAsFailure = true;
return;
+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();
}
+6 -7
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()
+13 -1
Ver Arquivo
@@ -368,6 +368,7 @@ void PropagateDownloadFileQNAM::start()
_job->start();
}
const char owncloudCustomSoftErrorStringC[] = "owncloud-custom-soft-error-string";
void PropagateDownloadFileQNAM::slotGetFinished()
{
_propagator->_activeJobs--;
@@ -399,15 +400,26 @@ void PropagateDownloadFileQNAM::slotGetFinished()
_propagator->_journal->setDownloadInfo(_item._file, SyncJournalDb::DownloadInfo());
}
if(!_item._directDownloadUrl.isEmpty() && err != QNetworkReply::OperationCanceledError) {
/* if(!_item._directDownloadUrl.isEmpty() && err != QNetworkReply::OperationCanceledError) {
// If this was with a direct download, retry without direct download
qWarning() << "Direct download of" << _item._directDownloadUrl << "failed. Retrying through owncloud.";
_item._directDownloadUrl.clear();
start();
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.
+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) {
+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++;
+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"/>
+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"/>
+92 -92
Ver Arquivo
@@ -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="587"/>
<location filename="../src/gui/folderwizard.cpp" line="589"/>
<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="262"/>
<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="263"/>
<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="292"/>
<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="301"/>
<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="303"/>
<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="384"/>
<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="485"/>
<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="487"/>
<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="491"/>
<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="529"/>
<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="546"/>
<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="471"/>
<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="505"/>
<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="528"/>
<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="561"/>
<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="253"/>
<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="256"/>
<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="257"/>
<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="258"/>
<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>
@@ -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>