diff --git a/retroshare-gui/src/gui/DLListDelegate.cpp b/retroshare-gui/src/gui/DLListDelegate.cpp index 1d821d9b7..63f79bb71 100644 --- a/retroshare-gui/src/gui/DLListDelegate.cpp +++ b/retroshare-gui/src/gui/DLListDelegate.cpp @@ -53,6 +53,7 @@ void DLListDelegate::paint(QPainter * painter, const QStyleOptionViewItem & opti qlonglong remaining; QString temp , status; qlonglong completed; + qlonglong downloadtime; //set text color QVariant value = index.data(Qt::TextColorRole); @@ -102,23 +103,22 @@ void DLListDelegate::paint(QPainter * painter, const QStyleOptionViewItem & opti break; case REMAINING: remaining = index.data().toLongLong(); - minutes = remaining / 60; - seconds = remaining % 60; - hours = minutes / 60; - minutes = minutes % 60 ; - days = hours / 24; - hours = hours % 24 ; - if(days > 0) { - temp = QString::number(days)+"d "+QString::number(hours)+"h" ; - } else if(hours > 0 || days > 0) { - temp = QString::number(hours)+"h "+QString::number(minutes)+"m" ; - } else if(minutes > 0 || hours > 0) { - temp = QString::number(minutes)+"m"+QString::number(seconds)+"s" ; - } else if(seconds > 0) { - temp = QString::number(seconds)+"s" ; - } else - temp = "" ; - painter->drawText(option.rect, Qt::AlignCenter, temp); + if(remaining <= 0){ + temp = ""; + } else { + multi = 1.0; + for(int i = 0; i < 5; ++i) { + if (remaining < 1024) { + remaining = index.data().toLongLong(); + temp.sprintf("%.2f ", remaining / multi); + temp += byteUnits[i]; + break; + } + remaining /= 1024; + multi *= 1024.0; + } + } + painter->drawText(option.rect, Qt::AlignRight, temp); break; case COMPLETED: completed = index.data().toLongLong(); @@ -179,6 +179,26 @@ void DLListDelegate::paint(QPainter * painter, const QStyleOptionViewItem & opti } painter->drawText(option.rect, Qt::AlignCenter, newopt.text); break; + case DOWNLOADTIME: + downloadtime = index.data().toLongLong(); + minutes = downloadtime / 60; + seconds = downloadtime % 60; + hours = minutes / 60; + minutes = minutes % 60 ; + days = hours / 24; + hours = hours % 24 ; + if(days > 0) { + temp = QString::number(days)+"d "+QString::number(hours)+"h" ; + } else if(hours > 0 || days > 0) { + temp = QString::number(hours)+"h "+QString::number(minutes)+"m" ; + } else if(minutes > 0 || hours > 0) { + temp = QString::number(minutes)+"m"+QString::number(seconds)+"s" ; + } else if(seconds > 0) { + temp = QString::number(seconds)+"s" ; + } else + temp = "" ; + painter->drawText(option.rect, Qt::AlignCenter, temp); + break; case NAME: // decoration value = index.data(Qt::DecorationRole); diff --git a/retroshare-gui/src/gui/DLListDelegate.h b/retroshare-gui/src/gui/DLListDelegate.h index 1f309ce9e..0e69f70cf 100644 --- a/retroshare-gui/src/gui/DLListDelegate.h +++ b/retroshare-gui/src/gui/DLListDelegate.h @@ -36,7 +36,8 @@ #define STATUS 6 #define PRIORITY 7 #define REMAINING 8 -#define ID 9 +#define DOWNLOADTIME 9 +#define ID 10 #define MAX_CHAR_TMP 128 diff --git a/retroshare-gui/src/gui/DetailsDialog.cpp b/retroshare-gui/src/gui/DetailsDialog.cpp index 2abcc01c3..1f832dafd 100644 --- a/retroshare-gui/src/gui/DetailsDialog.cpp +++ b/retroshare-gui/src/gui/DetailsDialog.cpp @@ -178,7 +178,12 @@ void DetailsDialog::setCompleted(const qulonglong & completed) void DetailsDialog::setRemaining(const qulonglong & remaining) { - ui.remaining_line->setText(misc::userFriendlyDuration(remaining)); + ui.remaining_line->setText(misc::friendlyUnit(remaining)); +} + +void DetailsDialog::setDownloadtime(const qulonglong & downloadtime) +{ + ui.downloadtime_line->setText(misc::userFriendlyDuration(downloadtime)); } void DetailsDialog::setLink(const QString & link) diff --git a/retroshare-gui/src/gui/DetailsDialog.h b/retroshare-gui/src/gui/DetailsDialog.h index 21450eac2..7f7325a73 100644 --- a/retroshare-gui/src/gui/DetailsDialog.h +++ b/retroshare-gui/src/gui/DetailsDialog.h @@ -59,6 +59,7 @@ public slots: void setDatarate(const double & datarate); void setCompleted(const qulonglong & completed); void setRemaining(const qulonglong & remaining) ; + void setDownloadtime(const qulonglong & downloadtime); void setType(const QString & type); diff --git a/retroshare-gui/src/gui/DetailsDialog.ui b/retroshare-gui/src/gui/DetailsDialog.ui index ab7c0ae58..010699764 100644 --- a/retroshare-gui/src/gui/DetailsDialog.ui +++ b/retroshare-gui/src/gui/DetailsDialog.ui @@ -7,7 +7,7 @@ 0 0 525 - 448 + 480 @@ -31,7 +31,7 @@ General - + @@ -291,6 +291,42 @@ p, li { white-space: pre-wrap; } + + + Date + + + + + + Download time: + + + + + + + Download Time Label + + + + + + + Qt::Horizontal + + + + 274 + 20 + + + + + + + + Qt::Vertical diff --git a/retroshare-gui/src/gui/FileTransferInfoWidget.cpp b/retroshare-gui/src/gui/FileTransferInfoWidget.cpp index 117179372..a5b28f021 100644 --- a/retroshare-gui/src/gui/FileTransferInfoWidget.cpp +++ b/retroshare-gui/src/gui/FileTransferInfoWidget.cpp @@ -25,6 +25,7 @@ #include #include #include +#include "util/misc.h" #include "FileTransferInfoWidget.h" // Variables to decide of display behaviour. Should be adapted to window size. @@ -218,13 +219,13 @@ void FileTransferInfoWidget::draw(const FileInfo& nfo,const FileChunksInfo& info y += block_sep ; y += text_height ; painter->drawText(20,y,tr("File hash: ")) ; painter->drawText(tab_size,y,QString::fromStdString(nfo.hash)) ; y += block_sep ; - y += text_height ; painter->drawText(20,y,tr("File size: ")) ; painter->drawText(tab_size,y,QString::number(info.file_size)) ; + y += text_height ; painter->drawText(20,y,tr("File size: ")) ; painter->drawText(tab_size,y,misc::friendlyUnit(info.file_size)) ; y += block_sep ; - y += text_height ; painter->drawText(20,y,tr("Chunk size: ")) ; painter->drawText(tab_size,y,QString::number(info.chunk_size)) ; + y += text_height ; painter->drawText(20,y,tr("Chunk size: ")) ; painter->drawText(tab_size,y,misc::friendlyUnit(info.chunk_size)) ; y += block_sep ; y += text_height ; painter->drawText(20,y,tr("Number of chunks: ")) ; painter->drawText(tab_size,y,QString::number(info.chunks.size())) ; y += block_sep ; - y += text_height ; painter->drawText(20,y,tr("Transfered: ")) ; painter->drawText(tab_size,y,QString::number(nfo.transfered)) ; + y += text_height ; painter->drawText(20,y,tr("Transfered: ")) ; painter->drawText(tab_size,y,misc::friendlyUnit(nfo.transfered)) ; y += block_sep ; y += text_height ; painter->drawText(20,y,tr("Number of sources: ")) ; painter->drawText(tab_size,y,QString::number(info.compressed_peer_availability_maps.size())) ; y += block_sep ; diff --git a/retroshare-gui/src/gui/TransfersDialog.cpp b/retroshare-gui/src/gui/TransfersDialog.cpp index 3c91a77fc..ceacf7165 100644 --- a/retroshare-gui/src/gui/TransfersDialog.cpp +++ b/retroshare-gui/src/gui/TransfersDialog.cpp @@ -93,7 +93,8 @@ TransfersDialog::TransfersDialog(QWidget *parent) DLListModel->setHeaderData(SOURCES, Qt::Horizontal, tr("Sources", "i.e: Sources")); DLListModel->setHeaderData(STATUS, Qt::Horizontal, tr("Status")); DLListModel->setHeaderData(PRIORITY, Qt::Horizontal, tr("Speed / Queue priority")); - DLListModel->setHeaderData(REMAINING, Qt::Horizontal, tr("Remaining", "i.e: Estimated Time of Arrival / Time left")); + DLListModel->setHeaderData(REMAINING, Qt::Horizontal, tr("Remaining")); + DLListModel->setHeaderData(DOWNLOADTIME, Qt::Horizontal, tr("Download time", "i.e: Estimated Time of Arrival / Time left")); DLListModel->setHeaderData(ID, Qt::Horizontal, tr("Core-ID")); ui.downloadList->setModel(DLListModel); ui.downloadList->hideColumn(ID); @@ -423,7 +424,7 @@ TransfersDialog::~TransfersDialog() int TransfersDialog::addItem(const QString& symbol, const QString& name, const QString& coreID, qlonglong fileSize, const FileProgressInfo& pinfo, double dlspeed, - const QString& sources, const QString& status, const QString& priority, qlonglong completed, qlonglong remaining) + const QString& sources, const QString& status, const QString& priority, qlonglong completed, qlonglong remaining, qlonglong downloadtime) { int row; QList list = DLListModel->findItems(coreID, Qt::MatchExactly, ID); @@ -444,6 +445,7 @@ int TransfersDialog::addItem(const QString& symbol, const QString& name, const Q DLListModel->setData(DLListModel->index(row, STATUS), QVariant((QString)status)); DLListModel->setData(DLListModel->index(row, PRIORITY), QVariant((QString)priority)); DLListModel->setData(DLListModel->index(row, REMAINING), QVariant((qlonglong)remaining)); + DLListModel->setData(DLListModel->index(row, DOWNLOADTIME), QVariant((qlonglong)downloadtime)); DLListModel->setData(DLListModel->index(row, ID), QVariant((QString)coreID)); @@ -688,8 +690,10 @@ void TransfersDialog::insertTransfers() { default: priority = tr("Average");break; } - qlonglong completed = info.transfered; - qlonglong remaining = (info.size - info.transfered) / (info.tfRate * 1024.0); + qlonglong completed = info.transfered; + qlonglong remaining = info.size - info.transfered; + qlonglong downloadtime = (info.size - info.transfered) / (info.tfRate * 1024.0); + FileChunksInfo fcinfo ; if(!rsFiles->FileDownloadChunksDetails(*it,fcinfo)) @@ -701,7 +705,7 @@ void TransfersDialog::insertTransfers() { pinfo.progress = completed*100.0/info.size ; pinfo.nb_chunks = pinfo.cmap._map.empty()?0:fcinfo.chunks.size() ; - int addedRow = addItem("", fileName, fileHash, fileSize, pinfo, fileDlspeed, sources, status, priority, completed, remaining); + int addedRow = addItem("", fileName, fileHash, fileSize, pinfo, fileDlspeed, sources, status, priority, completed, remaining, downloadtime); /* continue to next download item if no peers to add */ if (!info.peers.size()) continue; @@ -770,7 +774,7 @@ void TransfersDialog::insertTransfers() { addItem("", QString::fromUtf8(dit->fname.c_str()), QString::fromStdString(dit->hash), dit->count, pinfo, 0, 0, - tr("Queued"), "", 0, 0); + tr("Queued"), "", 0, 0, 0); } @@ -993,6 +997,8 @@ void TransfersDialog::showDetailsDialog() qulonglong fcompleted = ind.model ()->data (ind.model ()->index (ind.row (), COMPLETED)).toULongLong() ; qulonglong fremaining = ind.model ()->data (ind.model ()->index (ind.row (), REMAINING)).toULongLong() ; + qulonglong fdownloadtime = ind.model ()->data (ind.model ()->index (ind.row (), DOWNLOADTIME)).toULongLong() ; + int nb_select = 0 ; for(int i = 0; i <= DLListModel->rowCount(); i++) @@ -1021,6 +1027,9 @@ void TransfersDialog::showDetailsDialog() detailsdlg->setCompleted(fcompleted); detailsdlg->setRemaining(fremaining); + //Date GroupBox + detailsdlg->setDownloadtime(fdownloadtime); + // retroshare link(s) Tab analyzer.setRetroShareLink (fname, fsize, fhash); detailsdlg->setLink(analyzer.getRetroShareLink ()); diff --git a/retroshare-gui/src/gui/TransfersDialog.h b/retroshare-gui/src/gui/TransfersDialog.h index 4e42b6ea5..96ef432d2 100644 --- a/retroshare-gui/src/gui/TransfersDialog.h +++ b/retroshare-gui/src/gui/TransfersDialog.h @@ -171,7 +171,7 @@ private: Ui::TransfersDialog ui; public slots: - int addItem(const QString& symbol, const QString& name, const QString& coreID, qlonglong size, const FileProgressInfo& pinfo, double dlspeed, const QString& sources, const QString& status, const QString& priority, qlonglong completed, qlonglong remaining); + int addItem(const QString& symbol, const QString& name, const QString& coreID, qlonglong size, const FileProgressInfo& pinfo, double dlspeed, const QString& sources, const QString& status, const QString& priority, qlonglong completed, qlonglong remaining, qlonglong downloadtime); bool addPeerToItem(int row, const QString& name, const QString& coreID, double dlspeed, const QString& status, const FileProgressInfo& peerInfo); void delItem(int row);