def taskpage(request, para1 = ""): '''print(para1)''' if (para1[-1:] == "/"): para1 = para1[:-1] import re usr = Control.get_username_by_session(request) y = Database.get_all("task", {"username": usr}) tasks = [] TITLE = "全部任务" if (re.match(r'^tasks/downloading$', para1)): TITLE = "正在下载" if (re.match(r'^tasks/completed$', para1)): TITLE = "已完成任务" for x in y: add = True if (re.match(r'^tasks/downloading$', para1)): req = Aria.get_task_state(usr, x) if not(req['state'] == 'active'): add = False if (re.match(r'^tasks/completed$', para1)): req = Aria.get_task_state(usr, x) if not(req['state'] == 'complete'): add = False if (add): tasks.append({"taskname": x[Database.id("task", "taskname")], "gid": x[Database.id("task", "gid")], "date": x[Database.id("task", "createtime")]}) '''print(TITLE)''' return PageResponse.task_page(request, usr, TITLE, tasks)
def get_tasks_state(request): if request.is_ajax(): import json if Control.check_session(request): usr = Control.get_username_by_session(request) x = Database.find_single("account", {"username": usr}) old = x[Database.id("account", "memoryused")] memory = Control.check_memoryuse(request) if (memory >= MemoryLimit) and (old < MemoryLimit): return JsonResponse.memory_limit_exceeded() req_all = [] data = json.loads(request.POST['data']) fromurl = request.POST['from'] needreturn = {} for x in data: needreturn[x["task_name"]] = x["workid"] y = Database.get_all("task", {"username": usr}) download_cnt = 0 overall_cnt = len(y) for x in y: req = Aria.get_task_state(usr, x) if (req['state'] == 'active'): download_cnt += 1 if (re.match(r'^/index/tasks/completed/?$', fromurl)) and ( req['state'] == 'complete') and not (needreturn.__contains__( x[Database.id("task", "taskname")])): return JsonResponse.need_refresh() if (needreturn.__contains__(x[Database.id("task", "taskname")])): '''print(fromurl)''' if (re.match(r'^/index/tasks/downloading/?$', fromurl)) and (req['state'] != 'active'): return JsonResponse.need_refresh() if (needreturn.__contains__(x[Database.id("task", "taskname")])): req['workid'] = needreturn[x[Database.id( "task", "taskname")]] if (x[Database.id("task", "attr")] == 0): req['attr'] = "temporary" else: req['attr'] = "persistent" req_all.append(req) '''print(req_all)''' return JsonResponse.get_tasks_state(req_all, download_cnt, overall_cnt, memory) else: return JsonResponse.session_failed() else: return PageResponse.jump_to_not_exist()
def newpage(request, para1): usr = Control.get_username_by_session(request) import re TITLE = "新建链接任务" if (re.match(r'^new/newbt/?$', para1)): TITLE = "新建BT任务" elif (re.match(r'^new/newmeta/?$', para1)): TITLE = "新建磁力任务" y = Database.get_all("task", {"username": usr}) tasks = [] for i in y: tasks.append({"gid": i[Database.id("task", "gid")]}) return PageResponse.new_task_page(request, usr, TITLE, tasks)
def newtask(request, para1): if request.is_ajax(): if Control.check_session(request): usr = Control.get_username_by_session(request) y = Database.get_all("task", {"username": usr}) if (Control.check_memoryuse(request) == -1): return JsonResponse.memory_limit_exceeded() if len(y) > Const.TaskNumberLimit: assert 0 elif len(y) == Const.TaskNumberLimit: return JsonResponse.task_number_exceeded() for x in y: if (x[Database.id("task", "taskname")] == request.POST["task_name"]): return JsonResponse.task_name_repeated() try: import base64 if (para1 == 'bt'): btfile = request.FILES.get("task_link", None) if not btfile: return JsonResponse.upload_btfile_empty() if (btfile.multiple_chunks()): return JsonResponse.upload_btfile_toolarge() else: bt = base64.b64encode(btfile.read()).decode("utf-8") c = Aria.add_other_task(usr, request.POST["task_name"], bt, "aria2.addTorrent") elif (para1 == 'meta'): metalink = base64.b64decode(request.POST["task_link"]) c = Aria.add_other_task(usr, request.POST["task_name"], metalink, "aria2.addMetalink") else: c = Aria.add_url_task(usr, request.POST["task_name"], request.POST["task_link"]) import time as Time Database.insert("task", {"username": usr, "gid": c["result"], "taskname": str(request.POST["task_name"]), "createtime": Time.strftime('%Y-%m-%d', Time.localtime(Time.time())), "attr": 0}) return JsonResponse.operation_success() except: return JsonResponse.download_tool_error() else: return JsonResponse.session_failed() else: return PageResponse.jump_to_not_exist()
def check_memoryuse(request): usr = get_username_by_session(request) from urllib import request import re, json y = Database.get_all("task", {"username": usr}) z = [] memory = 0 for x in y: jsonreq = json.dumps({ 'jsonrpc': '2.0', 'id': usr + str("@") + str(x[Database.id("task", "taskname")]), 'method': 'aria2.tellStatus', 'params': [ x[Database.id("task", "gid")], ['totalLength', 'completedLength', 'status'] ] }).encode('utf-8') c = json.loads( request.urlopen('http://*****:*****@") + str(x[Database.id("task", "taskname")]), 'method': 'aria2.forcePause', 'params': [x[Database.id("task", "gid")]] }).encode('utf-8') request.urlopen('http://localhost:6800/jsonrpc', jsonreq) return memory
def auto_delete(): print('START AUTO DELETE') y = Database.get_all("task", {}) for x in y: print(x) if (x[Database.id("task", "attr")] == 0): try: Aria.operate(x[Database.id("task", "username")], x[Database.id("task", "taskname")], x[Database.id("task", "gid")], 'aria2.forcePause') Aria.operate(x[Database.id("task", "username")], x[Database.id("task", "taskname")], x[Database.id("task", "gid")], 'aria2.forceRemove') except: print('NOT ERROR') remove_task(x[Database.id("task", "username")], x[Database.id("task", "taskname")], x[Database.id("task", "gid")])
def get_overall_state(request): if request.is_ajax(): import json if Control.check_session(request): usr = Control.get_username_by_session(request) x = Database.find_single("account", {"username": usr}) old = x[Database.id("account", "memoryused")] memory = Control.check_memoryuse(request) if (memory >= MemoryLimit) and (old < MemoryLimit): return JsonResponse.memory_limit_exceeded() y = Database.get_all("task", {"username": usr}) overall_cnt = len(y) return JsonResponse.get_overall_state(overall_cnt, memory) else: return JsonResponse.session_failed() else: return PageResponse.jump_to_not_exist()