------------------------------------------------------------ revno: 3243 committer: poy <p...@123gen.com> branch nick: trunk timestamp: Fri 2013-03-29 18:34:08 +0100 message: transfers modified: win32/TransferView.cpp win32/TransferView.h
-- lp:dcplusplus https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk Your team Dcplusplus-team is subscribed to branch lp:dcplusplus. To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'win32/TransferView.cpp' --- win32/TransferView.cpp 2013-03-28 18:28:13 +0000 +++ win32/TransferView.cpp 2013-03-29 17:34:08 +0000 @@ -140,7 +140,7 @@ !a->transferred ? 1 : compare(a->size / a->transferred, b->size / b->transferred); } - case COLUMN_TIMELEFT: return compare(a->timeleft(), b->timeleft()); + case COLUMN_TIMELEFT: return compare(a->timeleft, b->timeleft); case COLUMN_SPEED: return compare(a->speed, b->speed); case COLUMN_TRANSFERRED: return compare(a->transferred, b->transferred); case COLUMN_SIZE: return compare(a->size, b->size); @@ -148,10 +148,6 @@ } } -int64_t TransferView::ItemInfo::timeleft() const { - return speed == 0 ? 0 : static_cast<double>(size - transferred) / speed; -} - TransferView::ConnectionInfo::ConnectionInfo(const HintedUser& u, TransferInfo& parent) : ItemInfo(), UserInfoBase(u), @@ -164,7 +160,6 @@ columns[COLUMN_USER] = WinUtil::getNicks(u); columns[COLUMN_HUB] = WinUtil::getHubNames(u).first; columns[COLUMN_STATUS] = T_("Idle"); - columns[COLUMN_TRANSFERRED] = _T("0"); } bool TransferView::ConnectionInfo::operator==(const ConnectionInfo& other) const { @@ -222,9 +217,11 @@ } if((ui.updateMask & UpdateInfo::MASK_STATUS) || (ui.updateMask & UpdateInfo::MASK_TRANSFERRED) || (ui.updateMask & UpdateInfo::MASK_SPEED)) { - if(status == STATUS_RUNNING) { - columns[COLUMN_TIMELEFT] = Text::toT(Util::formatSeconds(timeleft())); + if(status == STATUS_RUNNING && size > 0 && speed > 0) { + timeleft = static_cast<double>(size - transferred) / speed; + columns[COLUMN_TIMELEFT] = Text::toT(Util::formatSeconds(timeleft)); } else { + timeleft = 0; columns[COLUMN_TIMELEFT].clear(); } } @@ -246,8 +243,14 @@ return parent; } +double TransferView::ConnectionInfo::barPos() const { + return status == STATUS_RUNNING && size > 0 && transferred >= 0 ? + static_cast<double>(transferred) / static_cast<double>(size) : -1; +} + void TransferView::ConnectionInfo::force() { columns[COLUMN_STATUS] = T_("Connecting (forced)"); + parent.update(); ConnectionManager::getInstance()->force(user); } @@ -273,7 +276,9 @@ } void TransferView::TransferInfo::update() { - speed = 0; transferred = startPos; + timeleft = 0; + speed = 0; + transferred = startPos; if(conns.empty()) { // this should never happen, but let's play safe. @@ -286,6 +291,7 @@ set<string> hubs; for(auto& conn: conns) { if(conn.status == ConnectionInfo::STATUS_RUNNING) { + if(!download) { timeleft += conn.timeleft; } speed += conn.speed; transferred += conn.transferred; } @@ -297,6 +303,10 @@ size = conns.front().size; } + if(download && size > 0 && speed > 0) { + timeleft = static_cast<double>(size - transferred) / speed; + } + if(conns.size() == 1) { auto& conn = conns.front(); columns[COLUMN_STATUS] = conn.getText(COLUMN_STATUS); @@ -319,7 +329,7 @@ } } - columns[COLUMN_TIMELEFT] = Text::toT(Util::formatSeconds(timeleft())); + columns[COLUMN_TIMELEFT] = Text::toT(Util::formatSeconds(timeleft)); columns[COLUMN_SPEED] = str(TF_("%1%/s") % Text::toT(Util::formatBytes(speed))); columns[COLUMN_TRANSFERRED] = Text::toT(Util::formatBytes(transferred)); columns[COLUMN_SIZE] = Text::toT(Util::formatBytes(size)); @@ -334,6 +344,15 @@ return *this; } +double TransferView::TransferInfo::barPos() const { + if(conns.size() == 1) { + return conns.front().barPos(); + } + + return download && size > 0 && transferred >= 0 ? + static_cast<double>(transferred) / static_cast<double>(size) : -1; +} + void TransferView::TransferInfo::force() { for(auto& conn: conns) { conn.force(); @@ -404,6 +423,7 @@ void TransferView::handleForce() { HoldRedraw hold { transfers }; transfers->forEachSelected(&ItemInfo::force); + transfers->resort(); } void TransferView::handleDisconnect() { @@ -497,7 +517,9 @@ dwt::Rectangle textRect; - { + if(pos >= 0) { + // the transfer is ongoing; paint a background to represent that. + dwt::Brush brush { ::CreateSolidBrush(barPal[1]) }; auto selectBg(canvas.select(brush)); @@ -522,6 +544,9 @@ canvas.moveTo(rc.left() + 1, rc.top()); canvas.lineTo(rc.right() - 2, rc.top()); } + + } else { + textRect = rc; } // draw status text @@ -568,15 +593,11 @@ auto col = data.iSubItem; if(col == COLUMN_STATUS) { auto& info = *reinterpret_cast<ItemInfo*>(data.nmcd.lItemlParam); - auto connInfo = dynamic_cast<ConnectionInfo*>(&info); - if((!connInfo || connInfo->status == ConnectionInfo::STATUS_RUNNING) && info.size > 0 && info.transferred >= 0) { - int item = static_cast<int>(data.nmcd.dwItemSpec); - drawProgress(data.nmcd.hdc, transfers->getRect(item, col, LVIR_BOUNDS), item, col, - info.transfer().download ? downloadIcon : uploadIcon, info.getText(col), - static_cast<double>(info.transferred) / static_cast<double>(info.size), - info.transfer().download); + auto item = static_cast<int>(data.nmcd.dwItemSpec); + drawProgress(data.nmcd.hdc, transfers->getRect(item, col, LVIR_BOUNDS), item, col, + info.transfer().download ? downloadIcon : uploadIcon, info.getText(col), + info.barPos(), info.transfer().download); return CDRF_SKIPDEFAULT; - } } } // Fall through @@ -616,8 +637,7 @@ if(ui.download) { QueueManager::getInstance()->getSizeInfo(transfer->size, transfer->startPos, ui.path); } else { - transfer->transferred = ui.transferred; - transfer->size = ui.size; + transfer->size = File::getSize(ui.path); } } else { @@ -631,8 +651,6 @@ transfers->insert(transfer); } - auto newConn = !conn, newGroup = false; - if(!conn) { transfer->conns.emplace_back(ui.user, *transfer); conn = &transfer->conns.back(); @@ -777,21 +795,13 @@ namespace { tstring getFile(Transfer* t) { if(t->getType() == Transfer::TYPE_TREE) { - return str(TF_("TTH: %1%") % Text::toT(Util::getFileName(t->getPath()))); + return T_("TTH"); } if(t->getType() == Transfer::TYPE_FULL_LIST || t->getType() == Transfer::TYPE_PARTIAL_LIST) { return T_("file list"); } - string path, total; - if(dynamic_cast<Upload*>(t)) { - path = Util::addBrackets(t->getPath()); - WinUtil::reducePaths(path); - total = str(F_(" of %1%") % Util::formatBytes(File::getSize(t->getPath()))); - } else { - path = Util::getFileName(t->getPath()); - } - return Text::toT(str(F_("%1% (%2%)") % path % (Util::formatBytes(t->getStartPos()) + " - " + - Util::formatBytes(t->getStartPos() + t->getSize()) + total))); + return Text::toT(str(F_("(%1%)") % (Util::formatBytes(t->getStartPos()) + " - " + + Util::formatBytes(t->getStartPos() + t->getSize())))); } } void TransferView::on(DownloadManagerListener::Complete, Download* d) noexcept { @@ -867,7 +877,7 @@ statusString += str(TF_("Uploading %1%") % getFile(u)); ui->setStatusString(statusString); - updatedConn(ui); + addedConn(ui); } void TransferView::on(UploadManagerListener::Tick, const UploadList& ul) noexcept { === modified file 'win32/TransferView.h' --- win32/TransferView.h 2013-03-27 16:24:06 +0000 +++ win32/TransferView.h 2013-03-29 17:34:08 +0000 @@ -87,11 +87,12 @@ virtual TransferInfo& transfer() = 0; + virtual double barPos() const = 0; + virtual void force() = 0; virtual void disconnect() = 0; - int64_t timeleft() const; - + int64_t timeleft; int64_t speed; int64_t actual; int64_t transferred; @@ -116,6 +117,8 @@ TransferInfo& transfer(); + double barPos() const; + void force(); void disconnect(); @@ -136,6 +139,8 @@ TransferInfo& transfer(); + double barPos() const; + void force(); void disconnect();
_______________________________________________ Mailing list: https://launchpad.net/~linuxdcpp-team Post to : linuxdcpp-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~linuxdcpp-team More help : https://help.launchpad.net/ListHelp