summaryrefslogtreecommitdiffstats
path: root/pyload/plugin/addon/DeleteFinished.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/plugin/addon/DeleteFinished.py')
-rw-r--r--pyload/plugin/addon/DeleteFinished.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/pyload/plugin/addon/DeleteFinished.py b/pyload/plugin/addon/DeleteFinished.py
new file mode 100644
index 000000000..b9368a642
--- /dev/null
+++ b/pyload/plugin/addon/DeleteFinished.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+from pyload.database import style
+from pyload.plugin.Addon import Addon
+
+
+class DeleteFinished(Addon):
+ __name = "DeleteFinished"
+ __type = "addon"
+ __version = "1.12"
+
+ __config = [("interval" , "int" , "Check interval in hours" , 72 ),
+ ("deloffline", "bool", "Delete package with offline links", False)]
+
+ __description = """Automatically delete all finished packages from queue"""
+ __license = "GPLv3"
+ __authors = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ # event_list = ["pluginConfigChanged"]
+
+ MIN_CHECK_INTERVAL = 1 * 60 * 60 #: 1 hour
+
+
+ ## overwritten methods ##
+
+
+ def setup(self):
+ self.interval = self.MIN_CHECK_INTERVAL
+
+
+ def periodical(self):
+ if not self.info['sleep']:
+ deloffline = self.getConfig('deloffline')
+ mode = '0,1,4' if deloffline else '0,4'
+ msg = _('delete all finished packages in queue list (%s packages with offline links)')
+ self.logInfo(msg % (_('including') if deloffline else _('excluding')))
+ self.deleteFinished(mode)
+ self.info['sleep'] = True
+ self.addEvent('packageFinished', self.wakeup)
+
+
+ # def pluginConfigChanged(self, plugin, name, value):
+ # if name == "interval" and value != self.interval:
+ # self.interval = value * 3600
+ # self.initPeriodical()
+
+
+ def deactivate(self):
+ self.manager.removeEvent('packageFinished', self.wakeup)
+
+
+ def activate(self):
+ self.info['sleep'] = True
+ # interval = self.getConfig('interval')
+ # self.pluginConfigChanged(self.__class__.__name__, 'interval', interval)
+ self.interval = max(self.MIN_CHECK_INTERVAL, self.getConfig('interval') * 60 * 60)
+ self.addEvent('packageFinished', self.wakeup)
+ self.initPeriodical()
+
+
+ ## own methods ##
+
+
+ @style.queue
+ def deleteFinished(self, mode):
+ self.c.execute('DELETE FROM packages WHERE NOT EXISTS(SELECT 1 FROM links WHERE package=packages.id AND status NOT IN (%s))' % mode)
+ self.c.execute('DELETE FROM links WHERE NOT EXISTS(SELECT 1 FROM packages WHERE id=links.package)')
+
+
+ def wakeup(self, pypack):
+ self.manager.removeEvent('packageFinished', self.wakeup)
+ self.info['sleep'] = False
+
+
+ ## event managing ##
+
+
+ def addEvent(self, event, func):
+ """Adds an event listener for event name"""
+ if event in self.manager.events:
+ if func in self.manager.events[event]:
+ self.logDebug("Function already registered", func)
+ else:
+ self.manager.events[event].append(func)
+ else:
+ self.manager.events[event] = [func]