Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamila Ayres <hello@camila.codes>2019-06-12 12:33:25 +0300
committerGitHub <noreply@github.com>2019-06-12 12:33:25 +0300
commit0b420c5fe64c5e69d74ee65daa3bf83af746ff14 (patch)
tree332b52964ad5050813e86d9bac7eb138102ecea0
parent795c29d5bdb5d9435cc889354a7f0fc19d22833d (diff)
parentbb7d330516e5ae743af862ea22ab01b651ef8dee (diff)
Merge pull request #1301 from nextcloud/error-423-change-warning-colorv2.5.3-rc2stable-2.5.3-rc2
Add error category for http file lock error status 423.
-rw-r--r--src/gui/activitylistmodel.cpp3
-rw-r--r--src/gui/activitywidget.cpp5
-rw-r--r--src/gui/folder.cpp4
-rw-r--r--src/gui/folder.h3
-rw-r--r--src/libsync/owncloudpropagator.cpp1
-rw-r--r--src/libsync/owncloudpropagator_p.h2
-rw-r--r--src/libsync/progressdispatcher.cpp3
-rw-r--r--src/libsync/propagatedownload.cpp6
-rw-r--r--src/libsync/syncfileitem.h1
-rw-r--r--src/libsync/syncfilestatustracker.cpp3
-rw-r--r--src/libsync/syncresult.cpp8
-rw-r--r--src/libsync/syncresult.h6
12 files changed, 40 insertions, 5 deletions
diff --git a/src/gui/activitylistmodel.cpp b/src/gui/activitylistmodel.cpp
index 5b084784b..ae3a7c6b3 100644
--- a/src/gui/activitylistmodel.cpp
+++ b/src/gui/activitylistmodel.cpp
@@ -105,7 +105,8 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
} else if(a._status == SyncFileItem::SoftError
|| a._status == SyncFileItem::FileIgnored
|| a._status == SyncFileItem::Conflict
- || a._status == SyncFileItem::Restoration){
+ || a._status == SyncFileItem::Restoration
+ || a._status == SyncFileItem::FileLocked){
return QIcon(QLatin1String(":/client/resources/state-warning.svg"));
}
return QIcon(QLatin1String(":/client/resources/state-sync.svg"));
diff --git a/src/gui/activitywidget.cpp b/src/gui/activitywidget.cpp
index 71a86dd28..c293a0384 100644
--- a/src/gui/activitywidget.cpp
+++ b/src/gui/activitywidget.cpp
@@ -121,6 +121,11 @@ void ActivityWidget::slotProgressInfo(const QString &folder, const ProgressInfo
continue;
}
+ if(activity._status == SyncFileItem::FileLocked && !QFileInfo(f->path() + activity._file).exists()){
+ _model->removeActivityFromActivityList(activity);
+ continue;
+ }
+
if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
_model->removeActivityFromActivityList(activity);
diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp
index 97625c5c6..f5aedacf0 100644
--- a/src/gui/folder.cpp
+++ b/src/gui/folder.cpp
@@ -351,6 +351,10 @@ void Folder::showSyncResultPopup()
createGuiLog(_syncResult.firstItemError()->_file, LogStatusError, errorCount);
}
+ if (int lockedCount = _syncResult.numLockedItems()) {
+ createGuiLog(_syncResult.firstItemLocked()->_file, LogStatusFileLocked, lockedCount);
+ }
+
qCInfo(lcFolder) << "Folder sync result: " << int(_syncResult.status());
}
diff --git a/src/gui/folder.h b/src/gui/folder.h
index 05bd62a4e..48a2e52f7 100644
--- a/src/gui/folder.h
+++ b/src/gui/folder.h
@@ -344,7 +344,8 @@ private:
LogStatusNew,
LogStatusError,
LogStatusConflict,
- LogStatusUpdated
+ LogStatusUpdated,
+ LogStatusFileLocked
};
void createGuiLog(const QString &filename, LogStatus status, int count,
diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp
index bf358153e..ac03a1b97 100644
--- a/src/libsync/owncloudpropagator.cpp
+++ b/src/libsync/owncloudpropagator.cpp
@@ -269,6 +269,7 @@ void PropagateItemJob::done(SyncFileItem::Status statusArg, const QString &error
case SyncFileItem::FileIgnored:
case SyncFileItem::NoStatus:
case SyncFileItem::BlacklistedError:
+ case SyncFileItem::FileLocked:
// nothing
break;
}
diff --git a/src/libsync/owncloudpropagator_p.h b/src/libsync/owncloudpropagator_p.h
index cb266a80d..90841e537 100644
--- a/src/libsync/owncloudpropagator_p.h
+++ b/src/libsync/owncloudpropagator_p.h
@@ -93,7 +93,7 @@ inline SyncFileItem::Status classifyError(QNetworkReply::NetworkError nerror,
if (anotherSyncNeeded) {
*anotherSyncNeeded = true;
}
- return SyncFileItem::SoftError;
+ return SyncFileItem::FileLocked;
}
return SyncFileItem::NormalError;
diff --git a/src/libsync/progressdispatcher.cpp b/src/libsync/progressdispatcher.cpp
index e17279a53..179d28319 100644
--- a/src/libsync/progressdispatcher.cpp
+++ b/src/libsync/progressdispatcher.cpp
@@ -91,7 +91,8 @@ bool Progress::isWarningKind(SyncFileItem::Status kind)
return kind == SyncFileItem::SoftError || kind == SyncFileItem::NormalError
|| kind == SyncFileItem::FatalError || kind == SyncFileItem::FileIgnored
|| kind == SyncFileItem::Conflict || kind == SyncFileItem::Restoration
- || kind == SyncFileItem::DetailError || kind == SyncFileItem::BlacklistedError;
+ || kind == SyncFileItem::DetailError || kind == SyncFileItem::BlacklistedError
+ || kind == SyncFileItem::FileLocked;
}
bool Progress::isIgnoredKind(SyncFileItem::Status kind)
diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp
index 07c7c5f18..da2d88b82 100644
--- a/src/libsync/propagatedownload.cpp
+++ b/src/libsync/propagatedownload.cpp
@@ -571,6 +571,12 @@ void PropagateDownloadFile::slotGetFinished()
qCWarning(lcPropagateDownload) << "server replied 404, assuming file was deleted";
}
+ // Getting a 423 means that the file is locked
+ const bool fileLocked = _item->_httpErrorCode == 423;
+ if (fileLocked) {
+ qCWarning(lcPropagateDownload) << "server replied 423, file is Locked";
+ }
+
// Don't keep the temporary file if it is empty or we
// used a bad range header or the file's not on the server anymore.
if (_tmpFile.size() == 0 || badRangeHeader || fileNotFound) {
diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h
index 461627ba3..e054ab83a 100644
--- a/src/libsync/syncfileitem.h
+++ b/src/libsync/syncfileitem.h
@@ -59,6 +59,7 @@ public:
Conflict,
FileIgnored, ///< The file is in the ignored list (or blacklisted with no retries left)
+ FileLocked, ///< The file is locked
Restoration, ///< The file was restored because what should have been done was not allowed
/** For errors that should only appear in the error view.
diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp
index 6dc2514ff..c492b34d5 100644
--- a/src/libsync/syncfilestatustracker.cpp
+++ b/src/libsync/syncfilestatustracker.cpp
@@ -105,7 +105,8 @@ static inline bool showWarningInSocketApi(const SyncFileItem &item)
return item._instruction == CSYNC_INSTRUCTION_IGNORE
|| status == SyncFileItem::FileIgnored
|| status == SyncFileItem::Conflict
- || status == SyncFileItem::Restoration;
+ || status == SyncFileItem::Restoration
+ || status == SyncFileItem::FileLocked;
}
SyncFileStatusTracker::SyncFileStatusTracker(SyncEngine *syncEngine)
diff --git a/src/libsync/syncresult.cpp b/src/libsync/syncresult.cpp
index 8550b4628..a3481c74f 100644
--- a/src/libsync/syncresult.cpp
+++ b/src/libsync/syncresult.cpp
@@ -28,6 +28,7 @@ SyncResult::SyncResult()
, _numNewConflictItems(0)
, _numOldConflictItems(0)
, _numErrorItems(0)
+ , _numLockedItems(0)
{
}
@@ -139,6 +140,13 @@ void SyncResult::processCompletedItem(const SyncFileItemPtr &item)
_folderStructureWasChanged = true;
}
+ if(item->_status == SyncFileItem::FileLocked){
+ _numLockedItems++;
+ if (!_firstItemLocked) {
+ _firstItemLocked = item;
+ }
+ }
+
// Process the item to the gui
if (item->_status == SyncFileItem::FatalError || item->_status == SyncFileItem::NormalError) {
//: this displays an error string (%2) for a file %1
diff --git a/src/libsync/syncresult.h b/src/libsync/syncresult.h
index 6c484ee4d..1a0c680ca 100644
--- a/src/libsync/syncresult.h
+++ b/src/libsync/syncresult.h
@@ -72,12 +72,16 @@ public:
int numErrorItems() const { return _numErrorItems; }
bool hasUnresolvedConflicts() const { return _numNewConflictItems + _numOldConflictItems > 0; }
+ int numLockedItems() const { return _numLockedItems; }
+ bool hasLockedFiles() const { return _numLockedItems > 0; }
+
const SyncFileItemPtr &firstItemNew() const { return _firstItemNew; }
const SyncFileItemPtr &firstItemDeleted() const { return _firstItemDeleted; }
const SyncFileItemPtr &firstItemUpdated() const { return _firstItemUpdated; }
const SyncFileItemPtr &firstItemRenamed() const { return _firstItemRenamed; }
const SyncFileItemPtr &firstNewConflictItem() const { return _firstNewConflictItem; }
const SyncFileItemPtr &firstItemError() const { return _firstItemError; }
+ const SyncFileItemPtr &firstItemLocked() const { return _firstItemLocked; }
void processCompletedItem(const SyncFileItemPtr &item);
@@ -101,6 +105,7 @@ private:
int _numNewConflictItems;
int _numOldConflictItems;
int _numErrorItems;
+ int _numLockedItems;
SyncFileItemPtr _firstItemNew;
SyncFileItemPtr _firstItemDeleted;
@@ -108,6 +113,7 @@ private:
SyncFileItemPtr _firstItemRenamed;
SyncFileItemPtr _firstNewConflictItem;
SyncFileItemPtr _firstItemError;
+ SyncFileItemPtr _firstItemLocked;
};
}