示例#1
0
def list_task(args):
	args = parse_login_command_line(args, [],
	                                ['all', 'completed',
	                                 'task-id', 'name', 'status', 'size', 'dcid', 'original-url', 'download-url',
	                                 'id', 'file', 'url',],
									default={'task-id': True, 'name': True, 'status': True})
	client = XunleiClient(args.username, args.password, args.cookies)
	client.set_page_size(100)
	if args.id or args.file or args.url or len(args):
		tasks = search_tasks(client, args, status=(args.completed and 'completed' or 'all'), check=False)
	elif args.completed:
		tasks = client.read_all_completed()
	else:
		tasks = client.read_all_tasks()
	columns = ['task-id', 'name', 'status', 'size', 'dcid', 'original-url', 'download-url']
	columns = filter(lambda k: getattr(args, k), columns)
	for t in tasks:
		for k in columns:
			if k == 'task-id':
				print t['id'],
			elif k == 'name':
				print t['name'].encode(default_encoding),
			elif k == 'status':
				print t['status_text'],
			elif k == 'size':
				print t['size'],
			elif k == 'dcid':
				print t['dcid'],
			elif k == 'original-url':
				print t['original_url'],
			elif k == 'download-url':
				print t['xunlei_url'],
			else:
				raise NotImplementedError()
		print
示例#2
0
def download_task(args):
	args = parse_login_command_line(args, ['tool', 'output', 'output-dir', 'input'], ['delete', 'continue', 'overwrite', 'torrent', 'id', 'name', 'url'], alias={'o': 'output', 'i': 'input'}, default={'tool':'wget'})
	download = {'wget':wget_download, 'curl': curl_download, 'aria2':aria2_download, 'asyn':asyn_download, 'urllib2':urllib2_download}[args.tool]
	download_args = {'output_dir':args.output_dir, 'delete':args.delete, 'resuming':args._args['continue'], 'overwrite':args.overwrite}
	client = XunleiClient(args.username, args.password, args.cookies)
	links = None
	if len(args) > 1 or args.input:
		assert not(args.id or args.name or args.url or args.output)
		tasks = find_tasks_to_download(client, args)
		download_multiple_tasks(client, download, tasks, **download_args)
	elif args.torrent:
		# TODO: --torrent should support multiple torrent tasks. Workaround: use bt://infohash without --torrent.
		assert not(args.id or args.name or args.url)
		assert len(args) == 1
		tasks = find_torrents_task_to_download(client, [args[0]])
		assert len(tasks) == 1
		download_single_task(client, download, tasks[0], args.output, **download_args)
	else:
		if len(args) == 1:
			assert not args.url
			args.url = args[0]
		tasks = search_tasks(client, args, status='all', check=False)
		if not tasks:
			assert args.url
			print 'Adding new task %s ...' % args.url
			client.add_task(args.url)
			tasks = client.read_all_completed()
			tasks = filter_tasks(tasks, 'original_url', args.url)
			assert tasks, 'task not found, wired'
		if args.output:
			assert len(tasks) == 1
			download_single_task(client, download, tasks[0], args.output, **download_args)
		else:
			download_multiple_tasks(client, download, tasks, **download_args)
