1
0
mirror of https://github.com/chylex/Nextcloud-Desktop.git synced 2026-04-06 16:34:18 +02:00

Compare commits

...

20 Commits

Author SHA1 Message Date
Markus Goetz
107baf2947 VERSION.cmake: 2.5.0-alpha1
The 2.5.0-alpha was having a showstopper bug #6553
2018-05-30 13:51:33 +02:00
Olivier Goffart
40d432ecdd .desktop file: the MimeType entry must ends with a semi colon
Also remove some comments
2018-05-30 13:38:45 +02:00
Olivier Goffart
1753ce651b Virtual Files: Allow to download a folder recursively from the socket API
Issue: #6466
2018-05-30 11:57:57 +02:00
Markus Goetz
104f8c9ba2 NSIS: SVG imageformats plugin DLL #6515 2018-05-30 11:56:41 +02:00
Markus Goetz
7a776dbb6a NSIS: SVG DLL #6515 2018-05-30 11:56:41 +02:00
Christian Kamm
3a7a6b0b9e Virtual files: Wipe virtual after download completes, not before
Otherwise a interrupted or unsuccessful download would mean that the
download-intend was forgotten. The next sync would reestablish the
virtual file instead.
2018-05-30 11:50:14 +02:00
Olivier Goffart
d7792dc951 Rename SocketApi::FileData::accountRelativePath to serverRelativePath
As discussed in issue #6552
2018-05-30 10:51:44 +02:00
Olivier Goffart
1434fa5139 Share dialog: use the original name and not the virtual file name
When sharing a virtual file, we should actually use the original file name
not the virtual file name

Issue: #6461
2018-05-30 10:51:17 +02:00
Christian Kamm
252484e875 Virtual files: Only remove virtual file once on download
With thanks to @ogoffart for spotting the problem.
2018-05-30 10:39:49 +02:00
Olivier Goffart
94535a75d9 Update submodule 2018-05-30 09:10:27 +02:00
Jenkins for ownCloud
91044fee81 [tx-robot] updated from transifex 2018-05-30 02:18:42 +02:00
Olivier Goffart
47aa1ade71 Fix make doc-man in shadow build
Issue #6555
2018-05-29 16:12:58 +02:00
Olivier Goffart
7ba48849c6 Windows Shell extention: Fix clicking on the menu entries
Issue #6553
2018-05-29 14:51:28 +02:00
Jenkins for ownCloud
ce1aa6af53 [tx-robot] updated from transifex 2018-05-29 02:18:40 +02:00
Olivier Goffart
7aded05f40 Fix compilation warning
propagateuploadng.cpp:500:10: warning: lambda capture 'this' is not used [-Wunused-lambda-capture]
2018-05-28 14:55:34 +02:00
Jenkins for ownCloud
f7b5665bce [tx-robot] updated from transifex 2018-05-28 02:18:41 +02:00
Jenkins for ownCloud
1a4ce88afb [tx-robot] updated from transifex 2018-05-27 02:18:39 +02:00
Jenkins for ownCloud
11ae820db1 [tx-robot] updated from transifex 2018-05-26 02:18:49 +02:00
Olivier Goffart
46077f0de2 Merge remote-tracking branch 'owncloud/master' into 2.5 2018-05-25 18:09:56 +02:00
Dominik Schmidt
b9323bd191 Update libcrashreporter-qt to build it with msvc 2018-05-23 16:59:34 +02:00
47 changed files with 374 additions and 269 deletions

View File

@@ -5,7 +5,7 @@ set( MIRALL_VERSION_YEAR 2018 )
set( MIRALL_SOVERSION 0 )
if ( NOT DEFINED MIRALL_VERSION_SUFFIX )
set( MIRALL_VERSION_SUFFIX "git") #e.g. beta1, beta2, rc1
set( MIRALL_VERSION_SUFFIX "alpha1") #e.g. beta1, beta2, rc1
endif( NOT DEFINED MIRALL_VERSION_SUFFIX )
if( NOT DEFINED MIRALL_VERSION_BUILD )

2
binary

Submodule binary updated: 39bfc426e5...09f12de312

View File

@@ -407,6 +407,8 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
File "${IMAGEFORMATS_DLL_PATH}\qgif.dll"
File "${IMAGEFORMATS_DLL_PATH}\qjpeg.dll"
File "${IMAGEFORMATS_DLL_PATH}\qico.dll"
File "${IMAGEFORMATS_DLL_PATH}\qsvg.dll"
; PNG is built in Qt
SetOutPath "$INSTDIR\sqldrivers"
File "${SQLITE_DLL_PATH}\qsqlite.dll"
@@ -424,6 +426,7 @@ Section "${APPLICATION_NAME}" SEC_APPLICATION
File "${QT_DLL_PATH}\Qt5Gui.dll"
File "${QT_DLL_PATH}\Qt5Network.dll"
File "${QT_DLL_PATH}\Qt5PrintSupport.dll"
File "${QT_DLL_PATH}\Qt5Svg.dll"
File "${QT_DLL_PATH}\Qt5Qml.dll"
File "${QT_DLL_PATH}\Qt5Sql.dll"
File "${QT_DLL_PATH}\Qt5WebKit.dll"

