/* ============================================================ * * This file is a part of the rekonq project * * Copyright (C) 2009 by Andrea Diamantini * * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License or (at your option) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * ============================================================ */ // Self Includes #include "urlresolver.h" // Local Includes #include "application.h" #include "historymanager.h" #include "bookmarksmanager.h" // KDE Includes #include #include #include #include #include #include // Qt Includes #include #include #include // NOTE default kurifilter plugin list (at least in my box) // 1. "kshorturifilter" // 2. "kurisearchfilter" // 3. "localdomainurifilter" // 4 ."kuriikwsfilter" // 5. "fixhosturifilter" UrlResolver::UrlResolver(const QString &typedUrl) : _urlString(typedUrl) { } UrlSearchList UrlResolver::orderedSearchItems() { // NOTE: the logic here is : "we wanna suggest (at least) 9 elements" // so we have (more or less) 3 from first results (1 from QUrl Resolutions, 2 from // default search engines). // There are 6 remaining: if bookmarkResults + historyResults <= 6, catch all, else // catch first 3 results from the two resulting lists :) UrlSearchList list; list << qurlFromUserInputResolution(); list << webSearchesResolution(); int firstResults = list.count(); int checkPoint = 9 - firstResults; UrlSearchList historyList = historyResolution(); int historyResults = historyList.count(); UrlSearchList bookmarksList = bookmarksResolution(); int bookmarkResults = bookmarksList.count(); if(historyResults + bookmarkResults > checkPoint) { historyList = historyList.mid(0,3); bookmarksList = bookmarksList.mid(0,3); } list << historyList; list << bookmarksList; return list; } ////////////////////////////////////////////////////////////////////////// // PRIVATE ENGINES // STEP 1 = QUrl from User Input (easily the best solution... ) UrlSearchList UrlResolver::qurlFromUserInputResolution() { UrlSearchList list; QString url2 = _urlString; QUrl urlFromUserInput = QUrl::fromUserInput(url2); if(urlFromUserInput.isValid()) { QByteArray ba = urlFromUserInput.toEncoded(); if(!ba.isEmpty()) { QString str(ba); UrlSearchItem it(str); list << it; } } return list; } // STEP 2 = Web Searches UrlSearchList UrlResolver::webSearchesResolution() { UrlSearchList list; QString url1 = _urlString; if(KUrl(url1).isRelative() && !url1.contains('.')) { // KUriFilter has the worst performance possible here and let this trick unusable QString gUrl = QString("http://www.google.com/search?q=%1&ie=UTF-8&oe=UTF-8").arg(url1); QString gTitle = i18n("Search Google for ") + url1; UrlSearchItem gItem(gUrl, gTitle, QString("http://www.google.com") ); list << gItem; QString wUrl = QString("http://en.wikipedia.org/wiki/Special:Search?search=%1&go=Go").arg(url1); QString wTitle = i18n("Search Wikipedia for ") + url1; UrlSearchItem wItem(wUrl, wTitle, QString("http://wikipedia.org") ); list << wItem; } return list; } // STEP 3 = history completion UrlSearchList UrlResolver::historyResolution() { UrlSearchList list; KCompletion *historyCompletion = Application::historyManager()->completionObject(); QStringList historyResults = historyCompletion->substringCompletion(_urlString); Q_FOREACH(const QString &s, historyResults) { UrlSearchItem it(s, s, QString("view-history")); list << it; } return list; } // STEP 4 = bookmarks completion UrlSearchList UrlResolver::bookmarksResolution() { UrlSearchList list; KCompletion *bookmarkCompletion = Application::bookmarkProvider()->completionObject(); QStringList bookmarkResults = bookmarkCompletion->substringCompletion(_urlString); Q_FOREACH(const QString &s, bookmarkResults) { UrlSearchItem it( s, QString(), QString("rating") ); list << it; } return list; }