示例#3
0
def list_task(args):
	args = parse_login_command_line(args, [],
	                                ['all', 'completed',
	                                 'id', 'name', 'status', 'size', 'dcid', 'gcid', 'original-url', 'download-url', 'speed', 'progress', 'date',
	                                 'n'],
									default={'id': True, 'name': True, 'status': True, 'n': get_config('n')},
									help=lixian_help.list)

	parent_ids = [a[:-1] for a in args if re.match(r'^#?\d+/$', a)]
	if parent_ids and not all(re.match(r'^#?\d+/$', a) for a in args):
		raise NotImplementedError("Can't mix 'id/' with others")
	assert len(parent_ids) <= 1, "sub-tasks listing only supports single task id"
	ids = [a[:-1] if re.match(r'^#?\d+/$', a) else a for a in args]

	client = XunleiClient(args.username, args.password, args.cookies)
	if parent_ids:
		args[0] = args[0][:-1]
		tasks = search_tasks(client, args, status=(args.completed and 'completed' or 'all'))
		assert len(tasks) == 1
		tasks = client.list_bt(tasks[0])
		#tasks = client.list_bt(client.get_task_by_id(parent_ids[0]))
		tasks.sort(key=lambda x: int(x['index']))
	elif len(ids):
		tasks = search_tasks(client, args, status=(args.completed and 'completed' or 'all'))
	elif args.completed:
		tasks = client.read_all_completed()
	else:
		tasks = client.read_all_tasks()
	columns = ['n', 'id', 'name', 'status', 'size', 'progress', 'speed', 'date', 'dcid', 'gcid', 'original-url', 'download-url']
	columns = filter(lambda k: getattr(args, k), columns)
	for i, t in enumerate(tasks):
		for k in columns:
			if k == 'n':
				if not parent_ids:
					print '#%d' % t['#'],
			elif k == 'id':
				print t.get('index', t['id']),
			elif k == 'name':
				print t['name'].encode(default_encoding),
			elif k == 'status':
				print t['status_text'],
			elif k == 'size':
				print t['size'],
			elif k == 'progress':
				print t['progress'],
			elif k == 'speed':
				print t['speed'],
			elif k == 'date':
				print t['date'],
			elif k == 'dcid':
				print t['dcid'],
			elif k == 'gcid':
				print t['gcid'],
			elif k == 'original-url':
				print t['original_url'],
			elif k == 'download-url':
				print t['xunlei_url'],
			else:
				raise NotImplementedError(k)
		print
示例#4
0
def list_task(args):
    args = parse_login_command_line(args, [], [
        'all', 'completed', 'id', 'name', 'status', 'size', 'dcid',
        'original-url', 'download-url', 'speed', 'progress', 'search'
    ],
                                    default={
                                        'id': True,
                                        'name': True,
                                        'status': True
                                    },
                                    help=lixian_help.list)

    parent_ids = [a[:-1] for a in args if re.match(r'^\d+/$', a)]
    if parent_ids and not all(re.match(r'^\d+/$', a) for a in args):
        raise NotImplementedError("Can't mix 'id/' with others")
    assert len(
        parent_ids) <= 1, "sub-tasks listing only supports single task id"
    ids = [a[:-1] if re.match(r'^\d+/$', a) else a for a in args]

    client = XunleiClient(args.username, args.password, args.cookies)
    if parent_ids:
        tasks = client.list_bt(client.get_task_by_id(parent_ids[0]))
        tasks.sort(key=lambda x: int(x['index']))
    elif len(ids):
        tasks = search_tasks(client,
                             args,
                             status=(args.completed and 'completed' or 'all'),
                             check=False)
    elif args.completed:
        tasks = client.read_all_completed()
    else:
        tasks = client.read_all_tasks()
    columns = [
        'id', 'name', 'status', 'size', 'progress', 'speed', 'dcid',
        'original-url', 'download-url'
    ]
    columns = filter(lambda k: getattr(args, k), columns)
    for t in tasks:
        for k in columns:
            if k == 'id':
                print t.get('index', t['id']),
            elif k == 'name':
                print t['name'].encode(default_encoding),
            elif k == 'status':
                print t['status_text'],
            elif k == 'size':
                print t['size'],
            elif k == 'progress':
                print t['progress'],
            elif k == 'speed':
                print t['speed'],
            elif k == 'dcid':
                print t['dcid'],
            elif k == 'original-url':
                print t['original_url'],
            elif k == 'download-url':
                print t['xunlei_url'],
            else:
                raise NotImplementedError()
        print
示例#5
0
def execute_args(args):
	download = {'wget':wget_download, 'urllib2':urllib2_download}[args.tool]

	if args.links:
		assert len(args.links) == 1
		url = args.links[0]
	else:
		url = args.link
	assert url or args.task_id or args.task_name

	client = XunleiClient(args.username, args.password, args.cookies)
	client.set_page_size(100)
	tasks = client.read_all_completed()
	if url:
		matched = filter(lambda t: t['original_url'] == url, tasks)
		if matched:
			task = matched[0]
		else:
			# if the task doesn't exist yet, add it
			# TODO: check space, check queue, delete after download done, add loggings
			client.add_task(url)
			tasks = client.read_all_completed()
			task = filter(lambda t: t['original_url'] == url, tasks)[0]
	elif args.task_name:
		task = filter(lambda t: t['name'].find(args.task_name) != -1, tasks)[0]
	elif args.task_id:
		task = filter(lambda t: t['id'] == args.task_id, tasks)[0]
	else:
		raise NotImplementedError()

	download_url = str(task['xunlei_url'])
	filename = args.output or task['name'].encode(sys.getfilesystemencoding())
	referer = str(client.get_referer())
	gdriveid = str(client.get_gdriveid())

	download(client, download_url, filename)
