Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * JDownloader2 EventScript - リネーム系アクション集用メニュー自動設定
- *
- * リネーム系アクション集に対応したメニュー項目を
- * JD2のコンテキストメニューに登録するEventScript
- *
- * 実行後は必ずJDを再起動し、
- * 追加されたメニュー項目をメニュー管理画面から
- * 適宜、移動・編集・削除してください
- *
- * 【必須環境】
- * JD2 + WindowsScriptHosting(WSH)
- *
- * ※WSHは確認メッセージボックスに使用
- * use_WSH=false とすれば不要、
- * その場合は確認なしにインポートと再起動が行われる
- *
- *
- * 【使い方】
- *
- * 0. [WEBで検索]部分(161行目から172行目辺り)を自分用に書き換える
- *
- * 1. [設定]→[イベントスクリプト]→[+追加]ボタンを押す
- * →追加された項目の[編集]ボタンを押す
- * (※ ここで追加した無名スクリプトは、後で削除してください)
- *
- * 2. このスクリプトファイルの内容を全てコピーして貼り付ける
- *
- * 3. [試行]ボタンを押す
- *
- * 4. 登録したいメニューで「はい」を選ぶ
- *
- * 5. JD2を再起動
- *
- * 6. ダウンロードリスト画面、リンクグラバー画面
- * それぞれのメニュー管理画面から好きなように編集
- *
- *
- */
- const separator_name='セパレータ';
- const use_WSH = true;
- //const use_WSH = false;
- /**
- * @typedef {object} menuItem
- * @prop {string} name メニュー名
- * @prop {string} [iconKey=null] アイコン名
- * @prop {string} [shortcut=null] ショートカットキー
- * @prop {menuItem[]} [items] サブメニューのmenuItem配列
- * ----------------------------------
- * @prop {string} [type]
- * @prop {string} [className]
- * @prop {object} [actionData={}]
- * @prop {string} [mnemonic=null]
- * @prop {boolean} [visible=true]
- */
- /** @type {menuItem[]} 追加するメニューデータ 編集可 */
- var menu_items =
- [
- {"name":separator_name},
- {
- "name":"リネーム - ファイル名を揃える",
- "iconKey":"edit",
- "items":[
- {"name":"パッケージ名でファイル名を揃える"},
- {"name":"このファイル名でパッケージ内を全て揃える"},
- {"name":separator_name},
- {"name":"名前を揃える"},
- {"name":"名前を揃える(作者名)"},
- {"name":"名前を揃える(タイトル)"},
- {"name":"名前を揃える(カテゴリ+作者名)"},
- {"name":"名前を揃える(カテゴリ+作者名+タイトル)"},
- {"name":separator_name},
- {"name":"[]内のスワップ"},
- {"name":"[]内の末尾切り捨て"},
- {"name":"[]内のxを×に変換"},
- {"name":separator_name},
- {"name":"第○○巻化"},
- {"name":"連番桁揃え"},
- {"name":separator_name},
- {"name":"先頭括弧を後方送り"},
- {"name":"末尾の括弧削除"}
- ]
- },
- {
- "name":"リネーム - 修正/追加/置換",
- "iconKey":"edit",
- "items":[
- {"name":"(一般コミック) >>"},
- {"name":"(一般コミック・少女) >>"},
- {"name":"(一般コミック) [雑誌] >>"},
- {"name":"(一般小説) >>"},
- {"name":"(一般書籍) >>"},
- {"name":"(成年コミック) >>"},
- {"name":"(成年コミック) [雑誌] >>"},
- {"name":"(同人誌) >>"},
- {"name":"(同人CG集) >>"},
- {"name":"(18禁アニメ) >>"},
- {"name":separator_name},
- {"name":"<< 別スキャン"},
- {"name":"<< 単行本"},
- {"name":"<< 透かし有り"},
- {"name":"<< 寄せ集め"}
- ]
- },
- {
- "name":"移動/ファイル/再登録",
- "iconKey":"folder_add",
- "items":[
- {"name":"この名前を使用して新しいパッケージに移動", "iconKey":"folder_add"},
- {"name":"同じ名前のパッケージをまとめる"},
- {"name":"リンクを同じ名前のパッケージに移動"},
- {"name":separator_name},
- {"name":"タイトルで並べ替え(昇順)"},
- {"name":"タイトルで並べ替え(降順)"},
- {"name":"作者名で並べ替え(昇順)"},
- {"name":"作者名で並べ替え(降順)"},
- {"name":separator_name},
- {"name":"リンクグラバーへ再登録","iconKey":"linkgrabber"},
- {"name":separator_name},
- {"name":"JDバックアップフォルダを開く"},
- {"name":"登録元ページを開く","iconKey":"search"}
- ]
- },
- {
- "name":"有効/無効",
- "iconKey":"checkbox_true",
- "items":[
- {"name":"優先ホスト以外を無効"},
- {"name":separator_name},
- {"name":"frdl.to以外を無効"},
- {"name":"dailyuploads.net以外を無効"},
- {"name":"dashfile.net以外を無効"},
- {"name":"btafile.com以外を無効"},
- {"name":separator_name},
- {"name":"uploadbank.netを無効"},
- {"name":"rosefile.netを無効"}
- ]
- },
- {
- "name":"EveryThingで検索(作者名)",
- "iconKey":"search",
- "shortcut" :"pressed F1"
- },
- {
- "name":"EveryThingで検索(タイトル)",
- "iconKey":"search",
- },
- {
- "name":"ブラウザで開く",
- "iconKey":"search"
- },
- {
- "name":"WEBで検索",
- "iconKey":"url",
- "items":[
- {"name":"888**.ps"},
- {"name":"x***.net"},
- {"name":"*****.se"},
- {"name":"bs***.com"},
- {"name":"raw*****.cc"},
- {"name":separator_name},
- {"name":"******core.com"},
- {"name":"******omg.com"},
- {"name":"n******.net"},
- {"name":separator_name},
- {"name":"google.com (作者)"},
- {"name":"google.com (タイトル)"}
- ]
- }
- ];
- /////////////////////////////////////////////////
- /**
- * メニューデータを再構築
- *
- * @param {menuItem|menuItem[]} x メニューデータ
- */
- function rebuildMenu(x)
- {
- function r(m)
- {
- // Set default value
- if (! ('visible' in m)) m['visible'] = true;
- if (! ('shortcut'in m)) m['shortcut'] = null;
- if (! ('mnemonic'in m)) m['mnemonic'] = null;
- if (! ('iconKey' in m)) m['iconKey'] = null;
- if (('items' in m) && m['items'].length)
- {
- m['type'] = 'CONTAINER';
- m['className'] = 'org.jdownloader.controlling.contextmenu.MenuContainer';
- m['actionData'] = {};
- m['items'].forEach(function(val,idx,list){
- r(list[idx]);
- });
- }
- else if (m['name']==separator_name)
- {
- m['type'] = 'ACTION';
- m['className'] = 'org.jdownloader.controlling.contextmenu.SeparatorData';
- m['actionData'] = {};
- m['items'] = [];
- }
- else
- {
- m['type'] = 'ACTION';
- m['className'] = null;
- if (!('actionData' in m))
- m['actionData'] = {'clazzName':'org.jdownloader.extensions.eventscripter.GenericEventScriptTriggerContextMenuAction'};
- m['items'] = [];
- }
- // if (m['visible']) true;
- }
- if (Array.isArray(x))
- x.forEach(function(val,idx,list){r(list[idx])});
- else
- (r)(x);
- }
- /**
- * コンテキストに応じたルートメニューを取得する
- *
- * @param {"DownloadTableContext"|"LinkgrabberContext"} context コンテキスト
- * @returns {menuItem} ルートメニューデータ(JSON)
- */
- function getRootContextMenu(context)
- {
- var storage = "cfg/menus_v2/" + context;
- var interface = "org.jdownloader.controlling.contextmenu.ContextMenuConfigInterface";
- var root_menu = callAPI(
- "config", "get",
- interface,
- storage,
- "menu"
- );
- return root_menu;
- }
- /**
- * メニューデータをルートとして、コンテキストに応じたメニューに設定する
- * (設定の反映にはJDの再起動が必要)
- *
- * @param {menuItem} x メニューデータ
- * @param {"DownloadTableContext"|"LinkgrabberContext"} context コンテキスト
- * @returns {boolean} 成功か失敗か
- */
- function setRootContextMenu(root_menu, context) {
- var storage = "cfg/menus_v2/"+context;
- var interface = "org.jdownloader.controlling.contextmenu.ContextMenuConfigInterface";
- return callAPI(
- "config", "set",
- interface,
- storage,
- "menu",
- root_menu
- );
- }
- /**
- * メニューデータをコンテキストに応じたルートメニューに追加して設定する
- * (設定の反映にはJDの再起動が必要)
- *
- * @param {menuItem|menuItem[]} menu_items メニューデータ
- * @param {"DownloadTableContext"|"LinkgrabberContext"} context コンテキスト
- * @returns {boolean} 成功か失敗か
- */
- function addMenuToContextMenu(menu_items, context)/* context = "DownloadTableContext" | "LinkgrabberContext" */
- {
- const c = context||"DownloadTableContext";
- /** @type {menuItem} ルートメニュー取得 */
- const root_container = getRootContextMenu(c);
- if (root_container && root_container.type=='CONTAINER' && Array.isArray(root_container.items))
- {
- if (Array.isArray(menu_items))
- menu_items.forEach(function(menu_item){root_container.items.push(menu_item);});
- else
- root_container.items.push(menu_items);
- setRootContextMenu(root_container, c);
- }
- }
- function _T(s)
- {
- return (s===undefined||s===null)?'':s;
- }
- /**
- * WSHを利用し確認メッセージボックスを表示して結果を得る
- *
- * @param {string|null} message メッセージボックスのメッセージ
- * @param {string|null} title メッセージボックスのタイトル
- * @returns {bool} ユーザーの操作によって「はい」が選択されたならtrue
- * それ以外ならfalse
- */
- function ConfirmBox(message, title)
- {
- var ret = "";
- var created = false;
- const rand_str = Math.random().toString(36).slice(-8);
- // TEMPフォルダにJSファイルを作成し、cscript.exeで実行
- const tempdir = getEnv("TEMP");
- const tempfile = tempdir+"\\"+"JD_confirm_"+rand_str+".js";
- const scriptdata =
- 'var a=WScript.Arguments;if(0<a.Count()){var t="",m=a.Item(0);'
- +'1<a.Count()&&(t=a.Item(1));var s=new ActiveXObject("WScript.Shell");'
- +'1==s.Popup(m,-1,t,33)&&WScript.StdOut.Write("OK");s=null};';
- const f = getPath(tempfile);
- try
- {
- if (f.exists())
- {
- f.deleteFile(tempfile,false);
- }
- writeFile(tempfile, scriptdata, false);
- created = true;
- ret = callSync('cscript.exe',"//NOLOGO",tempfile,_T(message),_T(title));
- }
- catch(e)
- {
- }
- finally
- {
- if (created) deleteFile(tempfile,false);
- }
- return ret=="OK";
- }
- rebuildMenu(menu_items);
- var restart_f = 0;
- if ((!use_WSH) || ConfirmBox("ダウンロードリストのコンテキストメニューにメニューを追加します\r\nよろしいですか?","確認"))
- addMenuToContextMenu(menu_items, "DownloadTableContext") || restart_f++;
- if ((!use_WSH) || ConfirmBox("リンクグラバーのコンテキストメニューにメニューを追加します\r\nよろしいですか?","確認"))
- addMenuToContextMenu(menu_items, "LinkgrabberContext") || restart_f++;
- if ((!use_WSH) || restart_f && ConfirmBox("設定の反映にはJDownloaderの再起動が必要です\r\n今すぐ再起動しますか?","JD再起動確認"))
- callAPI("system","restartJD");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement