From 7f3919dab387021fbda1864f2ba3e80fc823538b Mon Sep 17 00:00:00 2001 From: hjdhnx Date: Wed, 2 Nov 2022 14:09:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=A7=A3=E6=9E=90=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/rules.db | Bin 151552 -> 155648 bytes controllers/home.py | 78 +++++++++++++++++++++++++++++++++++-------- controllers/layui.py | 32 +++++++++--------- js/version.txt | 2 +- readme.md | 2 ++ 5 files changed, 85 insertions(+), 29 deletions(-) diff --git a/base/rules.db b/base/rules.db index 19c324ed5cc50ed0e27a8c7a4557c38d26ae8134..a915931b72a329441630c577f63bc21cccb12dd4 100644 GIT binary patch delta 9435 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 fW7-1@*8&%m!CH y['order']: + return 1 + elif x['order'] < y['order']: + return - 1 + else: + if x['write_date'] < y['write_date']: + return 1 + elif x['write_date'] > y['write_date']: + return -1 + else: + return 0 + def sort_sites_by_order(sites,js_mode=0): rules = rules_service() rule_list = rules.query_all() @@ -285,18 +303,6 @@ def sort_sites_by_order(sites,js_mode=0): sites[i]['write_date'] = 0 # sites[i]['site_name'] = site_name # print(sites) - def comp(x, y): - if x['order'] > y['order']: - return 1 - elif x['order'] < y['order']: - return - 1 - else: - if x['write_date'] < y['write_date']: - return 1 - elif x['write_date'] > y['write_date']: - return -1 - else: - return 0 # sites.sort(key=lambda x: x['order'], reverse=False) sites.sort(key=functools.cmp_to_key(comp), reverse=False) # print(sites) @@ -306,6 +312,44 @@ def sort_sites_by_order(sites,js_mode=0): del site['write_date'] return sites +def sort_parses_by_order(parses,host): + t1 = time() + parse = parse_service() + parse_list = parse.query_all() + parse_url_list = list(map(lambda x: x['url'], parse_list)) + new_parses = [] + for i in range(len(parses)): + # parses[i]['id'] = i + 1 + # 去重 + if parses[i]['url'] in new_parses: + continue + if str(parses[i]['url']).startswith(host): + parses[i]['url'] = parses[i]['url'].replace(host,'') + if parses[i]['url'] in parse_url_list: + parse_rule = parse_list[parse_url_list.index(parses[i]['url'])] + parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state'] + parses[i]['order'] = 0 if parse_rule['order'] is None else parse_rule['order'] + parses[i]['write_date'] = 0 if parse_rule['write_date'] is None else parse_rule['write_date'].timestamp() + else: + parses[i]['state'] = 1 + parses[i]['order'] = 0 + parses[i]['write_date'] = 0 + + if not parses[i].get('header'): + parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'} + if str(parses[i]['url']).startswith('/'): + parses[i]['url'] = host + parses[i]['url'] + new_parses.append(parses[i]) + new_parses.sort(key=functools.cmp_to_key(comp), reverse=False) + # print(sites) + for par in new_parses: + del par['state'] + del par['order'] + del par['write_date'] + # print(new_parses) + logger.info(f'{len(parses)}条解析解析排序耗时:{get_interval(t1)}毫秒') + return new_parses + @home.route('/configs') def config_gen(): # 生成文件 @@ -335,11 +379,17 @@ def config_gen(): jxs = getJxs(host=host2) set_online = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,2),mode=1,js_mode=js_mode,host=host2,jxs=jxs) ali_token = new_conf.ALI_TOKEN + # parses = [] with open('txt/pycms0.json','w+',encoding='utf-8') as f: customConfig = getCustonDict(host0,ali_token,js0_password) set_dict = custom_merge(parseText(set_local), customConfig) merged_hide(set_dict) set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode) + # if not parses: + # print('生成静态配置时初始化排序parses') + # parses = sort_parses_by_order(set_dict['parses']) + # set_dict['parses'] = parses + set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host0) # set_dict = json.loads(set_local) f.write(json.dumps(set_dict,ensure_ascii=False,indent=4)) with open('txt/pycms1.json','w+',encoding='utf-8') as f: @@ -347,6 +397,7 @@ def config_gen(): set_dict = custom_merge(parseText(set_area), customConfig) merged_hide(set_dict) set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode) + set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host1) # set_dict = json.loads(set_area) f.write(json.dumps(set_dict,ensure_ascii=False,indent=4)) @@ -355,6 +406,7 @@ def config_gen(): set_dict = custom_merge(parseText(set_online), customConfig) merged_hide(set_dict) set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode) + set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host2) # set_dict = json.loads(set_online) f.write(json.dumps(set_dict,ensure_ascii=False,indent=4)) files = [os.path.abspath(rf'txt\pycms{i}.json') for i in range(3)] diff --git a/controllers/layui.py b/controllers/layui.py index 66b07f8..d305f05 100644 --- a/controllers/layui.py +++ b/controllers/layui.py @@ -37,6 +37,20 @@ def layui_jxs(): # put application's code here return render_template('login.html') return render_template('layui_jxs.html') + +def comp(x, y): + if x['order'] > y['order']: + return 1 + elif x['order'] < y['order']: + return - 1 + else: + if x['write_date'] < y['write_date']: + return 1 + elif x['write_date'] > y['write_date']: + return -1 + else: + return 0 + @layui.route('/api/list') def layui_rule_list(): page = int(getParmas('page',1)) @@ -95,19 +109,6 @@ def layui_rule_list(): sites.sort(key=lambda x:x[key], reverse=reverse) return sites - def comp(x, y): - if x['order'] > y['order']: - return 1 - elif x['order'] < y['order']: - return - 1 - else: - if x['write_date'] < y['write_date']: - return 1 - elif x['write_date'] > y['write_date']: - return -1 - else: - return 0 - # multisort(sites, (('order', False), ('write_date', True))) # sites.sort(key=lambda x:x['order'],reverse=False) sites.sort(key=functools.cmp_to_key(comp),reverse=False) @@ -145,6 +146,8 @@ def layui_jx_list(): for i in range(len(parses)): parses[i]['id'] = i+1 + if str(parses[i]['url']).startswith(host): + parses[i]['url'] = parses[i]['url'].replace(host,'') if parses[i]['url'] in parse_url_list: parse_rule = parse_list[parse_url_list.index(parses[i]['url'])] parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state'] @@ -155,14 +158,13 @@ def layui_jx_list(): parses[i]['order'] = 0 parses[i]['write_date'] = 0 - for i in range(len(parses)): if not parses[i].get('header'): parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'} if isinstance(parses[i].get('header'),dict): parses[i]['header'] = ujson.dumps(parses[i]['header'],ensure_ascii=False) if isinstance(parses[i].get('ext'),dict): parses[i]['ext'] = ujson.dumps(parses[i]['ext'],ensure_ascii=False) - # parse.setEverything(parses[i]['url'], parses[i]['name'], parses[i]['state'], parses[i]['type'], parses[i]['order'], parses[i]['ext'], parses[i]['header']) + parses.sort(key=functools.cmp_to_key(comp), reverse=False) new_parses = parses[(page - 1) * limit:page * limit] return layuiBack('获取成功', new_parses, count=len(parses)) \ No newline at end of file diff --git a/js/version.txt b/js/version.txt index 83806b4..42a3d34 100644 --- a/js/version.txt +++ b/js/version.txt @@ -1 +1 @@ -3.9.18beta8 \ No newline at end of file +3.9.19 \ No newline at end of file diff --git a/readme.md b/readme.md index 78aa658..8d7018f 100644 --- a/readme.md +++ b/readme.md @@ -47,6 +47,8 @@ [dockerfile教程](https://blog.csdn.net/qq_46158060/article/details/125718218) [获取本地设备信息](https://blog.csdn.net/cui_yonghua/article/details/125508991) [获取本地设备信息](https://m.jb51.net/article/140716.htm) +###### 2022/11/02 +- [X] 合并小雅代码,未来功能完善解析管理,可正常拖拽排序 ###### 2022/10/30 - [X] 3.9.18beta4 修复lives?path=接口漏洞,修复js0设置密码后播放解析没自动带密码Bug ###### 2022/10/28 -- GitLab