WebBrowser/Session/SessionManager.py

changeset 5777
2c4441d65ee3
child 5779
b53fabc86f3c
diff -r 3a8bedba97ab -r 2c4441d65ee3 WebBrowser/Session/SessionManager.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/Session/SessionManager.py	Thu Jun 29 19:21:52 2017 +0200
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the session manager.
+"""
+
+from __future__ import unicode_literals
+
+import os
+import json
+
+from PyQt5.QtCore import pyqtSlot, QObject, QTimer, QDir
+
+import Utilities
+import Preferences
+
+
+class SessionManager(QObject):
+    """
+    Class implementing the session manager.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super(SessionManager, self).__init__(parent)
+        
+        sessionsDir = QDir(self.getSessionsDirectory())
+        if not sessionsDir.exists():
+            sessionsDir.mkpath(self.getSessionsDirectory())
+        
+        self.__autoSaveTimer = QTimer()
+        self.__autoSaveTimer.setSingleShot(True)
+        self.__autoSaveTimer.timeout.connect(self.__autoSaveSession)
+        self.__initSessionSaveTimer()
+    
+    def preferencesChanged(self):
+        """
+        Public slot to react upon changes of the settings.
+        """
+        self.__initSessionSaveTimer()
+        # TODO: implement this
+    
+    def getSessionsDirectory(self):
+        """
+        Public method to get the directory sessions are stored in.
+        
+        @return name of the sessions directory
+        @rtype str
+        """
+        return os.path.join(Utilities.getConfigDir(),
+                            "web_browser", "sessions")
+    
+    def defaultSessionFile(self):
+        """
+        Public method to get the name of the default session file.
+        
+        @return name of the default session file
+        @rtype str
+        """
+        return os.path.join(self.getSessionsDirectory(), "session.json")
+    
+    def __initSessionSaveTimer(self):
+        """
+        Private slot to initialize the auto save timer.
+        """
+        self.__autoSaveInterval = Preferences.getWebBrowser(
+            "SessionAutoSaveInterval") * 1000
+        
+        if Preferences.getWebBrowser("SessionAutoSave"):
+            if not self.__autoSaveTimer.isActive():
+                self.__autoSaveTimer.start(self.__autoSaveInterval)
+        else:
+            self.__autoSaveTimer.stop()
+    
+    @pyqtSlot()
+    def __autoSaveSession(self):
+        """
+        Private slot to save the current session state.
+        """
+        from WebBrowser.WebBrowserWindow import WebBrowserWindow
+        
+        if not WebBrowserWindow.isPrivate():
+            self.writeCurrentSession(self.defaultSessionFile())
+        
+        self.__autoSaveTimer.start(self.__autoSaveInterval)
+    
+    def writeCurrentSession(self, sessionFileName):
+        """
+        Public method to write the current session to the given file name.
+        
+        @param sessionFileName file name of the session
+        @type str
+        """
+        from WebBrowser.WebBrowserWindow import WebBrowserWindow
+        
+        sessionData = {"Windows": []}
+        
+        for window in WebBrowserWindow.mainWindows():
+            data = window.tabWidget().getSessionData()
+            
+            # add window geometry
+            geometry = window.saveGeometry()
+            data["WindowGeometry"] = bytes(geometry.toBase64()).decode("ascii")
+            
+            sessionData["Windows"].append(data)
+        
+        sessionFile = open(sessionFileName, "w")
+        json.dump(sessionData, sessionFile, indent=2)
+        sessionFile.close()

eric ide

mercurial