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

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaas Freitag <freitag@owncloud.com>2013-11-26 15:22:28 +0400
committerKlaas Freitag <freitag@owncloud.com>2013-11-26 17:02:11 +0400
commit232cbc45b5467199029d6f655e08e873d67ee625 (patch)
tree82db17ec8b0fa33859d89212a27e01f584a6949a /src/mirall
parenta88d45bff40516b949a37ec0d84aa1a2e6efe8c9 (diff)
Simplify progress and error signals again.
Now handle everything through the progress signal and let the errors be progressed in the done slot. Remove unused code, fix sorting of the list, more efficiency. This fixes #916
Diffstat (limited to 'src/mirall')
-rw-r--r--src/mirall/csyncthread.cpp11
-rw-r--r--src/mirall/csyncthread.h4
-rw-r--r--src/mirall/owncloudgui.cpp3
-rw-r--r--src/mirall/owncloudpropagator.cpp9
-rw-r--r--src/mirall/owncloudpropagator.h2
-rw-r--r--src/mirall/protocolwidget.cpp256
-rw-r--r--src/mirall/protocolwidget.h6
7 files changed, 98 insertions, 193 deletions
diff --git a/src/mirall/csyncthread.cpp b/src/mirall/csyncthread.cpp
index 52bcfde67..0e99126c8 100644
--- a/src/mirall/csyncthread.cpp
+++ b/src/mirall/csyncthread.cpp
@@ -226,7 +226,7 @@ bool CSyncThread::checkBlacklisting( SyncFileItem *item )
item->_blacklistedInDb = true;
item->_instruction = CSYNC_INSTRUCTION_IGNORE;
item->_errorString = tr("The item is not synced because it is on the blacklist.");
- slotProgressProblem( Progress::SoftError, *item );
+ slotProgress( Progress::SoftError, *item );
}
}
@@ -319,7 +319,7 @@ int CSyncThread::treewalkFile( TREE_WALK_FILE *file, bool remote )
case CSYNC_INSTRUCTION_IGNORE:
case CSYNC_INSTRUCTION_ERROR:
//
- slotProgressProblem(Progress::SoftError, item );
+ slotProgress(Progress::SoftError, item, 0, 0);
dir = SyncFileItem::None;
break;
case CSYNC_INSTRUCTION_EVAL:
@@ -593,7 +593,7 @@ void CSyncThread::slotFinished()
thread()->quit();
}
-void CSyncThread::slotProgressProblem(Progress::Kind kind, const SyncFileItem& item)
+void CSyncThread::progressProblem(Progress::Kind kind, const SyncFileItem& item)
{
Progress::SyncProblem problem;
@@ -609,6 +609,11 @@ void CSyncThread::slotProgressProblem(Progress::Kind kind, const SyncFileItem& i
void CSyncThread::slotProgress(Progress::Kind kind, const SyncFileItem& item, quint64 curr, quint64 total)
{
+ if( Progress::isErrorKind(kind) ) {
+ progressProblem(kind, item);
+ return;
+ }
+
if( kind == Progress::StartSync ) {
QMutexLocker lock(&_mutex);
_currentFileNo = 0;
diff --git a/src/mirall/csyncthread.h b/src/mirall/csyncthread.h
index b4ea714a6..0737b494b 100644
--- a/src/mirall/csyncthread.h
+++ b/src/mirall/csyncthread.h
@@ -81,11 +81,11 @@ signals:
private slots:
void transferCompleted(const SyncFileItem& item);
void slotFinished();
- void slotProgress(Progress::Kind kind, const SyncFileItem &item, quint64, quint64);
- void slotProgressProblem(Progress::Kind kind, const SyncFileItem& item);
+ void slotProgress(Progress::Kind kind, const SyncFileItem &item, quint64 curr = 0, quint64 total = 0);
private:
void handleSyncError(CSYNC *ctx, const char *state);
+ void progressProblem(Progress::Kind kind, const SyncFileItem& item);
static int treewalkLocal( TREE_WALK_FILE*, void *);
static int treewalkRemote( TREE_WALK_FILE*, void *);
diff --git a/src/mirall/owncloudgui.cpp b/src/mirall/owncloudgui.cpp
index b36dfeac7..1d0316834 100644
--- a/src/mirall/owncloudgui.cpp
+++ b/src/mirall/owncloudgui.cpp
@@ -314,8 +314,9 @@ void ownCloudGui::slotShowTrayMessage(const QString &title, const QString &msg)
void ownCloudGui::slotShowOptionalTrayMessage(const QString &title, const QString &msg)
{
MirallConfigFile cfg;
- if (cfg.optionalDesktopNotifications())
+ if (cfg.optionalDesktopNotifications()) {
slotShowTrayMessage(title, msg);
+ }
}
diff --git a/src/mirall/owncloudpropagator.cpp b/src/mirall/owncloudpropagator.cpp
index c46d9b458..05036e8fa 100644
--- a/src/mirall/owncloudpropagator.cpp
+++ b/src/mirall/owncloudpropagator.cpp
@@ -85,10 +85,14 @@ void PropagateItemJob::done(SyncFileItem::Status status, const QString &errorStr
switch( status ) {
case SyncFileItem::SoftError:
// do not blacklist in case of soft error.
+ emit progress( Progress::SoftError, _item, 0, 0 );
break;
case SyncFileItem::FatalError:
case SyncFileItem::NormalError:
_propagator->_journal->updateBlacklistEntry( record );
+ if( status == SyncFileItem::NormalError ) {
+ emit progress( Progress::NormalError, _item, 0, 0 );
+ }
break;
case SyncFileItem::Success:
if( _item._blacklistedInDb ) {
@@ -378,19 +382,16 @@ void PropagateUploadFile::start()
const QString errMsg = tr("Local file changed during sync, syncing once it arrived completely");
done( SyncFileItem::SoftError, errMsg );
_item._errorString = errMsg;
- emit progressProblem( Progress::SoftError, _item );
return;
} else if( state == HBF_USER_ABORTED ) {
const QString errMsg = tr("Sync was aborted by user.");
- done( SyncFileItem::SoftError, errMsg);
_item._errorString = errMsg;
- emit progressProblem( Progress::SoftError, _item );
+ done( SyncFileItem::SoftError, errMsg );
} else {
// Other HBF error conditions.
// FIXME: find out the error class.
_item._httpErrorCode = hbf_fail_http_code(trans.data());
done(SyncFileItem::NormalError, hbf_error_string(trans.data(), state));
- emit progressProblem(Progress::NormalError, _item);
}
return;
}
diff --git a/src/mirall/owncloudpropagator.h b/src/mirall/owncloudpropagator.h
index fed659533..99eed0a5c 100644
--- a/src/mirall/owncloudpropagator.h
+++ b/src/mirall/owncloudpropagator.h
@@ -44,7 +44,6 @@ signals:
void finished(SyncFileItem::Status);
void completed(const SyncFileItem &);
void progress(Progress::Kind, const SyncFileItem& item, quint64 bytes, quint64 total);
- void progressProblem( Progress::Kind, const SyncFileItem& );
};
/*
@@ -172,7 +171,6 @@ public:
signals:
void completed(const SyncFileItem &);
void progress(Progress::Kind kind, const SyncFileItem&, quint64 bytes, quint64 total);
- void progressProblem( Progress::Kind, const SyncFileItem& );
void finished();
};
diff --git a/src/mirall/protocolwidget.cpp b/src/mirall/protocolwidget.cpp
index b09ee2049..2bb11157d 100644
--- a/src/mirall/protocolwidget.cpp
+++ b/src/mirall/protocolwidget.cpp
@@ -61,154 +61,34 @@ ProtocolWidget::ProtocolWidget(QWidget *parent) :
QPushButton *copyBtn = _ui->_dialogButtonBox->addButton(tr("Copy"), QDialogButtonBox::ActionRole);
connect(copyBtn, SIGNAL(clicked()), SLOT(copyToClipboard()));
-
- }
-
-#if 0
-void ProtocolWidget::setSyncResultStatus(const SyncResult& result )
-{
- if( result.errorStrings().count() ) {
- _ui->_errorLabel->setVisible(true);
- _ui->_errorLabel->setTextFormat(Qt::RichText);
-
- QString errStr;
- QStringList errors = result.errorStrings();
- int cnt = errors.size();
- bool appendDots = false;
- if( cnt > 3 ) {
- cnt = 3;
- appendDots = true;
- }
-
- for( int i = 0; i < cnt; i++) {
- errStr.append(QString("%1<br/>").arg(errors.at(i)));
- }
- if( appendDots ) {
- errStr.append(QString("..."));
- }
- _ui->_errorLabel->setText(errStr);
- } else {
- _ui->_errorLabel->setText(QString::null);
- _ui->_errorLabel->setVisible(false);
- }
-
}
-
-void ProtocolWidget::setSyncResult( const SyncResult& result )
-{
- setSyncResultStatus(result);
-
- const QString& folder = result.folder();
- qDebug() << "Setting sync result for folder " << folder;
-
- SyncFileItemVector::const_iterator i;
- const SyncFileItemVector& items = result.syncFileItemVector();
- QDateTime dt = QDateTime::currentDateTime();
-
- for (i = items.begin(); i != items.end(); ++i) {
- const SyncFileItem& item = *i;
- QString errMsg;
- QString tooltip;
- // handle ignored files here.
-
- if( item._status == SyncFileItem::FileIgnored
- || item._status == SyncFileItem::Conflict
- || item._status == SyncFileItem::SoftError ) {
- QStringList columns;
- QString timeStr = timeString(dt);
- QString longTimeStr = timeString(dt, QLocale::LongFormat);
-
- columns << timeStr;
- columns << item._file;
- columns << folder;
- if( item._status == SyncFileItem::FileIgnored ) {
- if( item._blacklistedInDb ) {
- errMsg = tr("Blacklisted");
- tooltip = tr("The file is blacklisted because of previous error conditions.");
- }else if( item._type == SyncFileItem::SoftLink ) {
- errMsg = tr("Soft Link ignored");
- tooltip = tr("Softlinks break the semantics of synchronization.\nPlease do not "
- "use them in synced directories");
- } else {
- QString obj = tr("file");
- if( item._type == SyncFileItem::Directory ) {
- obj = tr("directory");
- }
- tooltip = tr("The %1 was ignored because it is listed in the clients ignore list\n"
- "or the %1 name contains characters that are not syncable\nin a cross platform "
- "environment").arg(obj);
- errMsg = tr("Item ignored");
- if( item._errorString == QLatin1String("File listed on ignore list.") ) {
- errMsg = tr("%1 on ignore list").arg(obj);
- tooltip = tr("The %1 was skipped because it is listed on the clients\n"
- "list of names to ignore").arg(obj);
- } else if( item._errorString == QLatin1String("File contains invalid characters.") ) {
- errMsg = tr("Invalid characters");
- tooltip = tr("The %1 name contains one or more invalid characters which break\n"
- "syncing in a cross platform environment").arg(obj);
- }
- }
- } else if( item._status == SyncFileItem::Conflict ) {
- errMsg = tr("Conflict file.");
- tooltip = tr("The file was changed on server and local repository and as a result it\n"
- "created a so called conflict. The local change is copied to the conflict\n"
- "file while the file from the server side is available under the original\n"
- "name");
- } else if( item._status == SyncFileItem::SoftError ) {
- errMsg = item._errorString;
- } else {
- Q_ASSERT(!"unhandled instruction.");
- }
- columns << errMsg;
-
- QTreeWidgetItem *twitem = new QTreeWidgetItem(columns);
- twitem->setData(0, ErrorIndicatorRole, QVariant(true) );
- twitem->setToolTip(0, longTimeStr);
- twitem->setToolTip(3, tooltip);
- twitem->setIcon(0, Theme::instance()->syncStateIcon(SyncResult::Problem, true));
-
- _ui->_treeWidget->insertTopLevelItem(0, twitem);
-
- }
- }
-}
-#endif
void ProtocolWidget::setupList()
{
- // get the folders to set up the top level list.
-// Folder::Map map = FolderMan::instance()->map();
-// SyncResult lastResult;
-// QDateTime dt;
-
-// bool haveSyncResult = false;
-
-// foreach( Folder *f, map.values() ) {
-// if( f->syncResult().syncTime() > dt ) {
-// dt = f->syncResult().syncTime();
-// lastResult = f->syncResult();
-// haveSyncResult = true;
-// }
-
-// if( haveSyncResult ) {
-// setSyncResult(lastResult);
-// }
-// }
-
QList<Progress::Info> progressList = ProgressDispatcher::instance()->recentChangedItems(0); // All.
+ QList<QTreeWidgetItem*> items;
+ QTreeWidgetItem *item;
- QHash <QString, int> folderHash;
-
- foreach( Progress::Info info, progressList ) {
- slotProgressInfo( info.folder, info );
- folderHash[info.folder] = 1;
- }
+ _ui->_treeWidget->clear();
QList<Progress::SyncProblem> problemList = ProgressDispatcher::instance()->recentProblems(0);
+ items.clear();
foreach( Progress::SyncProblem prob, problemList ) {
- slotProgressProblem(prob.folder, prob);
- folderHash[prob.folder] = 1;
+ item = createProblemTreewidgetItem(prob);
+ if (item) {
+ items.append(item);
+ }
}
+ _ui->_treeWidget->addTopLevelItems(items);
+
+ foreach( Progress::Info info, progressList ) {
+ item = createProgressTreewidgetItem(info);
+ if(item) {
+ items.append(item);
+ }
+ }
+ _ui->_treeWidget->addTopLevelItems(items);
+
}
ProtocolWidget::~ProtocolWidget()
@@ -284,34 +164,43 @@ QString ProtocolWidget::timeString(QDateTime dt, QLocale::FormatType format) con
return timeStr;
}
-void ProtocolWidget::slotProgressProblem( const QString& folder, const Progress::SyncProblem& problem )
+QTreeWidgetItem *ProtocolWidget::createProblemTreewidgetItem( const Progress::SyncProblem& problem)
{
- QStringList columns;
- QString timeStr = timeString(problem.timestamp);
- QString longTimeStr = timeString(problem.timestamp, QLocale::LongFormat);
-
- columns << timeStr;
- columns << problem.current_file;
- columns << folder;
- QString errMsg = problem.error_message;
-#if 0
- if( problem.error_code == 507 ) {
- errMsg = tr("No more storage space available on server.");
- }
-#endif
- columns << errMsg;
-
- QTreeWidgetItem *item = new QTreeWidgetItem(columns);
- item->setData(0, ErrorIndicatorRole, QVariant(true) );
- // Maybe we should not set the error icon for all problems but distinguish
- // by error_code. A quota problem is considered an error, others might not??
- if( problem.kind == Progress::SoftError ) {
- item->setIcon(0, Theme::instance()->syncStateIcon(SyncResult::Problem, true));
- } else {
- item->setIcon(0, Theme::instance()->syncStateIcon(SyncResult::Error, true));
- }
- item->setToolTip(0, longTimeStr);
- _ui->_treeWidget->insertTopLevelItem(0, item);
+ QStringList columns;
+ QString timeStr = timeString(problem.timestamp);
+ QString longTimeStr = timeString(problem.timestamp, QLocale::LongFormat);
+
+ columns << timeStr;
+ columns << problem.current_file;
+ columns << problem.folder;
+ QString errMsg = problem.error_message;
+ #if 0
+ if( problem.error_code == 507 ) {
+ errMsg = tr("No more storage space available on server.");
+ }
+ #endif
+ columns << errMsg;
+
+ QTreeWidgetItem *item = new QTreeWidgetItem(columns);
+ item->setData(0, ErrorIndicatorRole, QVariant(true) );
+ // Maybe we should not set the error icon for all problems but distinguish
+ // by error_code. A quota problem is considered an error, others might not??
+ if( problem.kind == Progress::SoftError ) {
+ item->setIcon(0, Theme::instance()->syncStateIcon(SyncResult::Problem, true));
+ } else {
+ item->setIcon(0, Theme::instance()->syncStateIcon(SyncResult::Error, true));
+ }
+ item->setToolTip(0, longTimeStr);
+ item->setToolTip(3, errMsg );
+
+ return item;
+}
+
+void ProtocolWidget::slotProgressProblem( const QString& folder, const Progress::SyncProblem& problem)
+{
+ Q_UNUSED(folder);
+ QTreeWidgetItem *item = createProblemTreewidgetItem(problem);
+ _ui->_treeWidget->insertTopLevelItem(0, item);
}
void ProtocolWidget::slotOpenFile( QTreeWidgetItem *item, int )
@@ -328,6 +217,25 @@ void ProtocolWidget::slotOpenFile( QTreeWidgetItem *item, int )
}
}
+QTreeWidgetItem* ProtocolWidget::createProgressTreewidgetItem( const Progress::Info& progress )
+{
+ QStringList columns;
+ QString timeStr = timeString(progress.timestamp);
+ QString longTimeStr = timeString(progress.timestamp, QLocale::LongFormat);
+
+ columns << timeStr;
+ columns << progress.current_file;
+ columns << progress.folder;
+ columns << Progress::asResultString(progress.kind);
+ columns << Utility::octetsToString( progress.file_size );
+
+ QTreeWidgetItem *item = new QTreeWidgetItem(columns);
+ item->setToolTip(0, longTimeStr);
+
+ return item;
+
+}
+
void ProtocolWidget::slotProgressInfo( const QString& folder, const Progress::Info& progress )
{
if( progress.kind == Progress::StartSync ) {
@@ -343,20 +251,10 @@ void ProtocolWidget::slotProgressInfo( const QString& folder, const Progress::In
return;
}
- QStringList columns;
- QString timeStr = timeString(progress.timestamp);
- QString longTimeStr = timeString(progress.timestamp, QLocale::LongFormat);
-
- columns << timeStr;
- columns << progress.current_file;
- columns << progress.folder;
- columns << Progress::asResultString(progress.kind);
- columns << Utility::octetsToString( progress.file_size );
-
- QTreeWidgetItem *item = new QTreeWidgetItem(columns);
- item->setToolTip(0, longTimeStr);
- _ui->_treeWidget->insertTopLevelItem(0, item);
- Q_UNUSED(item);
+ QTreeWidgetItem *item = createProgressTreewidgetItem(progress);
+ if(item) {
+ _ui->_treeWidget->insertTopLevelItem(0, item);
+ }
}
diff --git a/src/mirall/protocolwidget.h b/src/mirall/protocolwidget.h
index 9a931cd0a..39a65448e 100644
--- a/src/mirall/protocolwidget.h
+++ b/src/mirall/protocolwidget.h
@@ -38,13 +38,12 @@ public:
~ProtocolWidget();
void setupList();
- // void setSyncResult( const SyncResult& result );
signals:
public slots:
void slotProgressInfo( const QString& folder, const Progress::Info& progress );
- void slotProgressProblem( const QString& folder, const Progress::SyncProblem& problem );
+ void slotProgressProblem(const QString& folder, const Progress::SyncProblem& problem );
void slotOpenFile( QTreeWidgetItem* item, int );
protected slots:
@@ -56,6 +55,9 @@ signals:
private:
void setSyncResultStatus(const SyncResult& result );
void cleanErrors( const QString& folder );
+ QTreeWidgetItem* createProgressTreewidgetItem(const Progress::Info& progress );
+ QTreeWidgetItem* createProblemTreewidgetItem( const Progress::SyncProblem& problem);
+
QString timeString(QDateTime dt, QLocale::FormatType format = QLocale::NarrowFormat) const;
const int ErrorIndicatorRole;