城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

几句代码写个飞快的下载软件,轻快版aria2支持UPnP,独

5月1日 游鱼坊投稿
  aria2虽然很强大,配置就略有些复杂,一些懒人包说实话整成了累人包。
  今天抽了点时间改进了一下aardio中的process。aria2扩展库,顺手解决了aria2不支持UPnP内网穿透的问题再也不用手动去配置了。
  process。aria2可以自动创建并管理aria2服务进程,自动获取并添加最新Tracker服务器,自动探测可用空闲端口,多个aria2进程不会冲突。并且自动检测系统环境并自动设置最佳配置。
  写界面也要不了几句代码。下面介绍2种实现界面的方案:
  1、用网页写界面。先用WebView2AriaNg演示一下。至于强大的WebView2请参考:放弃Electron,拥抱WebView2!JavaScript快速开发独立EXE程序
  2、直接用aardio创建原生界面。
  这两种方案的完整源码我放到process。aria2扩展库的范例里了。运行aardio工具扩展库,在库名称中输入process。aria2找到扩展库,双击扩展库名字可以打开范例(右键菜单也可以):
  这里要注意一下,BT下载如果一开始没速度是正常的,等一下或者先找个热门资源下载速度就会上来了。方案一:网页(WebView2AriaNg)实现aria2界面
  先看效果:
  软件的全部aardio代码其实没几句,如下:importwin。DSG{{varwinformwin。form(textaria下载器;right1250;bottom704;bordernone)winform。add(bk{left0;top0;right1251;bottom31;bgcolor11841964;dl1;dr1;dt1;forecolor5392444;linearGradient0;z2};custom{left0;top28;right1251;bottom706;bgcolor16777215;db1;dl1;dr1;dt1;z1})}}importprocess。aria2;vararia2process。aria2();aria2。startServer();importweb。varwbweb。view(winform。custom);创建嵌入HTTP服务器importwsock。tcp。simpleHttpSwsock。tcp。simpleHttpServer。threadGlobal{ARIA2RPCPORTtostring(aria2。rpcPort);ARIA2RPCSECRETcrypt。bin。encodeBase64(aria2。rpcToken);}wb。go(htmlindex。html);关闭窗口前关闭aria2winform。onDestroyfunction(){aria2。stop();}添加窗口标题栏、边框、阴影等importwin。ui。simpleWwin。ui。simpleWindow(winform);winform。show();win。loopMessage();
  aardio用simpleHttpServer创建了一个嵌入式的微型HTTP服务端,另外aardio也可以将网页端的AriaNg自动嵌入EXE文件所以能生成独立EXE。
  aardio支持类似PHP的服务端模板语法,这里我们简单地将初始化配置的。js文件改为。aardio文件,然后在这个aardio文件里动态读取上面代码设置的
  ARIA2RPCPORT,ARIA2RPCSECRET
  就可以让AriaNg愉快地连接到aardio创建的aria2服务端了。
  实际上就是修改ariang。min。js,主要修改代码如下:response。contentT?省略其他代码angular。module(ariaNg)。constant(ariaNgDefaultOptions,{rpcPort:?ARIA2RPCPORT?,secret:?ARIA2RPCSECRET?})
  当然这种事就不需要自己动手去改动AriaNg了,我在范例里写了一个更新前端HTML。aardio,直接运行这个代码就可以自动下载最新版AriaNg,自动修改AriaNg全自动搞定。
  方案二:直接用aardio创建原生界面
  这个界面我写得比较简单,主要演示用aardio直接调用aria2的JSONRPC接口有多方便。这个先搞定了的话,单纯画个界面用什么界面组件就可以自由发挥了。
  先看界面:
  此方案生成的软件体积更小,下面看完整源码(不再需要其他代码)。importwin。DSG{{varwinformwin。form(textaria2下载;right921;bottom537;bgcolor16777215)winform。add(btnAdd{text调用aria2下载文件;left605;top326;right747;bottom369;db1;dr1;z3};listview{left12;top7;right912;bottom318;bgcolor16777215;db1;dl1;dr1;dt1;edge1;fullRow1;z1};txtData{left32;top331;right585;bottom367;db1;dl1;dr1;edge1;z2};txtMessage{left8;top380;right909;bottom523;db1;dl1;dr1;edge1;hscroll1;multiline1;vscroll1;z4})}}winform。listview。insertColumn(网址,180);winform。listview。insertColumn(GID,100);winform。listview。insertColumn(连接数,120);winform。listview。insertColumn(状态,100);winform。listview。insertColumn(大小,80);winform。listview。insertColumn(速度,80);winform。listview。insertColumn(已下载,120);winform。listview。adjustfunction(cx,cy){winform。listview。fillParent(1);}importprocess。aria2;vararia2process。aria2();aria2。loggerwinform。txtMaria2。startServer();获取JSONRPC客户端varjsonClientaria2。jsonClient();jsonClient。on(error,function(err,serverError){winform。txtMessage。print(err,serverError);})jsonClient。on(close,function(e){winform。txtMessage。print(websocket已关闭,e);jsonClient。connect()})监听aria2事件jsonClient。on(aria2。onDownloadStart,function(param){varitemwinform。listview。downloadData〔param。gid〕if(!item){itemwinform。listview。addItem({,param。gid,null,添加成功});winform。listview。downloadData〔param。gid〕}winform。listview。setItemText(开始下载,item,4);})jsonClient。on(aria2。onDownloadPause,function(param){varitemwinform。listview。downloadData〔param。gid〕winform。listview。setItemText(暂停下载,item,4);})jsonClient。on(aria2。onDownloadStop,function(param){varitemwinform。listview。downloadData〔param。gid〕winform。listview。setItemText(已停止,item,4);})jsonClient。on(aria2。onDownloadComplete,function(param){varitemwinform。listview。downloadData〔param。gid〕winform。listview。setItemText(已完成,item,4);})jsonClient。on(aria2。onDownloadError,function(param){varitemwinform。listview。downloadData〔param。gid〕jsonClient。aria2。tellStatus(param。gid,{errorMessage})。endfunction(result,err){if(result)winform。listview。setItemText(result。errorMessage,item,4);}})winform。listview。downloadData{}vardownloadfunction(url){if(io。exist(url)。。string。endWith(url,。torrent,true)){returnjsonClient。aria2。addTorrent(crypt。encodeBin(string。load(url)))。endfunction(result,err){if(err){winform。listview。addItem({url,null,null,出错了:web。json。stringify(err)});}else{varitemwinform。listview。addItem({url,result,null,添加成功});winform。listview。downloadData〔result〕}}}jsonClient。aria2。addUri({url})。endfunction(result,err){if(err){winform。listview。addItem({url,null,null,出错了:web。json。stringify(err)});}else{varitemwinform。listview。addItem({url,result,null,添加成功});winform。listview。downloadData〔result〕}}}调用aria2打开一个网页winform。btnAdd。oncommandfunction(id,event){varurlwinform。txtData。if(!url){winform。msgboxErr(请输入下载地址或种子文件路径)}download(string。trim(url,));}winform。show();vargetDownloadSvargetNextDownloadSvarstatusQueue{}updateDownloadStatusfunction(){for(gid,iteminwinform。listview。downloadData){if(statusQueue〔gid〕)statusQueue〔gid〕jsonClient。aria2。tellStatus(gid,{gid,connections,downloadSpeed,totalLength,completedLength})。endfunction(result,err){if(result){varitemwinform。listview。downloadData〔result。gid〕winform。listview。setItemText(result。connections,item,3);winform。listview。setItemText(math。size64(result。downloadSpeed,item)。format()s,item,6);winform。listview。setItemText(math。size64(result。totalLength)。format(),item,5);winform。listview。setItemText(math。size64(result。completedLength)。format(),item,7);}else{}statusQueue〔gid〕}}}启动就绪执行aria2。ready(function(){查看默认配置jsonClient。aria2。getGlobalOption()。endfunction(result,err){winform。txtMessage。print(result)}创建定时器,更新下载进度winform。setInterval(updateDownloadStatus,100);})下载任务右键管理菜单importwin。ui。winform。listview。onnotifyfunction(id,code,ptr){if(code0xFFFFFFFBNMRCLICK){varnmwinform。listview。getNotifyMessage(code,ptr);创建弹出菜单varpopmenuwin。ui。popmenu(winform);popmenu。add(移除,function(id){vargidwinform。listview。getItemText(nm。iItem,2);jsonClient。aria2。remove(gid);winform。listview。delItem(nm。iItem);})popmenu。add(浏览文件,function(id){vargidwinform。listview。getItemText(nm。iItem,2);jsonClient。aria2。getFiles(gid)。endfunction(result,err){if(resultresult〔1〕){process。exploreSelect(result〔1〕。path)}}})popmenu。popup();}}关闭窗口,退出下载winform。onDestroyfunction(){aria2。stop()}winform。txtData。setCueBannerText(请输入下载地址或种子文件路径);winform。show();win。loopMessage();
