mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-24 05:15:40 +03:00
Reworked progress again following mirall bug #137
This commit is contained in:
parent
85d810d2cf
commit
274f59f93b
5 changed files with 94 additions and 170 deletions
|
@ -479,8 +479,8 @@ void AccountSettings::slotSetOverallProgress( const QString& folder, const QStri
|
|||
item->setData( fileNo, FolderStatusDelegate::OverallFileNo);
|
||||
item->setData( fileCnt, FolderStatusDelegate::OverallFileCount);
|
||||
item->setData( file, FolderStatusDelegate::OverallCurrentFile);
|
||||
|
||||
}
|
||||
_lastOverallProgress = p1;
|
||||
}
|
||||
|
||||
void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folder, const QString& file, long p1, long p2 )
|
||||
|
@ -489,70 +489,72 @@ void AccountSettings::slotSetProgress( Progress::Kind kind, const QString& folde
|
|||
|
||||
QStandardItem *item = itemForFolder( folder );
|
||||
|
||||
if( item ) {
|
||||
if( p1 == p2 ) { // File upload finished.
|
||||
item->setData( 100, FolderStatusDelegate::SyncProgressPercent1);
|
||||
item->setData( 100, FolderStatusDelegate::SyncProgressPercent2);
|
||||
if( p1 == 0 ) {
|
||||
item->setData( (qlonglong) _lastSyncProgress, FolderStatusDelegate::SyncProgressBytes1);
|
||||
item->setData( (qlonglong) _lastSyncProgress, FolderStatusDelegate::SyncProgressBytes2);
|
||||
} else {
|
||||
item->setData( (qlonglong) p1, FolderStatusDelegate::SyncProgressBytes1);
|
||||
item->setData( (qlonglong) p2, FolderStatusDelegate::SyncProgressBytes2);
|
||||
}
|
||||
// item->setData( QVariant(QString::null), FolderStatusDelegate::SyncFileName );
|
||||
if( item == NULL ) {
|
||||
return;
|
||||
}
|
||||
// Set the verb if up- or download
|
||||
if( kind != Progress::Context ) {
|
||||
_kindContext = Progress::asString(kind);
|
||||
}
|
||||
QString kindString = _kindContext;
|
||||
item->setData( kindString, FolderStatusDelegate::SyncFileKind );
|
||||
|
||||
// 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;
|
||||
connect(timer, SIGNAL(timeout()), this, SLOT(slotHideProgress()));
|
||||
timer->setSingleShot(true);
|
||||
_hideProgressTimers.insert(item, timer);
|
||||
}
|
||||
timer->start(5000);
|
||||
} else if( p1 == 0 ) { // File upload starts.
|
||||
if( _hideProgressTimers.contains(item) ) {
|
||||
// The timer is still running.
|
||||
QTimer *t = _hideProgressTimers.take(item);
|
||||
t->stop();
|
||||
t->deleteLater();
|
||||
}
|
||||
// calculate the normalization factor and set the min and max
|
||||
// _progressFactor = 100.0/p2;
|
||||
item->setData( QVariant(true), FolderStatusDelegate::AddProgressSpace );
|
||||
item->setData( 0, FolderStatusDelegate::SyncProgressPercent1);
|
||||
item->setData( 100, FolderStatusDelegate::SyncProgressPercent2);
|
||||
item->setData( (qlonglong) 0, FolderStatusDelegate::SyncProgressBytes1);
|
||||
item->setData( (qlonglong) p2, FolderStatusDelegate::SyncProgressBytes2);
|
||||
|
||||
// strip off the server prefix from the file name
|
||||
QString shortFile(file);
|
||||
if(shortFile.startsWith(QLatin1String("ownclouds://")) ||
|
||||
shortFile.startsWith(QLatin1String("owncloud://")) ) {
|
||||
// rip off the whole ownCloud URL.
|
||||
Folder *f = FolderMan::instance()->folder(folder);
|
||||
if( f ) {
|
||||
QString regexp = QString("^owncloud[s]*://.*/remote.php/webdav/%1/").arg(f->secondPath());
|
||||
QRegExp re( regexp );
|
||||
re.setMinimal(true);
|
||||
shortFile.remove(re);
|
||||
}
|
||||
}
|
||||
// Set the verb if up- or download
|
||||
QString kindString = Progress::asString(kind);
|
||||
|
||||
shortFile = kindString + QLatin1String(" ") + shortFile;
|
||||
item->setData( shortFile, FolderStatusDelegate::SyncFileName );
|
||||
} else { // File progress
|
||||
// item->setData( int(_progressFactor * p1), FolderStatusDelegate::SyncProgressPercent1);
|
||||
item->setData( (qlonglong) p1, FolderStatusDelegate::SyncProgressBytes1);
|
||||
_lastSyncProgress = p1;
|
||||
if( kind == Progress::EndDownload ||
|
||||
kind == Progress::EndUpload ) { // File upload/download finished.
|
||||
item->setData( 100, FolderStatusDelegate::SyncProgressPercent1);
|
||||
item->setData( 100, FolderStatusDelegate::SyncProgressPercent2);
|
||||
item->setData( (qlonglong) _lastSyncProgress, FolderStatusDelegate::SyncProgressBytes1);
|
||||
item->setData( (qlonglong) _lastSyncProgress, FolderStatusDelegate::SyncProgressBytes2);
|
||||
item->setData( tr("Finished"), FolderStatusDelegate::SyncFileProgressString);
|
||||
|
||||
// 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;
|
||||
connect(timer, SIGNAL(timeout()), this, SLOT(slotHideProgress()));
|
||||
timer->setSingleShot(true);
|
||||
_hideProgressTimers.insert(item, timer);
|
||||
}
|
||||
timer->start(5000);
|
||||
} else if( kind == Progress::StartDownload ||
|
||||
kind == Progress::StartUpload ) { // File upload starts.
|
||||
if( _hideProgressTimers.contains(item) ) {
|
||||
// The timer is still running.
|
||||
QTimer *t = _hideProgressTimers.take(item);
|
||||
t->stop();
|
||||
t->deleteLater();
|
||||
}
|
||||
item->setData( QVariant(true), FolderStatusDelegate::AddProgressSpace );
|
||||
item->setData( 0, FolderStatusDelegate::SyncProgressPercent1);
|
||||
item->setData( 100, FolderStatusDelegate::SyncProgressPercent2);
|
||||
item->setData( (qlonglong) 0, FolderStatusDelegate::SyncProgressBytes1);
|
||||
item->setData( (qlonglong) p2, FolderStatusDelegate::SyncProgressBytes2);
|
||||
|
||||
// strip off the server prefix from the file name
|
||||
QString shortFile(file);
|
||||
if(shortFile.startsWith(QLatin1String("ownclouds://")) ||
|
||||
shortFile.startsWith(QLatin1String("owncloud://")) ) {
|
||||
// rip off the whole ownCloud URL.
|
||||
Folder *f = FolderMan::instance()->folder(folder);
|
||||
if( f ) {
|
||||
QString regexp = QString("^owncloud[s]*://.*/remote.php/webdav/%1/").arg(f->secondPath());
|
||||
QRegExp re( regexp );
|
||||
re.setMinimal(true);
|
||||
shortFile.remove(re);
|
||||
}
|
||||
}
|
||||
item->setData( shortFile, FolderStatusDelegate::SyncFileName );
|
||||
item->setData( tr("Start"), FolderStatusDelegate::SyncFileProgressString);
|
||||
} else { // File progress
|
||||
item->setData( (qlonglong) p1, FolderStatusDelegate::SyncProgressBytes1);
|
||||
item->setData( (qlonglong) p2, FolderStatusDelegate::SyncProgressBytes2);
|
||||
item->setData( (qlonglong) _lastOverallProgress+p1, FolderStatusDelegate::OverallProgress1 );
|
||||
item->setData( tr("Currently"), FolderStatusDelegate::SyncFileProgressString);
|
||||
|
||||
_lastSyncProgress = p1;
|
||||
}
|
||||
|
||||
ui->_folderList->repaint();
|
||||
|
|
|
@ -97,6 +97,8 @@ private:
|
|||
QHash<QStandardItem*, QTimer*> _hideProgressTimers;
|
||||
QTimer *_timer;
|
||||
long _lastSyncProgress;
|
||||
QString _kindContext;
|
||||
qlonglong _lastOverallProgress;
|
||||
};
|
||||
|
||||
} // namespace Mirall
|
||||
|
|
|
@ -635,19 +635,7 @@ void Folder::slotCSyncFinished()
|
|||
|
||||
void Folder::slotFileTransmissionProgress(Progress::Kind kind, const QString& file ,long p1, long p2)
|
||||
{
|
||||
if( kind == Progress::StartDownload ) {
|
||||
_progressKind = Progress::Download;
|
||||
}
|
||||
if( kind == Progress::StartUpload ) {
|
||||
_progressKind = Progress::Upload;
|
||||
}
|
||||
|
||||
// qDebug() << "Upload Progress: " << file << p1 << p2;
|
||||
ProgressDispatcher::instance()->setFolderProgress( _progressKind, alias(), file, p1, p2 );
|
||||
|
||||
if( kind == Progress::EndDownload || kind == Progress::EndUpload ) {
|
||||
_progressKind = Progress::Inactive;
|
||||
}
|
||||
ProgressDispatcher::instance()->setFolderProgress( kind, alias(), file, p1, p2 );
|
||||
}
|
||||
|
||||
void Folder::slotOverallTransmissionProgress( const QString& fileName, int fileNo, int fileCnt,
|
||||
|
|
|
@ -113,23 +113,24 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
|
|||
|
||||
QFontMetrics subFm( subFont );
|
||||
QFontMetrics aliasFm( aliasFont );
|
||||
QFontMetrics progressFm( progressFont );
|
||||
|
||||
int aliasMargin = aliasFm.height()/2;
|
||||
int margin = subFm.height()/4;
|
||||
|
||||
QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIconRole));
|
||||
QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole));
|
||||
QString pathText = qvariant_cast<QString>(index.data(FolderPathRole));
|
||||
QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole));
|
||||
QString errorText = qvariant_cast<QString>(index.data(FolderErrorMsg));
|
||||
QString syncFile = qvariant_cast<QString>(index.data(SyncFileName));
|
||||
int progressPercent1 = qvariant_cast<int>(index.data(SyncProgressPercent1));
|
||||
int progressPercent2 = qvariant_cast<int>(index.data(SyncProgressPercent2));
|
||||
qlonglong fileBytes1 = qvariant_cast<qlonglong>(index.data(SyncProgressBytes1));
|
||||
qlonglong fileBytes2 = qvariant_cast<qlonglong>(index.data(SyncProgressBytes2));
|
||||
QIcon statusIcon = qvariant_cast<QIcon>(index.data(FolderStatusIconRole));
|
||||
QString aliasText = qvariant_cast<QString>(index.data(FolderAliasRole));
|
||||
QString pathText = qvariant_cast<QString>(index.data(FolderPathRole));
|
||||
QString remotePath = qvariant_cast<QString>(index.data(FolderSecondPathRole));
|
||||
QString errorText = qvariant_cast<QString>(index.data(FolderErrorMsg));
|
||||
QString syncFile = qvariant_cast<QString>(index.data(SyncFileName));
|
||||
QString syncFileKind = qvariant_cast<QString>(index.data(SyncFileKind));
|
||||
QString syncFileProgress = qvariant_cast<QString>(index.data(SyncFileProgressString));
|
||||
qlonglong fileBytes1 = qvariant_cast<qlonglong>(index.data(SyncProgressBytes1));
|
||||
qlonglong fileBytes2 = qvariant_cast<qlonglong>(index.data(SyncProgressBytes2));
|
||||
|
||||
qlonglong overallBytes1 = qvariant_cast<qlonglong>(index.data(OverallProgress1));
|
||||
qlonglong overallBytes2 = qvariant_cast<qlonglong>(index.data(OverallProgress2));
|
||||
qlonglong overallBytes1 = qvariant_cast<qlonglong>(index.data(OverallProgress1));
|
||||
qlonglong overallBytes2 = qvariant_cast<qlonglong>(index.data(OverallProgress2));
|
||||
int currentFileCount = qvariant_cast<int>(index.data(OverallFileNo));
|
||||
int overallFileCount = qvariant_cast<int>(index.data(OverallFileCount));
|
||||
|
||||
|
@ -233,31 +234,30 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
|
|||
}
|
||||
h += aliasMargin;
|
||||
|
||||
// Sync File Progress Bar: Show it if syncFile is not empty.
|
||||
if( !syncFile.isEmpty()) {
|
||||
int fileNameTextHeight = subFm.boundingRect(tr("File")).height();
|
||||
int barHeight = fileNameTextHeight;
|
||||
int overallWidth = option.rect.width()-2*aliasMargin;
|
||||
|
||||
painter->save();
|
||||
// painter->setBrush( option.palette.brightText() );
|
||||
// painter->drawRoundedRect( progressRect, 2, 2 ); // do not draw the box.
|
||||
|
||||
// Sizes-Text
|
||||
QString s1 = Utility::octetsToString( overallBytes1+fileBytes1 );
|
||||
QString s1 = Utility::octetsToString( overallBytes1 );
|
||||
QString s2 = Utility::octetsToString( overallBytes2 );
|
||||
QString overallSyncString = tr("%1 of %2, file %3 of %4").arg(s1).arg(s2).arg(currentFileCount).arg(overallFileCount);
|
||||
|
||||
QRect octetRect = subFm.boundingRect( overallSyncString );
|
||||
int progressTextWidth = octetRect.width();
|
||||
|
||||
// Overall Bar.
|
||||
// Overall Progress Bar.
|
||||
QRect pBRect;
|
||||
pBRect.setTop( h );
|
||||
pBRect.setLeft( iconRect.left());
|
||||
pBRect.setHeight(barHeight);
|
||||
pBRect.setWidth( overallWidth - progressTextWidth - margin );
|
||||
|
||||
int overallPercent = (overallBytes1+fileBytes1) *100.0/overallBytes2;
|
||||
int overallPercent = (overallBytes1) *100.0/overallBytes2;
|
||||
QStyleOptionProgressBarV2 pBarOpt;
|
||||
pBarOpt.state = option.state | QStyle::State_Horizontal;
|
||||
pBarOpt.minimum = 0;
|
||||
|
@ -278,93 +278,23 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
|
|||
painter->setFont(progressFont);
|
||||
painter->drawText( overallProgressRect, Qt::AlignRight+Qt::AlignVCenter, overallSyncString);
|
||||
|
||||
s1 = Utility::octetsToString( fileBytes2);
|
||||
octetRect = subFm.boundingRect( tr("%1 of %2").arg(s1).arg(s1) );
|
||||
progressTextWidth = octetRect.width()+20;
|
||||
// Individual File Progress
|
||||
s1 = Utility::octetsToString( fileBytes1);
|
||||
s2 = Utility::octetsToString( fileBytes2);
|
||||
|
||||
QRect fileRect;
|
||||
fileRect.setTop( pBRect.bottom() + margin);
|
||||
fileRect.setLeft( iconRect.left());
|
||||
fileRect.setWidth( overallWidth - margin - progressTextWidth );
|
||||
fileRect.setWidth(overallWidth);
|
||||
fileRect.setHeight(fileNameTextHeight);
|
||||
painter->drawText( fileRect, syncFile );
|
||||
|
||||
QRect fileProgressRect;
|
||||
fileProgressRect.setTop(pBRect.bottom()+margin);
|
||||
fileProgressRect.setLeft(fileRect.right()+margin);
|
||||
fileProgressRect.setWidth(progressTextWidth);
|
||||
fileProgressRect.setHeight(fileNameTextHeight);
|
||||
s1 = Utility::octetsToString(fileBytes1);
|
||||
s2 = Utility::octetsToString(fileBytes2);
|
||||
QString fileProgressString = tr("%1 of %2").arg(s1).arg(s2);
|
||||
painter->drawText( fileProgressRect, Qt::AlignRight+Qt::AlignVCenter, fileProgressString );
|
||||
}
|
||||
#if 0
|
||||
/* Display the sync progress. */
|
||||
if( !syncFile.isEmpty() ) {
|
||||
int fileNameTextHeight = subFm.boundingRect(tr("File")).height();
|
||||
int barHeight = fileNameTextHeight;
|
||||
QString fileProgressString = tr("%1 %2 %3 (%4 of %5)").arg(syncFileProgress).arg(syncFileKind).arg(syncFile).arg(s1).arg(s2);
|
||||
QString elidedProgress = progressFm.elidedText(fileProgressString, Qt::ElideLeft, fileRect.width());
|
||||
painter->drawText( fileRect, Qt::AlignLeft+Qt::AlignVCenter, elidedProgress);
|
||||
|
||||
QRect progressRect;
|
||||
progressRect.setLeft( iconRect.left());
|
||||
progressRect.setTop( localPathRect.bottom()+margin );
|
||||
progressRect.setHeight( 3 * margin + fileNameTextHeight + barHeight );
|
||||
progressRect.setRight( option.rect.right()-aliasMargin);
|
||||
|
||||
painter->save();
|
||||
// painter->setBrush( option.palette.brightText() );
|
||||
// painter->drawRoundedRect( progressRect, 2, 2 ); // do not draw the box.
|
||||
|
||||
painter->setFont(progressFont);
|
||||
|
||||
QRect fileNameRect;
|
||||
fileNameRect.setTop(progressRect.top() + margin);
|
||||
fileNameRect.setLeft(progressRect.left() + margin);
|
||||
fileNameRect.setWidth( progressRect.width() - 2*margin );
|
||||
fileNameRect.setHeight(fileNameTextHeight);
|
||||
|
||||
QString pText = subFm.elidedText( tr("File %1: ").arg(syncFile), Qt::ElideLeft, fileNameRect.width());
|
||||
painter->drawText(fileNameRect, pText);
|
||||
|
||||
// Sizes-Text
|
||||
QString s1 = Utility::octetsToString( progressBytes2 );
|
||||
QRect octetRect = subFm.boundingRect( tr("%1 of %2").arg(s1).arg(s1) );
|
||||
int progressTextWidth = octetRect.width()+20;
|
||||
|
||||
QRect pBRect;
|
||||
pBRect.setTop( fileNameRect.bottom() + margin );
|
||||
pBRect.setLeft( fileNameRect.left());
|
||||
pBRect.setHeight(barHeight);
|
||||
pBRect.setWidth( fileNameRect.width() - progressTextWidth - margin );
|
||||
|
||||
QStyleOptionProgressBarV2 pBarOpt;
|
||||
pBarOpt.state = option.state | QStyle::State_Horizontal;
|
||||
pBarOpt.minimum = 0;
|
||||
pBarOpt.maximum = progressPercent2;
|
||||
pBarOpt.progress = progressPercent1;
|
||||
pBarOpt.orientation = Qt::Horizontal;
|
||||
pBarOpt.palette = option.palette;
|
||||
pBarOpt.rect = pBRect;
|
||||
|
||||
QApplication::style()->drawControl( QStyle::CE_ProgressBar, &pBarOpt, painter );
|
||||
|
||||
QRect sizeRect;
|
||||
sizeRect.setTop(pBRect.top());
|
||||
sizeRect.setHeight(pBRect.height());
|
||||
|
||||
sizeRect.setLeft(pBRect.right() + margin);
|
||||
sizeRect.setWidth( progressTextWidth );
|
||||
QString ps1 = Utility::octetsToString( progressBytes1 );
|
||||
QString ps2 = Utility::octetsToString( progressBytes2 );
|
||||
|
||||
painter->drawText(sizeRect, tr("%1 of %2").arg(ps1).arg(ps2));
|
||||
painter->restore();
|
||||
|
||||
}
|
||||
#endif
|
||||
// painter->drawText(lastSyncRect, tr("Last Sync: %1").arg( statusText ));
|
||||
// painter->drawText(statusRect, tr("Sync Status: %1").arg( syncStatus ));
|
||||
painter->restore();
|
||||
|
||||
}
|
||||
|
||||
bool FolderStatusDelegate::editorEvent ( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index )
|
||||
|
|
|
@ -45,6 +45,8 @@ class FolderStatusDelegate : public QStyledItemDelegate
|
|||
FolderSyncEnabled,
|
||||
FolderStatusIconRole,
|
||||
SyncFileName,
|
||||
SyncFileKind,
|
||||
SyncFileProgressString, // stuff like Currently ... or Finished...
|
||||
SyncProgressPercent1,
|
||||
SyncProgressPercent2,
|
||||
SyncProgressBytes1,
|
||||
|
|
Loading…
Reference in a new issue