summaryrefslogtreecommitdiff
path: root/src/websnap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/websnap.cpp')
-rw-r--r--src/websnap.cpp141
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));
}