WebBrowser/Session/SessionManager.py

changeset 5777
2c4441d65ee3
child 5779
b53fabc86f3c
equal deleted inserted replaced
5775:3a8bedba97ab 5777:2c4441d65ee3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the session manager.
8 """
9
10 from __future__ import unicode_literals
11
12 import os
13 import json
14
15 from PyQt5.QtCore import pyqtSlot, QObject, QTimer, QDir
16
17 import Utilities
18 import Preferences
19
20
21 class SessionManager(QObject):
22 """
23 Class implementing the session manager.
24 """
25 def __init__(self, parent=None):
26 """
27 Constructor
28
29 @param parent reference to the parent object
30 @type QObject
31 """
32 super(SessionManager, self).__init__(parent)
33
34 sessionsDir = QDir(self.getSessionsDirectory())
35 if not sessionsDir.exists():
36 sessionsDir.mkpath(self.getSessionsDirectory())
37
38 self.__autoSaveTimer = QTimer()
39 self.__autoSaveTimer.setSingleShot(True)
40 self.__autoSaveTimer.timeout.connect(self.__autoSaveSession)
41 self.__initSessionSaveTimer()
42
43 def preferencesChanged(self):
44 """
45 Public slot to react upon changes of the settings.
46 """
47 self.__initSessionSaveTimer()
48 # TODO: implement this
49
50 def getSessionsDirectory(self):
51 """
52 Public method to get the directory sessions are stored in.
53
54 @return name of the sessions directory
55 @rtype str
56 """
57 return os.path.join(Utilities.getConfigDir(),
58 "web_browser", "sessions")
59
60 def defaultSessionFile(self):
61 """
62 Public method to get the name of the default session file.
63
64 @return name of the default session file
65 @rtype str
66 """
67 return os.path.join(self.getSessionsDirectory(), "session.json")
68
69 def __initSessionSaveTimer(self):
70 """
71 Private slot to initialize the auto save timer.
72 """
73 self.__autoSaveInterval = Preferences.getWebBrowser(
74 "SessionAutoSaveInterval") * 1000
75
76 if Preferences.getWebBrowser("SessionAutoSave"):
77 if not self.__autoSaveTimer.isActive():
78 self.__autoSaveTimer.start(self.__autoSaveInterval)
79 else:
80 self.__autoSaveTimer.stop()
81
82 @pyqtSlot()
83 def __autoSaveSession(self):
84 """
85 Private slot to save the current session state.
86 """
87 from WebBrowser.WebBrowserWindow import WebBrowserWindow
88
89 if not WebBrowserWindow.isPrivate():
90 self.writeCurrentSession(self.defaultSessionFile())
91
92 self.__autoSaveTimer.start(self.__autoSaveInterval)
93
94 def writeCurrentSession(self, sessionFileName):
95 """
96 Public method to write the current session to the given file name.
97
98 @param sessionFileName file name of the session
99 @type str
100 """
101 from WebBrowser.WebBrowserWindow import WebBrowserWindow
102
103 sessionData = {"Windows": []}
104
105 for window in WebBrowserWindow.mainWindows():
106 data = window.tabWidget().getSessionData()
107
108 # add window geometry
109 geometry = window.saveGeometry()
110 data["WindowGeometry"] = bytes(geometry.toBase64()).decode("ascii")
111
112 sessionData["Windows"].append(data)
113
114 sessionFile = open(sessionFileName, "w")
115 json.dump(sessionData, sessionFile, indent=2)
116 sessionFile.close()

eric ide

mercurial