ported branch commits 2666-2668, 2670-2672, 2679, 2682-2683 into trunk

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2702 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2010-04-10 14:56:34 +00:00
parent 063a366d12
commit c6c8e63e91
12 changed files with 153 additions and 233 deletions

View file

@ -228,10 +228,9 @@ TransfersDialog::TransfersDialog(QWidget *parent)
clearcompletedAct = new QAction(QIcon(IMAGE_CLEARCOMPLETED), tr( "Clear Completed" ), this );
connect( clearcompletedAct , SIGNAL( triggered() ), this, SLOT( clearcompleted() ) );
#ifndef RS_RELEASE_VERSION
copylinkAct = new QAction(QIcon(IMAGE_COPYLINK), tr( "Copy retroshare Link" ), this );
connect( copylinkAct , SIGNAL( triggered() ), this, SLOT( copyLink() ) );
#endif
pastelinkAct = new QAction(QIcon(IMAGE_PASTELINK), tr( "Paste retroshare Link" ), this );
connect( pastelinkAct , SIGNAL( triggered() ), this, SLOT( pasteLink() ) );
queueDownAct = new QAction(QIcon(":/images/go-down.png"), tr("Down"), this);
@ -294,27 +293,18 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint point )
bool addOpenFileOption = false;
if (info.downloadStatus == FT_STATE_COMPLETE)
{
std::cerr << "Add Play Option" << std::endl;
{
std::cerr << "Add Play Option" << std::endl;
addOpenFileOption = true;
size_t pos = info.fname.find_last_of('.');
/* check if the file is a media file */
if(pos != std::string::npos && misc::isPreviewable(info.fname.substr(pos + 1).c_str()))
addPlayOption = true;
}
addOpenFileOption = true;
size_t pos = info.fname.find_last_of('.');
if (pos == std::string::npos) return; /* can't identify type of file */
/* check if the file is a media file */
if (misc::isPreviewable(info.fname.substr(pos + 1).c_str()))
{
addPlayOption = true;
}
}
QMenu viewMenu( tr("View"), this );
QMenu priorityQueueMenu(tr("Move in Queue..."), this);
priorityQueueMenu.setIcon(QIcon(IMAGE_PRIORITY));
priorityQueueMenu.addAction(queueTopAct);
@ -373,13 +363,18 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint point )
if(all_downloading)
contextMnu.addMenu( &chunkMenu);
if(single)
{
if(info.downloadStatus == FT_STATE_PAUSED)
contextMnu.addAction( resumeAct);
else if(info.downloadStatus != FT_STATE_COMPLETE)
if(!all_paused)
contextMnu.addAction( pauseAct);
}
if(!all_downld)
contextMnu.addAction( resumeAct);
if(single)
{
if(info.downloadStatus == FT_STATE_PAUSED)
contextMnu.addAction( resumeAct);
else if(info.downloadStatus != FT_STATE_COMPLETE)
contextMnu.addAction( pauseAct);
}
if(info.downloadStatus != FT_STATE_COMPLETE)
contextMnu.addAction( cancelAct);
@ -402,15 +397,14 @@ void TransfersDialog::downloadListCostumPopupMenu( QPoint point )
contextMnu.addAction( clearcompletedAct);
contextMnu.addSeparator();
#ifndef RS_RELEASE_VERSION
if(single)
if(!items.empty())
contextMnu.addAction( copylinkAct);
#endif
if(!RSLinkClipboard::empty())
contextMnu.addAction( pastelinkAct);
contextMnu.addSeparator();
contextMnu.addMenu( &viewMenu);
contextMnu.exec( mevent.globalPos() );
}
@ -479,7 +473,7 @@ int TransfersDialog::addItem(const QString&, const QString& name, const QString&
return row;
}
int TransfersDialog::addPeerToItem(int row, const QString& name, const QString& coreID, double dlspeed, const QString& status, const FileProgressInfo& peerInfo)
int TransfersDialog::addPeerToItem(int row, const QString& name, const QString& coreID, double dlspeed, uint32_t status, const FileProgressInfo& peerInfo)
{
QStandardItem *dlItem = DLListModel->item(row);
if (!dlItem) return -1;
@ -496,36 +490,41 @@ int TransfersDialog::addPeerToItem(int row, const QString& name, const QString&
break;
}
if (childRow == -1) {
QStandardItem *si1 = NULL,*si7=NULL;
if (childRow == -1)
{
//set this false if you want to expand on double click
dlItem->setEditable(false);
QList<QStandardItem *> items;
QStandardItem *i1 = new QStandardItem(); i1->setData(QVariant((QString)" "+name), Qt::DisplayRole);
QStandardItem *i2 = new QStandardItem(); i2->setData(QVariant(QString()), Qt::DisplayRole);
QStandardItem *i3 = new QStandardItem(); i3->setData(QVariant(QString()), Qt::DisplayRole);
QStandardItem *i4 = new QStandardItem(); i4->setData(QVariant((double)dlspeed), Qt::DisplayRole);
QStandardItem *i5 = new QStandardItem(); i5->setData(QVariant::fromValue(peerInfo), Qt::DisplayRole);
QStandardItem *i6 = new QStandardItem(); i6->setData(QVariant(QString()), Qt::DisplayRole);
QStandardItem *i7 = new QStandardItem(); i7->setData(QVariant((QString)status), Qt::DisplayRole);
QStandardItem *i8 = new QStandardItem(); i8->setData(QVariant(QString()), Qt::DisplayRole); // blank field for priority
QStandardItem *i9 = new QStandardItem(); i9->setData(QVariant(QString()), Qt::DisplayRole);
QStandardItem *i10 = new QStandardItem(); i10->setData(QVariant(QString()), Qt::DisplayRole);
QStandardItem *i11 = new QStandardItem(); i11->setData(QVariant((QString)coreID), Qt::DisplayRole);
QStandardItem *i1 = new QStandardItem();
QStandardItem *i2 = new QStandardItem();
QStandardItem *i3 = new QStandardItem();
QStandardItem *i4 = new QStandardItem();
QStandardItem *i5 = new QStandardItem();
QStandardItem *i6 = new QStandardItem();
QStandardItem *i7 = new QStandardItem();
QStandardItem *i8 = new QStandardItem();
QStandardItem *i9 = new QStandardItem();
QStandardItem *i10 = new QStandardItem();
QStandardItem *i11 = new QStandardItem();
/* set status icon in the name field */
if (status == "Downloading") {
i1->setData(QIcon(QString::fromUtf8(":/images/Client0.png")), Qt::DecorationRole);
} else if (status == "Failed") {
i1->setData(QIcon(QString::fromUtf8(":/images/Client1.png")), Qt::DecorationRole);
} else if (status == "Okay") {
i1->setData(QIcon(QString::fromUtf8(":/images/Client2.png")), Qt::DecorationRole);
} else if (status == "Waiting") {
i1->setData(QIcon(QString::fromUtf8(":/images/Client3.png")), Qt::DecorationRole);
} else if (status == "Unknown") {
i1->setData(QIcon(QString::fromUtf8(":/images/Client4.png")), Qt::DecorationRole);
} else if (status == "Complete") {
}
si1 = i1 ;
si7 = i7 ;
QList<QStandardItem *> items;
i1->setData(QVariant((QString)" "+name), Qt::DisplayRole);
i2->setData(QVariant(QString()), Qt::DisplayRole);
i3->setData(QVariant(QString()), Qt::DisplayRole);
i4->setData(QVariant((double)dlspeed), Qt::DisplayRole);
i5->setData(QVariant::fromValue(peerInfo), Qt::DisplayRole);
i6->setData(QVariant(QString()), Qt::DisplayRole);
i8->setData(QVariant(QString()), Qt::DisplayRole); // blank field for priority
i9->setData(QVariant(QString()), Qt::DisplayRole);
i10->setData(QVariant(QString()), Qt::DisplayRole);
i11->setData(QVariant((QString)coreID), Qt::DisplayRole);
items.append(i1);
items.append(i2);
@ -541,64 +540,47 @@ int TransfersDialog::addPeerToItem(int row, const QString& name, const QString&
dlItem->appendRow(items);
childRow = dlItem->rowCount()-1 ;
} else {
}
else
{
//just update the child (peer)
dlItem->child(childRow, DLSPEED)->setData(QVariant((double)dlspeed), Qt::DisplayRole);
dlItem->child(childRow, STATUS)->setData(QVariant((QString)status), Qt::DisplayRole);
dlItem->child(childRow, PROGRESS)->setData(QVariant::fromValue(peerInfo), Qt::DisplayRole);
std::set<QStandardItem *> dlitems;
std::set<QStandardItem *>::iterator it;
getIdOfSelectedItems(dlitems);
FileInfo info;
for (it = dlitems.begin(); it != dlitems.end(); it ++) {
if (!rsFiles->FileDetails((*it)->data(Qt::DisplayRole).toString().toStdString(), RS_FILE_HINTS_DOWNLOAD, info)) continue;
break;
}
/* set status icon in the name field */
if ( info.downloadStatus == FT_STATE_DOWNLOADING)
{
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client0.png")), Qt::DecorationRole);
}
else if ( info.downloadStatus == FT_STATE_FAILED)
{
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client1.png")), Qt::DecorationRole);
}
else if ( info.downloadStatus == FT_STATE_OKAY)
{
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client2.png")), Qt::DecorationRole);
}
else if ( info.downloadStatus == FT_STATE_WAITING)
{
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client3.png")), Qt::DecorationRole);
}
else if ( info.downloadStatus == FT_STATE_COMPLETE)
{
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client0.png")), Qt::DecorationRole);
}
else
{
//dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client4.png")), Qt::DecorationRole);
}
/* set status icon in the name field */
/*if (status == "Downloading") {
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client0.png")), Qt::DecorationRole);
} else if (status == "Failed") {
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client1.png")), Qt::DecorationRole);
} else if (status == "Okay") {
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client2.png")), Qt::DecorationRole);
} else if (status == "Waiting") {
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client3.png")), Qt::DecorationRole);
} else if (status == "Unknown") {
dlItem->child(childRow, NAME)->setData(QIcon(QString::fromUtf8(":/images/Client4.png")), Qt::DecorationRole);
} else if (status == "Complete") {
}*/
si1 = dlItem->child(childRow,NAME) ;
si7 = dlItem->child(childRow, STATUS) ;
}
return childRow;
QString sstatus;
switch (status)
{
case FT_STATE_FAILED: si7->setData(QVariant(tr("Failed"))) ;
si1->setData(QIcon(QString::fromUtf8(":/images/Client1.png")), Qt::DecorationRole);
break ;
case FT_STATE_OKAY: si7->setData(QVariant(tr("Okay")));
si1->setData(QIcon(QString::fromUtf8(":/images/Client2.png")), Qt::DecorationRole);
break ;
case FT_STATE_WAITING: si7->setData(QVariant(tr("")));
si1->setData(QIcon(QString::fromUtf8(":/images/Client3.png")), Qt::DecorationRole);
break ;
case FT_STATE_DOWNLOADING: si7->setData(QVariant(tr("Transferring")));
si1->setData(QIcon(QString::fromUtf8(":/images/Client0.png")), Qt::DecorationRole);
break ;
case FT_STATE_COMPLETE: si7->setData(QVariant(tr("Complete")));
si1->setData(QIcon(QString::fromUtf8(":/images/Client0.png")), Qt::DecorationRole);
break ;
default: si7->setData(QVariant(tr("")));
break ;
si1->setData(QIcon(QString::fromUtf8(":/images/Client4.png")), Qt::DecorationRole);
}
return childRow;
}
@ -725,9 +707,6 @@ void TransfersDialog::insertTransfers()
int addedRow = addItem("", fileName, fileHash, fileSize, pinfo, fileDlspeed, sources, status, priority, completed, remaining, downloadtime);
used_hashes.insert(info.hash) ;
/* continue to next download item if no peers to add */
if (!info.peers.size()) continue;
std::map<std::string, std::string>::iterator vit;
std::map<std::string, std::string> versions;
bool retv = rsDisc->getDiscVersions(versions);
@ -745,15 +724,6 @@ void TransfersDialog::insertTransfers()
version = tr("version: ") + QString::fromStdString(vit->second);
}
QString status;
switch (pit->status) {
case FT_STATE_FAILED: status = tr("Failed"); break;
case FT_STATE_OKAY: status = tr("Okay"); break;
case FT_STATE_WAITING: status = tr(""); break;
case FT_STATE_DOWNLOADING: status = tr("Transferring"); break;
case FT_STATE_COMPLETE: status = tr("Complete"); break;
default: status = tr(""); break;
}
double peerDlspeed = 0;
if ((uint32_t)pit->status == FT_STATE_DOWNLOADING && info.downloadStatus != FT_STATE_PAUSED && info.downloadStatus != FT_STATE_COMPLETE)
peerDlspeed = pit->tfRate * 1024.0;
@ -764,15 +734,7 @@ void TransfersDialog::insertTransfers()
peerpinfo.progress = 0.0 ; // we don't display completion for sources.
peerpinfo.nb_chunks = peerpinfo.cmap._map.empty()?0:fcinfo.chunks.size();
// std::cerr << std::endl ;
// std::cerr << "Source " << pit->peerId << " as map " << peerpinfo.cmap._map.size() << " compressed chunks" << std::endl ;
// for(uint j=0;j<peerpinfo.cmap._map.size();++j)
// std::cerr << peerpinfo.cmap._map[j] ;
// std::cerr << std::endl ;
// std::cerr << std::endl ;
// std::cout << "adding peer " << peerName.toStdString() << " to row " << addedRow << ", hashfile and peerid=" << hashFileAndPeerId.toStdString() << std::endl ;
int row_id = addPeerToItem(addedRow, peerName, hashFileAndPeerId, peerDlspeed, status, peerpinfo);
int row_id = addPeerToItem(addedRow, peerName, hashFileAndPeerId, peerDlspeed, pit->status, peerpinfo);
used_rows.insert(row_id) ;
}
@ -804,40 +766,21 @@ void TransfersDialog::insertTransfers()
//
std::list<std::string> upHashes;
rsFiles->FileUploads(upHashes);
//first clean the model in case some files are not uploaded anymore
//remove items that are not fiends anymore
removeIndex = 0;
while (removeIndex < ULListModel->rowCount()) {
if (!ULListModel->item(removeIndex, UHASH)) {
removeIndex++;
continue;
}
std::string hash = ULListModel->item(removeIndex, UHASH)->data(Qt::EditRole).toString().toStdString();
std::list<std::string>::iterator upHashesIt;
bool found = false;
for (upHashesIt = upHashes.begin(); upHashesIt != upHashes.end(); upHashesIt++) {
if (hash == *upHashesIt) {
found = true;
break;
}
}
if (!found) {
ULListModel->takeRow(removeIndex);
} else {
removeIndex++;
}
}
for(it = upHashes.begin(); it != upHashes.end(); it++) {
used_hashes.clear() ;
for(it = upHashes.begin(); it != upHashes.end(); it++)
{
FileInfo info;
if (!rsFiles->FileDetails(*it, RS_FILE_HINTS_UPLOAD, info)) {
if (!rsFiles->FileDetails(*it, RS_FILE_HINTS_UPLOAD, info))
continue;
}
if((info.flags & CB_CODE_CACHE) && !ui._showCacheTransfers_CB->isChecked())
continue ;
std::list<TransferInfo>::iterator pit;
for(pit = info.peers.begin(); pit != info.peers.end(); pit++) {
for(pit = info.peers.begin(); pit != info.peers.end(); pit++)
{
if (pit->peerId == rsPeers->getOwnId()) //don't display transfer to ourselves
continue ;
@ -888,40 +831,26 @@ void TransfersDialog::insertTransfers()
pinfo.progress = progress ;
addUploadItem("", fileName, fileHash, fileSize, pinfo, dlspeed, sources, status, completed, remaining);
}
// if (info.peers.size() == 0) { //it has not been added (maybe only turtle tunnels
// QString fileHash = QString::fromStdString(info.hash);
// QString fileName = QString::fromUtf8(info.fname.c_str());
// QString sources = tr("");
//
// QString status;
// switch(info.downloadStatus)
// {
// case FT_STATE_FAILED: status = tr("Failed"); break;
// case FT_STATE_OKAY: status = tr("Okay"); break;
// case FT_STATE_WAITING: status = tr("Waiting"); break;
// case FT_STATE_DOWNLOADING: status = tr("Uploading");break;
// case FT_STATE_COMPLETE:status = tr("Complete"); break;
// default: status = tr("Complete"); break;
//
// }
//
// double dlspeed = info.tfRate * 1024.0;
// qlonglong fileSize = info.size;
// double completed = info.transfered;
// double progress = info.transfered * 100.0 / info.size;
// qlonglong remaining = (info.size - info.transfered) / (info.tfRate * 1024.0);
//
// FileProgressInfo pinfo ;
// pinfo.progress = progress ;
// pinfo.cmap = CompressedChunkMap() ;
// pinfo.type = FileProgressInfo::DOWNLOAD_LINE ;
// pinfo.nb_chunks = 0 ;
//
// addUploadItem("", fileName, fileHash, fileSize, pinfo, dlspeed, sources, status, completed, remaining);
// }
used_hashes.insert(info.hash) ;
}
}
// remove hashes that where not shown
//first clean the model in case some files are not download anymore
//remove items that are not fiends anymore
removeIndex = 0;
while (removeIndex < ULListModel->rowCount())
{
std::string hash = ULListModel->item(removeIndex, UHASH)->data(Qt::EditRole).toString().toStdString();
if(used_hashes.find(hash) == used_hashes.end())
ULListModel->takeRow(removeIndex);
else
removeIndex++;
}
}
QString TransfersDialog::getPeerName(const std::string& id) const
@ -980,6 +909,7 @@ void TransfersDialog::cancel()
void TransfersDialog::copyLink ()
{
QModelIndexList lst = ui.downloadList->selectionModel ()->selectedIndexes ();
std::vector<RetroShareLink> links ;
for (int i = 0; i < lst.count (); i++)
if ( lst[i].column() == 0 )
@ -989,11 +919,10 @@ void TransfersDialog::copyLink ()
qulonglong fsize= ind.model ()->data (ind.model ()->index (ind.row (), SIZE)).toULongLong() ;
QString fname= ind.model ()->data (ind.model ()->index (ind.row (), NAME)).toString() ;
RetroShareLink link(fname, fsize, fhash);
QApplication::clipboard()->setText(link.toString());
break ;
RetroShareLink link(fname, uint64_t(fsize), fhash);
links.push_back(link) ;
}
RSLinkClipboard::copyLinks(links) ;
}
void TransfersDialog::showDetailsDialog()