linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #06725
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3243: transfers
------------------------------------------------------------
revno: 3243
committer: poy <poy@xxxxxxxxxx>
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();