Advertisement
usamimi2323

JDownloader2 EventScript - ダウンロード開始時にパッケージを未完了パッケージの一番上に移動

Dec 23rd, 2024
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 3.20 KB | Source Code | 0 0
  1. /**
  2.  * JDownloader2 EventScript - ダウンロード開始時にパッケージを未完了パッケージの一番上に移動
  3.  *
  4.  * ■「想定レイアウト」
  5.  * ----------------------------
  6.  * ○完了パッケージ
  7.  * ○完了パッケージ
  8.  * ○完了パッケージ
  9.  * △ダウンロード中…パッケージ
  10.  * △ダウンロード中…パッケージ
  11.  * □未完了パッケージ
  12.  * □未完了パッケージ
  13.  * □未完了パッケージ
  14.  * □未完了パッケージ
  15.  *     ・
  16.  *     ・
  17.  *     ・
  18.  * ----------------------------
  19.  *
  20.  * トリガー:【ダウンロード開始時】
  21.  *
  22.  * スクリプトタイプ: Async
  23.  */
  24.  
  25. /** @enum {number} */
  26. const movePackagesTo = {
  27.     top:0,
  28.     bottom:-1,
  29. };
  30. /**
  31.  * パッケージを移動します
  32.  *
  33.  * ※ callAPIのmovePackagesは、after_dest==(0|-1)でTOPに移動するので
  34.  *    -1をbottomとみなし値を設定し直す
  35.  *
  36.  * @param {number[]} packs 移動するパッケージUUIDの配列
  37.  * @param {number} after_dest 指定したUUIDのパッケージの下に移動する
  38.  *     (movePackagesTo.top=0|movePackagesTo.bottom=-1|package.UUID)
  39.  */
  40. function movePackages(pack_uuids, after_dest)
  41. {
  42.     if (!pack_uuids || !Array.isArray(pack_uuids) || !pack_uuids.length) return;
  43.     if (after_dest === undefined)
  44.         after_dest = movePackagesTo.top;
  45.     else if (after_dest == movePackagesTo.bottom)
  46.     {
  47.         const all_p = getAllFilePackages();
  48.         if (all_p.length <= 1) return;
  49.         after_dest = all_p.pop().UUID;
  50.     }
  51.     callAPI('downloadsV2', 'movePackages', pack_uuids, after_dest);
  52. }
  53.  
  54. function _main(started_p, started_l)
  55. {
  56.     var tmp_pid = -1;
  57.     var limit_count = 100;
  58.     const wait_interval = 5 * 1000;
  59.    
  60.     // DL開始するまでチェックしながら待機
  61.     while (0 < limit_count--)
  62.     {
  63.         // DL開始されたなら次へ
  64.         if (0 <= started_l.getDownloadDuration()
  65.             || 0 < started_l.getSpeed()
  66.             || 0 <= started_l.getDownloadSessionDuration())
  67.             break;
  68.        
  69.         // DL完了なら何もしない
  70.         if ( started_l.isFinished() )
  71.             return;
  72.        
  73.         // エラーなどでキャンセルなら何もしない
  74.         if (-1 == l.getDownloadSessionDuration())
  75.             return;
  76.        
  77.         sleep(wait_interval);
  78.     }
  79.     // 待機の上限を超えたら終了
  80.     if (0 == limit_count) return;
  81.    
  82.     var after_dest = movePackagesTo.top;
  83.     getAllFilePackages().some(function(p)
  84.     {
  85.         if ( (!p.isFinished()) && (!p.downloadLinks.some(function(l){return(0<=l.getDownloadDuration()||l.isFinished())})) )
  86.             return true;
  87.         after_dest = p.UUID;
  88.     });
  89.     if (started_p.UUID != after_dest)
  90.         movePackages([started_p.UUID], after_dest);
  91. }
  92.  
  93. // ダウンロード開始時
  94. var _package = null;
  95. var _link = null;
  96. try{
  97.     _package=package;
  98.     _link=link;
  99. }catch(e){
  100.     throw Error(
  101.         'イベントトリガーのタイプが正しく設定されていません\r\n\r\n'+
  102.         '解決方法:イベントスクリプトの設定から本スクリプトのトリガーに\r\n'+
  103.         '     【ダウンロード開始時】を選択し、\r\n'+
  104.         '     リストビュー画面の右クリックのコンテキストメニューから実行してください\r\n'
  105.     );
  106. }
  107.  
  108. if (_package && _link)
  109. {
  110.     _main(_package, _link);
  111. }
  112.  
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement