本篇文章给大家谈谈把网站生成app源码分享,以及有网站源码怎么生成网站对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
aria2虽然很强大,配置就略有些复杂,一些懒人包说实话整成了累人包。
今天抽了点时间改进了一下aardio中的process.aria2扩展库,顺手解决了aria2不支持UPnP内网穿透的问题——再也不用手动去配置了。
process.aria2可以自动创建并管理aria2服务进程,自动获取并添加最新Tracker服务器,自动探测可用空闲端口,多个aria2进程不会冲突。并且自动检测系统环境并自动设置最佳配置。
写界面也要不了几句代码。下面介绍2种实现界面的方案:
1、用网页写界面。先用WebView2+AriaNg演示一下。至于强大的WebView2请参考:放弃Electron,拥抱WebView2!JavaScript快速开发独立EXE程序
2、直接用aardio创建原生界面。
这两种方案的完整源码我放到process.aria2扩展库的范例里了。运行「aardio工具>扩展库」,在库名称中输入process.aria2找到扩展库,双击扩展库名字可以打开范例(右键菜单也可以):
这里要注意一下,BT下载如果一开始没速度是正常的,等一下或者先找个热门资源下载速度就会上来了。
方案一:网页(WebView2+AriaNg)实现aria2界面
先看效果:
软件的全部aardio代码其实没几句,如下:
importwin.ui;\n/*DSG{{*/\nvarwinform=win.form(text=&34;;right=1250;bottom=704;border=&34;)\nwinform.add(\nbk={cls=&34;;left=0;top=0;right=1251;bottom=31;bgcolor=11841964;dl=1;dr=1;dt=1;forecolor=5392444;linearGradient=0;z=2};\ncustom={cls=&34;;text=&34;;left=0;top=28;right=1251;bottom=706;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;z=1}\n)\n/*}}*/\n\nimportprocess.aria2;\nvararia2=process.aria2();\naria2.startServer();\n\nimportweb.view;\nvarwb=web.view(winform.custom);\n\n//创建嵌入HTTP服务器\nimportwsock.tcp.simpleHttpServer;\nwsock.tcp.simpleHttpServer.threadGlobal={\nARIA2_RPC_PORT=tostring(aria2.rpcPort);\nARIA2_RPC_SECRET=crypt.bin.encodeBase64(aria2.rpcToken);\n}\n\nwb.go(&34;);\n\n//关闭窗口前关闭aria2\nwinform.onDestroy=function(){\n\taria2.stop();\n}\n\n//添加窗口标题栏、边框、阴影等\nimportwin.ui.simpleWindow;\nwin.ui.simpleWindow(winform);\n\nwinform.show();\nwin.loopMessage();
aardio用simpleHttpServer创建了一个嵌入式的微型HTTP服务端,另外aardio也可以将网页端的AriaNg自动嵌入EXE文件——所以能生成独立EXE。
aardio支持类似PHP的服务端模板语法,这里我们简单地将初始化配置的*.js文件改为*.aardio文件,然后在这个aardio文件里动态读取上面代码设置的
ARIA2_RPC_PORT,ARIA2_RPC_SECRET
就可以让AriaNg愉快地连接到aardio创建的aria2服务端了。
实际上就是修改aria-ng-***.min.js,主要修改代码如下:
response.contentType=&34;;?>\n//……省略其他代码……\nangular.module(&34;).constant(&34;,{\nrpcPort:&34;,\nsecret:&34;\n})
当然这种事就不需要自己动手去改动AriaNg了,我在范例里写了一个『更新前端HTML.aardio』,直接运行这个代码就可以自动下载最新版AriaNg,自动修改AriaNg……全自动搞定。
方案二:直接用aardio创建原生界面
这个界面我写得比较简单,主要演示用aardio直接调用aria2的JSON-RPC接口有多方便。这个先搞定了的话,单纯画个界面用什么界面组件就可以自由发挥了。
先看界面:
此方案生成的软件体积更小,下面看完整源码(不再需要其他代码)。
importwin.ui;\n/*DSG{{*/\nvarwinform=win.form(text=&34;;right=921;bottom=537;bgcolor=16777215)\nwinform.add(\nbtnAdd={cls=&34;;text=&34;;left=605;top=326;right=747;bottom=369;db=1;dr=1;z=3};\nlistview={cls=&34;;left=12;top=7;right=912;bottom=318;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;edge=1;fullRow=1;z=1};\ntxtData={cls=&34;;left=32;top=331;right=585;bottom=367;align=&34;;db=1;dl=1;dr=1;edge=1;z=2};\ntxtMessage={cls=&34;;left=8;top=380;right=909;bottom=523;db=1;dl=1;dr=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=4}\n)\n/*}}*/\n\nwinform.listview.insertColumn(&34;,180);\nwinform.listview.insertColumn(&34;,100);\nwinform.listview.insertColumn(&34;,120);\nwinform.listview.insertColumn(&34;,100);\nwinform.listview.insertColumn(&34;,80);\nwinform.listview.insertColumn(&34;,80);\nwinform.listview.insertColumn(&34;,120);\nwinform.listview.adjust=function(cx,cy){\nwinform.listview.fillParent(1);\n}\n\nimportprocess.aria2;\nvararia2=process.aria2();\naria2.logger=winform.txtMessage;\naria2.startServer();\n\n//获取JSON-RPC客户端\nvarjsonClient=aria2.jsonClient();\njsonClient.on(&34;,function(err,serverError){\nwinform.txtMessage.print(err,serverError);\n})\n\njsonClient.on(&34;,function(e){\nwinform.txtMessage.print(&34;,e);\njsonClient.connect()\n})\n\n//监听aria2事件\njsonClient.on(&34;,function(param){\nvaritem=winform.listview.downloadData[param.gid]\nif(!item){\nitem=winform.listview.addItem({\n&34;,param.gid,null,&34;\n});\nwinform.listview.downloadData[param.gid]=item;\n}\n\nwinform.listview.setItemText(&34;,item,4);\n})\n\njsonClient.on(&34;,function(param){\nvaritem=winform.listview.downloadData[param.gid]\nwinform.listview.setItemText(&34;,item,4);\n})\n\njsonClient.on(&34;,function(param){\nvaritem=winform.listview.downloadData[param.gid]\nwinform.listview.setItemText(&34;,item,4);\n})\n\njsonClient.on(&34;,function(param){\nvaritem=winform.listview.downloadData[param.gid]\nwinform.listview.setItemText(&34;,item,4);\n})\n\njsonClient.on(&34;,function(param){\nvaritem=winform.listview.downloadData[param.gid]\n\njsonClient.aria2.tellStatus(param.gid,{\n&34;\n}).end=function(result,err){\nif(result)winform.listview.setItemText(result.errorMessage,item,4);\n}\n})\n\nwinform.listview.downloadData={}\nvardownload=function(url){\n\nif(io.exist(url)&&..string.endWith(url,&34;,true)){\nreturnjsonClient.aria2.addTorrent(crypt.encodeBin(string.load(url))).end=function(result,err){\n\nif(err){\nwinform.listview.addItem({\nurl,null,null,&34;+web.json.stringify(err)\n});\n}\nelse{\nvaritem=winform.listview.addItem({\nurl,result,null,&34;\n});\nwinform.listview.downloadData[result]=item;\n}\n}\n}\n\njsonClient.aria2.addUri({url}).end=function(result,err){\nif(err){\nwinform.listview.addItem({\nurl,null,null,&34;+web.json.stringify(err)\n});\n}\nelse{\nvaritem=winform.listview.addItem({\nurl,result,null,&34;\n});\nwinform.listview.downloadData[result]=item;\n}\n}\n}\n\n//调用aria2打开一个网页\nwinform.btnAdd.oncommand=function(id,event){\nvarurl=winform.txtData.text;\nif(!34;请输入下载地址或种子文件路径&39;&39;));\n}\n\nwinform.show();\n\nvargetDownloadStatus;\nvargetNextDownloadStatus;\nvarstatusQueue={}\nupdateDownloadStatus=function(){\n\nfor(gid,iteminwinform.listview.downloadData){\nif(statusQueue[gid])continue;\nstatusQueue[gid]=true;\n\njsonClient.aria2.tellStatus(gid,{\n&34;,&34;,&34;,&34;,&34;\n}).end=function(result,err){\nif(result){\nvaritem=winform.listview.downloadData[result.gid]\nwinform.listview.setItemText(result.connections,item,3);\nwinform.listview.setItemText(math.size64(result.downloadSpeed,item).format()+&34;,item,6);\nwinform.listview.setItemText(math.size64(result.totalLength).format(),item,5);\nwinform.listview.setItemText(math.size64(result.completedLength).format(),item,7);\n}\nelse{\n\n}\n\nstatusQueue[gid]=false;\n}\n}\n}\n\n//启动就绪执行\naria2.ready(\nfunction(){\n\n//查看默认配置\njsonClient.aria2.getGlobalOption().end=function(result,err){\nwinform.txtMessage.print(result)\n}\n\n//创建定时器,更新下载进度\nwinform.setInterval(updateDownloadStatus,100);\n}\n)\n\n//下载任务右键管理菜单\nimportwin.ui.menu;\nwinform.listview.onnotify=function(id,code,ptr){\nif(code=0xFFFFFFFB/*_NM_RCLICK*/){\n\nvarnm=winform.listview.getNotifyMessage(code,ptr);\n\n//创建弹出菜单\nvarpopmenu=win.ui.popmenu(winform);\npopmenu.add(&39;,function(id){\nvargid=winform.listview.getItemText(nm.iItem,2);\njsonClient.aria2.remove(gid);\nwinform.listview.delItem(nm.iItem);\n})\n\npopmenu.add(&39;,function(id){\nvargid=winform.listview.getItemText(nm.iItem,2);\n\njsonClient.aria2.getFiles(gid).end=function(result,err){\nif(result&&result[1]){\nimportprocess;\nprocess.exploreSelect(result[1].path)\n}\n}\n})\n\npopmenu.popup();\n}\n}\n\n//关闭窗口,退出下载\nwinform.onDestroy=function(){\naria2.stop()\n}\n\nwinform.txtData.setCueBannerText(&34;);\n\nwinform.show();\nwin.loopMessage();
OK,本文到此结束,希望对大家有所帮助。