View File

@@ -7,7 +7,7 @@ if(SPHINX_FOUND)
set(SPHINX_MAN_DIR "${CMAKE_CURRENT_BINARY_DIR}/man1")
install(DIRECTORY ${SPHINX_MAN_DIR} DESTINATION ${CMAKE_INSTALL_MANDIR} OPTIONAL)
add_custom_target( doc-man ${SPHINX_EXECUTABLE}
-c ${CMAKE_SOURCE_DIR}/doc -b man
-c ${CMAKE_BINARY_DIR}/doc -b man
-d ${SPHINX_CACHE_DIR}/man
${CMAKE_CURRENT_SOURCE_DIR}
${SPHINX_MAN_DIR} )

View File

@@ -8,121 +8,7 @@ GenericName=Folder Sync
Icon=@APPLICATION_EXECUTABLE@
Keywords=@APPLICATION_NAME@;syncing;file;sharing;
X-GNOME-Autostart-Delay=3
MimeType=application/x-@APPLICATION_EXECUTABLE@
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
# Translations
MimeType=application/x-@APPLICATION_EXECUTABLE@;
# Translations
Comment[oc]=@APPLICATION_NAME@ sincronizacion del client
@@ -212,7 +98,9 @@ Comment[lo]=@APPLICATION_NAME@ ການປະສານຂໍ້ມູນຄອ
GenericName[lo]=ໂຟນເດີຊິງ
Name[lo]=@APPLICATION_NAME@ ຊິງຄອມພິວເຕີລູກຂ່າຍ
Icon[lo]=@APPLICATION_EXECUTABLE@
Comment[mk]=@APPLICATION_NAME@ десктор клиент за синхронизација
GenericName[mk]=Папка за синхронизација
Name[mk]=@APPLICATION_NAME@ десктор клиент за синхронизација
Icon[mk]=@APPLICATION_EXECUTABLE@
Comment[hu_HU]=@APPLICATION_NAME@ asztali szinkronizációs kliens
GenericName[hu_HU]=Mappaszinkronizálás

View File

@@ -162,7 +162,7 @@ IFACEMETHODIMP OCContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
MENUITEMINFO mii = { sizeof(mii) };
mii.fMask = MIIM_ID | MIIM_FTYPE | MIIM_STRING | MIIM_STATE;
mii.wID = indexSubMenu;
mii.wID = idCmdFirst + indexSubMenu;
mii.fType = MFT_STRING;
mii.dwTypeData = &item.title[0];
mii.fState = disabled ? MFS_DISABLED : MFS_ENABLED;
@@ -192,7 +192,7 @@ IFACEMETHODIMP OCContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO pici)
// check the identifier offset.
auto offset = LOWORD(pici->lpVerb);
if (offset < m_info.menuItems.size())
if (offset >= m_info.menuItems.size())
return E_FAIL;
command = m_info.menuItems[offset].command;

View File

