Skip to content

Commit 2676de8

Browse files
authored
v1.2.4: optimized performance
1 parent ef475e1 commit 2676de8

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

NyaaTorrentHelper.user.js

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// @name Nyaa Torrent Helper
33
// @name:zh Nyaa 助手
44
// @namespace https://github.com/jc3213/userscript
5-
// @version 1.2.3
5+
// @version 1.2.4
66
// @description Nyaa Torrent ease to access torrent info and preview, filter search result, and aria2c intergration
77
// @description:zh 能便捷操作 Nyaa 的种子信息,预览缩微图,过滤搜索结果,联动aria2c
88
// @author jc3213
@@ -88,24 +88,26 @@ let hotkeyMap = {
8888
'ArrowLeft': (event) => ctrlButton(event, active.previousElementSibling),
8989
'ArrowRight': (event) => ctrlButton(event, active.nextElementSibling),
9090
'KeyC': (event) => altHandler(event, copyToClipboard),
91-
'KeyJ': (event) => altHandler(event, downloadWithAria2),
91+
'KeyD': (event) => altHandler(event, downloadWithAria2),
9292
'KeyF': (event) => altHandler(event, filterTorrents),
9393
'KeyE': (event) => altShiftHandler(event, clearStorage),
9494
};
9595

9696
let filterMap = {
97-
'' (result) {
98-
torrents.forEach((tr) => tr.classList.remove('nyaa-hidden'));
97+
''(result) {
98+
for (let tr of torrents) {
99+
tr.classList.remove('nyaa-hidden');
100+
}
99101
keyword = '';
100102
delete filterMap[result];
101103
},
102-
_default_ (result) {
104+
_default_(result) {
103105
let regexp = new RegExp(result.replace(/[?.\(\)\[\]+]/g, '\\$&'), 'i');
104-
torrents.forEach((tr) => {
106+
for (let tr of torrents) {
105107
regexp.test(tr.info.name)
106108
? tr.classList.remove('nyaa-hidden')
107109
: tr.classList.add('nyaa-hidden');
108-
});
110+
}
109111
filterMap[result] = filterMap[''];
110112
keyword = result;
111113
}
@@ -122,23 +124,32 @@ function filterTorrents() {
122124

123125
async function copyToClipboard() {
124126
if (!confirm(i18n.oncopy)) return;
125-
let info = await Promise.all([...selected].map(async (tr) => await getClipboardInfo(tr)));
127+
let data = [];
128+
for (let tr of selected) {
129+
data.push(getClipboardInfo(tr));
130+
}
131+
let info = await Promise.all(data);
126132
let copy = info.join('\n\n');
127133
navigator.clipboard.writeText(copy);
128134
alert(copy);
129135
}
130136

131137
function downloadWithAria2() {
132138
if (!confirm(i18n.aria2c)) return;
133-
let params = [...selected].map((tr) => ({ url: tr.info.magnet }));
139+
let params = [];
140+
for (let tr of selected) {
141+
params.push(tr.info.magnet);
142+
}
134143
postMessage({ aria2c: 'aria2c_download', params });
135144
alert(i18n.onsend);
136145
}
137146

138147
async function clearStorage() {
139148
if (!confirm(i18n.clear)) return;
140149
GM_deleteValues(GM_listValues());
141-
torrents.forEach((tr) => tr.classList.remove('nyaa-cached'));
150+
for (let tr of torrents) {
151+
tr.classList.remove('nyaa-cached');
152+
}
142153
alert(i18n.onclear);
143154
}
144155

@@ -148,7 +159,7 @@ document.addEventListener('keydown', (event) => {
148159
});
149160

150161
// get torrent info
151-
document.querySelectorAll('table > tbody > tr').forEach((tr) => {
162+
for (let tr of document.querySelectorAll('table > tbody > tr')) {
152163
let [, name, link, size] = tr.children;
153164
let a = [...name.children].at(-1);
154165
let url = a.href;
@@ -166,7 +177,7 @@ document.querySelectorAll('table > tbody > tr').forEach((tr) => {
166177
let copy = await getClipboardInfo(tr);
167178
navigator.clipboard.writeText(copy)
168179
} else if (altKey) {
169-
postMessage({ aria2c: 'aria2c_download', params: [{ url: magnet }] });
180+
postMessage({ aria2c: 'aria2c_download', params: [magnet] });
170181
} else {
171182
getTorrentPreview(tr, layerY, layerX);
172183
}
@@ -187,7 +198,7 @@ document.querySelectorAll('table > tbody > tr').forEach((tr) => {
187198
tr.classList.toggle('nyaa-checked');
188199
}
189200
});
190-
});
201+
}
191202

192203
async function getTorrentDetail(tr) {
193204
let {url, name, torrent, magnet, size} = tr.info;
@@ -202,7 +213,11 @@ async function getTorrentDetail(tr) {
202213
let text = await fetch(url).then((res) => res.text()).catch((err) => working.delete(url));
203214
let result = text.match(/<div[^>]*id=["']torrent-description["'][^>]*>([\s\S]*?)<\/div>/i)[1];
204215
let urls = result.match(/https?:\/\/[^\]&)* ]+/g);
205-
urls?.forEach((url) => url.match(/.(jpe?g|png|gif|avif|bmp|webp)/) ? image.add(url) : site.add(url));
216+
if (urls) {
217+
for (let url of urls) {
218+
url.match(/.(jpe?g|png|gif|avif|bmp|webp)/) ? image.add(url) : site.add(url);
219+
}
220+
}
206221
info = { site: [...site], image: [...image] };
207222
GM_setValue(url, info);
208223
tr.classList.add('nyaa-cached');

0 commit comments

Comments
 (0)