示例#6
0
def download_task(args):
	args = parse_login_command_line(args,
	                                ['tool', 'output', 'output-dir', 'input'],
	                                ['delete', 'continue', 'overwrite', 'torrent', 'all', 'search', 'mini-hash', 'hash'],
									alias={'o': 'output', 'i': 'input', 'c':'continue'},
									default={'tool':get_config('tool', 'wget'),'delete':get_config('delete'),'continue':get_config('continue'),'output-dir':get_config('output-dir'), 'mini-hash':get_config('mini-hash'), 'hash':get_config('hash', True)},
	                                help=lixian_help.download)
	download = {'wget':wget_download, 'curl': curl_download, 'aria2':aria2_download, 'aria2c':aria2_download, 'axel':axel_download, 'asyn':asyn_download, 'urllib2':urllib2_download}[args.tool]
	download_args = {'output':args.output, 'output_dir':args.output_dir, 'delete':args.delete, 'resuming':args._args['continue'], 'overwrite':args.overwrite, 'mini_hash':args.mini_hash, 'no_hash': not args.hash}
	client = XunleiClient(args.username, args.password, args.cookies)
	links = None
	if len(args) > 1 or args.input:
		assert not args.output
		tasks = find_tasks_to_download(client, args)
		tasks = merge_bt_sub_tasks(tasks)
		download_multiple_tasks(client, download, tasks, download_args)
	elif args.torrent:
		assert not args.search
		assert len(args) == 1
		tasks = find_torrents_task_to_download(client, [args[0]])
		assert len(tasks) == 1
		download_single_task(client, download, tasks[0], download_args)
	elif len(args):
		assert len(args) == 1
		tasks = search_tasks(client, args, status='all', check=False)
		if not tasks:
			url = args[0]
			print 'Adding new task %s ...' % url
			client.add_task(to_utf_8(url))
			tasks = client.read_all_completed()
			tasks = filter_tasks(tasks, 'original_url', to_utf_8(url))
			assert tasks, 'task not found, wired'
		tasks = merge_bt_sub_tasks(tasks)
		if args.output:
			assert len(tasks) == 1
			download_single_task(client, download, tasks[0], download_args)
		else:
			download_multiple_tasks(client, download, tasks, download_args)
	elif args.all:
		#tasks = client.read_all_completed()
		tasks = client.read_all_tasks()
		download_multiple_tasks(client, download, tasks, download_args)
	else:
		usage(doc=lixian_help.download, message='Not enough arguments')
示例#7
0
def download_task(args):
    args = parse_login_command_line(
        args, ['tool', 'output', 'output-dir', 'input'],
        ['delete', 'continue', 'overwrite', 'torrent', 'search', 'mini-hash'],
        alias={
            'o': 'output',
            'i': 'input',
            'c': 'continue'
        },
        default={
            'tool': get_config('tool', 'wget'),
            'delete': get_config('delete'),
            'continue': get_config('continue'),
            'output-dir': get_config('output-dir'),
            'mini-hash': get_config('mini-hash')
        },
        help=lixian_help.download)
    download = {
        'wget': wget_download,
        'curl': curl_download,
        'aria2': aria2_download,
        'asyn': asyn_download,
        'urllib2': urllib2_download
    }[args.tool]
    download_args = {
        'output_dir': args.output_dir,
        'delete': args.delete,
        'resuming': args._args['continue'],
        'overwrite': args.overwrite,
        'mini_hash': args.mini_hash
    }
    client = XunleiClient(args.username, args.password, args.cookies)
    links = None
    if len(args) > 1 or args.input:
        assert not args.output
        tasks = find_tasks_to_download(client, args)
        tasks = merge_bt_sub_tasks(tasks)
        download_multiple_tasks(client, download, tasks, **download_args)
    elif args.torrent:
        assert not args.search
        assert len(args) == 1
        tasks = find_torrents_task_to_download(client, [args[0]])
        assert len(tasks) == 1
        download_single_task(client, download, tasks[0], args.output,
                             **download_args)
    else:
        assert len(args) == 1, 'Not enough argument'
        tasks = search_tasks(client, args, status='all', check=False)
        if not tasks:
            url = args[0]
            print 'Adding new task %s ...' % url
            client.add_task(url)
            tasks = client.read_all_completed()
            tasks = filter_tasks(tasks, 'original_url', url)
            assert tasks, 'task not found, wired'
        tasks = merge_bt_sub_tasks(tasks)
        if args.output:
            assert len(tasks) == 1
            download_single_task(client, download, tasks[0], args.output,
                                 **download_args)
        else:
            download_multiple_tasks(client, download, tasks, **download_args)
