""" # ============================================================ # Unloader - plugin for Falkon # Copyright (C) 2019 Juraj Oravec # # 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 3 of the License, or # (at your option) any later version. # # 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 . # ============================================================ """ import Falkon from PySide2 import QtCore class UnloaderManager(QtCore.QObject): tabs = None timer = None threshold = None def __init__(self, settingsPath, parent=None): super().__init__(parent) self.tabs = {} self.threshold = 15 self.timer = QtCore.QTimer(self) self.timer.setTimerType(QtCore.Qt.VeryCoarseTimer) self.timer.setInterval(5000) self.timer.timeout.connect(self.onTimeout) self.timer.start() def onMainWindowCreated(self, window): tabs = window.tabWidget().allTabs() for tab in tabs: self.tabs[tab] = 0 def onCurrentTabChanged(index): tab = window.tabWidget().webTab(index) self.tabs[tab] = 0 window.tabWidget().currentChanged.connect(onCurrentTabChanged) window.tabWidget().tabInserted.connect(onCurrentTabChanged) window.tabWidget().tabRemoved.connect(self.onTabRemoved) def onMainWindowDeleted(self, window): tabs = window.tabWidget().allTabs() for tab in tabs: if tab in self.tabs: del self.tabs[tab] def onTabRemoved(self, index): self.refreshTabList() def onTimeout(self): if not self.tabs: return for tab, time in self.tabs.items(): if tab.isCurrentTab(): continue if not tab.isRestored(): self.tabs[tab] = 0 continue self.tabs[tab] = time + int(self.timer.interval() / 1000) if self.threshold: if self.tabs[tab] > self.threshold and tab.isRestored(): self.tabs[tab] = 0 tab.unload() def refreshTabList(self): oldTabs = self.tabs.copy() self.tabs.clear() for window in Falkon.MainApplication.instance().windows(): winTabs = window.tabWidget().allTabs() for tab in winTabs: self.tabs[tab] = oldTabs.get(tab, 0)