void SpyFrame::contextMenu(){ QModelIndexList list = treeView->selectionModel()->selectedRows(0); if (list.isEmpty()) return; SpyItem *item = reinterpret_cast<SpyItem*>(list.at(0).internalPointer()); QMenu *m = new QMenu(this); m->addAction(tr("Search")); QAction *ret = m->exec(QCursor::pos()); if (!ret) return; SearchFrame *fr = ArenaWidgetFactory().create<SearchFrame, QWidget*>(this); QString src = item->data(COLUMN_SPY_STRING).toString(); if (item->isTTH){ src.remove(0, 4); fr->searchAlternates(src); } else fr->searchFile(src); }
void DownloadQueue::slotContextMenu(const QPoint &){ QModelIndexList list = treeView_TARGET->selectionModel()->selectedRows(0); QList<DownloadQueueItem*> items; if (list.isEmpty()) return; getItems(list, items); if (items.isEmpty()) return; DownloadQueueItem *item = reinterpret_cast<DownloadQueueItem*>(items.at(0)); QString target = item->data(COLUMN_DOWNLOADQUEUE_PATH).toString() + item->data(COLUMN_DOWNLOADQUEUE_NAME).toString(); if (target.isEmpty()) return; Q_D(DownloadQueue); Menu::Action act = d->menu->exec(d->sources, target, items.size() > 1); QueueManager *QM = QueueManager::getInstance(); QVariant arg = d->menu->getArg(); VarMap rmap; /** Now re-read selected indexes and remove broken items */ list = treeView_TARGET->selectionModel()->selectedRows(0); getItems(list, items); if (items.isEmpty()) return; switch (act){ case Menu::Alternates: { SearchFrame *sf = ArenaWidgetFactory().create<SearchFrame>(); for (const auto &i : items) sf->searchAlternates(i->data(COLUMN_DOWNLOADQUEUE_TTH).toString()); break; } case Menu::Magnet: { QString magnet = ""; for (const auto &i : items) magnet += WulforUtil::getInstance()->makeMagnet( i->data(COLUMN_DOWNLOADQUEUE_NAME).toString(), i->data(COLUMN_DOWNLOADQUEUE_ESIZE).toLongLong(), i->data(COLUMN_DOWNLOADQUEUE_TTH).toString()) + "\n"; if (!magnet.isEmpty()) qApp->clipboard()->setText(magnet, QClipboard::Clipboard); break; } case Menu::MagnetWeb: { QString magnet = ""; for (const auto &i : items){ magnet += "[magnet=\"" + WulforUtil::getInstance()->makeMagnet( i->data(COLUMN_DOWNLOADQUEUE_NAME).toString(), i->data(COLUMN_DOWNLOADQUEUE_ESIZE).toLongLong(), i->data(COLUMN_DOWNLOADQUEUE_TTH).toString()) + "\"]"+i->data(COLUMN_DOWNLOADQUEUE_NAME).toString()+"[/magnet]\n"; } if (!magnet.isEmpty()) qApp->clipboard()->setText(magnet, QClipboard::Clipboard); break; } case Menu::MagnetInfo: { QString magnet = ""; for (const auto &i : items){ magnet = WulforUtil::getInstance()->makeMagnet( i->data(COLUMN_DOWNLOADQUEUE_NAME).toString(), i->data(COLUMN_DOWNLOADQUEUE_ESIZE).toLongLong(), i->data(COLUMN_DOWNLOADQUEUE_TTH).toString()) + "\n"; if (!magnet.isEmpty()){ Magnet m(this); m.setLink(magnet); m.exec(); } } break; } case Menu::RenameMove: { for (const auto &i : items){ QString target = i->data(COLUMN_DOWNLOADQUEUE_PATH).toString() + i->data(COLUMN_DOWNLOADQUEUE_NAME).toString(); QString new_target = QFileDialog::getSaveFileName(this, tr("Choose filename"), target, tr("All files (*.*)")); if (!new_target.isEmpty() && new_target != target){ new_target = QDir::toNativeSeparators(new_target); try { QM->move(target.toStdString(), new_target.toStdString()); } catch (const Exception &){} } } break; } case Menu::SetPriority: { for (const auto &i : items){ QString target = i->data(COLUMN_DOWNLOADQUEUE_PATH).toString() + i->data(COLUMN_DOWNLOADQUEUE_NAME).toString(); try { QM->setPriority(target.toStdString(), static_cast<QueueItem::Priority>(arg.toInt())); } catch (const Exception&) {} } break; } case Menu::Browse: { rmap = arg.toMap(); QString cid = getCID(rmap); if (d->sources.contains(target) && !cid.isEmpty()){ UserPtr user = ClientManager::getInstance()->findUser(CID(cid.toStdString())); if (user){ try { QM->addList(HintedUser(user, ""), QueueItem::FLAG_CLIENT_VIEW, ""); } catch (const Exception&){} } } break; } case Menu::SendPM: { rmap = arg.toMap(); auto it = rmap.constBegin(); dcpp::CID cid(_tq(getCID(rmap))); QString nick = ((++it).key()); QList<QObject*> list = HubManager::getInstance()->getHubs(); for (const auto &obj : list){ HubFrame *fr = qobject_cast<HubFrame*>(obj); if (!fr) continue; if (fr->hasCID(cid, nick)){ fr->createPMWindow(cid); break; } } break; } case Menu::RemoveSource: { rmap = arg.toMap(); QString cid = getCID(rmap); if (d->sources.contains(target) && !cid.isEmpty()){ UserPtr user = ClientManager::getInstance()->findUser(CID(cid.toStdString())); if (user){ try { QM->removeSource(target.toStdString(), user, QueueItem::Source::FLAG_REMOVED); } catch (const Exception&){} } } break; } case Menu::RemoveUser: { rmap = arg.toMap(); QString cid = getCID(rmap); if (d->sources.contains(target) && !cid.isEmpty()){ UserPtr user = ClientManager::getInstance()->findUser(CID(cid.toStdString())); if (user){ try { QM->removeSource(user, QueueItem::Source::FLAG_REMOVED); } catch (const Exception&){} } } break; } case Menu::Remove: { for (const auto &i : items){ QString target = i->data(COLUMN_DOWNLOADQUEUE_PATH).toString() + i->data(COLUMN_DOWNLOADQUEUE_NAME).toString(); try { QM->remove(target.toStdString()); } catch (const Exception &){} } break; } default: break; } }
void Magnet::search(const QString &tth) { SearchFrame *fr = new SearchFrame(); fr->setAttribute(Qt::WA_DeleteOnClose); fr->searchAlternates(tth); }
bool WulforUtil::openUrl(const QString &url){ if (url.startsWith("http://") || url.startsWith("www.") || url.startsWith(("ftp://")) || url.startsWith("https://")){ if (!SETTING(MIME_HANDLER).empty()) QProcess::startDetached(_q(SETTING(MIME_HANDLER)), QStringList(url)); else QDesktopServices::openUrl(QUrl::fromEncoded(url.toUtf8())); } else if (url.startsWith("adc://") || url.startsWith("adcs://")){ MainWindow::getInstance()->newHubFrame(url, "UTF-8"); } else if (url.startsWith("dchub://") || url.startsWith("nmdcs://")){ MainWindow::getInstance()->newHubFrame(url, WSGET(WS_DEFAULT_LOCALE)); } else if (url.startsWith("magnet:") && url.contains("urn:tree:tiger")){ QString magnet = url; Magnet *m = new Magnet(MainWindow::getInstance()); m->setLink(magnet); m->exec(); m->deleteLater(); } else if (url.startsWith("magnet:")){ const QString magnet = url; #if QT_VERSION >= 0x050000 QUrlQuery u; #else QUrl u; #endif if (!magnet.contains("+")) { #if QT_VERSION >= 0x050000 u.setQuery(magnet.toUtf8()); #else u.setEncodedUrl(magnet.toUtf8()); #endif } else { QString _l = magnet; _l.replace("+", "%20"); #if QT_VERSION >= 0x050000 u.setQuery(_l.toUtf8()); #else u.setEncodedUrl(_l.toUtf8()); #endif } if (u.hasQueryItem("kt")) { QString keywords = u.queryItemValue("kt"); QString hub = u.hasQueryItem("xs")? u.queryItemValue("xs") : ""; if (!(hub.startsWith("dchub://", Qt::CaseInsensitive) || hub.startsWith("nmdcs://", Qt::CaseInsensitive) || hub.startsWith("adc://", Qt::CaseInsensitive) || hub.startsWith("adcs://", Qt::CaseInsensitive)) && !hub.isEmpty()) hub.prepend("dchub://"); if (keywords.isEmpty()) return false; if (!hub.isEmpty()) WulforUtil::openUrl(hub); SearchFrame *sfr = ArenaWidgetFactory().create<SearchFrame>(); sfr->fastSearch(keywords, false); } else { if (!SETTING(MIME_HANDLER).empty()) QProcess::startDetached(_q(SETTING(MIME_HANDLER)), QStringList(url)); else QDesktopServices::openUrl(QUrl::fromEncoded(url.toUtf8())); } } else return false; return true; }