/* ============================================================ * * 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 "protocolhandler.h" // Local Includes #include "newtabpage.h" #include "application.h" #include "mainwindow.h" #include "mainview.h" #include "urlbar.h" // KDE Includes #include #include #include #include #include #include #include #include // Qt Includes #include #include #include #include #include #include ProtocolHandler::ProtocolHandler() { } ProtocolHandler::~ProtocolHandler() { } bool ProtocolHandler::handle(const QNetworkRequest &request, QWebFrame *frame) { KUrl url( request.url() ); // "mailto" handling if ( url.protocol() == QLatin1String("mailto") ) { KToolInvocation::invokeMailer(url); return true; } // "about" handling if ( url.protocol() == QLatin1String("about") ) { if( url == KUrl("about:closedTabs") || url == KUrl("about:history") || url == KUrl("about:bookmarks") || url == KUrl("about:favorites") || url == KUrl("about:home") ) { NewTabPage p(frame); p.generate(url); return true; } } // "ftp" handling if(url.protocol() == QLatin1String("ftp")) { KUrl::List list; list.append(url); KRun::run("dolphin %u",url,0); return true; } // "file" handling if(url.protocol() == QLatin1String("file")) { QFileInfo fileInfo(url.path()); if(fileInfo.isFile()) { new KRun(url, 0, 0, true); } else // dir { QString html = dirHandling(url); frame->setHtml(html); Application::instance()->mainWindow()->mainView()->urlBar()->setUrl(url); } return true; } return false; } QString ProtocolHandler::dirHandling(const KUrl &url) { QDir dir(url.toLocalFile()); if (!dir.exists()) { QString errStr = i18n("Error opening: %1: No such file or directory", dir.absolutePath() ); return errStr; } if (!dir.isReadable()) { QString errStr = i18n("Unable to read %1", dir.absolutePath() ); return errStr; } // display "rekonq info" page QString infoFilePath = KStandardDirs::locate("data", "rekonq/htmls/rekonqinfo.html"); QFile file(infoFilePath); bool isOpened = file.open(QIODevice::ReadOnly); if (!isOpened) { return QString("rekonq error, sorry :("); } QString title = url.path(); QString msg = "

" + i18n("Index of ") + "file://" + url.path() + "

"; dir.setFilter(QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot); QFileInfoList entries = dir.entryInfoList(); if(!dir.isRoot()) { QString path = "file://" + dir.absoluteFilePath(".."); QString uparrow = KIconLoader::global()->iconPath( "arrow-up", KIconLoader::Small ); msg += "\"up-arrow\""; msg += "" + i18n("Up to higher level directory") + "

"; } msg += ""; msg += ""; foreach(const QFileInfo &item, entries) { msg += ""; QString fullPath = QString("file://") + item.absoluteFilePath(); QString iconName = KMimeType::defaultMimeTypePtr()->iconNameForUrl(fullPath); QString icon = QString("file://") + KIconLoader::global()->iconPath( iconName, KIconLoader::Small ); msg += ""; msg += ""; msg += ""; msg += ""; } msg += "
" + i18n("Name") + "" + i18n("Size") + "" + i18n("Last Modified") + "
"; msg += "\"" "; msg += "" + item.fileName() + ""; msg += ""; if(item.isFile()) { msg += QString::number( item.size()/1024 ) + " KB"; } msg += ""; msg += item.lastModified().toString("dd/MM/yyyy hh:mm:ss"); msg += "
"; QString html = QString(QLatin1String(file.readAll())) .arg(title) .arg(msg) ; return html; }