投诉 评论 转载

几句代码写个飞快的下载软件,轻快版aria2支持UPnP,独aria2虽然很强大,配置就略有些复杂,一些懒人包说实话整成了累人包。今天抽了点时间改进了一下aardio中的process。aria2扩展库,顺手解决了aria2不支持……骑记科技创始人黄尉祥曾说目标是做到30个城市现在却退出公司?运营商财经网段昕妍文小米智能家庭官方微博曾发布过一条众筹预告,所众筹的自行车高达19999元。或许是小米史上单价最高的产品,引发不少关注。这款产品就来自小米生态链企业骑记……未来人会拥有机器人仆人或朋友吗有一个有趣的事实是,即使一只小小的苍蝇都比现代最高级的机器人先进。这是怎么回事?苍蝇的大脑可比现代电脑要小很多,因此,技术人员正面临着不断研制出更小巧的机器人的挑战。美国……浮华一生,山水一程,愿你从容不迫,砥砺前行作者雨飘清荷香(河南雨小荷)人生百味,尽在人间烟火中,种下生活的苦,看到梦想的光。生活之苦,尽在尘世沧桑中,扛下人生的累,得到心间的情。一帘清风送凉,那是岁月……奶茶妹妹出手了,效果如何?最近京东一则消息无声无息的爆发了,就像一场大地震一样。京东CEO刘强东宣布卸任了,这个消息还真的很让人吃惊。如今这个网络购物如此盛行的年代,感觉十个人九个的手机里应该都安……土耳其宣布发现,可满足全球1000年需求的稀土矿,结果闹了大稀土不是土,而是化学周期表中镧系元素和钪、钇共十七种金属元素的总称。稀土由于储量稀少、不可再生、分离提纯和加工难度较大而十分珍贵,据美国地质调查局2015年资料显示,世界稀土储……8旬四川老汉,40年日饮白酒2两,总结3点教训,建议了解下8旬四川老汉,40年日饮白酒2两,总结3点教训,建议了解下四川杨老汉前些天刚过了80大寿,寿宴上,亲朋好友都在夸他身子骨硬朗,看上去意气风发,于是便问起了他的保养秘籍。……三伏毒热天,钾元素流失多,建议多吃3红2黄,舒坦度苦夏人不管走到哪一步,总得找点乐子,想一点办法。是的,美食就是我找的乐子,想的办法!小谈食刻和你一起认真对待吃下的食物!导读:当下已经正式步入三伏天,虽说只是初伏,但是……入伏全年最强排寒季,如何祛寒毒修复气血?原创栗子少点盐马上就到三伏了。古人常说冷在三九,热在三伏,这是一年里最炎热、太阳最有力量的日子。对于体寒的朋友来说,也是体内寒气最容易被拔除的时候。只要抓住这段时间……风靡全球30年,稳坐轻医美头把交椅的肉毒素,国际市场风起云涌10月7日,康哲药业发布公告,获得韩国BMI公司注射用A型肉毒毒素100U冻干粉针剂在中国大陆、香港及澳门地区的独家代理权,正式入局国内肉毒素市场。据悉,康哲药业通过其附属的皮……高特效畅玩荒野大镖客2,GPDWINMAX2的R76800U关于《荒野大镖客2》这款3A级PC大作小伙伴们应该都不陌生了,玩起来的时候我往往会被这个波澜壮阔的西部世界的画面所震撼。内里丰富的NPC设置,细腻的还原了那个曾经的西部世界。开……腾冲生活志丨不用逃离,灵魂依旧温润有趣腾冲为什么能如此吸引古今中外名人?任何人并未给出明确答案。我们只知道,300多年前徐霞客在此停留39日,并写下了三万多字的游记,成为《徐霞客游记》千古奇书中最精彩的篇章;……
潜入幼儿园和各级学校的形式主义有多吓人?西部排名库里超传奇!勇士第5不稳,湖人意料之中,全美直播可笑黄瓜黑星病的防治措施有哪些上班族吃什么对眼睛好古代唐玄宗和武则天是什么关系武则天为什么会传位给怎样让你的职业避免被数字化?学习投资理财是越理越亏呢?还是你不理财财不理你呢?怎么喝酒不会醉,喝醉后如何保护自己?激动人心的比赛18条谁会经验太多的东西老师不会教父母也不懂纯露可以去闭口粉刺吗纯露湿敷的方法鳄龟用什么缸养最好用多大的缸养好

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找