diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/application.cpp | 23 | ||||
| -rw-r--r-- | src/application.h | 10 | ||||
| -rw-r--r-- | src/mainview.cpp | 4 | ||||
| -rw-r--r-- | src/sessionmanager.cpp | 116 | ||||
| -rw-r--r-- | src/sessionmanager.h | 56 | 
6 files changed, 207 insertions, 3 deletions
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a2d0db60..1b760a64 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,6 +21,7 @@ SET( rekonq_SRCS      panelhistory.cpp      lineedit.cpp      webpage.cpp +    sessionmanager.cpp  ) diff --git a/src/application.cpp b/src/application.cpp index 8324d212..1e30cfd0 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -41,6 +41,7 @@  #include "mainview.h"  #include "webview.h"  #include "urlbar.h" +#include "sessionmanager.h"  // KDE Includes  #include <KCmdLineArgs> @@ -62,6 +63,7 @@  QPointer<HistoryManager> Application::s_historyManager;  QPointer<NetworkAccessManager> Application::s_networkAccessManager;  QPointer<BookmarkProvider> Application::s_bookmarkProvider; +QPointer<SessionManager> Application::s_sessionManager; @@ -82,6 +84,11 @@ Application::~Application()  int Application::newInstance()  { +    if( isSessionRestored() && sessionManager()->restoreSession() ) +    { +            return 1; +    } +          KCmdLineArgs::setCwd(QDir::currentPath().toUtf8());      KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); @@ -141,6 +148,7 @@ void Application::postLaunch()      QWebSettings::setIconDatabasePath(directory);      Application::historyManager(); +    Application::sessionManager();  } @@ -208,6 +216,16 @@ BookmarkProvider *Application::bookmarkProvider()  } +SessionManager *Application::sessionManager() +{ +    if(!s_sessionManager) +    { +        s_sessionManager = new SessionManager(instance()); +    } +    return s_sessionManager; +} + +  KIcon Application::icon(const KUrl &url)  {      KIcon icon; @@ -384,3 +402,8 @@ MainWindow *Application::newMainWindow()      return w;  } + +MainWindowList Application::mainWindowList() +{ +    return m_mainWindows; +} diff --git a/src/application.h b/src/application.h index 60aec259..61d93b87 100644 --- a/src/application.h +++ b/src/application.h @@ -49,6 +49,7 @@ class CookieJar;  class HistoryManager;  class MainWindow;  class NetworkAccessManager; +class SessionManager;  typedef QList< QPointer<MainWindow> > MainWindowList; @@ -99,14 +100,16 @@ public:      static Application *instance();      MainWindow *mainWindow(); - +    MainWindowList mainWindowList(); +          static KIcon icon(const KUrl &url);      static HistoryManager *historyManager();      static CookieJar *cookieJar();      static NetworkAccessManager *networkAccessManager();      static BookmarkProvider *bookmarkProvider(); - +    static SessionManager *sessionManager(); +      public slots:      /**       * Save application's configuration @@ -138,7 +141,8 @@ private:      static QPointer<HistoryManager> s_historyManager;      static QPointer<NetworkAccessManager> s_networkAccessManager;      static QPointer<BookmarkProvider> s_bookmarkProvider; - +    static QPointer<SessionManager> s_sessionManager; +          MainWindowList m_mainWindows;  }; diff --git a/src/mainview.cpp b/src/mainview.cpp index a12ec8f9..76684c31 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -40,6 +40,7 @@  #include "history.h"  #include "urlbar.h"  #include "webview.h" +#include "sessionmanager.h"  // KDE Includes  #include <KUrl> @@ -92,6 +93,9 @@ MainView::MainView(QWidget *parent)      setTabsClosable(true);      connect(m_tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(slotCloseTab(int))); + +    // Session Manager +    connect (this,SIGNAL(tabsChanged()),Application::sessionManager(),SLOT(saveSession()));  } diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp new file mode 100644 index 00000000..34466e6e --- /dev/null +++ b/src/sessionmanager.cpp @@ -0,0 +1,116 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009 by Yoram Bar-Haim <<yoram.b at zend dot com> +* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr> +* +* +* 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 <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "sessionmanager.h" +#include "sessionmanager.moc" + +// Local Includes +#include "application.h" +#include "mainwindow.h" +#include "mainview.h" + +// KDE Includes +#include <KStandardDirs> +#include <KDebug> + +// Qt Includes +#include <QFile> +#include <QDataStream> + + +SessionManager::SessionManager(QObject *parent) +    : QObject(parent) +{ +    m_sessionFilePath = KStandardDirs::locateLocal("appdata" , "session"); +} + + +SessionManager::~SessionManager() +{ +    // rekonq is closing well. no need for session file +    QFile sessionFile(m_sessionFilePath); +    sessionFile.remove(); +} + + +void SessionManager::saveSession() +{ +    QFile sessionFile(m_sessionFilePath); +    if (!sessionFile.open(QFile::WriteOnly | QFile::Truncate)) +    { +        kWarning() << "Unable to open session file" << sessionFile.fileName(); +        return; +    } +    QDataStream out(&sessionFile); +    MainWindowList wl = Application::instance()->mainWindowList(); +    foreach(QPointer<MainWindow> w, wl) +    { +        out << QByteArray("window"); +        MainView *mv = w->mainView(); +        for (int i = 0 ; i < mv->count() ; i++) +        { +            out << mv->webView(i)->url().toEncoded(); +        } +    } +    return; +} + + +bool SessionManager::restoreSession() +{ +    QFile sessionFile(m_sessionFilePath); +    if (!sessionFile.exists()) +        return false; +    if (!sessionFile.open(QFile::ReadOnly)) +    { +        kWarning() << "Unable to open session file" << sessionFile.fileName(); +        return false; +    } + +    QDataStream in(&sessionFile); +    int i = 0; +    while (!sessionFile.atEnd()) +    { +        ++i; +        QByteArray data; +        in >> data; +        if(data == QByteArray("window")) +        { +            Application::instance()->newMainWindow(); +        } +        else +        { +            Application::instance()->loadUrl(data,Rekonq::NewCurrentTab); +        } +    } + +    // session is restored. remove session file. +    sessionFile.remove(); +    return true; +} diff --git a/src/sessionmanager.h b/src/sessionmanager.h new file mode 100644 index 00000000..1ff8fa53 --- /dev/null +++ b/src/sessionmanager.h @@ -0,0 +1,56 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009 by Yoram Bar-Haim <<yoram.b at zend dot com> +* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr> +* +* +* 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 <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef SESSION_MANAGER_H +#define SESSION_MANAGER_H + + +// Qt Includes +#include <QtCore/QObject> +#include <QtCore/QString> + +/** +  * +  */ +class SessionManager : public QObject +{ +    Q_OBJECT +public: +    SessionManager(QObject *parent = 0); +    ~SessionManager(); +     +public slots: +    void saveSession(); +    bool restoreSession(); + +private: +    QString m_sessionFilePath; +}; + + +#endif // SESSION_MANAGER_H | 