示例#8
0
def list_task(args):
    args = parse_login_command_line(args, [], [
        'all', 'completed', 'deleted', 'expired', 'id', 'name', 'status',
        'size', 'dcid', 'gcid', 'original-url', 'download-url', 'speed',
        'progress', 'date', 'n', 'format-size', 'colors'
    ],
                                    default={
                                        'id': get_config('id', True),
                                        'name': True,
                                        'status': True,
                                        'n': get_config('n'),
                                        'size': get_config('size'),
                                        'format-size':
                                        get_config('format-size'),
                                        'colors': get_config('colors', True)
                                    },
                                    help=lixian_help.list)

    status = 'all'
    if args.completed:
        status = 'completed'
    elif args.deleted:
        status = 'deleted'
    elif args.expired:
        status = 'expired'

    parent_ids = [a[:-1] for a in args if re.match(r'^#?\d+/$', a)]
    if parent_ids and not all(re.match(r'^#?\d+/$', a) for a in args):
        raise NotImplementedError("Can't mix 'id/' with others")
    assert len(
        parent_ids) <= 1, "sub-tasks listing only supports single task id"
    ids = [a[:-1] if re.match(r'^#?\d+/$', a) else a for a in args]

    client = XunleiClient(args.username, args.password, args.cookies)
    if parent_ids:
        args[0] = args[0][:-1]
        tasks = search_tasks(client, args, status=status)
        assert len(tasks) == 1
        tasks = client.list_bt(tasks[0])
        #tasks = client.list_bt(client.get_task_by_id(parent_ids[0]))
        tasks.sort(key=lambda x: int(x['index']))
    elif len(ids):
        tasks = search_tasks(client, args, status=status)
    elif status == 'all':
        tasks = client.read_all_tasks()
    elif status == 'completed':
        tasks = client.read_all_completed()
    elif status == 'deleted':
        tasks = client.read_all_deleted()
    elif status == 'expired':
        tasks = client.read_all_expired()
    else:
        raise NotImplementedError(status)
    columns = [
        'n', 'id', 'name', 'status', 'size', 'progress', 'speed', 'date',
        'dcid', 'gcid', 'original-url', 'download-url'
    ]
    columns = filter(lambda k: getattr(args, k), columns)
    from lixian_colors import colors
    for i, t in enumerate(tasks):
        status_colors = {
            'waiting': 'yellow',
            'downloading': 'magenta',
            'completed': 'green',
            'pending': 'cyan',
            'failed': 'red',
        }
        c = status_colors[t['status_text']]
        with colors(args.colors).ansi(c)():
            for k in columns:
                if k == 'n':
                    if not parent_ids:
                        print '#%d' % t['#'],
                elif k == 'id':
                    print t.get('index', t['id']),
                elif k == 'name':
                    print t['name'].encode(default_encoding),
                elif k == 'status':
                    with colors(args.colors).bold():
                        print t['status_text'],
                elif k == 'size':
                    if args.format_size:
                        from lixian_util import format_size
                        print format_size(t['size']),
                    else:
                        print t['size'],
                elif k == 'progress':
                    print t['progress'],
                elif k == 'speed':
                    print t['speed'],
                elif k == 'date':
                    print t['date'],
                elif k == 'dcid':
                    print t['dcid'],
                elif k == 'gcid':
                    print t['gcid'],
                elif k == 'original-url':
                    print t['original_url'],
                elif k == 'download-url':
                    print t['xunlei_url'],
                else:
                    raise NotImplementedError(k)
            print
