11// ==UserScript==
22// @name Nyaa Torrent Helper
33// @namespace https://github.com/jc3213/userscript
4- // @version 1.2.0
4+ // @version 1.2.1
55// @description Nyaa Torrent easy preview, batch export, better filter
66// @author jc3213
77// @match *://*.nyaa.si/*
@@ -191,10 +191,10 @@ async function getTorrentDetail(tr) {
191191 working . add ( url ) ;
192192 let site = new Set ( ) ;
193193 let image = new Set ( ) ;
194- let container = document . createElement ( 'div' ) ;
195- container . innerHTML = await fetch ( url ) . then ( ( res ) => res . text ( ) ) . catch ( ( err ) => working . delete ( url ) ) ;
196- let result = container . querySelector ( '#torrent-description' ) . textContent ;
197- result . match ( / h t t p s ? : \/ \/ [ ^ \] \[ ) ; ! * " ] * / g ) ?. forEach ( ( url ) => url . match ( / .( j p e ? g | p n g | g i f | a v i f | b m p | w e b p ) / ) ? image . add ( url ) : site . add ( url ) ) ;
194+ let text = await fetch ( url ) . then ( ( res ) => res . text ( ) ) . catch ( ( err ) => working . delete ( url ) ) ;
195+ let result = text . match ( / < d i v [ ^ > ] * i d = [ " ' ] t o r r e n t - d e s c r i p t i o n [ " ' ] [ ^ > ] * > ( [ \s \S ] * ? ) < \/ d i v > / i ) [ 1 ] ;
196+ let urls = result . match ( / h t t p s ? : \/ \/ [ ^ & ) * ] + / g ) ;
197+ urls ?. forEach ( ( url ) => url . match ( / .( j p e ? g | p n g | g i f | a v i f | b m p | w e b p ) / ) ? image . add ( url ) : site . add ( url ) ) ;
198198 info = { site : [ ...site ] , image : [ ...image ] } ;
199199 GM_setValue ( url , info ) ;
200200 tr . classList . add ( 'nyaa-cached' ) ;
@@ -206,7 +206,7 @@ async function getTorrentDetail(tr) {
206206
207207// copy info to clipboard
208208async function getClipboardInfo ( tr ) {
209- let { url, name, torrent, magnet, size, image, site} = await getTorrentDetail ( tr ) ;
209+ let { url, name, torrent, magnet, size, image, site } = await getTorrentDetail ( tr ) ;
210210 return `${ i18n . name }
211211 ${ name } (${ size } )
212212${ i18n . preview }
@@ -218,18 +218,31 @@ ${torrent ? `${i18n.torrent}\n ${torrent}\n` : ''}${i18n.magnet}\n ${magne
218218async function getTorrentPreview ( tr , top , left ) {
219219 let { image, site } = await getTorrentDetail ( tr ) ;
220220 if ( image ?. length > 0 ) {
221- let src = image [ 0 ] ;
222- let img = preview . get ( src ) ;
221+ let url = image [ 0 ] ;
222+ let img = preview . get ( url ) ;
223223 if ( ! img ) {
224224 img = document . createElement ( 'img' ) ;
225- img . src = src ;
225+ img . src = redirectURL ( url ) ;
226226 img . className = 'nyaa-preview' ;
227227 img . addEventListener ( 'click' , event => img . remove ( ) ) ;
228- preview . set ( src , img ) ;
228+ preview . set ( url , img ) ;
229229 }
230230 img . style . cssText = `top: ${ top } px; left: ${ left } px;` ;
231231 document . body . append ( img ) ;
232232 } else if ( site ?. length > 0 ) {
233233 GM_openInTab ( site [ 0 ] ) ;
234234 }
235235}
236+
237+ const redirectRules = [
238+ { match : 'files.catbox.moe' , replace : 'i0.wp.com/files.catbox.moe' , suffix : '?ssl=1' }
239+ ] ;
240+
241+ function redirectURL ( url ) {
242+ for ( let { match, replace, suffix } of redirectRules ) {
243+ if ( url . includes ( match ) ) {
244+ return url . replace ( match , replace ) + suffix ;
245+ }
246+ }
247+ return url ;
248+ }
0 commit comments