//解析torrent文件 import win.ui; /*DSG{{*/ var winform = win.form(text="torrent文件解析演示";right=661;bottom=636;border="dialog frame";max=false) winform.add( edit={cls="edit";left=19;top=37;right=646;bottom=618;autohscroll=false;edge=1;hscroll=1;multiline=1;vscroll=1;z=1}; static={cls="static";text="请拖动 *.torrent 文件到当前窗口";left=21;top=9;right=476;bottom=33;transparent=1;z=2} ) /*}}*/ import crypt; import inet.url; import bencoding; import string.conv.pinyin; import fsys.dlg; var updateTorrentName = function(filePath){ winform.edit.print( io.splitpath(filePath).file ); var decoder = bencoding.decoder(string.load(filePath)) var torrent = decoder.parse() if(torrent.info["name.utf-8"]){ winform.edit.print(`info["name.utf-8"]:`,torrent.info["name.utf-8"]) torrent.info["name.utf-8"] = string.replace(torrent.info["name.utf-8"],":",function(str){ var py = string.conv.pinyin(str); if(py && py!=str){ return py[[1]]; } }) winform.edit.print("已更改为:",torrent.info["name.utf-8"]) } if(torrent.info["name"]){ winform.edit.print(`info["name"]:`,torrent.info["name"]) torrent.info["name"] = string.replace(torrent.info["name"],":",function(str){ var py = string.conv.pinyin(str); if(py && py!=str){ return py[[1]]; } }) winform.edit.print("已更改为:",torrent.info["name"]) } var magnet = 'magnet:?'+ "xt=urn:btih:" + ..crypt.sha1( decoder.getString( torrent[["info"]]) ,true) + "&" +..inet.url.stringifyParameters({ dn = torrent['info']['name']; tr = torrent['announce']; xl = torrent['info']['length'] },false) winform.edit.print(magnet); var savePath = fsys.dlg.save("*.torrent|*.torrent|","保存已更改的torrent文件",,winform); if(!savePath){ return; } var encoder = bencoding.encoder() var bin = encoder.stringify(torrent); string.save(savePath, bin) } winform.onDropFiles = function(files){ for i,path in table.eachIndex(files){ if(string.endsWith(path,".torrent",true)){ updateTorrentName(path); } } } winform.show(); win.loopMessage();