예제 #1
0
    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
예제 #2
0
    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)