Advertisement
usamimi2323

JDownloader2 EventScript - リネーム系アクション集用メニューインポーター

Oct 23rd, 2024 (edited)
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 8.53 KB | Source Code | 0 0
  1. //
  2. // JDownloader2 EventScript - リネーム系アクション集用メニューインポーター
  3. //
  4. //
  5. // 拙作のリネーム系のEventTriggerアクション集に対応したメニュー項目を
  6. // メニュー管理画面からちまちまと手動で追加しなくてもいいように
  7. // JDのコンテキストメニューに一気に登録するEventScriptです
  8. //
  9. // 実行後は必ずJDを再起動してください
  10. //
  11. // 追加されたメニュー項目は、メニュー管理画面を開き
  12. // 各々好きなように移動・編集・削除等してください
  13. //
  14. // 【必須環境】
  15. // JD2 + WindowsScriptHosting(WSH)
  16. //
  17. // ※WSHは確認メッセージボックスに使用しています
  18. //   そのコード部分は use_WSH=false とすれば不要ですが、
  19. //   確認なしにインポートと再起動が行われます
  20. //
  21. // 【使い方】
  22. // 1. [イベントスクリプト]→[追加]→[編集] (※ここで追加した無名スクリプトは、後で削除してください)
  23. // 2. このスクリプトファイルの内容をすべて貼り付ける→
  24. // 3. [試行]ボタンを押す
  25. // 4. インポートするメニューで「はい」を選ぶ
  26. // 5. JD2を再起動
  27. // 6. ダウンロードリスト画面、リンクグラバー画面
  28. //    それぞれのメニュー管理画面から好きなように編集
  29. //
  30.  
  31. const separator_name='セパレータ';
  32. const use_WSH = true;
  33. //const use_WSH = false;
  34.  
  35. function rebuildMenu(x)
  36. {
  37.     function r(m)
  38.     {
  39.         // Set default value
  40.         if (! ('visible' in m)) m['visible'] = true;
  41.         if (! ('shortcut'in m)) m['shortcut'] = null;
  42.         if (! ('mnemonic'in m)) m['mnemonic'] = null;
  43.         if (! ('iconKey' in m)) m['iconKey'] = null;
  44.        
  45.         if (('items' in m) && m['items'].length)
  46.         {
  47.             m['type'] = 'CONTAINER';
  48.             m['className'] = 'org.jdownloader.controlling.contextmenu.MenuContainer';
  49.             m['actionData'] = {};
  50.            
  51.             m['items'].forEach(function(val,idx,list){
  52.                 r(list[idx]);
  53.             });
  54.         }
  55.         else if (m['name']==separator_name)
  56.         {
  57.             m['type'] = 'ACTION';
  58.             m['className'] = 'org.jdownloader.controlling.contextmenu.SeparatorData';
  59.             m['actionData'] = {};
  60.             m['items'] = [];
  61.         }
  62.         else
  63.         {
  64.             m['type'] = 'ACTION';
  65.             m['className'] = null;
  66.             m['actionData'] = {'clazzName':'org.jdownloader.extensions.eventscripter.GenericEventScriptTriggerContextMenuAction'};
  67.             m['items'] = [];
  68.         }
  69.        
  70. //      if (m['visible']) true;
  71.     }
  72.     if (Array.isArray(x))
  73.         x.forEach(function(val,idx,list){r(list[idx])});
  74.     else
  75.         (r)(x);
  76. }
  77.  
  78. function getRootContextMenu(context) {
  79.     var storage = "cfg/menus_v2/" + context;
  80.     var interface = "org.jdownloader.controlling.contextmenu.ContextMenuConfigInterface";
  81.     var root_menu = callAPI(
  82.         "config", "get",
  83.         interface,
  84.         storage,
  85.         "menu"
  86.     );
  87.    
  88.     return root_menu;
  89. }
  90.  
  91. function setRootContextMenu(root_menu, context) {
  92.     var storage = "cfg/menus_v2/"+context;
  93.     var interface = "org.jdownloader.controlling.contextmenu.ContextMenuConfigInterface";
  94.     return callAPI(
  95.         "config", "set",
  96.         interface,
  97.         storage,
  98.         "menu",
  99.         root_menu
  100.     );
  101. }
  102.  
  103. function addMenuToContextMenu(menu_items, context)/* context = "DownloadTableContext" | "LinkgrabberContext" */
  104. {
  105.     const c = context||"DownloadTableContext";
  106.     var root_container = getRootContextMenu(c);
  107.     if (root_container && root_container.type == 'CONTAINER' && Array.isArray(root_container.items))
  108.     {
  109.         if (Array.isArray(menu_items))
  110.             menu_items.forEach(function(menu_item){root_container.items.push(menu_item);});
  111.         else
  112.             root_container.items.push(menu_items);
  113.         setRootContextMenu(root_container, c);
  114.     }
  115. }
  116.  
  117. //
  118. // WSHを利用し確認メッセージボックスを表示して結果を得る
  119. //
  120. function ConfirmBox(message, title)
  121. {
  122.     var ret = "";
  123.     var created = false;
  124.     var rand_str = Math.random().toString(36).slice(-8);
  125.    
  126.     // TEMPフォルダにJSファイルを作成し、cscript.exeで実行
  127.     var tempdir = getEnv("TEMP");
  128.     var tempfile = tempdir+"\\"+"JD_confirm_"+rand_str+".js";
  129.     var scriptdata =
  130.         'var a=WScript.Arguments;if(0<a.Count()){var t="",m=a.Item(0);'
  131.         +'1<a.Count()&&(t=a.Item(1));var s=new ActiveXObject("WScript.Shell");'
  132.         +'1==s.Popup(m,-1,t,33)&&WScript.StdOut.Write("OK");s=null};';
  133.     var f = getPath(tempfile);
  134.     try
  135.     {
  136.         if (f.exists())
  137.         {
  138.             f.deleteFile(tempfile,false);
  139.         }
  140.         writeFile(tempfile, scriptdata, false);
  141.         created = true;
  142.         ret = callSync('cscript.exe',"//NOLOGO",tempfile,message||"",title||"");
  143.     }
  144.     catch(e)
  145.     {
  146.     }
  147.     finally
  148.     {
  149.         if (created) deleteFile(tempfile,false);
  150.     }
  151.     return ret=="OK";
  152. }
  153.  
  154. var menu_items =
  155. [
  156.     {"name":separator_name},
  157.     {
  158.         "name":"リネーム - ファイル名を揃える",
  159.         "iconKey":"edit",
  160.         "items":[
  161.             {"name":"パッケージ名でファイル名を揃える"},
  162.             {"name":"このファイル名でパッケージ内を全て揃える"},
  163.             {"name":separator_name},
  164.             {"name":"ファイル名を揃える"},
  165.             {"name":"ファイル名(作者名)を揃える"},
  166.             {"name":"ファイル名(タイトル)を揃える"},
  167.             {"name":"ファイル名(カテゴリ+作者名+タイトル)を揃える"},
  168.             {"name":separator_name},
  169.             {"name":"[]内のスワップ"},
  170.             {"name":"[]内の末尾切り捨て"},
  171.             {"name":"[]内のxを×に変換"},
  172.             {"name":separator_name},
  173.             {"name":"第○○巻化"},
  174.             {"name":"連番桁揃え"},
  175.             {"name":separator_name},
  176.             {"name":"先頭括弧を後方送り"},
  177.             {"name":"末尾の括弧削除"}
  178.         ]
  179.     },
  180.     {
  181.         "name":"リネーム - 修正/追加/置換",
  182.         "iconKey":"edit",
  183.         "items":[
  184.             {"name":"(一般コミック) >>"},
  185.             {"name":"(一般コミック・少女) >>"},
  186.             {"name":"(一般コミック) [雑誌] >>"},
  187.             {"name":"(一般小説) >>"},
  188.             {"name":"(一般書籍) >>"},
  189.             {"name":"(成年コミック) >>"},
  190.             {"name":"(成年コミック) [雑誌] >>"},
  191.             {"name":"(同人誌) >>"},
  192.             {"name":"(同人CG集) >>"},
  193.             {"name":"(18禁アニメ) >>"},
  194.             {"name":separator_name},
  195.             {"name":"<< 別スキャン"},
  196.             {"name":"<< 単行本"},
  197.             {"name":"<< 透かし有り"},
  198.             {"name":"<< 寄せ集め"}
  199.         ]
  200.     },
  201.     {
  202.         "name":"移動/ファイル/再登録",
  203.         "iconKey":"folder_add",
  204.         "items":[
  205.             {"name":"この名前を使用して新しいパッケージに移動", "iconKey":"folder_add"},
  206.             {"name":"同じ名前のパッケージをまとめる"},
  207.             {"name":"リンクを同じ名前のパッケージに移動"},
  208.             {"name":separator_name},
  209.             {"name":"リンクグラバーへ再登録","iconKey":"linkgrabber"},
  210.             {"name":separator_name},
  211.             {"name":"JDバックアップフォルダを開く"},
  212.             {"name":"登録元ページを開く","iconKey":"search"}
  213.  
  214.         ]
  215.     },
  216.     {
  217.         "name":"有効/無効",
  218.         "iconKey":"checkbox_true",
  219.         "items":[
  220.             {"name":"優先ホスト以外を無効"},
  221.             {"name":separator_name},
  222.             {"name":"frdl.to以外を無効"},
  223.             {"name":"dailyuploads.net以外を無効"},
  224.             {"name":"dashfile.net以外を無効"},
  225.             {"name":"btafile.com以外を無効"},
  226.             {"name":separator_name},
  227.             {"name":"uploadbank.netを無効"},
  228.             {"name":"rosefile.netを無効"}
  229.         ]
  230.     },
  231.    
  232.     {
  233.         "name":"EveryThingで検索(作者名)",
  234.         "iconKey":"search",
  235.         "shortcut"  :"pressed F1"
  236.     },
  237.     {
  238.         "name":"EveryThingで検索(タイトル)",
  239.         "iconKey":"search"
  240.     },
  241.     {
  242.         "name":"ブラウザで開く",
  243.         "iconKey":"search"
  244.     },
  245.     {
  246.         "name":"WEBで検索",
  247.         "iconKey":"url",
  248.         "items":[
  249.             {"name":"888**.ps"},
  250.             {"name":"x***.net"},
  251.             {"name":"*****.se"},
  252.             {"name":"bs***.com"},
  253.             {"name":"raw*****.cc"},
  254.             {"name":separator_name},
  255.             {"name":"******core.***"},
  256.             {"name":"******omg.***"},
  257.             {"name":"n******.net"},
  258.             {"name":separator_name},
  259.             {"name":"google.com (作者)"},
  260.             {"name":"google.com (タイトル)"},
  261.            
  262.         ]
  263.     }
  264. ];
  265.  
  266. rebuildMenu(menu_items);
  267.  
  268. var restart_f = 0;
  269.  
  270. if ((!use_WSH) || ConfirmBox("ダウンロードリストのコンテキストメニューにメニューを追加します\r\nよろしいですか?","確認"))
  271.     addMenuToContextMenu(menu_items, "DownloadTableContext") || restart_f++;
  272.    
  273. if ((!use_WSH) || ConfirmBox("リンクグラバーのコンテキストメニューにメニューを追加します\r\nよろしいですか?","確認"))
  274.     addMenuToContextMenu(menu_items, "LinkgrabberContext") || restart_f++;
  275.  
  276.  
  277. if ((!use_WSH) || restart_f && ConfirmBox("設定の反映にはJDownloaderの再起動が必要です\r\n今すぐ再起動しますか?","JD再起動確認"))
  278.     callAPI("system","restartJD");
  279.  
  280.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement