[Pkg-owncloud-commits] [owncloud-client] 23/498: Account settings: add the progress back on the new ui
Sandro Knauß
hefee-guest at moszumanska.debian.org
Tue Aug 11 14:48:29 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 85ff245aef4c57482555413d8d0737978f5650af
Author: Olivier Goffart <ogoffart at woboq.com>
Date: Thu Apr 9 12:06:47 2015 +0200
Account settings: add the progress back on the new ui
---
src/gui/accountsettings.cpp | 189 ++++++++++--------------------------------
src/gui/accountsettings.h | 6 --
src/gui/folderstatusmodel.cpp | 10 +++
src/gui/folderstatusmodel.h | 12 ++-
4 files changed, 66 insertions(+), 151 deletions(-)
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp
index 5eab1b0..7fb0ed3 100644
--- a/src/gui/accountsettings.cpp
+++ b/src/gui/accountsettings.cpp
@@ -232,70 +232,6 @@ void AccountSettings::setGeneralErrors( const QStringList& errors )
}
}
-void AccountSettings::folderToModelItem( QStandardItem *item, Folder *f, bool accountConnected )
-{
- if( ! item || !f ) return;
-
- item->setData( f->nativePath(), FolderStatusDelegate::FolderPathRole );
- item->setData( f->remotePath(), FolderStatusDelegate::FolderSecondPathRole );
- item->setData( f->alias(), FolderStatusDelegate::FolderAliasRole );
- item->setData( f->syncPaused(), FolderStatusDelegate::FolderSyncPaused );
- item->setData( accountConnected, FolderStatusDelegate::FolderAccountConnected );
- SyncResult res = f->syncResult();
- SyncResult::Status status = res.status();
-
- QStringList errorList = res.errorStrings();
-
- Theme *theme = Theme::instance();
- item->setData( theme->statusHeaderText( status ), Qt::ToolTipRole );
- if ( accountConnected ) {
- if( f->syncPaused() ) {
- item->setData( theme->folderDisabledIcon( ), FolderStatusDelegate::FolderStatusIconRole ); // size 48 before
- _wasDisabledBefore = false;
- } else {
- if( status == SyncResult::SyncPrepare ) {
- if( _wasDisabledBefore ) {
- // if the folder was disabled before, set the sync icon
- item->setData( theme->syncStateIcon( SyncResult::SyncRunning), FolderStatusDelegate::FolderStatusIconRole );
- } // we keep the previous icon for the SyncPrepare state.
- } else if( status == SyncResult::Undefined ) {
- // startup, the sync was never done.
- qDebug() << "XXX FIRST time sync, setting icon to sync running!";
- item->setData( theme->syncStateIcon( SyncResult::SyncRunning), FolderStatusDelegate::FolderStatusIconRole );
- } else {
- // kepp the previous icon for the prepare phase.
- if( status == SyncResult::Problem) {
- item->setData( theme->syncStateIcon( SyncResult::Success), FolderStatusDelegate::FolderStatusIconRole );
- } else {
- item->setData( theme->syncStateIcon( status ), FolderStatusDelegate::FolderStatusIconRole );
- }
- }
- }
- } else {
- item->setData( theme->folderOfflineIcon(), FolderStatusDelegate::FolderStatusIconRole);
- }
-
- item->setData( theme->statusHeaderText( status ), FolderStatusDelegate::FolderStatus );
-
- if( errorList.isEmpty() ) {
- if( (status == SyncResult::Error ||
- status == SyncResult::SetupError ||
- status == SyncResult::SyncAbortRequested )) {
- errorList << theme->statusHeaderText(status);
- }
- }
-
- item->setData( errorList, FolderStatusDelegate::FolderErrorMsg);
-
- bool ongoing = false;
- item->setData( QVariant(res.warnCount()), FolderStatusDelegate::WarningCount );
- if( status == SyncResult::SyncRunning ) {
- ongoing = true;
- }
- item->setData( ongoing, FolderStatusDelegate::SyncRunning);
-
-}
-
void AccountSettings::slotRemoveCurrentFolder()
{
QModelIndex selected = ui->_folderList->selectionModel()->currentIndex();
@@ -452,27 +388,13 @@ void AccountSettings::slotSyncCurrentFolderNow()
void AccountSettings::slotUpdateFolderState( Folder *folder )
{
- QStandardItem *item = 0;
- int row = 0;
-
if( ! folder ) return;
-#if 0
- item = _model->item( row );
- while( item ) {
- if( item->data( FolderStatusDelegate::FolderAliasRole ) == folder->alias() ) {
- // its the item to update!
- break;
- }
- item = _model->item( ++row );
- }
-
- if( item ) {
- folderToModelItem( item, folder, _accountState->isConnectedOrMaintenance() );
- } else {
- // the dialog is not visible.
- }
-#endif
+ auto folderList = FolderMan::instance()->map().values();
+ auto folderIndex = folderList.indexOf(folder);
+ if (folderIndex < 0) { return; }
+ emit _model->dataChanged(_model->index(folderIndex), _model->index(folderIndex),
+ QVector<int>() << FolderStatusDelegate::AddProgressSpace);
}
void AccountSettings::slotOpenOC()
@@ -481,11 +403,6 @@ void AccountSettings::slotOpenOC()
QDesktopServices::openUrl( _OCUrl );
}
-QStandardItem* AccountSettings::itemForFolder(const QString& folder)
-{
- return nullptr;
-}
-
QString AccountSettings::shortenFilename( const QString& folder, const QString& file ) const
{
// strip off the server prefix from the file name
@@ -508,26 +425,35 @@ QString AccountSettings::shortenFilename( const QString& folder, const QString&
void AccountSettings::slotSetProgress(const QString& folder, const Progress::Info &progress )
{
-#if 0
if (!isVisible()) {
return; // for https://github.com/owncloud/client/issues/2648#issuecomment-71377909
}
- QStandardItem *item = itemForFolder( folder );
- if( !item ) return;
- // switch on extra space.
- item->setData( QVariant(true), FolderStatusDelegate::AddProgressSpace );
+ Folder *f = FolderMan::instance()->folder(folder);
+ if( !f ) { return; }
+
+ auto folderList = FolderMan::instance()->map().values();
+ auto folderIndex = folderList.indexOf(f);
+ if (folderIndex < 0) { return; }
+
+ if (_model->_progresses.size() <= folderIndex) {
+ _model->_progresses.resize(folderIndex + 1);
+ }
+ FolderStatusModel::ProgressInfo *progressInfo = &_model->_progresses[folderIndex];
+
+ QVector<int> roles;
+ roles << FolderStatusDelegate::AddProgressSpace << FolderStatusDelegate::SyncProgressItemString
+ << FolderStatusDelegate::WarningCount;
if (!progress._currentDiscoveredFolder.isEmpty()) {
- item->setData( tr("Discovering '%1'").arg(progress._currentDiscoveredFolder) , FolderStatusDelegate::SyncProgressItemString );
+ progressInfo->_progressString = tr("Discovering '%1'").arg(progress._currentDiscoveredFolder);
+ emit _model->dataChanged(_model->index(folderIndex), _model->index(folderIndex), roles);
return;
}
if(!progress._lastCompletedItem.isEmpty()
&& Progress::isWarningKind(progress._lastCompletedItem._status)) {
- int warnCount = item->data(FolderStatusDelegate::WarningCount).toInt();
- warnCount++;
- item->setData( QVariant(warnCount), FolderStatusDelegate::WarningCount );
+ progressInfo->_warningCount++;
}
// find the single item to display: This is going to be the bigger item, or the last completed
@@ -571,7 +497,7 @@ void AccountSettings::slotSetProgress(const QString& folder, const Progress::Inf
//: Example text: "uploading foobar.png"
fileProgressString = tr("%1 %2").arg(kindString, itemFileName);
}
- item->setData( fileProgressString,FolderStatusDelegate::SyncProgressItemString);
+ progressInfo->_progressString = fileProgressString;
// overall progress
quint64 completedSize = progress.completedSize();
@@ -593,81 +519,56 @@ void AccountSettings::slotSetProgress(const QString& folder, const Progress::Inf
overallSyncString = tr("file %1 of %2") .arg(currentFile).arg(totalFileCount);
}
- item->setData( overallSyncString, FolderStatusDelegate::SyncProgressOverallString );
+ progressInfo->_overallSyncString = overallSyncString;
int overallPercent = 0;
if( totalFileCount > 0 ) {
// Add one 'byte' for each files so the percentage is moving when deleting or renaming files
overallPercent = qRound(double(completedSize + progress._completedFileCount)/double(totalSize + totalFileCount) * 100.0);
}
- overallPercent = qBound(0, overallPercent, 100);
- item->setData( overallPercent, FolderStatusDelegate::SyncProgressOverallPercent);
-#endif
+ progressInfo->_overallPercent = qBound(0, overallPercent, 100);
+ emit _model->dataChanged(_model->index(folderIndex), _model->index(folderIndex), roles);
}
void AccountSettings::slotHideProgress()
{
-#if 0
- QTimer *send_timer = qobject_cast<QTimer*>(this->sender());
- QHash<QStandardItem*, QTimer*>::const_iterator i = _hideProgressTimers.constBegin();
- while (i != _hideProgressTimers.constEnd()) {
- if( i.value() == send_timer ) {
- QStandardItem *item = i.key();
-
- /* Check if this item is still existing */
- bool ok = false;
- for( int r = 0; !ok && r < _model->rowCount(); r++) {
- if( item == _model->item(r,0) ) {
- ok = true;
- }
- }
+ auto folderIndex = sender()->property("owncloud_folderIndex").toInt();
+ if (folderIndex < 0) { return; }
- if( ok ) {
- item->setData( false, FolderStatusDelegate::AddProgressSpace );
- item->setData( QString(), FolderStatusDelegate::SyncProgressOverallString );
- item->setData( QString(), FolderStatusDelegate::SyncProgressItemString );
- item->setData( 0, FolderStatusDelegate::SyncProgressOverallPercent );
- }
- _hideProgressTimers.remove(item);
- break;
- }
- ++i;
+ if (_model->_progresses.size() <= folderIndex) {
+ return;
}
- send_timer->deleteLater();
-#endif
+ _model->_progresses[folderIndex] = FolderStatusModel::ProgressInfo();
+ emit _model->dataChanged(_model->index(folderIndex), _model->index(folderIndex),
+ QVector<int>() << FolderStatusDelegate::AddProgressSpace);
}
void AccountSettings::slotFolderSyncStateChange()
{
-#if 0
Folder* folder = qobject_cast<Folder *>(sender());
if (!folder) return;
-
- QStandardItem *item = itemForFolder( folder->alias() );
- if( !item ) return;
+ auto folderList = FolderMan::instance()->map().values();
+ auto folderIndex = folderList.indexOf(folder);
+ if (folderIndex < 0) { return; }
SyncResult::Status state = folder->syncResult().status();
if (state == SyncResult::SyncPrepare) {
- item->setData( QVariant(0), FolderStatusDelegate::WarningCount );
+ if (_model->_progresses.size() > folderIndex) {
+ _model->_progresses[folderIndex] = FolderStatusModel::ProgressInfo();
+ }
} else if (state == SyncResult::Success || state == SyncResult::Problem) {
// start a timer to stop the progress display
QTimer *timer;
- if( _hideProgressTimers.contains(item) ) {
- timer = _hideProgressTimers[item];
- // there is already one timer running.
- } else {
- timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(slotHideProgress()));
- timer->setSingleShot(true);
- _hideProgressTimers.insert(item, timer);
- }
+ timer = new QTimer(this);
+ connect(timer, SIGNAL(timeout()), this, SLOT(slotHideProgress()));
+ connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()));
+ timer->setSingleShot(true);
+ timer->setProperty("owncloud_folderIndex", folderIndex);
timer->start(5000);
}
-#endif
}
-
void AccountSettings::slotUpdateQuota(qint64 total, qint64 used)
{
if( total > 0 ) {
diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h
index da0132b..111a5b5 100644
--- a/src/gui/accountsettings.h
+++ b/src/gui/accountsettings.h
@@ -19,14 +19,11 @@
#include <QPointer>
#include <QHash>
#include <QTimer>
-#include <QStandardItem>
#include "folder.h"
#include "progressdispatcher.h"
-class QStandardItemModel;
class QModelIndex;
-class QStandardItem;
class QNetworkReply;
class QListWidgetItem;
class QLabel;
@@ -83,15 +80,12 @@ protected slots:
private:
QString shortenFilename( const QString& folder, const QString& file ) const;
- void folderToModelItem(QStandardItem *, Folder * , bool accountConnected);
- QStandardItem* itemForFolder(const QString& );
void showConnectionLabel( const QString& message, const QString& tooltip = QString() );
Ui::AccountSettings *ui;
FolderStatusModel *_model;
QUrl _OCUrl;
- QHash<QStandardItem*, QTimer*> _hideProgressTimers;
QStringList _generalErrors;
bool _wasDisabledBefore;
AccountState *_accountState;
diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp
index 04a0e6a..e27c98c 100644
--- a/src/gui/folderstatusmodel.cpp
+++ b/src/gui/folderstatusmodel.cpp
@@ -131,6 +131,16 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
} else {
return Theme::instance()->folderOfflineIcon();
}
+ case FolderStatusDelegate::AddProgressSpace:
+ return !_progresses.value(index.row()).isNull();
+ case FolderStatusDelegate::SyncProgressItemString:
+ return _progresses.value(index.row())._progressString;
+ case FolderStatusDelegate::WarningCount:
+ return _progresses.value(index.row())._warningCount;
+ case FolderStatusDelegate::SyncProgressOverallPercent:
+ return _progresses.value(index.row())._overallPercent;
+ case FolderStatusDelegate::SyncProgressOverallString:
+ return _progresses.value(index.row())._overallSyncString;
}
return QVariant();
}
diff --git a/src/gui/folderstatusmodel.h b/src/gui/folderstatusmodel.h
index 2e1709b..e8945b2 100644
--- a/src/gui/folderstatusmodel.h
+++ b/src/gui/folderstatusmodel.h
@@ -48,7 +48,6 @@ public:
struct SubFolderInfo {
-// QWeakPointer<SubFolderInfo> parent;
QString _name;
QString _path;
QVector<int> _pathIdx;
@@ -68,6 +67,17 @@ public:
bool isDirty() { return _dirty; }
+ struct ProgressInfo {
+ bool isNull() const
+ { return _progressString.isEmpty() && _warningCount == 0 && _overallSyncString.isEmpty(); }
+ QString _progressString;
+ QString _overallSyncString;
+ int _warningCount = 0;
+ int _overallPercent = 0;
+ };
+ QVector<ProgressInfo> _progresses;
+
+
public slots:
void slotApplySelectiveSync();
void resetFolders();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list