diff options
Diffstat (limited to 'src/websnap.cpp')
-rw-r--r-- | src/websnap.cpp | 141 |
1 files changed, 78 insertions, 63 deletions
diff --git a/src/websnap.cpp b/src/websnap.cpp index 7dcbb836..aaaed1d5 100644 --- a/src/websnap.cpp +++ b/src/websnap.cpp @@ -3,7 +3,8 @@ * This file is a part of the rekonq project * * Copyright (C) 2009 Nokia Corporation <qt-info@nokia.com> -* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009-2010 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2010 by Matthieu Gicquel <matgic78 at gmail dot com> * * * This program is free software; you can redistribute it and/or @@ -11,9 +12,9 @@ * 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 +* 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 @@ -29,76 +30,73 @@ #include "websnap.h" #include "websnap.moc" +// Local Includes +#include "newtabpage.h" + // KDE Includes -#include <KDebug> #include <KStandardDirs> // Qt Includes -#include <QSize> -#include <QWebFrame> -#include <QWebSettings> -#include <QPainter> -#include <QTimer> -#include <QFile> +#include <QtCore/QSize> +#include <QtCore/QTimer> +#include <QtCore/QFile> +#include <QtGui/QPainter> -#define WIDTH 200 -#define HEIGHT 150 +#include <QtWebKit/QWebFrame> +#include <QtWebKit/QWebSettings> -WebSnap::WebSnap(const QUrl &url) - : QObject() -{ - m_url = url; +WebSnap::WebSnap(const KUrl& url, QObject *parent) + : QObject(parent) + , m_url(url) +{ // this to not register websnap history m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - + // this to not let this page open other windows m_page.settings()->setAttribute(QWebSettings::PluginsEnabled, false); m_page.settings()->setAttribute(QWebSettings::JavascriptEnabled, false); connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool))); - QTimer::singleShot(0, this, SLOT(load())); -} - -WebSnap::~WebSnap() -{ + QTimer::singleShot(0, this, SLOT(load())); } - void WebSnap::load() { m_page.mainFrame()->load(m_url); } -QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) +// NOTE please, be careful modifying this. +// You are playing with fire.. +QPixmap WebSnap::renderPreview(const QWebPage &page, int w, int h) { + // NOTE + // it seems no way to enable/disable scrollbars in new QtWebKit's + // and this is affecting tabbed browsing + // prepare page - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); // Why it doesn't work with one setScrollBarPolicy? - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); // bug in qtwebkit ? - page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); - page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); + QSize oldSize = page.viewportSize(); +// page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); +// page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); // find the best size QSize size; - if (page.viewportSize().width() && page.viewportSize().height()) - { - size = page.viewportSize(); - } - else + int width = page.mainFrame()->contentsSize().width(); + if (width < 640) { - int width = page.mainFrame()->contentsSize().width(); - if (width < 640) width = 640; - size = QSize(width,width*((0.0+h)/w)); - page.setViewportSize(size); + width = 640; } - + size = QSize(width, width * ((0.0 + h) / w)); + page.setViewportSize(size); + // create the page image QImage pageImage = QImage(size, QImage::Format_ARGB32_Premultiplied); - pageImage.fill(Qt::transparent); + pageImage.fill(Qt::transparent); + // render it QPainter p(&pageImage); page.mainFrame()->render(&p); @@ -106,43 +104,60 @@ QPixmap WebSnap::renderPreview(const QWebPage &page,int w, int h) pageImage = pageImage.scaled(w, h, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); // restore page settings - page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); - page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); - page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); - - return QPixmap::fromImage(pageImage); -} +// page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded); +// page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded); + page.setViewportSize(oldSize); + QPixmap pm = QPixmap::fromImage(pageImage); + KUrl url(page.mainFrame()->url()); + kDebug() << "saving preview"; -void WebSnap::saveResult(bool ok) -{ - // crude error-checking - if (!ok) - { - kDebug() << "Error loading site.."; - return; - } + QString path = imagePathFromUrl(url); + QFile::remove(path); + pm.save(path); - m_image = renderPreview(m_page, WIDTH, HEIGHT); - emit finished(); + return pm; } - -QString WebSnap::snapTitle() +QString WebSnap::imagePathFromUrl(const KUrl &url) { - return m_page.mainFrame()->title(); + QUrl temp = QUrl(url.url()); + QString name = temp.toString(QUrl::RemoveScheme | QUrl::RemoveUserInfo | QUrl::StripTrailingSlash); + + // TODO learn Regular Expressions :) + // and implement something better here.. + name.remove('/'); + name.remove('&'); + name.remove('.'); + name.remove('-'); + name.remove('_'); + name.remove('?'); + name.remove('='); + name.remove('+'); + + return KStandardDirs::locateLocal("cache", QString("thumbs/") + name + ".png", true); } -QUrl WebSnap::snapUrl() +void WebSnap::saveResult(bool ok) { - return m_url; + if (ok) + { + QPixmap image = renderPreview(m_page, WIDTH, HEIGHT); + QString path = imagePathFromUrl(m_url); + QFile::remove(path); + image.save(path); + } + + emit snapDone(ok); + kDebug() << "SAVE RESULTS: " << ok << " URL: " << m_url; + + this->deleteLater(); } -QPixmap WebSnap::previewImage() +bool WebSnap::existsImage(const KUrl &u) { - return m_image; + return QFile::exists(imagePathFromUrl(u)); } |