def deleteLink(self, id): """deletes links""" f = self.getFile(id) if not f: return None pid = f.packageid e = RemoveEvent("file", id, "collector" if not f.package().queue else "queue") oldorder = f.order if id in get_thread_manager().processingIds(): self.cache[id].abortDownload() if id in self.cache: del self.cache[id] self.db.deleteLink(f) get_pull_manager().addEvent(e) p = self.getPackage(pid) if not len(p.getChildren()): p.delete() pyfiles = self.cache.values() for pyfile in pyfiles: if pyfile.packageid == pid and pyfile.order > oldorder: pyfile.order -= 1 pyfile.notifyChange()
def reorderFile(self, id, position): f = self.getFileData(id) f = f[id] e = RemoveEvent("file", id, "collector" if not self.getPackage(f["package"]).queue else "queue") get_pull_manager().addEvent(e) self.db.reorderLink(f, position) pyfiles = self.cache.values() for pyfile in pyfiles: if pyfile.packageid != f["package"] or pyfile.order < 0: continue if f["order"] > position: if pyfile.order >= position and pyfile.order < f["order"]: pyfile.order += 1 pyfile.notifyChange() elif f["order"] < position: if pyfile.order <= position and pyfile.order > f["order"]: pyfile.order -= 1 pyfile.notifyChange() if id in self.cache: self.cache[id].order = position self.db.commit() e = InsertEvent("file", id, position, "collector" if not self.getPackage(f["package"]).queue else "queue") get_pull_manager().addEvent(e)
def setPackageLocation(self, id, queue): """push package to queue""" p = self.db.getPackage(id) oldorder = p.order e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") get_pull_manager().addEvent(e) self.db.clearPackageOrder(p) p = self.db.getPackage(id) p.queue = queue self.db.updatePackage(p) self.db.reorderPackage(p, -1, True) packs = self.packageCache.values() for pack in packs: if pack.queue != queue and pack.order > oldorder: pack.order -= 1 pack.notifyChange() self.db.commit() self.releasePackage(id) p = self.getPackage(id) e = InsertEvent("pack", id, p.order, "collector" if not p.queue else "queue") get_pull_manager().addEvent(e)
def addPackage(self, name, folder, queue=0): """adds a package, default to link collector""" lastID = self.db.addPackage(name, folder, queue) p = self.db.getPackage(lastID) e = InsertEvent("pack", lastID, p.order, "collector" if not queue else "queue") get_pull_manager().addEvent(e) return lastID
def deletePackage(self, id): """delete package and all contained links""" p = self.getPackage(id) if not p: if id in self.packageCache: del self.packageCache[id] return oldorder = p.order queue = p.queue e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") pyfiles = self.cache.values() for pyfile in pyfiles: if pyfile.packageid == id: pyfile.abortDownload() pyfile.release() self.db.deletePackage(p) get_pull_manager().addEvent(e) get_hook_manager().dispatchEvent("packageDeleted", id) if id in self.packageCache: del self.packageCache[id] packs = self.packageCache.values() for pack in packs: if pack.queue == queue and pack.order > oldorder: pack.order -= 1 pack.notifyChange()
def addLinks(self, urls, package): """adds links""" get_hook_manager().dispatchEvent("linksAdded", urls, package) data = get_plugin_manager().parseUrls(urls) self.db.addLinks(data, package) get_thread_manager().createInfoThread(data, package) #@TODO change from reloadAll event to package update event get_pull_manager().addEvent(ReloadAllEvent("collector"))
def restartFile(self, id): """ restart file""" if id in self.cache: self.cache[id].status = 3 self.cache[id].name = self.cache[id].url self.cache[id].error = "" self.cache[id].abortDownload() self.db.restartFile(id) e = UpdateEvent("file", id, "collector" if not self.getFile(id).package().queue else "queue") get_pull_manager().addEvent(e)
def restartPackage(self, id): """restart package""" pyfiles = self.cache.values() for pyfile in pyfiles: if pyfile.packageid == id: self.restartFile(pyfile.id) self.db.restartPackage(id) if id in self.packageCache: self.packageCache[id].setFinished = False e = UpdateEvent("pack", id, "collector" if not self.getPackage(id).queue else "queue") get_pull_manager().addEvent(e)
def getEvents(self, uuid): """Lists occured events, may be affected to changes in future. :param uuid: :return: list of `Events` """ events = get_pull_manager().getEvents(uuid) newEvents = [] def convDest(d): return Destination.Queue if d == "queue" else Destination.Collector for e in events: event = EventInfo() event.eventname = e[0] if e[0] in ("update", "remove", "insert"): event.id = e[3] event.type = ElementType.Package if e[ 2] == "pack" else ElementType.File event.destination = convDest(e[1]) elif e[0] == "order": if e[1]: event.id = e[1] event.type = ElementType.Package if e[ 2] == "pack" else ElementType.File event.destination = convDest(e[3]) elif e[0] == "reload": event.destination = convDest(e[1]) newEvents.append(event) return newEvents
def getAccountInfos(self, force=True, refresh=False): data = {} if refresh: self.core.scheduler.addJob(0, get_account_manager().getAccountInfos) force = False for p in self.accounts.keys(): if self.accounts[p]: p = self.getAccountPlugin(p) data[p.__name__] = p.getAllAccounts(force) else: data[p] = [] e = AccountUpdateEvent() get_pull_manager().addEvent(e) return data
def reorderPackage(self, id, position): p = self.getPackage(id) e = RemoveEvent("pack", id, "collector" if not p.queue else "queue") get_pull_manager().addEvent(e) self.db.reorderPackage(p, position) packs = self.packageCache.values() for pack in packs: if pack.queue != p.queue or pack.order < 0 or pack == p: continue if p.order > position: if pack.order >= position and pack.order < p.order: pack.order += 1 pack.notifyChange() elif p.order < position: if pack.order <= position and pack.order > p.order: pack.order -= 1 pack.notifyChange() p.order = position self.db.commit() e = InsertEvent("pack", id, position, "collector" if not p.queue else "queue") get_pull_manager().addEvent(e)
def updateFileInfo(self, data, pid): """ updates file info (name, size, status, url)""" ids = self.db.updateLinkInfo(data) e = UpdateEvent("pack", pid, "collector" if not self.getPackage(pid).queue else "queue") get_pull_manager().addEvent(e)
def updatePackage(self, pypack): """updates a package""" self.db.updatePackage(pypack) e = UpdateEvent("pack", pypack.id, "collector" if not pypack.queue else "queue") get_pull_manager().addEvent(e)
def updateLink(self, pyfile): """updates link""" self.db.updateLink(pyfile) e = UpdateEvent("file", pyfile.id, "collector" if not pyfile.package().queue else "queue") get_pull_manager().addEvent(e)
def notifyChange(self): e = UpdateEvent("file", self.id, "collector" if not self.package().queue else "queue") get_pull_manager().addEvent(e)
def sendChange(self): e = AccountUpdateEvent() get_pull_manager().addEvent(e)