Skip to content

Commit

Permalink
Merge pull request #5 from quinox/master
Browse files Browse the repository at this point in the history
Add persistent cookiejar, hide mouse cursor
  • Loading branch information
Sergey committed Aug 25, 2014
2 parents 37d3ad4 + c37d658 commit 8d4f669
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 2 deletions.
9 changes: 9 additions & 0 deletions resources/qt-webkit-kiosk.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ startup_load_delayed=true
; Delay in msec
startup_load_delay=100

; When you enable the cookiejar your cookies will be remembered between runs.
; When you disable the cookiejar your cookies will disappear when you quit the program.
cookiejar=false

java=false
javascript=true
; handle window.open?
Expand Down Expand Up @@ -137,3 +141,8 @@ show_load_progress=true

; Page scale factor
page_scale=1.0

; If you use this program without a mouse it can be nice to hide the mouse.
; This does not disable the mouse itself: you can still interact with websites
; using the mouse, you just won't be able to see the mouse pointer.
hide_mouse_cursor=false
15 changes: 15 additions & 0 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
#endif

#include "cachingnm.h"
#include "persistentcookiejar.h"

MainWindow::MainWindow() : QMainWindow()
{
Expand Down Expand Up @@ -182,6 +183,10 @@ void MainWindow::init(AnyOption *opts)
loadProgress->hide();
}

if (mainSettings->value("view/hide_mouse_cursor").toBool()) {
QApplication::setOverrideCursor(Qt::BlankCursor);
}

setCentralWidget(view);

view->setSettings(mainSettings);
Expand Down Expand Up @@ -213,6 +218,10 @@ void MainWindow::init(AnyOption *opts)
view->page()->setNetworkAccessManager(nm);
}

if (mainSettings->value("browser/cookiejar").toBool()) {
view->page()->networkAccessManager()->setCookieJar(new PersistentCookieJar());
}

view->settings()->setAttribute(QWebSettings::JavascriptEnabled,
mainSettings->value("browser/javascript").toBool()
);
Expand Down Expand Up @@ -563,6 +572,9 @@ void MainWindow::loadSettings(QString ini_file)
if (!mainSettings->contains("browser/ignore_ssl_errors")) {
mainSettings->setValue("browser/ignore_ssl_errors", true);
}
if (!mainSettings->contains("browser/cookiejar")) {
mainSettings->setValue("browser/cookiejar", false);
}
// Show default homepage if window closed by javascript
if (!mainSettings->contains("browser/show_homepage_on_window_close")) {
mainSettings->setValue("browser/show_homepage_on_window_close", true);
Expand Down Expand Up @@ -662,6 +674,9 @@ void MainWindow::loadSettings(QString ini_file)
if (!mainSettings->contains("attach/styles")) {
mainSettings->setValue("attach/styles", "");
}
if (!mainSettings->contains("view/hide_mouse_cursor")) {
mainSettings->setValue("view/hide_mouse_cursor", false);
}

mainSettings->sync();
}
Expand Down
83 changes: 83 additions & 0 deletions src/persistentcookiejar.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#include "persistentcookiejar.h"

#include <QDebug>
#include <QNetworkCookie>
#include <QDir>
#include <QFile>
#include <QDesktopServices>


const char *PersistentCookieJar::line_separator = "\n";

PersistentCookieJar::PersistentCookieJar(QObject *parent) :
QNetworkCookieJar(parent)
{
QString cookiejar_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);

if (cookiejar_path.length() == 0) {
qDebug() << "No data locations available; not storing any cookies.";
cookiejar_location = "";
return;
}

QDir cookiejar_dir(cookiejar_path);
if (!cookiejar_dir.exists()) {
cookiejar_dir.mkpath(".");
}

cookiejar_location = cookiejar_path + "/cookiejar.txt";

load();
}

bool PersistentCookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url)
{
bool answer = QNetworkCookieJar::setCookiesFromUrl(cookieList, url);
if (cookiejar_location.length() != 0) {
store();
}
return answer;
}

void PersistentCookieJar::store() {
qDebug() << "Writing cookies to " << cookiejar_location;

QFile storage(cookiejar_location);
storage.open(QIODevice::WriteOnly);

QList<QNetworkCookie> cookies = allCookies();

for (int i=0; i < cookies.length(); i++)
{
qDebug() << "Writing cookie " + i;
storage.write(cookies[i].toRawForm());
storage.write(line_separator);
}

qDebug() << "Wrote" << cookies.length() << "cookies to the cookiejar.";

storage.flush();
storage.close();
}

void PersistentCookieJar::load() {
qDebug() << "Loading cookies from" << cookiejar_location;

QFile storage(cookiejar_location);
storage.open(QIODevice::ReadOnly);
QByteArray bytes = storage.readAll();
QList<QByteArray> cookies = bytes.split(*line_separator);

int valid_cookies = 0;

for (int i=0; i < cookies.length(); i++) {
QList<QNetworkCookie> parsed_cookies = QNetworkCookie::parseCookies(cookies[i]);
for (int j=0; j < parsed_cookies.length(); j++) {
insertCookie(parsed_cookies[j]);
valid_cookies++;
}
}

qDebug() << "Read" << valid_cookies << "valid cookies from the cookiejar.";
storage.close();
}
24 changes: 24 additions & 0 deletions src/persistentcookiejar.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#ifndef PERSISTENTCOOKIEJAR_H
#define PERSISTENTCOOKIEJAR_H

#include <QNetworkCookieJar>

class PersistentCookieJar : public QNetworkCookieJar
{
Q_OBJECT
public:
explicit PersistentCookieJar(QObject *parent = 0);

bool setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url);
void store();
void load();
private:
QString cookiejar_location;
static const char *line_separator;
signals:

public slots:

};

#endif // PERSISTENTCOOKIEJAR_H
6 changes: 4 additions & 2 deletions src/qt-webkit-kiosk.pro
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ SOURCES += main.cpp\
fakewebview.cpp \
cachingnm.cpp \
unixsignals.cpp \
socketpair.cpp
socketpair.cpp \
persistentcookiejar.cpp

HEADERS += mainwindow.h \
webview.h \
Expand All @@ -144,7 +145,8 @@ HEADERS += mainwindow.h \
fakewebview.h \
cachingnm.h \
unixsignals.h \
socketpair.h
socketpair.h \
persistentcookiejar.h

# DEBUG
#message(- SOURCES: $${SOURCES})
Expand Down

0 comments on commit 8d4f669

Please sign in to comment.