Greasy Fork

Greasy Fork is available in English.

MCGEN2下载助手

一键下载到MCGEN2

当前为 2017-11-20 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         MCGEN2下载助手
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  一键下载到MCGEN2
// @author       jy
// @require      https://code.jquery.com/jquery-3.2.1.slim.min.js
// @match        http://*/*
// @match        https://*/*
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_openInTab
// @grant        unsafeWindow
// ==/UserScript==

(function() {
    'use strict';
    var mjq=jQuery.noConflict(true);
    var protocol={ed2k:{prefix:'ed2k://',cmd:'p2p_add_torrent_url'},magnet:{prefix:'magnet:',cmd:'p2p_add_torrent_magnet'}};
    var buttonClassName='MCGEN2_downloadBtn';
    var host='';
    GM_addStyle([
        "."+buttonClassName+"{color: #fff !important;background:red;border:0px solid #000;font-weight:bold;}",
        ".MCGEN2_downloadList{text-align:left;opacity:0.8;width:100%;height:100%;background:#000;color:#fff;z-index:999999999;position:fixed;top:0;left:0;overflow-y: scroll;}",
        ".MCGEN2_scrollDiv{padding:20px;}",
        ".MCGEN2_downloadList .row{margin:5px;width:92%;}",
        ".MCGEN2_downloadList .name{width:60%; display: inline-block;overflow:hidden;}",
        ".MCGEN2_downloadList .status{xfloat:right;display: inline-block;}",
        ".MCGEN2_downloadList .size{width:100px;display: inline-block;}",
        ".MCGEN2_header{padding-left:20px;height:40px;width:100%;background:red;line-height:40px;}",
        ".MCGEN2_downloadList .btns{background:red;color:#fff;font-weight:bold;padding:10px;border:0;display:block;margin:10px;}",
        ".MCGEN2_downloadList .logo{position:fixed;bottom:30px;left:40px;color:#fff;font-weight:bold;padding:10px;border:0;}",
        ".MCGEN2_btnsDiv{position:fixed;top:50px;right:40px;padding:10px;}"
    ].join(""));

    //function checkResponse(response){
    //console.log(response);

    //}

    function request(c){
        GM_xmlhttpRequest({
            url: c.url,
            method: c.method || 'POST',
            headers: {
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                "X-Requested-With":"XMLHttpRequest",

            },
            data:c.data,
            onload: function(response) {
                console.log(response);
                if(response.status!=200){
                    var r=confirm("网页状态为 "+response.status+',可能是未登录的原因,点击确定跳转到MC登录!登录完成请刷新页面重试。');
                    if (r)
                    {
                        //var window = unsafeWindow.location.href=GM_getValue("mc_server","");
                        GM_openInTab(GM_getValue("mc_server",""));
                    }
                    return;
                }
                if(typeof(c.onload)=='function'){
                    c.onload(response);
                }
            },
            onerror:function(err){
                alert('服务器地址似乎有点问题!请检查');
                console.log(err);

                if(typeof(c.onerror)=='function'){
                    c.onerror(err);
                }
            }
        });

    }


    mjq(function(){
        //alert(123);
        mjq( 'body' ).on( "click", "."+buttonClassName, function() {
            var btn=mjq(this);

            var href=mjq(this).data('href');
            var name=mjq(this).data('name');
            host=GM_getValue("mc_server","");
            if(host=="" || !host.startsWith('http')){
                alert('请先填写服务器地址');
                return;
            }

            mjq(this).prop('disabled', true);
            var url=host+'/cgi-bin/p2p.cgi';
            var data='cmd='+protocol[name].cmd+'&f_torrent_url='+encodeURIComponent(href);
            //alert(url);

            request({
                url:url,
                data:data,
                onload: function(response) {
                    if(response.responseText.indexOf('<res>101</res>')>0){
                        alert('任务已存在!');
                    }else if(response.responseText.indexOf('<res>0</res>')>0){
                        alert('添加任务成功!');
                    }else if(response.responseText.indexOf('<res>1</res>')>0){
                        alert('下载失败!');
                    }else if(response.responseText.indexOf('<res>106</res>')>0){
                        alert('无法添加此 torrent 文件。torrent 文件无效或重复。');
                    }else{
                        alert(url+'  似乎有点问题!请检查');
                        alert(response.responseText);
                    }
                    btn.prop('disabled', false);
                    //console.log(response.responseText,data);
                },
                onerror:function(err){
                    btn.prop('disabled', false);
                }});


        });
        function findLink(){
            var isShowConfig=false;
            mjq('a[href]').each(function(){
                var href=mjq(this).attr('href');
                console.log(href);
                var addDownloadFlag=false;
                var pName='';
                for(var p in protocol){
                    //console.log(p);
                    if(href.startsWith(protocol[p].prefix)){
                        addDownloadFlag=true;
                        pName=p;
                        isShowConfig=true;
                    }
                }
                if(addDownloadFlag){
                    var dbtn=mjq('<button/>').html('下载到MCGEN2').addClass(buttonClassName).attr('type','button').attr('data-href',href).attr('data-name',pName);

                    mjq(this).before(dbtn);
                    //console.log($(this).attr('href'));
                }

            });
        }

        function delCom(){
            host=GM_getValue("mc_server","");
            var url=host+'/cgi-bin/p2p.cgi';
            var data='cmd=p2p_del_all_completed';
            request({
                url:url,
                data:data,
                onload: function(response) {
                    getDownloadList();
                }});

        }


        function getDownloadList(){
            host=GM_getValue("mc_server","");
            if(host=="" || !host.startsWith('http')){
                alert('请先填写服务器地址');
                return;
            }

            var url=host+'/cgi-bin/p2p.cgi';
            var data='page=1&rp=30&sortname=&sortorder=&query=&qtype=&f_field=0&cmd=p2p_get_list_by_priority&user=';
            //console.log(GM_info
            request({
                url:url,
                data:data,
                onload: function(response) {
                    var o=JSON.parse(response.responseText);

                    if(o['rows']){
                        var alertText='<div class="row"><span class="name">名称</span><span class="size">大小</span><span class="status">状态</span></div>';
                        for(var i in o['rows']){
                            //console.log(i,o.rows);
                            var row=o['rows'][i];
                            var id=row['id'];
                            var name=row['cell'][0];
                            name=mjq(name).html();
                            var size=row['cell'][1];
                            var status=row['cell'][2];
                            alertText+='<div class="row"><span class="name">  ['+id+']  '+name+'</span><span class="size">'+size+ '</span><span class="status">'+status+'</span></div>';
                            //console.log(row);
                        }

                        if (mjq(".MCGEN2_scrollDiv").length > 0){
                            mjq(".MCGEN2_scrollDiv").html(alertText);
                        }else{
                            var scrollDiv=mjq('<div/>').addClass('MCGEN2_scrollDiv').html(alertText);
                            var headDiv=mjq('<div/>').addClass('MCGEN2_header').html('MCGEN2下载助手 '+GM_info.script.version+' by jy');
                            var listDiv=mjq('<div/>').addClass('MCGEN2_downloadList').append(headDiv).append(scrollDiv);
                            var btnsDiv=mjq('<div/>').addClass('MCGEN2_btnsDiv');
                            var closeBtn=mjq('<button/>').html('关闭').addClass('btns').click(function(){
                                mjq('.MCGEN2_downloadList').remove();
                            });
                            var delComBtn=mjq('<button/>').html('删除已完成的项').addClass('btns').click(function(){
                                delCom();
                            });
                            btnsDiv.append(closeBtn).append(delComBtn);
                            listDiv.append(btnsDiv);
                            mjq('body').append(listDiv);


                        }




                    }
                }
            }) ;



        }
        function setServerAddress()
        {
            var url=prompt("请填写服务器地址",GM_getValue("mc_server","http://192.168.2.222"));
            if (url!=null && url!="")
            {

                GM_setValue("mc_server",url);
                alert(GM_getValue("mc_server","")+' 设置成功!');
            }
        }
        function openServer(){

            //var window = unsafeWindow.location.href=GM_getValue("mc_server","");
            GM_openInTab(GM_getValue("mc_server","")+"?toP2P");

        }
        function run(){
            //initConfig();
            findLink();
            GM_registerMenuCommand('【MCGEN2下载助手】服务器地址设置',setServerAddress,"a");
            GM_registerMenuCommand('【MCGEN2下载助手】获取下载列表',getDownloadList,"b");
            GM_registerMenuCommand('【MCGEN2下载助手】打开p2p下载页面',openServer,"c");
            //getDownloadList();

        }

        function openP2pHtml(){
            var t=setTimeout(checkApp,1000);
            var time=0;
            function checkApp(){
                if(time<20){
                    if(typeof(unsafeWindow.go_page)=='function'){
                        unsafeWindow.go_page('/web/addons/app.php', 'nav_addons');
                        clearTimeout(t);
                        time=0;
                        t=setTimeout(checkP2p,1000);
                    }
                    time++;
                    console.log(time);
                }
            }

            function checkP2p(){
                if(time<20){
                    if(typeof(unsafeWindow.go_sub_page)=='function'){
                        unsafeWindow.go_sub_page('/web/addons/p2p.html', 'p2p');
                        clearTimeout(t);
                        time=0;
                    }
                    time++;
                    console.log(time);
                }
            }
        }

        var url   = document.URL;
        host=GM_getValue("mc_server"," ");
        if(url.indexOf(host+"/?toP2P")>=0){
            //alert(1);
            setTimeout(openP2pHtml,500);
        }else if(!url.startsWith(host)){
            //alert(2);
            setTimeout(run,500);
        }
        console.log(url);




    });
})();