From 0705d9dfc7b4077923146e49b8a99f78247235b5 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 10 Mar 2010 23:09:35 +0000 Subject: [PATCH] added paste multiple links git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2516 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/PeersDialog.cpp | 2 +- retroshare-gui/src/gui/RetroShareLink.cpp | 38 ++++++++--------- retroshare-gui/src/gui/RetroShareLink.h | 6 +-- retroshare-gui/src/gui/SearchDialog.cpp | 42 ++++++++++--------- retroshare-gui/src/gui/SharedFilesDialog.cpp | 26 ++++++------ retroshare-gui/src/gui/TransfersDialog.cpp | 11 +++-- .../src/gui/forums/CreateForumMsg.cpp | 24 ++++------- 7 files changed, 74 insertions(+), 75 deletions(-) diff --git a/retroshare-gui/src/gui/PeersDialog.cpp b/retroshare-gui/src/gui/PeersDialog.cpp index b5032a1e0..07e433c9e 100644 --- a/retroshare-gui/src/gui/PeersDialog.cpp +++ b/retroshare-gui/src/gui/PeersDialog.cpp @@ -1636,7 +1636,7 @@ void PeersDialog::anchorClicked (const QUrl& link ) if (link.scheme() == "retroshare") { - RetroShareLink rslnk(link.toString()) ; + RetroShareLink rslnk(link) ; if (rslnk.valid()) { diff --git a/retroshare-gui/src/gui/RetroShareLink.cpp b/retroshare-gui/src/gui/RetroShareLink.cpp index eccccf7ec..5c2fc05a1 100644 --- a/retroshare-gui/src/gui/RetroShareLink.cpp +++ b/retroshare-gui/src/gui/RetroShareLink.cpp @@ -25,35 +25,31 @@ const QString RetroShareLink::HEADER_NAME("retroshare://file"); -RetroShareLink::RetroShareLink(const QString & url) +RetroShareLink::RetroShareLink(const QUrl& url) { // parse #ifdef DEBUG_RSLINK - std::cerr << "got new RS link \"" << url.toStdString() << "\"" << std::endl ; + std::cerr << "got new RS link \"" << url.toString().toStdString() << "\"" << std::endl ; #endif - QStringList urlList = url.split ("\n"); + QStringList list = url.toString().split ("|"); - if(urlList.isEmpty ()) + if(list.size() < 4) goto bad_link ; - { - QStringList list = urlList[0].split ("|"); + bool ok ; - bool ok ; + _name = list[1] ; + _size = list[2].toULongLong(&ok) ; + _hash = list[3].left(40) ; // normally not necessary, but it's a security. - _name = list[1] ; - _size = list[2].toULongLong(&ok) ; - _hash = list[3].left(40) ; // normally not necessary, but it's a security. - - if(!ok) - goto bad_link ; + if(!ok) + goto bad_link ; #ifdef DEBUG_RSLINK - std::cerr << "New RetroShareLink forged:" << std::endl ; - std::cerr << " name = \"" << _name.toStdString() << "\"" << std::endl ; - std::cerr << " hash = \"" << _hash.toStdString() << "\"" << std::endl ; - std::cerr << " size = " << _size << std::endl ; + std::cerr << "New RetroShareLink forged:" << std::endl ; + std::cerr << " name = \"" << _name.toStdString() << "\"" << std::endl ; + std::cerr << " hash = \"" << _hash.toStdString() << "\"" << std::endl ; + std::cerr << " size = " << _size << std::endl ; #endif - } check() ; @@ -122,6 +118,11 @@ bool RetroShareLink::checkName(const QString& name) return true ; } +QUrl RetroShareLink::toUrl() const +{ + return QUrl(toString()) ; +} + bool RetroShareLink::checkHash(const QString& hash) { if(hash.length() != 40) @@ -140,4 +141,3 @@ bool RetroShareLink::checkHash(const QString& hash) return true ; } - diff --git a/retroshare-gui/src/gui/RetroShareLink.h b/retroshare-gui/src/gui/RetroShareLink.h index 5b57c8ea7..e34da95b6 100644 --- a/retroshare-gui/src/gui/RetroShareLink.h +++ b/retroshare-gui/src/gui/RetroShareLink.h @@ -27,11 +27,12 @@ #include #include #include +#include class RetroShareLink { public: - RetroShareLink(const QString& url); + RetroShareLink(const QUrl& url); RetroShareLink(const QString& name, uint64_t size, const QString& hash); uint64_t size() const { return _size ; } @@ -39,10 +40,9 @@ class RetroShareLink const QString& hash() const { return _hash ; } QString toString() const ; + QUrl toUrl() const ; bool valid() const { return _size > 0 ; } - - static void parseForLinks(const QString& text,QList& link_list) ; private: void check() ; static bool checkHash(const QString& hash) ; diff --git a/retroshare-gui/src/gui/SearchDialog.cpp b/retroshare-gui/src/gui/SearchDialog.cpp index 5fab5405d..4eca884f4 100644 --- a/retroshare-gui/src/gui/SearchDialog.cpp +++ b/retroshare-gui/src/gui/SearchDialog.cpp @@ -254,11 +254,8 @@ void SearchDialog::searchtableWidgetCostumPopupMenu( QPoint point ) contextMnu->addAction( downloadAct); contextMnu->addSeparator(); - if ((ui.searchResultWidget->selectedItems()).size() == 1) - { - contextMnu->addAction( copysearchlinkAct); - contextMnu->addAction( sendrslinkAct); - } + contextMnu->addAction( copysearchlinkAct); + contextMnu->addAction( sendrslinkAct); } QMouseEvent *mevent = new QMouseEvent(QEvent::MouseButtonPress,point,Qt::RightButton, Qt::RightButton,Qt::NoModifier); @@ -1195,26 +1192,31 @@ void SearchDialog::copysearchLink() int numdls = itemsForCopy.size(); QTreeWidgetItem * item; + QList urls ; + for (int i = 0; i < numdls; ++i) - { - item = itemsForCopy.at(i); - // call copy + { + item = itemsForCopy.at(i); + // call copy - if (!item->childCount()) - { - std::cerr << "SearchDialog::copysearchLink() Calling set retroshare link"; - std::cerr << std::endl; + if (!item->childCount()) + { + std::cerr << "SearchDialog::copysearchLink() Calling set retroshare link"; + std::cerr << std::endl; - QString fhash = item->text(SR_HASH_COL); - qulonglong fsize = item->text(SR_REALSIZE_COL).toULongLong(); - QString fname = item->text(SR_NAME_COL); + QString fhash = item->text(SR_HASH_COL); + qulonglong fsize = item->text(SR_REALSIZE_COL).toULongLong(); + QString fname = item->text(SR_NAME_COL); - RetroShareLink link(fname, fsize, fhash); + RetroShareLink link(fname, fsize, fhash); - QApplication::clipboard()->setText(link.toString()); - break ; - } - } + if(link.valid()) + urls.push_back(link.toUrl()) ; + } + } + QMimeData *dt = new QMimeData; + dt->setUrls(urls) ; + QApplication::clipboard()->setMimeData(dt) ; } void SearchDialog::sendLinkTo( ) diff --git a/retroshare-gui/src/gui/SharedFilesDialog.cpp b/retroshare-gui/src/gui/SharedFilesDialog.cpp index 21e5f905e..2483acf3e 100644 --- a/retroshare-gui/src/gui/SharedFilesDialog.cpp +++ b/retroshare-gui/src/gui/SharedFilesDialog.cpp @@ -251,43 +251,43 @@ void SharedFilesDialog::copyLink (const QModelIndexList& lst, bool remote) else localModel->getDirDetailsFromSelect(lst, dirVec); + QList urls ; + for (int i = 0, n = dirVec.size(); i < n; ++i) { const DirDetails& details = dirVec[i]; - RetroShareLink link(details.name.c_str(), details.count, details.hash.c_str()); - - QApplication::clipboard()->setText(link.toString()); -#ifdef TO_DO_LATER if (details.type == DIR_TYPE_DIR) { - for (std::list::const_iterator cit = details.children.begin(); - cit != details.children.end(); ++cit) + for (std::list::const_iterator cit = details.children.begin();cit != details.children.end(); ++cit) { const DirStub& dirStub = *cit; DirDetails details; uint32_t flags = DIR_FLAGS_DETAILS; if (remote) - { flags |= DIR_FLAGS_REMOTE; - } else - { flags |= DIR_FLAGS_LOCAL; - } // do not recursive copy sub dirs. if (!rsFiles->RequestDirDetails(dirStub.ref, details, flags) || details.type != DIR_TYPE_FILE) continue; - analyzer.setRetroShareLink (details.name.c_str(), QString::number(details.count), details.hash.c_str()); + RetroShareLink link(details.name.c_str(), details.count, details.hash.c_str()); + urls.push_back(link.toUrl()) ; } } else - analyzer.setRetroShareLink (details.name.c_str(), QString::number(details.count), details.hash.c_str()); -#endif + { + RetroShareLink link(details.name.c_str(), details.count, details.hash.c_str()); + + urls.push_back(link.toUrl()) ; + } } + QMimeData *dt = new QMimeData ; + dt->setUrls(urls) ; + QApplication::clipboard()->setMimeData(dt) ; } void SharedFilesDialog::copyLinkRemote() diff --git a/retroshare-gui/src/gui/TransfersDialog.cpp b/retroshare-gui/src/gui/TransfersDialog.cpp index 651588128..3fc50608e 100644 --- a/retroshare-gui/src/gui/TransfersDialog.cpp +++ b/retroshare-gui/src/gui/TransfersDialog.cpp @@ -1072,12 +1072,15 @@ void TransfersDialog::showDetailsDialog() void TransfersDialog::pasteLink() { - RetroShareLink link(QApplication::clipboard()->text()); + QList urllist = QApplication::clipboard()->mimeData()->urls() ; - if (!link.valid()) - return; + for(QList::const_iterator it(urllist.begin());it!=urllist.end();++it) + { + RetroShareLink link(*it) ; - rsFiles->FileRequest(link.name().toStdString(), link.hash().toStdString(),link.size(), "", RS_FILE_HINTS_NETWORK_WIDE, std::list()); + if (link.valid()) + rsFiles->FileRequest(link.name().toStdString(), link.hash().toStdString(),link.size(), "", RS_FILE_HINTS_NETWORK_WIDE, std::list()); + } } void TransfersDialog::getIdOfSelectedItems(std::set& items) diff --git a/retroshare-gui/src/gui/forums/CreateForumMsg.cpp b/retroshare-gui/src/gui/forums/CreateForumMsg.cpp index 21b52ccc4..4e1afdd5d 100644 --- a/retroshare-gui/src/gui/forums/CreateForumMsg.cpp +++ b/retroshare-gui/src/gui/forums/CreateForumMsg.cpp @@ -23,6 +23,7 @@ #include +#include #include #include #include @@ -414,21 +415,14 @@ void CreateForumMsg::fileHashingFinished(AttachFileItem* file) { void CreateForumMsg::pasteLink() { - - QString link = QApplication::clipboard()->text(); - - if (link.startsWith("retroshare://", Qt::CaseInsensitive)) - { - ui.forumMessage->setHtml(" " + link + ""); - } - else - { - QMessageBox::warning(this, tr("RetroShare"),tr("Clipboard does not contains RetroShare link('s)"), - QMessageBox::Ok, QMessageBox::Ok); - - return; - } - + QList list = QApplication::clipboard()->mimeData()->urls(); + for(QList::const_iterator it(list.begin());it!=list.end();++it) + { + RetroShareLink link(*it) ; + + if(link.valid()) + ui.forumMessage->insertHtml(" " + link.toString() + "
") ; + } }