← Back to team overview

linuxdcpp-team team mailing list archive

[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();