@@ -1962,6 +1962,25 @@ void SyncJournalDb::clearFileTable()
query.exec();
}
void SyncJournalDb::markVirtualFileForDownloadRecursively(const QByteArray &path)
{
QMutexLocker lock(&_mutex);
if (!checkConnect())
return;
static_assert(ItemTypeVirtualFile == 4 && ItemTypeVirtualFileDownload == 5, "");
SqlQuery query("UPDATE metadata SET type=5 WHERE " IS_PREFIX_PATH_OF("?1", "path") " AND type=4;", _db);
query.bindValue(1, path);
query.exec();
// We also must make sure we do not read the files from the database (same logic as in avoidReadFromDbOnNextSync)
// This includes all the parents up to the root, but also all the directory within the selected dir.
static_assert(ItemTypeDirectory == 2, "");
query.prepare("UPDATE metadata SET md5='_invalid_' WHERE (" IS_PREFIX_PATH_OF("?1", "path") " OR " IS_PREFIX_PATH_OR_EQUAL("path", "?1") ") AND type == 2;");
query.bindValue(1, path);
query.exec();
}
void SyncJournalDb::commit(const QString &context, bool startTrans)
{
QMutexLocker lock(&_mutex);

View File

@@ -245,6 +245,12 @@ public:
*/
void clearFileTable();
/**
* Set the 'ItemTypeVirtualFileDownload' to all the files that have the ItemTypeVirtualFile flag
* within the directory specified path path
*/
void markVirtualFileForDownloadRecursively(const QByteArray &path);
private:
int getFileRecordCount();
bool updateDatabaseStructure();

View File

@@ -175,6 +175,25 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx)
cur->instruction = CSYNC_INSTRUCTION_NEW;
break;
}
/* If a virtual file is supposed to be downloaded, the local tree
* will see "foo.owncloud" NONE while the remote might see "foo".
* In the common case of remote NEW we don't want to trigger the REMOVE
* that would normally be done for foo.owncloud since the download for
* "foo" will take care of it.
* If it was removed remotely, or moved remotely, the REMOVE is what we want.
*/
if (cur->type == ItemTypeVirtualFileDownload
&& ctx->current == LOCAL_REPLICA
&& cur->path.endsWith(ctx->virtual_file_suffix)) {
auto actualOther = other_tree->findFile(cur->path.left(cur->path.size() - ctx->virtual_file_suffix.size()));
if (actualOther
&& (actualOther->instruction == CSYNC_INSTRUCTION_NEW
|| actualOther->instruction == CSYNC_INSTRUCTION_CONFLICT)) {
cur->instruction = CSYNC_INSTRUCTION_NONE;
break;
}
}
cur->instruction = CSYNC_INSTRUCTION_REMOVE;
break;
case CSYNC_INSTRUCTION_EVAL_RENAME: {

View File

@@ -519,11 +519,16 @@ void Folder::downloadVirtualFile(const QString &_relativepath)
_journal.getFileRecord(relativepath, &record);
if (!record.isValid())
return;
record._type = ItemTypeVirtualFileDownload;
_journal.setFileRecord(record);
// Make sure we go over that file during the discovery
_journal.avoidReadFromDbOnNextSync(relativepath);
if (record._type == ItemTypeVirtualFile) {
record._type = ItemTypeVirtualFileDownload;
_journal.setFileRecord(record);
// Make sure we go over that file during the discovery
_journal.avoidReadFromDbOnNextSync(relativepath);
} else if (record._type == ItemTypeDirectory) {
_journal.markVirtualFileForDownloadRecursively(relativepath);
} else {
qCWarning(lcFolder) << "Invalid existing record " << record._type << " for file " << _relativepath;
}
// Schedule a sync (Folder man will start the sync in a few ms)
slotScheduleThisFolder();

View File

@@ -242,6 +242,9 @@ public:
*/
void registerFolderWatcher();
/** new files are downloaded as virtual files */
bool useVirtualFiles() { return _definition.useVirtualFiles; }
signals:
void syncStateChange();
void syncStarted();

View File

@@ -81,8 +81,7 @@ ShareDialog::ShareDialog(QPointer<AccountState> accountState,
}
// Set filename
QFileInfo lPath(_localPath);
QString fileName = lPath.fileName();
QString fileName = QFileInfo(_sharePath).fileName();
_ui->label_name->setText(tr("%1").arg(fileName));
QFont f(_ui->label_name->font());
f.setPointSize(f.pointSize() * 1.4);

View File

@@ -382,7 +382,7 @@ void SocketApi::processShareRequest(const QString &localFile, SocketListener *li
return;
}
auto &remotePath = fileData.accountRelativePath;
auto &remotePath = fileData.serverRelativePath;
// Can't share root folder
if (remotePath == "/") {
@@ -560,7 +560,7 @@ void SocketApi::command_COPY_PUBLIC_LINK(const QString &localFile, SocketListene
return;
AccountPtr account = fileData.folder->accountState()->account();
auto job = new GetOrCreatePublicLinkShare(account, fileData.accountRelativePath, [](const QString &url) { copyUrlToClipboard(url); }, this);
auto job = new GetOrCreatePublicLinkShare(account, fileData.serverRelativePath, [](const QString &url) { copyUrlToClipboard(url); }, this);
job->run();
}
@@ -579,7 +579,7 @@ void SocketApi::fetchPrivateLinkUrlHelper(const QString &localFile, const std::f
fetchPrivateLinkUrl(
fileData.folder->accountState()->account(),
fileData.accountRelativePath,
fileData.serverRelativePath,
record.numericFileId(),
this,
targetFun);
@@ -611,7 +611,7 @@ void SocketApi::command_DOWNLOAD_VIRTUAL_FILE(const QString &filesArg, SocketLis
auto suffix = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX);
for (const auto &file : files) {
if (!file.endsWith(suffix))
if (!file.endsWith(suffix) && !QFileInfo(file).isDir())
continue;
QString relativePath;
auto folder = FolderMan::instance()->folderForPath(file, &relativePath);
@@ -703,8 +703,11 @@ SocketApi::FileData SocketApi::FileData::get(const QString &localFile)
if (!data.folder)
return data;
data.accountRelativePath = QDir(data.folder->remotePath()).filePath(data.folderRelativePath);
data.serverRelativePath = QDir(data.folder->remotePath()).filePath(data.folderRelativePath);
QString virtualFileExt = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX);
if (data.serverRelativePath.endsWith(virtualFileExt)) {
data.serverRelativePath.chop(virtualFileExt.size());
}
return data;
}
@@ -761,7 +764,7 @@ void SocketApi::command_GET_MENU_ITEMS(const QString &argument, OCC::SocketListe
auto virtualFileSuffix = QStringLiteral(APPLICATION_DOTVIRTUALFILE_SUFFIX);
bool hasVirtualFile = false;
for (const auto &file : files) {
if (file.endsWith(virtualFileSuffix))
if (file.endsWith(virtualFileSuffix) || (folder->useVirtualFiles() && QFileInfo(file).isDir()))
hasVirtualFile = true;
}
if (hasVirtualFile)

View File

@@ -80,9 +80,12 @@ private:
SyncJournalFileRecord journalRecord() const;
Folder *folder;
// Absolute path of the file locally. (May be a virtual file)
QString localPath;
// Relative path of the file locally, as in the DB. (May be a virtual file)
QString folderRelativePath;
QString accountRelativePath;
// Path of the file on the server (In case of virtual file, it points to the actual file)
QString serverRelativePath;
};
void broadcastMessage(const QString &msg, bool doWait = false);

View File

@@ -359,17 +359,6 @@ void PropagateDownloadFile::start()
return;
}
// If we want to download something that used to be a virtual file,
// wipe the virtual file and proceed with a normal download
if (_item->_type == ItemTypeVirtualFileDownload) {
auto virtualFile = propagator()->addVirtualFileSuffix(_item->_file);
auto fn = propagator()->getFilePath(virtualFile);
qCDebug(lcPropagateDownload) << "Downloading file that used to be a virtual file" << fn;
QFile::remove(fn);
propagator()->_journal->deleteFileRecord(virtualFile);
_item->_type = ItemTypeFile;
}
if (_deleteExisting) {
deleteExistingFolder();
@@ -917,6 +906,17 @@ void PropagateDownloadFile::downloadFinished()
if (_conflictRecord.isValid())
propagator()->_journal->setConflictRecord(_conflictRecord);
// If we downloaded something that used to be a virtual file,
// wipe the virtual file and its db entry now that we're done.
if (_item->_type == ItemTypeVirtualFileDownload) {
auto virtualFile = propagator()->addVirtualFileSuffix(_item->_file);
auto fn = propagator()->getFilePath(virtualFile);
qCDebug(lcPropagateDownload) << "Download of previous virtual file finished" << fn;
QFile::remove(fn);
propagator()->_journal->deleteFileRecord(virtualFile);
_item->_type = ItemTypeFile;
}
updateMetadata(isConflict);
}

View File

@@ -497,7 +497,7 @@ void PropagateUploadFileNG::abort(PropagatorJob::AbortType abortType)
{
abortNetworkJobs(
abortType,
[this, abortType](AbstractNetworkJob *job) {
[abortType](AbstractNetworkJob *job) {
return abortType != AbortType::Asynchronous || !qobject_cast<MoveJob *>(job);
});
}

View File

@@ -330,14 +330,14 @@ private slots:
fakeFolder.localModifier().remove("A/a6.owncloud");
QVERIFY(fakeFolder.syncOnce());
QVERIFY(itemInstruction(completeSpy, "A/a1", CSYNC_INSTRUCTION_NEW));
QVERIFY(itemInstruction(completeSpy, "A/a1.owncloud", CSYNC_INSTRUCTION_REMOVE));
QVERIFY(itemInstruction(completeSpy, "A/a1.owncloud", CSYNC_INSTRUCTION_NONE));
QVERIFY(itemInstruction(completeSpy, "A/a2", CSYNC_INSTRUCTION_NEW));
QVERIFY(itemInstruction(completeSpy, "A/a2.owncloud", CSYNC_INSTRUCTION_REMOVE));
QVERIFY(itemInstruction(completeSpy, "A/a2.owncloud", CSYNC_INSTRUCTION_NONE));
QVERIFY(itemInstruction(completeSpy, "A/a3.owncloud", CSYNC_INSTRUCTION_REMOVE));
QVERIFY(itemInstruction(completeSpy, "A/a4.owncloud", CSYNC_INSTRUCTION_REMOVE));
QVERIFY(itemInstruction(completeSpy, "A/a4m", CSYNC_INSTRUCTION_NEW));
QVERIFY(itemInstruction(completeSpy, "A/a4.owncloud", CSYNC_INSTRUCTION_REMOVE));
QVERIFY(itemInstruction(completeSpy, "A/a5", CSYNC_INSTRUCTION_CONFLICT));
QVERIFY(itemInstruction(completeSpy, "A/a5.owncloud", CSYNC_INSTRUCTION_REMOVE));
QVERIFY(itemInstruction(completeSpy, "A/a5.owncloud", CSYNC_INSTRUCTION_NONE));
QVERIFY(itemInstruction(completeSpy, "A/a6", CSYNC_INSTRUCTION_CONFLICT));
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QCOMPARE(dbRecord(fakeFolder, "A/a1")._type, ItemTypeFile);
@@ -354,6 +354,60 @@ private slots:
QVERIFY(!dbRecord(fakeFolder, "A/a6.owncloud").isValid());
}
void testVirtualFileDownloadResume()
{
FakeFolder fakeFolder{ FileInfo() };
SyncOptions syncOptions;
syncOptions._newFilesAreVirtual = true;
fakeFolder.syncEngine().setSyncOptions(syncOptions);
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QSignalSpy completeSpy(&fakeFolder.syncEngine(), SIGNAL(itemCompleted(const SyncFileItemPtr &)));
auto cleanup = [&]() {
completeSpy.clear();
fakeFolder.syncJournal().wipeErrorBlacklist();
};
cleanup();
auto triggerDownload = [&](const QByteArray &path) {
auto &journal = fakeFolder.syncJournal();
SyncJournalFileRecord record;
journal.getFileRecord(path + ".owncloud", &record);
if (!record.isValid())
return;
record._type = ItemTypeVirtualFileDownload;
journal.setFileRecord(record);
journal.avoidReadFromDbOnNextSync(record._path);
};
// Create a virtual file for remote files
fakeFolder.remoteModifier().mkdir("A");
fakeFolder.remoteModifier().insert("A/a1");
QVERIFY(fakeFolder.syncOnce());
QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
cleanup();
// Download by changing the db entry
triggerDownload("A/a1");
fakeFolder.serverErrorPaths().append("A/a1", 500);
QVERIFY(!fakeFolder.syncOnce());
QVERIFY(itemInstruction(completeSpy, "A/a1", CSYNC_INSTRUCTION_NEW));
QVERIFY(itemInstruction(completeSpy, "A/a1.owncloud", CSYNC_INSTRUCTION_NONE));
QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/a1"));
QCOMPARE(dbRecord(fakeFolder, "A/a1.owncloud")._type, ItemTypeVirtualFileDownload);
QVERIFY(!dbRecord(fakeFolder, "A/a1").isValid());
cleanup();
fakeFolder.serverErrorPaths().clear();
QVERIFY(fakeFolder.syncOnce());
QVERIFY(itemInstruction(completeSpy, "A/a1", CSYNC_INSTRUCTION_NEW));
QVERIFY(itemInstruction(completeSpy, "A/a1.owncloud", CSYNC_INSTRUCTION_NONE));
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QCOMPARE(dbRecord(fakeFolder, "A/a1")._type, ItemTypeFile);
QVERIFY(!dbRecord(fakeFolder, "A/a1.owncloud").isValid());
}
// Check what might happen if an older sync client encounters virtual files
void testOldVersion1()
{
@@ -431,6 +485,105 @@ private slots:
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QVERIFY(!dbRecord(fakeFolder, "A/a1.owncloud").isValid());
}
void testDownloadRecursive()
{
FakeFolder fakeFolder{ FileInfo() };
SyncOptions syncOptions;
syncOptions._newFilesAreVirtual = true;
fakeFolder.syncEngine().setSyncOptions(syncOptions);
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
// Create a virtual file for remote files
fakeFolder.remoteModifier().mkdir("A");
fakeFolder.remoteModifier().mkdir("A/Sub");
fakeFolder.remoteModifier().mkdir("A/Sub/SubSub");
fakeFolder.remoteModifier().mkdir("A/Sub2");
fakeFolder.remoteModifier().mkdir("B");
fakeFolder.remoteModifier().mkdir("B/Sub");
fakeFolder.remoteModifier().insert("A/a1");
fakeFolder.remoteModifier().insert("A/a2");
fakeFolder.remoteModifier().insert("A/Sub/a3");
fakeFolder.remoteModifier().insert("A/Sub/a4");
fakeFolder.remoteModifier().insert("A/Sub/SubSub/a5");
fakeFolder.remoteModifier().insert("A/Sub2/a6");
fakeFolder.remoteModifier().insert("B/b1");
fakeFolder.remoteModifier().insert("B/Sub/b2");
QVERIFY(fakeFolder.syncOnce());
QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/a2.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/a3.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/a4.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/SubSub/a5.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub2/a6.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("B/b1.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("B/Sub/b2.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/a1"));
QVERIFY(!fakeFolder.currentLocalState().find("A/a2"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/a3"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/a4"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/SubSub/a5"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub2/a6"));
QVERIFY(!fakeFolder.currentLocalState().find("B/b1"));
QVERIFY(!fakeFolder.currentLocalState().find("B/Sub/b2"));
// Download All file in the directory A/Sub
// (as in Folder::downloadVirtualFile)
fakeFolder.syncJournal().markVirtualFileForDownloadRecursively("A/Sub");
QVERIFY(fakeFolder.syncOnce());
QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/a2.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/a3.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/a4.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/SubSub/a5.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub2/a6.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("B/b1.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("B/Sub/b2.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/a1"));
QVERIFY(!fakeFolder.currentLocalState().find("A/a2"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/a3"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/a4"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/SubSub/a5"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub2/a6"));
QVERIFY(!fakeFolder.currentLocalState().find("B/b1"));
QVERIFY(!fakeFolder.currentLocalState().find("B/Sub/b2"));
// Add a file in a subfolder that was downloaded
// Currently, this continue to add it as a virtual file.
fakeFolder.remoteModifier().insert("A/Sub/SubSub/a7");
QVERIFY(fakeFolder.syncOnce());
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/SubSub/a7.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/SubSub/a7"));
// Now download all files in "A"
fakeFolder.syncJournal().markVirtualFileForDownloadRecursively("A");
QVERIFY(fakeFolder.syncOnce());
QVERIFY(!fakeFolder.currentLocalState().find("A/a1.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/a2.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/a3.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/a4.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/SubSub/a5.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub2/a6.owncloud"));
QVERIFY(!fakeFolder.currentLocalState().find("A/Sub/SubSub/a7.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("B/b1.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("B/Sub/b2.owncloud"));
QVERIFY(fakeFolder.currentLocalState().find("A/a1"));
QVERIFY(fakeFolder.currentLocalState().find("A/a2"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/a3"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/a4"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/SubSub/a5"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub2/a6"));
QVERIFY(fakeFolder.currentLocalState().find("A/Sub/SubSub/a7"));
QVERIFY(!fakeFolder.currentLocalState().find("B/b1"));
QVERIFY(!fakeFolder.currentLocalState().find("B/Sub/b2"));
// Now download remaining files in "B"
fakeFolder.syncJournal().markVirtualFileForDownloadRecursively("B");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
}
};
QTEST_GUILESS_MAIN(TestSyncVirtualFiles)

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Surt</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continua</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1414,7 +1414,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Cancel·lar</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Ukončit</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Pokračovat</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1417,7 +1417,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Zrušit</translation>
</message>
</context>
<context>

View File

@@ -576,27 +576,27 @@
<message>
<location filename="../src/gui/application.cpp" line="122"/>
<source>Continuing will mean &lt;b&gt;deleting these settings&lt;/b&gt;.</source>
<translation type="unfinished"/>
<translation>Fortsetzen bedeutet &lt;b&gt;das diese Einstellungen gelöscht werden&lt;/b&gt;.</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="124"/>
<source>Continuing will mean &lt;b&gt;ignoring these settings&lt;/b&gt;.</source>
<translation type="unfinished"/>
<translation>Fortsetzen bedeutet &lt;b&gt;das diese Einstellungen ignoriert werden&lt;/b&gt;.</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="130"/>
<source>Some settings were configured in newer versions of this client and use features that are not available in this version.&lt;br&gt;&lt;br&gt;%1&lt;br&gt;&lt;br&gt;The current configuration file was already backed up to &lt;i&gt;%2&lt;/i&gt;.</source>
<translation type="unfinished"/>
<translation>Einige Einstellungen wurden in neueren Versionen dieses Programms eingestellt und nutzen Funktionen die in dieser Version nicht verfügbar sind. &lt;br&gt;&lt;br&gt;%1&lt;br&gt;&lt;br&gt; Die aktuelle Konfigurations-Datei wurde bereits an folgenden Ort gesichert: &lt;i&gt;%2&lt;/i&gt;</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Beenden</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Fortsetzen</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1324,17 +1324,17 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter
<message>
<location filename="../src/gui/generalsettings.ui" line="89"/>
<source>&amp;Channel</source>
<translation type="unfinished"/>
<translation>&amp;Channel</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="106"/>
<source>stable</source>
<translation type="unfinished"/>
<translation>Stabil</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="111"/>
<source>beta</source>
<translation type="unfinished"/>
<translation>Beta</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="179"/>
@@ -1406,24 +1406,25 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter
<message>
<location filename="../src/gui/generalsettings.cpp" line="171"/>
<source>Change update channel?</source>
<translation type="unfinished"/>
<translation>Update-Kanal verändern?</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="172"/>
<source>The update channel determines which client updates will be offered for installation. The &quot;stable&quot; channel contains only upgrades that are considered reliable, while the versions in the &quot;beta&quot; channel may contain newer features and bugfixes, but have not yet been tested thoroughly.
Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version.</source>
<translation type="unfinished"/>
<translation>Der Update-Kanal legt fest welche Programm-Updates zur Installation angeboten werden. Der &quot;Stabil&quot;-Kanal enthält nur Upgrades die als verlässlich betrachtet werden, während Versionen im &quot;Beta&quot;-Kanal neuer Funktionen und Fehlerbehebungen enthalten können, die bisher noch nicht komplett bzw. ausführlich genug getestet werden konnten.
Beachten Sie, das dies nur bestimmt von welchem Bereich Sie Upgrades erhalten und das es keine Downgrade-Möglichkeiten gibt: Einen &quot;Schritt zurück&quot; vom Beta-Kanal zum Stabilen-Kanal kann normalerweise nicht unverzüglich erfolgen und bedeutet Wartezeiten auf eine Stabile-Version, die dann neuer ist als die jeweils aktuell installierte Beta-Version.</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="185"/>
<source>Change update channel</source>
<translation type="unfinished"/>
<translation>Update-Kanal ändern</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Abbrechen</translation>
</message>
</context>
<context>
@@ -3558,7 +3559,7 @@ Dies ist ein neuer experimenteller Modus.Wenn du dich dafür entscheidest, diese
<message>
<location filename="../src/libsync/syncengine.cpp" line="857"/>
<source>Using virtual files but suffix is not set</source>
<translation type="unfinished"/>
<translation>Virtuelle Dateien werden genutzt, aber die Dateiendung ist nicht definiert.</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="869"/>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Έξοδος</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Συνέχεια</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1419,7 +1419,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Ακύρωση</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Salir</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continuar</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1423,7 +1423,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Cancelar</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Salir</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continuar</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Cancelar</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Lõpeta</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Jätka</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Loobu</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Irten</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Jarraitu</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Ezeztatu</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>خروج</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>ادامه</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1419,7 +1419,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>لغو</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Lopeta</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Jatka</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1412,7 +1412,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Peruuta</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Quitter</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continuer</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1420,7 +1420,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Anuler</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Saír</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continuar</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Cancelar</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Kilépés</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Folytatás</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1411,7 +1411,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Mégsee</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Esci</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continua</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1415,7 +1415,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Annulla</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1417,7 +1417,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Avslutt</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Fortsett</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1418,7 +1418,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Avbryt</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Afsluiten</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Verder</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1419,7 +1419,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Annuleren</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Wyjdź</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Kontynuuj </translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1415,7 +1415,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Anuluj</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Sair</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continuar</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1419,7 +1419,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Cancelar</translation>
</message>
</context>
<context>

View File

@@ -576,27 +576,27 @@
<message>
<location filename="../src/gui/application.cpp" line="122"/>
<source>Continuing will mean &lt;b&gt;deleting these settings&lt;/b&gt;.</source>
<translation type="unfinished"/>
<translation>Continuar significa &lt;b&gt;excluir essas configurações&lt;/b&gt;.</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="124"/>
<source>Continuing will mean &lt;b&gt;ignoring these settings&lt;/b&gt;.</source>
<translation type="unfinished"/>
<translation>Continuar significa &lt;b&gt;ignorar essas configurações&lt;/b&gt;.</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="130"/>
<source>Some settings were configured in newer versions of this client and use features that are not available in this version.&lt;br&gt;&lt;br&gt;%1&lt;br&gt;&lt;br&gt;The current configuration file was already backed up to &lt;i&gt;%2&lt;/i&gt;.</source>
<translation type="unfinished"/>
<translation>Algumas configurações foram realizadas em versões mais recentes deste cliente e usam recursos que não estão disponíveis nesta versão.&lt;br&gt;&lt;br&gt;%1&lt;br&gt;&lt;br&gt;O arquivo de configuração atual foi feito backup em &lt;i&gt;%2&lt;/i&gt;.</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Sair</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Continuar</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1322,17 +1322,17 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej
<message>
<location filename="../src/gui/generalsettings.ui" line="89"/>
<source>&amp;Channel</source>
<translation type="unfinished"/>
<translation>&amp;Canal</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="106"/>
<source>stable</source>
<translation type="unfinished"/>
<translation>estável</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="111"/>
<source>beta</source>
<translation type="unfinished"/>
<translation>beta</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="179"/>
@@ -1405,24 +1405,25 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej
<message>
<location filename="../src/gui/generalsettings.cpp" line="171"/>
<source>Change update channel?</source>
<translation type="unfinished"/>
<translation>Alterar canal de atualização?</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="172"/>
<source>The update channel determines which client updates will be offered for installation. The &quot;stable&quot; channel contains only upgrades that are considered reliable, while the versions in the &quot;beta&quot; channel may contain newer features and bugfixes, but have not yet been tested thoroughly.
Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version.</source>
<translation type="unfinished"/>
<translation>O canal de atualização determina quais atualizações de cliente serão oferecidas para instalação. O canal &quot;estável&quot; contém apenas atualizações consideradas confiáveis, enquanto as versões no canal &quot;beta&quot; podem conter recursos e correções de bugs mais recentes, mas ainda não foram totalmente testados.
Observe que isso seleciona apenas de qual conjunto de atualizações são retiradas e que não rebaixamentos: Portanto, voltar do canal beta para o canal estável geralmente não pode ser feito imediatamente e significa esperar por uma versão estável que seja mais recente do que a versão beta atualmente instalada.</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="185"/>
<source>Change update channel</source>
<translation type="unfinished"/>
<translation>Alterar canal de atualização</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Cancelar</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Выход</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Продолжить</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1421,7 +1421,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Отмена</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Koniec</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Pokračovať</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Zrušiť</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Končaj</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Nadaljuj</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1419,7 +1419,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Prekliči</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Напусти</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Настави</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Откажи</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Avsluta</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Fortsätt</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1414,7 +1414,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Avbryt</translation>
</message>
</context>
<context>

View File

@@ -576,27 +576,27 @@
<message>
<location filename="../src/gui/application.cpp" line="122"/>
<source>Continuing will mean &lt;b&gt;deleting these settings&lt;/b&gt;.</source>
<translation type="unfinished"/>
<translation> &lt;b&gt;&lt;/b&gt;</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="124"/>
<source>Continuing will mean &lt;b&gt;ignoring these settings&lt;/b&gt;.</source>
<translation type="unfinished"/>
<translation> &lt;b&gt;&lt;/b&gt;</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="130"/>
<source>Some settings were configured in newer versions of this client and use features that are not available in this version.&lt;br&gt;&lt;br&gt;%1&lt;br&gt;&lt;br&gt;The current configuration file was already backed up to &lt;i&gt;%2&lt;/i&gt;.</source>
<translation type="unfinished"/>
<translation> &lt;br&gt;&lt;br&gt;%1&lt;br&gt;&lt;br&gt; &lt;i&gt;%2&lt;/i&gt; </translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1324,17 +1324,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/generalsettings.ui" line="89"/>
<source>&amp;Channel</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="106"/>
<source>stable</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="111"/>
<source>beta</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/generalsettings.ui" line="179"/>
@@ -1406,24 +1406,26 @@ Continuing the sync as normal will cause all your files to be overwritten by an
<message>
<location filename="../src/gui/generalsettings.cpp" line="171"/>
<source>Change update channel?</source>
<translation type="unfinished"/>
<translation>?</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="172"/>
<source>The update channel determines which client updates will be offered for installation. The &quot;stable&quot; channel contains only upgrades that are considered reliable, while the versions in the &quot;beta&quot; channel may contain newer features and bugfixes, but have not yet been tested thoroughly.
Note that this selects only what pool upgrades are taken from, and that there are no downgrades: So going back from the beta channel to the stable channel usually cannot be done immediately and means waiting for a stable version that is newer than the currently installed beta version.</source>
<translation type="unfinished"/>
<translation> &quot;&quot; &quot;&quot;
</translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="185"/>
<source>Change update channel</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Çıkış</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Devam et</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>İptal</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>Вийти</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation>Продовжити</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation>Скасувати</translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation>退</translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1419,7 +1419,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>

View File

@@ -591,12 +591,12 @@
<message>
<location filename="../src/gui/application.cpp" line="137"/>
<source>Quit</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="138"/>
<source>Continue</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/gui/application.cpp" line="253"/>
@@ -1410,7 +1410,7 @@ Note that this selects only what pool upgrades are taken from, and that there ar
<message>
<location filename="../src/gui/generalsettings.cpp" line="186"/>
<source>Cancel</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>