From: Olivier Goffart Date: Wed, 10 Feb 2016 16:47:06 +0000 (+0100) Subject: Merge branch restore_backup X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~1375 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c93ecfbfb5a2b9c7278e4838125bdcebf6dce4df;p=nextcloud-desktop.git Merge branch restore_backup --- c93ecfbfb5a2b9c7278e4838125bdcebf6dce4df diff --cc src/libsync/syncengine.cpp index 59dca10cc,54f33a3ec..1d10fe283 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@@ -542,14 -543,8 +544,9 @@@ int SyncEngine::treewalkFile( TREE_WALK case CSYNC_INSTRUCTION_ERROR: dir = SyncFileItem::None; break; - case CSYNC_INSTRUCTION_EVAL: - case CSYNC_INSTRUCTION_NEW: + case CSYNC_INSTRUCTION_TYPE_CHANGE: case CSYNC_INSTRUCTION_SYNC: - case CSYNC_INSTRUCTION_STAT_ERROR: - default: - dir = remote ? SyncFileItem::Down : SyncFileItem::Up; - if (!remote && file->instruction == CSYNC_INSTRUCTION_SYNC) { + if (!remote) { // An upload of an existing file means that the file was left unchanged on the server // This counts as a NONE for detecting if all the files on the server were changed _hasNoneFiles = true; @@@ -816,19 -824,26 +828,39 @@@ void SyncEngine::slotDiscoveryJobFinish (*it)->_file = adjustRenamedPath((*it)->_file); } + // Check for invalid character in old server version + if (_account->serverVersionInt() < 0x080100) { + // Server version older than 8.1 don't support these character in filename. + static const QRegExp invalidCharRx("[\\\\:?*\"<>|]"); + for (auto it = _syncedItems.begin(); it != _syncedItems.end(); ++it) { + if ((*it)->_direction == SyncFileItem::Up && + (*it)->destination().contains(invalidCharRx)) { + (*it)->_errorString = tr("File name contains at least one invalid character"); + (*it)->_instruction = CSYNC_INSTRUCTION_IGNORE; + } + } + } + + if (!_hasNoneFiles && _hasRemoveFile) { + qDebug() << Q_FUNC_INFO << "All the files are going to be changed, asking the user"; + bool cancel = false; + emit aboutToRemoveAllFiles(_syncedItems.first()->_direction, &cancel); + if (cancel) { + qDebug() << Q_FUNC_INFO << "Abort sync"; + finalize(false); + return; + } + } + if (!_hasForwardInTimeFiles && _backInTimeFiles >= 2) { + qDebug() << "All the changes are bringing files in the past, asking the user"; + // this typically happen when a backup is restored on the server + bool restore = false; + emit aboutToRestoreBackup(&restore); + if (restore) { + restoreOldFiles(); + } + } + // Sort items per destination std::sort(_syncedItems.begin(), _syncedItems.end());