示例#9
0
def list_task(args):
    args = parse_login_command_line(
        args,
        [],
        [
            "all",
            "completed",
            "id",
            "name",
            "status",
            "size",
            "dcid",
            "gcid",
            "original-url",
            "download-url",
            "speed",
            "progress",
            "date",
            "n",
            "format-size",
        ],
        default={
            "id": True,
            "name": True,
            "status": True,
            "n": get_config("n"),
            "format-size": get_config("format-size"),
        },
        help=lixian_help.list,
    )

    parent_ids = [a[:-1] for a in args if re.match(r"^#?\d+/$", a)]
    if parent_ids and not all(re.match(r"^#?\d+/$", a) for a in args):
        raise NotImplementedError("Can't mix 'id/' with others")
    assert len(parent_ids) <= 1, "sub-tasks listing only supports single task id"
    ids = [a[:-1] if re.match(r"^#?\d+/$", a) else a for a in args]

    client = XunleiClient(args.username, args.password, args.cookies)
    if parent_ids:
        args[0] = args[0][:-1]
        tasks = search_tasks(client, args, status=(args.completed and "completed" or "all"))
        assert len(tasks) == 1
        tasks = client.list_bt(tasks[0])
        # tasks = client.list_bt(client.get_task_by_id(parent_ids[0]))
        tasks.sort(key=lambda x: int(x["index"]))
    elif len(ids):
        tasks = search_tasks(client, args, status=(args.completed and "completed" or "all"))
    elif args.completed:
        tasks = client.read_all_completed()
    else:
        tasks = client.read_all_tasks()
    columns = [
        "n",
        "id",
        "name",
        "status",
        "size",
        "progress",
        "speed",
        "date",
        "dcid",
        "gcid",
        "original-url",
        "download-url",
    ]
    columns = filter(lambda k: getattr(args, k), columns)
    for i, t in enumerate(tasks):
        for k in columns:
            if k == "n":
                if not parent_ids:
                    print "#%d" % t["#"],
            elif k == "id":
                print t.get("index", t["id"]),
            elif k == "name":
                print t["name"].encode(default_encoding),
            elif k == "status":
                print t["status_text"],
            elif k == "size":
                if args.format_size:
                    from lixian_util import format_size

                    print format_size(t["size"]),
                else:
                    print t["size"],
            elif k == "progress":
                print t["progress"],
            elif k == "speed":
                print t["speed"],
            elif k == "date":
                print t["date"],
            elif k == "dcid":
                print t["dcid"],
            elif k == "gcid":
                print t["gcid"],
            elif k == "original-url":
                print t["original_url"],
            elif k == "download-url":
                print t["xunlei_url"],
            else:
                raise NotImplementedError(k)
        print
示例#10
0
def download_task(args):
    args = parse_login_command_line(
        args,
        ["tool", "output", "output-dir", "input"],
        ["delete", "continue", "overwrite", "torrent", "all", "search", "mini-hash", "hash"],
        alias={"o": "output", "i": "input", "c": "continue", "bt": "torrent"},
        default={
            "tool": get_config("tool", "wget"),
            "delete": get_config("delete"),
            "continue": get_config("continue"),
            "output-dir": get_config("output-dir"),
            "mini-hash": get_config("mini-hash"),
            "hash": get_config("hash", True),
        },
        help=lixian_help.download,
    )
    download = {
        "wget": wget_download,
        "curl": curl_download,
        "aria2": aria2_download,
        "aria2c": aria2_download,
        "axel": axel_download,
        "asyn": asyn_download,
        "urllib2": urllib2_download,
    }[args.tool]
    download_args = {
        "output": args.output,
        "output_dir": args.output_dir,
        "delete": args.delete,
        "resuming": args._args["continue"],
        "overwrite": args.overwrite,
        "mini_hash": args.mini_hash,
        "no_hash": not args.hash,
    }
    client = XunleiClient(args.username, args.password, args.cookies)
    links = None
    if len(args) > 1 or args.input:
        assert not args.output
        tasks = find_tasks_to_download(client, args)
        tasks = merge_bt_sub_tasks(tasks)
        download_multiple_tasks(client, download, tasks, download_args)
    elif args.torrent:
        assert not args.search
        assert len(args) == 1
        tasks = find_torrents_task_to_download(client, [args[0]])
        assert len(tasks) == 1
        download_single_task(client, download, tasks[0], download_args)
    elif len(args):
        assert len(args) == 1
        tasks = search_tasks(client, args, status="all", check=False)
        if not tasks:
            url = args[0]
            print "Adding new task %s ..." % url
            client.add_task(to_utf_8(url))
            tasks = client.read_all_completed()
            tasks = filter_tasks(tasks, "original_url", to_utf_8(url))
            assert tasks, "task not found, wired"
        tasks = merge_bt_sub_tasks(tasks)
        if args.output:
            assert len(tasks) == 1
            download_single_task(client, download, tasks[0], download_args)
        else:
            download_multiple_tasks(client, download, tasks, download_args)
    elif args.all:
        # tasks = client.read_all_completed()
        tasks = client.read_all_tasks()
        download_multiple_tasks(client, download, tasks, download_args)
    else:
        usage(doc=lixian_help.download, message="Not enough arguments")
