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
").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 progressList = ProgressDispatcher::instance()->recentChangedItems(0); // All.
+ QList items;
+ QTreeWidgetItem *item;
- QHash folderHash;
-
- foreach( Progress::Info info, progressList ) {
- slotProgressInfo( info.folder, info );
- folderHash[info.folder] = 1;
- }
+ _ui->_treeWidget->clear();
QList 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);
+ 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;
+ 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);
- _ui->_treeWidget->insertTopLevelItem(0, item);
+ 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;