From 34050a0c87ff606b3ee56fe83dfdab0afde67a7d Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 30 Mar 2013 00:33:23 +0100 Subject: Managing sessions, first bits This code is based on the patch from mayank jha about session saving. Will be used as "first part" of the session saving support in rekonq. CCMAIL: mjnovice@gmail.com --- src/sessionmanager.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) (limited to 'src/sessionmanager.cpp') diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp index 8c781720..9aa02560 100644 --- a/src/sessionmanager.cpp +++ b/src/sessionmanager.cpp @@ -369,3 +369,96 @@ QList SessionManager::closedSitesForWindow(const QString &windowName return list; } + + +// ------------------------------------------------------------------------------------------------------- + + +bool SessionManager::saveYourSession() +{ + kDebug() << "SAVING YOUR OWN SESSION..."; + + const QString & sessionName = KStandardDirs::locateLocal("appdata" , QL1S("usersessions/")); + + QFile sessionFile(sessionName + QL1S("prova")); // FIXME + if (!sessionFile.open(QFile::WriteOnly | QFile::Truncate)) + { + kDebug() << "Unable to open session file" << sessionFile.fileName(); + return true; + } + RekonqWindowList wl = rApp->rekonqWindowList(); + QDomDocument document("session"); + QDomElement session = document.createElement("session"); + document.appendChild(session); + + Q_FOREACH(const QWeakPointer &w, wl) + { + if (w.data()->isPrivateBrowsingMode()) + continue; + + QDomElement window = document.createElement("window"); + int tabInserted = 0; + + window.setAttribute("name", w.data()->objectName()); + + TabWidget *tw = w.data()->tabWidget(); + for (signed int tabNo = 0; tabNo < tw->count(); tabNo++) + { + KUrl u = tw->webWindow(tabNo)->url(); + + tabInserted++; + QDomElement tab = document.createElement("tab"); + tab.setAttribute("title", tw->webWindow(tabNo)->title()); // redundant, but needed for closedSites() + // as there's not way to read out the historyData + tab.setAttribute("url", u.url()); + if (tw->currentIndex() == tabNo) + { + tab.setAttribute("currentTab", 1); + } + if (tw->tabBar()->tabData(tabNo).toBool()) // pinned tab info + { + tab.setAttribute("pinned", 1); + } + QByteArray history; + QDataStream historyStream(&history, QIODevice::ReadWrite); + historyStream << *(tw->webWindow(tabNo)->page()->history()); + QDomCDATASection historySection = document.createCDATASection(history.toBase64()); + + tab.appendChild(historySection); + window.appendChild(tab); + } + + if (tabInserted > 0) + session.appendChild(window); + } + + QTextStream TextStream(&sessionFile); + document.save(TextStream, 2); + sessionFile.close(); + + return true; + +} + + +bool SessionManager::restoreYourSession() +{ + const QString & sessionName = KStandardDirs::locateLocal("appdata" , QL1S("usersessions/")); + QDomDocument document("session"); + + if (!readSessionDocument(document,sessionName + QL1S("prova"))) // FIXME + return false; + + for (unsigned int winNo = 0; winNo < document.elementsByTagName("window").length(); winNo++) + { + QDomElement window = document.elementsByTagName("window").at(winNo).toElement(); + + RekonqWindow *tw = rApp->newWindow(); + + int currentTab = loadTabs(tw, window, true, false); + + tw->tabWidget()->setCurrentIndex(currentTab); + } + + return true; +} -- cgit v1.2.1