summaryrefslogtreecommitdiff
path: root/src/protocolhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocolhandler.cpp')
-rw-r--r--src/protocolhandler.cpp151
1 files changed, 113 insertions, 38 deletions
diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp
index c90afd19..c97bc475 100644
--- a/src/protocolhandler.cpp
+++ b/src/protocolhandler.cpp
@@ -2,7 +2,7 @@
*
* This file is a part of the rekonq project
*
-* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -36,7 +36,9 @@
#include "mainwindow.h"
#include "mainview.h"
#include "urlbar.h"
+#include "webtab.h"
#include "historymanager.h"
+#include "adblockmanager.h"
// KDE Includes
#include <klocalizedstring.h>
@@ -51,6 +53,7 @@
#include <KFileItem>
#include <KJob>
#include <kio/udsentry.h>
+#include <KMessageBox>
// Qt Includes
#include <QLatin1String>
@@ -60,13 +63,15 @@
#include <QFile>
#include <QDateTime>
+// Defines
+#define QL1S(x) QLatin1String(x)
+
ProtocolHandler::ProtocolHandler(QObject *parent)
: QObject(parent)
- , _lister(new KDirLister)
+ , _lister(0)
, _frame(0)
{
- connect( _lister, SIGNAL(newItems(const KFileItemList &)), this, SLOT(showResults(const KFileItemList &)));
}
@@ -80,18 +85,16 @@ bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *fra
_url = request.url();
_frame = frame;
- kDebug() << "URL PROTOCOL: " << _url;
-
+ // "http(s)" (fast) handling
+ if( _url.protocol() == QL1S("http") || _url.protocol() == QL1S("https") )
+ return false;
+
// relative urls
if(_url.isRelative())
return false;
-
- // "http(s)" (fast) handling
- if( _url.protocol() == QLatin1String("http") || _url.protocol() == QLatin1String("https") )
- return false;
-
+
// javascript handling
- if( _url.protocol() == QLatin1String("javascript") )
+ if( _url.protocol() == QL1S("javascript") )
{
QString scriptSource = _url.authority();
QVariant result = frame->evaluateJavaScript(scriptSource);
@@ -99,15 +102,28 @@ bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *fra
}
// "mailto" handling
- if ( _url.protocol() == QLatin1String("mailto") )
+ if ( _url.protocol() == QL1S("mailto") )
{
KToolInvocation::invokeMailer(_url);
return true;
}
+ // "abp" handling
+ if ( _url.protocol() == QL1S("abp") )
+ {
+ abpHandling();
+ return true;
+ }
+
// "about" handling
- if ( _url.protocol() == QLatin1String("about") )
+ if ( _url.protocol() == QL1S("about") )
{
+ // let webkit manage the about:blank url...
+ if( _url == KUrl("about:blank") )
+ {
+ return false;
+ }
+
if( _url == KUrl("about:home") )
{
switch(ReKonfig::newTabStartPage())
@@ -118,26 +134,22 @@ bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *fra
case 1: // closed tabs
_url = KUrl("about:closedTabs");
break;
- case 2: // history
- _url = KUrl("about:history");
- break;
- case 3: // bookmarks
+ case 2: // bookmarks
_url = KUrl("about:bookmarks");
break;
+ case 3: // history
+ _url = KUrl("about:history");
+ break;
+ case 4: // downloads
+ _url = KUrl("about:downloads");
default: // unuseful
break;
}
}
- if( _url == KUrl("about:closedTabs")
- || _url == KUrl("about:history")
- || _url == KUrl("about:bookmarks")
- || _url == KUrl("about:favorites")
- )
- {
- NewTabPage p(frame);
- p.generate(_url);
- return true;
- }
+
+ NewTabPage p(frame);
+ p.generate(_url);
+ return true;
}
return false;
@@ -152,12 +164,12 @@ bool ProtocolHandler::postHandling(const QNetworkRequest &request, QWebFrame *fr
kDebug() << "URL PROTOCOL: " << _url;
// "http(s)" (fast) handling
- if( _url.protocol() == QLatin1String("http") || _url.protocol() == QLatin1String("https") )
+ if( _url.protocol() == QL1S("http") || _url.protocol() == QL1S("https") )
return false;
// "mailto" handling: It needs to be handled both here(mail links clicked)
// and in prehandling (mail url launched)
- if ( _url.protocol() == QLatin1String("mailto") )
+ if ( _url.protocol() == QL1S("mailto") )
{
KToolInvocation::invokeMailer(_url);
return true;
@@ -168,7 +180,7 @@ bool ProtocolHandler::postHandling(const QNetworkRequest &request, QWebFrame *fr
// My idea is: webkit cannot handle in any way ftp. So we have surely to return true here.
// We start trying to guess what the url represent: it's a dir? show its contents (and download them).
// it's a file? download it. It's another thing? beat me, but I don't know what to do...
- if( _url.protocol() == QLatin1String("ftp") )
+ if( _url.protocol() == QL1S("ftp") )
{
KIO::StatJob *job = KIO::stat(_url);
connect(job, SIGNAL(result(KJob*)), this, SLOT( slotMostLocalUrlResult(KJob*) ));
@@ -176,13 +188,15 @@ bool ProtocolHandler::postHandling(const QNetworkRequest &request, QWebFrame *fr
}
// "file" handling. This is quite trivial :)
- if(_url.protocol() == QLatin1String("file") )
+ if( _url.protocol() == QL1S("file") )
{
QFileInfo fileInfo( _url.path() );
if(fileInfo.isDir())
{
+ _lister = new KDirLister;
+ connect( _lister, SIGNAL(newItems(const KFileItemList &)), this, SLOT(showResults(const KFileItemList &)));
_lister->openUrl(_url);
- Application::instance()->mainWindow()->mainView()->urlBar()->setUrl(_url);
+
return true;
}
}
@@ -193,6 +207,10 @@ bool ProtocolHandler::postHandling(const QNetworkRequest &request, QWebFrame *fr
QString ProtocolHandler::dirHandling(const KFileItemList &list)
{
+ if (!_lister)
+ {
+ return QString("rekonq error, sorry :(");
+ }
KFileItem mainItem = _lister->rootItem();
KUrl rootUrl = mainItem.url();
@@ -263,7 +281,7 @@ QString ProtocolHandler::dirHandling(const KFileItemList &list)
msg += "</table>";
- QString html = QString(QLatin1String(file.readAll()))
+ QString html = QString(QL1S(file.readAll()))
.arg(title)
.arg(msg)
;
@@ -281,14 +299,13 @@ void ProtocolHandler::showResults(const KFileItemList &list)
return;
}
- if ( list.isEmpty() )
- return;
-
QString html = dirHandling(list);
- _frame->setHtml(html);
+ _frame->setHtml( html, _url );
- Application::instance()->mainWindow()->mainView()->urlBar()->setUrl(_url);
+ Application::instance()->mainWindow()->currentTab()->setFocus();
Application::historyManager()->addHistoryEntry( _url.prettyUrl() );
+
+ delete _lister;
}
@@ -304,8 +321,66 @@ void ProtocolHandler::slotMostLocalUrlResult(KJob *job)
KIO::StatJob *statJob = static_cast<KIO::StatJob*>(job);
KIO::UDSEntry entry = statJob->statResult();
if( entry.isDir() )
+ {
+ _lister = new KDirLister;
+ connect( _lister, SIGNAL(newItems(const KFileItemList &)), this, SLOT(showResults(const KFileItemList &)));
_lister->openUrl(_url);
+ }
else
emit downloadUrl(_url);
}
}
+
+
+/**
+ * abp scheme (easy) explanation
+ *
+ */
+void ProtocolHandler::abpHandling()
+{
+ kDebug() << _url;
+
+ QString path = _url.path();
+ if( path != QL1S("subscribe") )
+ return;
+
+ QMap<QString, QString> map = _url.queryItems( KUrl::CaseInsensitiveKeys );
+
+ QString location = map.value( QL1S("location") );
+ kDebug() << location;
+
+ QString title = map.value( QL1S("title") );
+ kDebug() << title;
+
+ QString requireslocation = map.value( QL1S("requireslocation") );
+ kDebug() << requireslocation;
+
+ QString requirestitle = map.value( QL1S("requirestitle") );
+ kDebug() << requirestitle;
+
+ QString info;
+ if( requirestitle.isEmpty() || requireslocation.isEmpty() )
+ {
+ info = title;
+ }
+ else
+ {
+ info = i18n("\n %1,\n %2 (required by %3)\n", title, requirestitle, title);
+ }
+
+ if ( KMessageBox::questionYesNo( 0,
+ i18n("Do you want to add the following subscriptions to your adblock settings?\n") + info,
+ i18n("Add automatic subscription to the adblock"),
+ KGuiItem(i18n("Add")),
+ KGuiItem(i18n("Discard"))
+ )
+ )
+ {
+ if( !requireslocation.isEmpty() && !requirestitle.isEmpty() )
+ {
+ Application::adblockManager()->addSubscription( requirestitle, requireslocation );
+ }
+ Application::adblockManager()->addSubscription( title, location );
+ Application::adblockManager()->loadSettings(false);
+ }
+}