Advertisement
usamimi2323

JDownloader2 EventScript - DL完了時に同じファイル名のリンクを無効化

Dec 23rd, 2024
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 2.99 KB | Source Code | 0 0
  1. /**
  2.  * JDownloader2 EventScript - DL完了時に同じファイル名のリンクを無効化
  3.  *
  4.  * 【概要】
  5.  *  DL完了時に同一パッケージ内に同じファイル名(拡張子を含まない)の
  6.  * リンクがあれば無効化し、完了する
  7.  *
  8.  * 【説明】
  9.  *  ファイルのダウンロードが完了した際、
  10.  * 同一パッケージ内に含まれている他のリンクに同じ名前のリンクがあっても
  11.  * ファイル拡張子が違えば、ミラーとして認識せずに完了扱いされず
  12.  * 未完了の別ファイルと見なされ続ける
  13.  *
  14.  *  それをダウンロード完了時にそれら拡張子違いのリンクを無効化し、
  15.  * 疑似完了扱いにすることで同じ中身のファイルが更にダウンロードされることを防ぐ
  16.  *
  17.  *  また、スキップされたリンクが残存していれば
  18.  * パッケージの進捗状況が100%にならず、完了パッケージにならないため、
  19.  * それらも無効にした上でスキップマークを消す
  20.  *
  21.  *
  22.  * 【使い方】
  23.  * [トリガー] "ダウンロード停止時"
  24.  *
  25.  */
  26.  
  27. /** @type {string[]} ミラー扱いするリンクの拡張子 (追加、削除可能) */
  28. const MirrorDetect_Extensions = [
  29.     'rar',
  30.     'zip',
  31.     '7z',
  32.     'cbz',
  33.     'cbr',
  34.     'epub'
  35. ];
  36. //const MirrorDetect_Extensions = null;
  37.  
  38.  
  39. function getFileName(f) // Or FolderName
  40. {
  41.     const r = f.match(/([^\\\/\:]*)[\\\/]*$/);
  42.     return r ? r[1] : '';
  43. }
  44.  
  45. function getExt(f)
  46. {
  47.     const r = f.match(/(\.[0-9a-zA-Z]{2,6})$/);
  48.     return r ? r[1] : '';
  49. }
  50.  
  51. function getFileSpec(f)
  52. {
  53.     const r = getFileName(f).match(/^([^\\\/\:]*?)(\.[0-9a-zA-Z]{2,6})?$/);
  54.     return r ? r[1] : f;
  55. }
  56.  
  57.  
  58. function checkMirror(finished_l)
  59. {
  60.     const mde_regexp = new RegExp(
  61.         ((MirrorDetect_Extensions && MirrorDetect_Extensions.length > 0)
  62.             ? ('^\.(?:'+MirrorDetect_Extensions.join('|')+')$')
  63.             : '^.*$'), 'i'
  64.     );
  65.     if (!mde_regexp.test(getExt(finished_l.name)))
  66.         return;
  67.    
  68.     const finished_l_fspec = getFileSpec(finished_l.name);
  69.     finished_l.package.downloadLinks.forEach(function (l)
  70.     {
  71.         // 拡張子抜きのファイル名が一致して未完了だったら無効化し、完了したパッケージにする
  72.         if (finished_l.UUID != l.UUID
  73.             && finished_l_fspec == getFileSpec(l.name)
  74.             && (mde_regexp.test(getExt(l.name))))
  75.             l.setEnabled(false), l.setSkipped(false)
  76.     });
  77. }
  78.  
  79.  
  80. // ダウンロード停止時
  81. var _link = null;
  82. try{
  83.     _link=link
  84. }catch(e){
  85.     throw Error(
  86.         'イベントトリガーのタイプが正しく設定されていません\r\n\r\n'+
  87.         '解決方法:イベントスクリプトの設定から本スクリプトのトリガーに\r\n'+
  88.         '     【ダウンロード停止時】を選択し、\r\n'+
  89.         '     リストビュー画面の右クリックのコンテキストメニューから実行してください\r\n'
  90.     );
  91. }
  92.  
  93. if (_link && _link.isFinished() && ! _link.package.isFinished())
  94. {
  95.     checkMirror(_link);
  96. }
  97.  
  98.  
  99.  
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement