diff options
Diffstat (limited to 'pyload/manager/Event.py')
-rw-r--r-- | pyload/manager/Event.py | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/pyload/manager/Event.py b/pyload/manager/Event.py new file mode 100644 index 000000000..919835984 --- /dev/null +++ b/pyload/manager/Event.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# @author: mkaay + +import time + +from pyload.utils import uniqify + + +class PullManager(object): + + def __init__(self, core): + self.core = core + self.clients = [] + + + def newClient(self, uuid): + self.clients.append(Client(uuid)) + + + def clean(self): + for n, client in enumerate(self.clients): + if client.lastActive + 30 < time.time(): + del self.clients[n] + + + def getEvents(self, uuid): + events = [] + validUuid = False + for client in self.clients: + if client.uuid == uuid: + client.lastActive = time.time() + validUuid = True + while client.newEvents(): + events.append(client.popEvent().toList()) + break + if not validUuid: + self.newClient(uuid) + events = [ReloadAllEvent("queue").toList(), ReloadAllEvent("collector").toList()] + return uniqify(events) + + + def addEvent(self, event): + for client in self.clients: + client.addEvent(event) + + +class Client(object): + + def __init__(self, uuid): + self.uuid = uuid + self.lastActive = time.time() + self.events = [] + + + def newEvents(self): + return len(self.events) > 0 + + + def popEvent(self): + if not len(self.events): + return None + return self.events.pop(0) + + + def addEvent(self, event): + self.events.append(event) + + +class UpdateEvent(object): + + def __init__(self, itype, iid, destination): + assert itype == "pack" or itype == "file" + assert destination == "queue" or destination == "collector" + self.type = itype + self.id = iid + self.destination = destination + + + def toList(self): + return ["update", self.destination, self.type, self.id] + + +class RemoveEvent(object): + + def __init__(self, itype, iid, destination): + assert itype == "pack" or itype == "file" + assert destination == "queue" or destination == "collector" + self.type = itype + self.id = iid + self.destination = destination + + + def toList(self): + return ["remove", self.destination, self.type, self.id] + + +class InsertEvent(object): + + def __init__(self, itype, iid, after, destination): + assert itype == "pack" or itype == "file" + assert destination == "queue" or destination == "collector" + self.type = itype + self.id = iid + self.after = after + self.destination = destination + + + def toList(self): + return ["insert", self.destination, self.type, self.id, self.after] + + +class ReloadAllEvent(object): + + def __init__(self, destination): + assert destination == "queue" or destination == "collector" + self.destination = destination + + + def toList(self): + return ["reload", self.destination] + + +class AccountUpdateEvent(object): + + def toList(self): + return ["account"] + + +class ConfigUpdateEvent(object): + + def toList(self): + return ["config"] |