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; }