示例#11
0
def list_task(args):
	args = parse_login_command_line(args, [],
	                                ['all', 'completed', 'deleted', 'expired',
	                                 'id', 'name', 'status', 'size', 'dcid', 'gcid', 'original-url', 'download-url', 'speed', 'progress', 'date',
	                                 'n',
	                                 'format-size',
	                                 'colors'
	                                 ],
									default={'id': get_config('id', True), 'name': True, 'status': True, 'n': get_config('n'), 'size': get_config('size'), 'format-size': get_config('format-size'), 'colors': get_config('colors', True)},
									help=lixian_help.list)

	status = 'all'
	if args.completed:
		status = 'completed'
	elif args.deleted:
		status = 'deleted'
	elif args.expired:
		status = 'expired'

	parent_ids = [a[:-1] for a in args if re.match(r'^#?\d+/$', a)]
	if parent_ids and not all(re.match(r'^#?\d+/$', a) for a in args):
		raise NotImplementedError("Can't mix 'id/' with others")
	assert len(parent_ids) <= 1, "sub-tasks listing only supports single task id"
	ids = [a[:-1] if re.match(r'^#?\d+/$', a) else a for a in args]

	client = XunleiClient(args.username, args.password, args.cookies)
	if parent_ids:
		args[0] = args[0][:-1]
		tasks = search_tasks(client, args, status=status)
		assert len(tasks) == 1
		tasks = client.list_bt(tasks[0])
		#tasks = client.list_bt(client.get_task_by_id(parent_ids[0]))
		tasks.sort(key=lambda x: int(x['index']))
	elif len(ids):
		tasks = search_tasks(client, args, status=status)
	elif status == 'all':
		tasks = client.read_all_tasks()
	elif status == 'completed':
		tasks = client.read_all_completed()
	elif status == 'deleted':
		tasks = client.read_all_deleted()
	elif status == 'expired':
		tasks = client.read_all_expired()
	else:
		raise NotImplementedError(status)
	columns = ['n', 'id', 'name', 'status', 'size', 'progress', 'speed', 'date', 'dcid', 'gcid', 'original-url', 'download-url']
	columns = filter(lambda k: getattr(args, k), columns)
	from lixian_colors import colors
	for i, t in enumerate(tasks):
		status_colors = {
				'waiting': 'yellow',
				'downloading': 'magenta',
				'completed':'green',
				'pending':'cyan',
				'failed':'red',
		}
		c = status_colors[t['status_text']]
		with colors(args.colors).ansi(c)():
			for k in columns:
				if k == 'n':
					if not parent_ids:
						print '#%d' % t['#'],
				elif k == 'id':
					print t.get('index', t['id']),
				elif k == 'name':
					print t['name'].encode(default_encoding),
				elif k == 'status':
					with colors(args.colors).bold():
						print t['status_text'],
				elif k == 'size':
					if args.format_size:
						from lixian_util import format_size
						print format_size(t['size']),
					else:
						print t['size'],
				elif k == 'progress':
					print t['progress'],
				elif k == 'speed':
					print t['speed'],
				elif k == 'date':
					print t['date'],
				elif k == 'dcid':
					print t['dcid'],
				elif k == 'gcid':
					print t['gcid'],
				elif k == 'original-url':
					print t['original_url'],
				elif k == 'download-url':
					print t['xunlei_url'],
				else:
					raise NotImplementedError(k)
			print