jc3213 / download_with_aria2

The browser extenson for aria2 download utility via JSON-RPC
GNU Lesser General Public License v2.1
66 stars 9 forks source link

JSONRPC同时支持WebSocket与HTTP Post #13

Closed jc3213 closed 2 years ago

jc3213 commented 2 years ago

_Originally posted by @daiaji in https://github.com/jc3213/download_with_aria2/issues/11#issuecomment-1024178794_

jc3213 commented 2 years ago

https也会被自动转换成wss,你直接填https就行。

另外,这个扩展仅使用WebSocket作为后台获取下载进度用,发起其他请求的时候(比如下载,暂停任务之类)都是发送的HTTP Post请求,这样做是为了简化代码。

jc3213 commented 2 years ago

@daiaji 如果有问题在这里反馈

daiaji commented 2 years ago

我的caddy写了些配置,似乎只接受WebSocket的请求,或者有些场景只能用WebSocket,WebSocket (safe)是WebSocket加ssl。

jc3213 commented 2 years ago

我的caddy写了些配置,似乎只接受WebSocket的请求,或者有些场景只能用WebSocket,WebSocket (safe)是WebSocket加ssl。

跟https的本质是一样的。

我暂时还是Mixed Mode,之前用的还是HTTP Post方法,我当时只是准备解决 https://github.com/jc3213/download_with_aria2/issues/7 ,但是看了那边的代码然后查了aria2的JSONRPC使用手册后发现用Web Socket当后台还是不错的。

我先是尝试用一套代码去写WebSocket相关的命令,发现并不合适,因为WebSocket是长期连通状态,短期命令必须进行close()操作不说,即使你多开好几个不同的WebSocket进程,aria2 notification event总是会同步返回回应。就显得非常麻烦。

你要么每次ws.send()后同时修改ws.onmessage。要么写一个极度冗长的判断代码……对于我这个扩展来说过于复杂了。然后我半路就放弃了(虽然要做不是做不了)

jc3213 commented 2 years ago

我已经开始踢添加WebSocket支持了。虽然目前还在开发中,仅支持Chromium版本的background部分就是了。请耐心等待吧

https://github.com/jc3213/download_with_aria2/commit/b9bda16b2b1de25ed51f718b3d49ab5b73278b96

daiaji commented 2 years ago

不急,反正我也只是在缓慢部署AIO,nextcloud也只是刚弄好本体,smb共享,密码管理器评估,茫茫多的事还没动手,aria2投入做种生产用还很后面就是了。

jc3213 commented 2 years ago

支持已经做好了,我把Chromium版本也降回Manifest V2了,V3虽然以后会强制,但是真的邪门……

daiaji commented 2 years ago

彳亍,我回家试试。 这种限制,你确定不去浏览器的社区问问,看是bug还是有什么变通办法吗?

jc3213 commented 2 years ago

彳亍,我回家试试。 这种限制,你确定不去浏览器的社区问问,看是bug还是有什么变通办法吗?

我看了是Service Worker本身的机制,w3c那边也是这个回复。sw的流程时激活=>执行=>休眠,关键这个休眠就跟完全停止没区别……然后激活时又会重新执行整个脚本。

localStorage在manifestV3直接不可用,要么用caches要么用storage API,前者用不来,只能用后面,但是这个读取需要时间,所以我用的全局变量在加载时执行。

当Background Pages/Scripts时,后台作为一个完整的网页,这个加载只需要执行1次,而sw因为机制问题,每次激活都加载一次,我就真不知道这个东西哪里有利于电池使用了。

然后变量也是每次休眠后就直接没了……除非不使用全局变量,在需要用到储存时每次都读取一遍……这么做还省什么电呢?反正我已经败了。

毕竟现在谷歌那边Manifest V3还是开发阶段,92版本那会开始我把代码改过去还会莫名其妙就死了……按照现在的说法就是,第一次休眠后,sw再也无法唤醒……也是96版本后发现可以正常工作了。然后切过去,各种遇到挫折,又再次放弃了。

我才疏学浅,还是等着看其他大型扩展怎么迁移过去,怎么实现支持的再说。

daiaji commented 2 years ago

嘛,至少没强制要求,能摆一天是一天就完事了。 好事 对了。 linux下那个检测zip是否存在的命令是有点问题,我是archlinux,没有dpkg,ps -aux是检查运行中的进程吧,这个没用吧。 https://blog.csdn.net/butterfly5211314/article/details/84766207 https://blog.csdn.net/whatday/article/details/105775844 basybox应该也没有zip,直接command检测就完事了。 一般发行版也带了zip。 .sh也该加上执行权限,git克隆应该也继承权限的。

jc3213 commented 2 years ago

我不会sh脚本,我是找人帮忙写的,他用的p7zip,但我完全不会Linux,如果可以的话麻烦帮忙弄一下吧……

daiaji commented 2 years ago

@jc3213 代码抄过来了,我到时候就PR, 还有就是 图片 Linux下文件名带空格真的很难受。 必须要转义,我打算用下划线代替。 README.md关于Linux下的编译说明,我也改一下。

jc3213 commented 2 years ago

没事,如果可以的话把Windows那个名字一起改了吧,用个稍微短点的名字。

当时我只做了Windows版本,就一个Auto Build.cmd,然后有人表示如果Linux用户看到的话会比较迷惑,于是才改的长名字用以区分,想想确实改用短名字跟去掉空格……

daiaji commented 2 years ago

Linux_build.sh之类的?

jc3213 commented 2 years ago

可以,好像小写也没问题? Windows那个也改成win_build.cmd好像就都能对上了

daiaji commented 2 years ago

彳亍,反正NTFS下不区分大小写。

jc3213 commented 2 years ago

谢了啊,Linux那边实在整不来,也不想去学nodejs,当时用jpm的时候还稍微接触过一段时间,后来火狐整个换webext就没摸过了。当时因为一个看斗鱼之类直播网站内存溢出,然后就是NoScript,downThemAll这类扩展没了……

daiaji commented 2 years ago

我感觉编译脚本应该在根目录下创建一个build文件夹,编译后的扩展就直接塞那边,其下创建两个子文件夹,firefox和chorme就完事了,可能在加个清理功能会更好,也许还要支持从命令行直接导入参数? 现在直接把编译后的扩展塞到源码目录下,很容易下一次打包一并被打进去。 编译目录下堆个六七八个版本的扩展应该也没所谓,下次测试应该还更方便点,需要清理手动清理就完事了。 现在扩展能用,暂时没问题。

jc3213 commented 2 years ago

Linux我完全不会,找人写他说在根目录生成不方便,还是在子目录下好操作,然后他这么写的。主要我是真不会Linux也没有环境,一片茫然。

daiaji commented 2 years ago

基本上firefox的扩展生成是基于zip的追加模式,但如果你一个版本追加两次,想必zip里会塞一堆东西。 那么果然还是在创建chrome的扩展前判断zip文件是否存在,是的话删除比较好。 清理功能之后再说。 真的清理起来很麻烦的话。


为了方便路径全部小写了,把参数导入弄出来就收工~

jc3213 commented 2 years ago

7-zip的话,先压缩chrome文件,然后通过-u命令去更新的话可以把firefox的文件覆盖进去。最终结果就是正常的,也没有塞一堆文件的问题。

其实windows的powershell也可以,就是莫名其妙的火狐不认。但是win系统能直接像其他zip那样打开

daiaji commented 2 years ago

倒不是说莫名其妙,zip变体挺多的,我遇到过一个zip包的变体,资源管理器能打开,但是7zip打不开。 当时看看文件头也许能知道是怎么回事,但也没在意就是了。

daiaji commented 2 years ago

收工 zip要cd到要压缩的目录才能不把父目录压缩进去,有点脑瘫。 换别的压缩软件似乎也能更优雅的处理这种问题。 不过一切从简吧,别的发行版也未必有archlinux上能用的压缩软件。 说不定还要自己编译。 py倒是有现成的实现。 但这编译脚本有点太豪华了吧。 不知道能不能把zsh补全给整上。 没补全有点残念。 说不定能用命令行直接把扩展给firefox装上? 只要是xpi扩展名似乎就行。 之后再折腾吧。

daiaji commented 2 years ago

对了,能不能支持多个RPC? 我的NAS和PC上都有aria2,一般来说都是要选择下载到哪里去。 BT的话我比较希望下载到NAS,因为能全天作种。 有时候下载到PC的话就不用从NAS复制。

jc3213 commented 2 years ago

多个RPC么?那我这个底层要改很多东西了……虽然UI啥的并不难就是了。但是抓取判断啥的就很复杂了……只是右键菜单的话不是特别复杂就是了

daiaji commented 2 years ago

先加右键吧,nyaa的链接好像都能右键,PR了,先合并吧。

jc3213 commented 2 years ago

不是,即使只是右键菜单。我这边也要弄很多东西……至少储存框架又要大改……然后是对应的设置界面啥的

daiaji commented 2 years ago

慢慢搞吧,不急,我去打黄油了。

jc3213 commented 2 years ago

感觉这个功能优先级多半不会太高JSONRPC相关储存要大改,然后还要设置一个作为默认,否则popup,抓取全部都要做适配……即使这样,UI方便也很麻烦……而且aria2.js啥的也要大改方便传递参数,想想就头皮发麻……background估计也要大改……

daiaji commented 2 years ago

也不说寄不寄得彻底,只能说是寄了,sh脚本写着,忽然电脑其卡无比,我以为是去重在整活,好家伙,忽然直接zsh的历史记录提示只读了,看了一下挂载,妈的文件系统只读了😋,现在正在修复文件系统,最糟的情况下要把文件导出来,但我没有足够大的备用硬盘。 快进到测评致态Ti Pro7000。 下午就开摆吧。 😋过年好像还没看管人。

jc3213 commented 2 years ago

阿西,HDD炸了么?赶快导出吧……

daiaji commented 2 years ago

硬盘应该没寄,似乎是文件系统的元数据寄了,这个是pm1733,三爽的次旗舰企业级,没用多久应该不存在会寄。

daiaji commented 2 years ago

备份倒是早就做了,就是大概年前做的,就是今天和昨天的sh脚本应该要重新弄了。

jc3213 commented 2 years ago

慢慢来吧,我现在对着提醒功能头皮发麻。怎么都不合理……只有提示所有任务完成,或者像现在这样触发下载时发出提醒最好。

另外多档案这里,我还在想储存怎么弄,界面怎么做……又不像userscript那样想弄就弄……

jc3213 commented 2 years ago

@daiaji 档案切换做好了,但是目前仅限Chromium版本。目前只是做出了功能跟设置界面,切换档案还需要繁杂打开设置界面进行繁杂的手动操作。界面没有i18n,仅英文

下载测试版

相关Branch multi_profile

daiaji commented 2 years ago

chromium 要怎么才能安装扩展? 有什么键值可以改吗? 没签名不让安装的样子 现在指定浏览器参数可以一键编译,再指定-i参数可以在firefox里弹出安装窗口。 chromium似乎由于安全策略,不让这么弄,姑且只实现了firefox。

jc3213 commented 2 years ago

直接在新Issue里讨论吧,Chromium要打开开发者选项,然后加载文件夹形式才能做。

daiaji commented 2 years ago

Discussions 开启吧,Issue闲聊有点不像话。