void ActivityListModel::addErrorToActivityList(const Activity &activity, const ErrorType type)
{
- qCDebug(lcActivity) << "Error successfully added to the notification list: " << type << activity._message << activity._subject << activity._syncResultStatus << activity._syncFileItemStatus;
- auto modifiedActivity = activity;
- if (type == ErrorType::NetworkError) {
- modifiedActivity._subject = tr("Network error occurred: client will retry syncing.");
+ auto shouldAddError = false;
+
+ switch (type)
+ {
+ case ErrorType::NetworkError:
+ if (_durationSinceDisconnection.isValid() && _durationSinceDisconnection.hasExpired(3 * 60 *1000)) {
+ shouldAddError = true;
+ }
+ break;
+ case ErrorType::SyncError:
+ shouldAddError = true;
+ break;
+ }
+
+ if (shouldAddError) {
+ qCDebug(lcActivity) << "Error successfully added to the notification list: " << type << activity._message << activity._subject << activity._syncResultStatus << activity._syncFileItemStatus;
+ auto modifiedActivity = activity;
+ if (type == ErrorType::NetworkError) {
+ modifiedActivity._subject = tr("Network error occurred: client will retry syncing.");
+ }
+ addEntriesToActivityList({modifiedActivity});
+ _notificationErrorsLists.prepend(modifiedActivity);
}
- addEntriesToActivityList({modifiedActivity});
- _notificationErrorsLists.prepend(modifiedActivity);
}
void ActivityListModel::addIgnoredFileToList(const Activity &newActivity)
void slotTriggerDismiss(const int activityIndex);
void addNotificationToActivityList(const OCC::Activity &activity);
- void addErrorToActivityList(const OCC::Activity &activity, const ErrorType type);
+ void addErrorToActivityList(const OCC::Activity &activity, const OCC::ActivityListModel::ErrorType type);
void addIgnoredFileToList(const OCC::Activity &newActivity);
void addSyncFileItemToActivityList(const OCC::Activity &activity);
void removeActivityFromActivityList(int row);
void slotItemCompleted(const QString &folder, const OCC::SyncFileItemPtr &item);
void slotProgressInfo(const QString &folder, const OCC::ProgressInfo &progress);
void slotAddError(const QString &folderAlias, const QString &message, OCC::ErrorCategory category);
- void slotAddErrorToGui(const QString &folderAlias, const OCC::SyncFileItem::Status status, const QString &errorMessage, const QString &subject, const ErrorCategory category);
+ void slotAddErrorToGui(const QString &folderAlias, const OCC::SyncFileItem::Status status, const QString &errorMessage, const QString &subject, const OCC::ErrorCategory category);
void slotNotificationRequestFinished(int statusCode);
void slotNotifyNetworkError(QNetworkReply *reply);
void slotEndNotificationRequest(int replyCode);
ASSERT(!_tmpFile.isOpen());
const auto filename = propagator()->fullLocalPath(_item->_file);
+ // In case of file name clash, report an error
+ // This can happen if another parallel download saved a clashing file.
+ if (propagator()->localFileNameClash(_item->_file)) {
+ done(SyncFileItem::FileNameClash, tr("File %1 cannot be saved because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)), ErrorCategory::GenericError);
+ return;
+ }
+
if (_item->_modtime <= 0) {
FileSystem::remove(_tmpFile.fileName());
done(SyncFileItem::NormalError, tr("File %1 has invalid modified time reported by server. Do not save it.").arg(QDir::toNativeSeparators(_item->_file)), ErrorCategory::GenericError);
finalize();
}
-void PropagateUploadFileCommon::done(SyncFileItem::Status status, const QString &errorString, const ErrorCategory category)
+void PropagateUploadFileCommon::done(const SyncFileItem::Status status, const QString &errorString, const ErrorCategory category)
{
_finished = true;
PropagateItemJob::done(status, errorString, category);
void slotPollFinished();
protected:
- void done(SyncFileItem::Status status, const QString &errorString = QString(), const ErrorCategory category = ErrorCategory::NoError) override;
+ void done(const SyncFileItem::Status status, const QString &errorString = QString(), const ErrorCategory category = ErrorCategory::NoError) override;
/**
* Aborts all running network jobs, except for the ones that mayAbortJob