def add_task(self, url): if url in self._task_urls: return False url_type = determin_url_type(url) if url_type in ("bt", "magnet"): result = self.xunlei.add_bt_task(url) elif url_type in ("normal", "ed2k", "thunder"): result = self.xunlei.add_task(url) else: result = self.xunlei.add_batch_task([url, ]) if result: self._update_task_list(5) return result
def add_task(self, url, title=None, tags=set(), creator="", anonymous=False, need_cid=True): def update_task(task, title=title, tags=tags, creator=creator, anonymous=anonymous): if not task: return task if task.invalid and not anonymous: task.taskname = title task.tags = tags task.creator = creator task.invalid = False self.session.add(task) self.session.commit() _ = task.id return task task = self.session.query(db.Task).filter(db.Task.url == url).first() if task: return (1, update_task(task)) def _random(): return random.randint(100, 999) # step 1: determin type url_type = determin_url_type(url) if url_type in ("bt", "magnet"): check = self.xunlei.bt_task_check add_task = self.xunlei.add_bt_task_with_dict elif url_type in ("normal", "ed2k", "thunder"): check = self.xunlei.task_check add_task = self.xunlei.add_task_with_dict else: return (-3, "space error") #result = self.xunlei.add_batch_task([url, ]) # step 2: get info info = check(url) # step 3: check info # check info if not info: return (-1, "check task error") # check cid if need_cid and not info['cid']: return (-2, "can't find cid") if info['cid']: task = self.get_task_by_cid(info['cid']) if task.count() > 0: return (1, update_task(task[0])) # check title if title: info['title'] = title else: title = info['title'] if not info['cid'] and \ self.get_task_by_title(info['title']).count() > 0: info['title'] = "#%s %s" % (_random(), info['title']) # for bt if "valid_list" in info: info["valid_list"] = ["1", ]*len(info["valid_list"]) # step 4: commit & fetch result result = add_task(url, info) if not result: return (0, "error") self._update_task_list(5) # step 5: checkout task&fix if info['cid']: task = self.get_task_by_cid(info['cid']).first() elif info['title']: task = self.get_task_by_title(info['title']).first() else: task = None if task: task.taskname = title task.tags = tags task.invalid = anonymous self.session.add(task) self.session.commit() _ = task.id return (1, task)