📄 transferview.cpp
字号:
i->update();
ctrlTransfers.updateItem(i);
if(ctrlTransfers.getSortColumn() != COLUMN_USER)
ctrlTransfers.resort();
} else if(wParam == UPDATE_ITEMS) {
vector<ItemInfo*>* v = (vector<ItemInfo*>*)lParam;
ctrlTransfers.SetRedraw(FALSE);
for(vector<ItemInfo*>::iterator j = v->begin(); j != v->end(); ++j) {
ItemInfo* i = *j;
i->update();
ctrlTransfers.updateItem(i);
}
if(ctrlTransfers.getSortColumn() != COLUMN_STATUS)
ctrlTransfers.resort();
ctrlTransfers.SetRedraw(TRUE);
delete v;
}
return 0;
}
void TransferView::ItemInfo::update() {
u_int32_t colMask = updateMask;
updateMask = 0;
if(colMask & MASK_USER) {
columns[COLUMN_USER] = Text::toT(user->getNick());
}
if(colMask & MASK_HUB) {
columns[COLUMN_HUB] = Text::toT(user->getClientName());
}
if(colMask & MASK_STATUS) {
columns[COLUMN_STATUS] = statusString;
}
if(colMask & MASK_TIMELEFT) {
if (status == STATUS_RUNNING) {
columns[COLUMN_TIMELEFT] = Text::toT(Util::formatSeconds(timeLeft));
} else {
columns[COLUMN_TIMELEFT] = Util::emptyStringT;
}
}
if(colMask & MASK_SPEED) {
if (status == STATUS_RUNNING) {
columns[COLUMN_SPEED] = Text::toT(Util::formatBytes(speed) + "/s");
} else {
columns[COLUMN_SPEED] = Util::emptyStringT;
}
}
if(colMask & MASK_FILE) {
columns[COLUMN_FILE] = file;
}
if(colMask & MASK_SIZE) {
columns[COLUMN_SIZE] = Text::toT(Util::formatBytes(size));
}
if(colMask & MASK_PATH) {
columns[COLUMN_PATH] = path;
}
if(colMask & MASK_IP) {
if (country == _T(""))
columns[COLUMN_IP] = IP;
else
columns[COLUMN_IP] = country + _T(" (") + IP + _T(")");
}
if(colMask & MASK_RATIO) {
columns[COLUMN_RATIO] = Text::toT(Util::toString(getRatio()));
}
}
void TransferView::on(ConnectionManagerListener::Added, ConnectionQueueItem* aCqi) {
ItemInfo::Types t = aCqi->getDownload() ? ItemInfo::TYPE_DOWNLOAD : ItemInfo::TYPE_UPLOAD;
ItemInfo* i = new ItemInfo(aCqi->getUser(), t, ItemInfo::STATUS_WAITING);
{
Lock l(cs);
dcassert(transferItems.find(aCqi) == transferItems.end());
transferItems.insert(make_pair(aCqi, i));
i->columns[COLUMN_STATUS] = i->statusString = TSTRING(CONNECTING);
}
PostMessage(WM_SPEAKER, ADD_ITEM, (LPARAM)i);
}
void TransferView::on(ConnectionManagerListener::StatusChanged, ConnectionQueueItem* aCqi) {
ItemInfo* i;
{
Lock l(cs);
dcassert(transferItems.find(aCqi) != transferItems.end());
i = transferItems[aCqi];
i->statusString = aCqi->getState() == ConnectionQueueItem::CONNECTING ? TSTRING(CONNECTING) : TSTRING(WAITING_TO_RETRY);
i->updateMask |= ItemInfo::MASK_STATUS;
}
PostMessage(WM_SPEAKER, UPDATE_ITEM, (LPARAM)i);
}
void TransferView::on(ConnectionManagerListener::Removed, ConnectionQueueItem* aCqi) {
ItemInfo* i;
{
Lock l(cs);
ItemInfo::MapIter ii = transferItems.find(aCqi);
dcassert(ii != transferItems.end());
i = ii->second;
transferItems.erase(ii);
}
PostMessage(WM_SPEAKER, REMOVE_ITEM, (LPARAM)i);
}
void TransferView::on(ConnectionManagerListener::Failed, ConnectionQueueItem* aCqi, const string& aReason) {
ItemInfo* i;
{
Lock l(cs);
dcassert(transferItems.find(aCqi) != transferItems.end());
i = transferItems[aCqi];
i->statusString = Text::toT(aReason);
i->updateMask |= ItemInfo::MASK_STATUS;
}
PostMessage(WM_SPEAKER, UPDATE_ITEM, (LPARAM)i);
}
void TransferView::on(DownloadManagerListener::Starting, Download* aDownload) {
ConnectionQueueItem* aCqi = aDownload->getUserConnection()->getCQI();
ItemInfo* i;
{
Lock l(cs);
dcassert(transferItems.find(aCqi) != transferItems.end());
i = transferItems[aCqi];
i->status = ItemInfo::STATUS_RUNNING;
i->pos = 0;
i->start = aDownload->getPos();
i->actual = i->start;
i->size = aDownload->getSize();
i->file = Text::toT(Util::getFileName(aDownload->getTarget()));
i->path = Text::toT(Util::getFilePath(aDownload->getTarget()));
i->statusString = TSTRING(DOWNLOAD_STARTING);
i->IP = Text::toT(aDownload->getUserConnection()->getRemoteIp());
i->country = Text::toT(Util::getIpCountry(aDownload->getUserConnection()->getRemoteIp()));
i->updateMask |= ItemInfo::MASK_STATUS | ItemInfo::MASK_FILE | ItemInfo::MASK_PATH |
ItemInfo::MASK_SIZE | ItemInfo::MASK_IP;
if(aDownload->isSet(Download::FLAG_TREE_DOWNLOAD)) {
i->file = _T("TTH: ") + i->file;
}
}
PostMessage(WM_SPEAKER, UPDATE_ITEM, (LPARAM)i);
}
void TransferView::on(DownloadManagerListener::Tick, const Download::List& dl) {
vector<ItemInfo*>* v = new vector<ItemInfo*>();
v->reserve(dl.size());
AutoArray<TCHAR> buf(TSTRING(DOWNLOADED_BYTES).size() + 64);
{
Lock l(cs);
for(Download::List::const_iterator j = dl.begin(); j != dl.end(); ++j) {
Download* d = *j;
_stprintf(buf, CTSTRING(DOWNLOADED_BYTES), Text::toT(Util::formatBytes(d->getPos())).c_str(),
(double)d->getPos()*100.0/(double)d->getSize(), Text::toT(Util::formatSeconds((GET_TICK() - d->getStart())/1000)).c_str());
ConnectionQueueItem* aCqi = d->getUserConnection()->getCQI();
ItemInfo* i = transferItems[aCqi];
i->actual = i->start + d->getActual();
i->pos = i->start + d->getTotal();
i->timeLeft = d->getSecondsLeft();
i->speed = d->getRunningAverage();
if(d->isSet(Download::FLAG_ZDOWNLOAD)) {
i->statusString = _T("* ") + tstring(buf);
} else {
i->statusString = buf;
}
i->updateMask |= ItemInfo::MASK_STATUS | ItemInfo::MASK_TIMELEFT | ItemInfo::MASK_SPEED | ItemInfo::MASK_RATIO;
v->push_back(i);
}
}
PostMessage(WM_SPEAKER, UPDATE_ITEMS, (LPARAM)v);
}
void TransferView::on(DownloadManagerListener::Failed, Download* aDownload, const string& aReason) {
ConnectionQueueItem* aCqi = aDownload->getUserConnection()->getCQI();
ItemInfo* i;
{
Lock l(cs);
dcassert(transferItems.find(aCqi) != transferItems.end());
i = transferItems[aCqi];
i->status = ItemInfo::STATUS_WAITING;
i->pos = 0;
i->statusString = Text::toT(aReason);
i->size = aDownload->getSize();
i->file = Text::toT(Util::getFileName(aDownload->getTarget()));
i->path = Text::toT(Util::getFilePath(aDownload->getTarget()));
i->updateMask |= ItemInfo::MASK_STATUS | ItemInfo::MASK_SIZE | ItemInfo::MASK_FILE |
ItemInfo::MASK_PATH;
if(aDownload->isSet(Download::FLAG_TREE_DOWNLOAD)) {
i->file = _T("TTH: ") + i->file;
}
}
PostMessage(WM_SPEAKER, UPDATE_ITEM, (LPARAM)i);
}
void TransferView::on(UploadManagerListener::Starting, Upload* aUpload) {
ConnectionQueueItem* aCqi = aUpload->getUserConnection()->getCQI();
ItemInfo* i;
{
Lock l(cs);
dcassert(transferItems.find(aCqi) != transferItems.end());
i = transferItems[aCqi];
i->pos = 0;
i->start = aUpload->getPos();
i->actual = i->start;
i->size = aUpload->getSize();
i->status = ItemInfo::STATUS_RUNNING;
i->speed = 0;
i->timeLeft = 0;
i->file = Text::toT(Util::getFileName(aUpload->getFileName()));
i->path = Text::toT(Util::getFilePath(aUpload->getFileName()));
i->statusString = TSTRING(UPLOAD_STARTING);
i->IP = Text::toT(aUpload->getUserConnection()->getRemoteIp());
i->country = Text::toT(Util::getIpCountry(aUpload->getUserConnection()->getRemoteIp()));
i->updateMask |= ItemInfo::MASK_STATUS | ItemInfo::MASK_FILE | ItemInfo::MASK_PATH |
ItemInfo::MASK_SIZE | ItemInfo::MASK_IP;
if(aUpload->isSet(Upload::FLAG_TTH_LEAVES)) {
i->file = _T("TTH: ") + i->file;
}
}
PostMessage(WM_SPEAKER, UPDATE_ITEM, (LPARAM)i);
}
void TransferView::on(UploadManagerListener::Tick, const Upload::List& ul) {
vector<ItemInfo*>* v = new vector<ItemInfo*>();
v->reserve(ul.size());
AutoArray<TCHAR> buf(STRING(UPLOADED_BYTES).size() + 64);
{
Lock l(cs);
for(Upload::List::const_iterator j = ul.begin(); j != ul.end(); ++j) {
Upload* u = *j;
ConnectionQueueItem* aCqi = u->getUserConnection()->getCQI();
ItemInfo* i = transferItems[aCqi];
i->actual = i->start + u->getActual();
i->pos = i->start + u->getTotal();
i->timeLeft = u->getSecondsLeft();
i->speed = u->getRunningAverage();
_stprintf(buf, CTSTRING(UPLOADED_BYTES), Text::toT(Util::formatBytes(u->getPos())).c_str(),
(double)u->getPos()*100.0/(double)u->getSize(), Text::toT(Util::formatSeconds((GET_TICK() - u->getStart())/1000)).c_str());
if(u->isSet(Upload::FLAG_ZUPLOAD)) {
i->statusString = _T("* ") + tstring(buf);
} else {
i->statusString = buf;
}
i->updateMask |= ItemInfo::MASK_STATUS | ItemInfo::MASK_TIMELEFT | ItemInfo::MASK_SPEED | ItemInfo::MASK_RATIO;
v->push_back(i);
}
}
PostMessage(WM_SPEAKER, UPDATE_ITEMS, (LPARAM)v);
}
void TransferView::onTransferComplete(Transfer* aTransfer, bool isUpload) {
ConnectionQueueItem* aCqi = aTransfer->getUserConnection()->getCQI();
ItemInfo* i;
{
Lock l(cs);
dcassert(transferItems.find(aCqi) != transferItems.end());
i = transferItems[aCqi];
i->status = ItemInfo::STATUS_WAITING;
i->pos = 0;
i->statusString = isUpload ? TSTRING(UPLOAD_FINISHED_IDLE) : TSTRING(DOWNLOAD_FINISHED_IDLE);
i->updateMask |= ItemInfo::MASK_STATUS;
}
PostMessage(WM_SPEAKER, UPDATE_ITEM, (LPARAM)i);
}
void TransferView::ItemInfo::disconnect() {
ConnectionManager::getInstance()->removeConnection(user, (type == TYPE_DOWNLOAD));
}
/**
* @file
* $Id: TransferView.cpp,v 1.46 2005/03/19 17:59:26 arnetheduck Exp $
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -