Merge branch restore_backup
authorOlivier Goffart <ogoffart@woboq.com>
Wed, 10 Feb 2016 16:47:06 +0000 (17:47 +0100)
committerOlivier Goffart <ogoffart@woboq.com>
Wed, 10 Feb 2016 16:47:06 +0000 (17:47 +0100)
1  2 
src/gui/folder.cpp
src/gui/folder.h
src/libsync/syncengine.cpp

Simple merge
Simple merge
index 59dca10ccc4e8f63c5a86834644303c07cce67d3,54f33a3ecc83e75a013841a90c2c67e750c7feda..1d10fe28369a466c0b4d86966f590789d4653932
@@@ -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());