[UI] 全部下载功能 #34
Labels
No Label
bug
component-crypto
component-ui
docs
duplicate
enhancement
help wanted
invalid
misc
platform-android
platform-mac
platform-win
question
test
wontfix
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: um/um-react#34
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
function sleep(delay) {
var start = (new Date()).getTime();
while ((new Date()).getTime() - start < delay) {
continue;
}
}
script = document.getElementsByClassName("chakra-link css-181sfzb")
for (var i = 0; i < script.length; i++) {
if (script[i].target != "") {
continue;
}
console.log(script[i].href);
console.log(script[i].download);
console.log(i);
script[i].click();
sleep(150*Math.log((i + 1)));
}
如果在浏览器环境下全部下载的话,一般会导致弹出大量的下载框;我刚刚给electron封装添加了全部下载功能,原理是用electron劫持下载操作,直接保存进选择的一个文件夹;下载链接使用CSS选择器搜索
a[href^=blob]
https://github.com/CarlGao4/um-react-electron/releases
@jixunmoe
理论上可以利用新的文件系统 api 来打开目录批量写出,但好像没有火狐浏览器的支持:
https://developer.mozilla.org/en-US/docs/Web/API/File_System_API
另一种方案则是提供一个第三方可执行程序,监听本地端口,等待请求命中后写出。基本上支持跨域访问的浏览器都支持。
C++有一个跨平台支持的httplib(yhirose/cpp-httplib),用法倒是很简单,写一个本地接收程序开个小型http服务器也不难,但是也许有点为难用户了吧…
库很多,golsng/rust 写的更容易编译,感觉。
以后解密文件还有更麻烦的步骤
实在不行还能用 jszip 打个包下载
我在想的是,有没有增加一个选项,每解密一个音频就直接自动下载,毕竟最烦的不是不能批量下载而是一次性在浏览器里放太多文件比较吃内存
要是我熟悉typescript我就直接开PR了,可我主要是开发Python和C++
或者给electron和wry环境单独添加功能呢?比如如果检测到在这样的环境下就增加一个输入框选择自动保存的目录?(目前我的electron自动构建还是用的菜单栏)
wry 和 electron 都可以预留接口吧,浏览器发送消息,被框架识别然后做特权操作
如果只是想做个自定义的批量转码工具,你可以用这个库
https://github.com/parakeet-rs/libparakeet
大佬们,每次解密完在console执行我那个命令不就可以批量下载了吗?浏览器那里一律允许弹出和下载。不需要下载的就不扔进去解密就行了。是我那个有什么不方便或者不适用的地方吗?
不是的,只是在想如何让这个项目做的更好而已
对于typescript我了解的不多,不能确定之后在构建的时候
chakra-link css-181sfzb
能不能保持稳定,所以我是用document.querySelectorAll('a[href^="blob"')
查找元素的另外,我最希望解决的问题之一是避免在用户一次导入大量文件的时候把内存爆掉…我个人不认为“如果你要一次导入一大堆,那请你去用我开发的另一个项目”是个解决办法,因为这是一个应用,不是一个库
还没收到过内存爆的报告(有一例,但无法重现),等有人出问题了+能稳定重现再想想怎么修。
不过如果你会 c++,我的建议是你直接用上面的那个库写一个解决方案,这边也可以把你的项目列到“相关项目”里。
重现方法也很简单,直接一次性往里加足够多的文件(比如几百首加起来10GB的),会都先存进内存,然后会再存进磁盘缓存
个人看法,虽说线代浏览器的优化做的很多了,但也不能因为浏览器给优化了网页就当内存都是随便用的啊…
我的看法刚好相反,内存现在便宜很多,买都买了得利用起来。刚好浏览器提供了这么一个平台/方法就很棒。
主要还是因为这工具算“一锤子买卖”。用完关了就完事。
如果真的对性能/内存使用有要求,应当换用别的原生代码写 cli/gui 程序。
我觉得这个项目生成本来就需要用到python,那就直接用python做一个最简单的http服务就好了。代码如下:
import http.server
import socketserver
import os
import webbrowser
PORT = 8000 #设置端口
os.chdir('./um-react') #设置WEB服务默认主目录
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
webbrowser.open("http://localhost:{PORT}/".format(PORT=PORT))
httpd.serve_forever()
以上代码在windows10,python3下运行正常
Python 不是必须的。用它只是因为 node 的 Docker 容器里没有自带
zip
包,直接使用已有的 Python 可以更快完成构建。