From 64475d706faf1620cec8899da7165f4bc369d8a2 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 26 Sep 2009 00:03:00 +0200 Subject: Fixing sessionmanager (at least I hope so): - moved from DataStream to TextStream (we use strings..) - implemented a semaphore (m_safe) - closing every time file --- src/sessionmanager.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src/sessionmanager.cpp') diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp index 0c2c5c32..6b7d6b9e 100644 --- a/src/sessionmanager.cpp +++ b/src/sessionmanager.cpp @@ -41,11 +41,12 @@ // Qt Includes #include -#include +#include SessionManager::SessionManager(QObject *parent) : QObject(parent) + , m_safe(true) { m_sessionFilePath = KStandardDirs::locateLocal("appdata" , "session"); } @@ -58,23 +59,28 @@ SessionManager::~SessionManager() void SessionManager::saveSession() { + if(!m_safe) + return; + m_safe = false; QFile sessionFile(m_sessionFilePath); if (!sessionFile.open(QFile::WriteOnly | QFile::Truncate)) { kWarning() << "Unable to open session file" << sessionFile.fileName(); return; } - QDataStream out(&sessionFile); + QTextStream out(&sessionFile); MainWindowList wl = Application::instance()->mainWindowList(); Q_FOREACH(QPointer w, wl) { - out << QByteArray("window"); + out << "window\n"; MainView *mv = w->mainView(); for (int i = 0 ; i < mv->count() ; i++) { - out << mv->webView(i)->url().toEncoded(); + out << mv->webView(i)->url().toEncoded(QUrl::StripTrailingSlash) << "\n"; } } + sessionFile.close(); + m_safe = true; return; } @@ -90,22 +96,23 @@ bool SessionManager::restoreSession() return false; } - QDataStream in(&sessionFile); - int i = 0; - while (!sessionFile.atEnd()) + QTextStream in(&sessionFile); + QString line; + do { - ++i; - QByteArray data; - in >> data; - if(data == QByteArray("window")) + line = in.readLine(); + if(line == QString("window")) { Application::instance()->newMainWindow(); + line = in.readLine(); + Application::instance()->loadUrl(line); } else { - Application::instance()->loadUrl(data,Rekonq::NewCurrentTab); + Application::instance()->loadUrl(line, Rekonq::NewCurrentTab); } } - + while(!line.isNull()); + return true; } -- cgit v1.2.1