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;
(*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());