RED + OPS PTPImg It

PTPImg It script for OPS + RED

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        RED + OPS PTPImg It
// @namespace   https://orbitalzero.ovh/scripts
// @description PTPImg It script for OPS + RED
// @include     https://ptpimg.me/
// @include     http*://*orpheus.network/upload.php*
// @include     http*://*orpheus.network/torrents.php?action=editgroup*
// @include     http*://*orpheus.network/torrents.php?id=*
// @include     http*://*orpheus.network/user.php?action=edit&userid=*
// @include     http*://*orpheus.network/artist.php?action=edit&artistid=*
// @include     http*://*orpheus.network/requests.php?action=new
// @include     http*://*orpheus.network/requests.php?action=edit*
// @include     https://redacted.ch/upload.php*
// @include     https://redacted.ch/torrents.php?action=editgroup*
// @include     https://redacted.ch/torrents.php?id=*
// @include     https://redacted.ch/user.php?action=edit&userid=*
// @include     https://redacted.ch/artist.php?action=edit&artistid=*
// @include     https://redacted.ch/requests.php?action=new
// @include     https://redacted.ch/requests.php?action=edit*
// @require     https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
// @version     0.15
// @grant				GM_xmlhttpRequest
// @grant       GM_setValue
// @grant       GM_getValue
// @grant       GM_addStyle
// @grant				GM.xmlHttpRequest
// @grant       GM.setValue
// @grant       GM.getValue
// @grant       GM.addStyle
// @require     https://code.jquery.com/jquery-3.1.1.min.js
// ==/UserScript==

var css = `
input[type="button"]:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}
`;

var default_settings = {
    alert_when_done: true,
    api_key: "",
    host: "lutim"
};

function get_api_key() {
    if (!window.localStorage.ptpimg_it) window.localStorage.ptpimg_it = JSON.stringify(default_settings);
    var settings = JSON.parse(window.localStorage.ptpimg_it);
    switch (settings.host) {
        default:
            window.localStorage.ptpimg_it = JSON.stringify(default_settings);
        case "lutim":
            return Promise.resolve("");
        case "ptpimg":
            return ptpimg_get_api_key();
    }
}

function ptpimg_get_api_key() {
    if (!window.localStorage.ptpimg_it) window.localStorage.ptpimg_it = JSON.stringify(default_settings);
    var settings = JSON.parse(window.localStorage.ptpimg_it);
    if (settings.api_key) return new Promise(function (resolve, reject) {
        resolve(settings.api_key);
    });

    return new Promise( function (resolve, reject) {
        var request = GM.xmlHttpRequest({method: "GET",
                                           url: "https://ptpimg.me/",
                                           onload: function(response) {
                                               if (response.status != 200) reject("Response error " + response.status);
                                               if (response.finalUrl !== "https://ptpimg.me/") reject("Couldn't retrieve api key");
                                               settings.api_key = $(response.response).find("#api_key").first().val();
                                               window.localStorage.ptpimg_it = JSON.stringify(settings);
                                               resolve(settings.api_key);
                                           }
        });
    });
}

function prep_urls(urls) {
    return urls.map(function (url) {
        if (url.indexOf("reho.st") == -1 && url.indexOf("discogs.com") != -1) return "http://reho.st/" + url;
        return url;
    });
}

function send_images(urls, api_key) {
    if (!window.localStorage.ptpimg_it) window.localStorage.ptpimg_it = JSON.stringify(default_settings);
    var settings = JSON.parse(window.localStorage.ptpimg_it);
    switch (settings.host) {
        default:
            window.localStorage.ptpimg_it = JSON.stringify(default_settings);
        case "lutim":
            return lutim_send_images(urls);
        case "ptpimg":
            return ptpimg_send_images(urls, api_key);
    }
}

function ptpimg_send_images(urls, api_key) {
    return new Promise(function(resolve, reject) {
        urls = prep_urls(urls);
        var boundary = "--NN-GGn-PTPIMG";
        var data = "";
        data += boundary + "\n";
        data += "Content-Disposition: form-data; name=\"link-upload\"\n\n";
        data += urls.join("\n") + "\n";
        data += boundary + "\n";
        data += "Content-Disposition: form-data; name=\"api_key\"\n\n";
        data += api_key + "\n";
        data += boundary + "--";
        var request = GM.xmlHttpRequest({"method": "POST",
                                           "url": "https://ptpimg.me/upload.php",
                                           "responseType": "json",
                                           "headers": {
                                               "Content-type": "multipart/form-data; boundary=NN-GGn-PTPIMG"
                                           },
                                           "data": data,
                                           "onload": function(response) {
                                               if (response.status != 200) reject("Response error " + response.status);
                                               resolve(response.response.map(function (item) {
                                                   return "https://ptpimg.me/" + item.code + "." + item.ext;
                                               }));

                                           }
        });
    });
}

function lutim_send_images(urls) {
    urls = prep_urls(urls);

    var promises = urls.map(function (url) {
        return new Promise(function (resolve, reject) {
            var data = "lutim-file-url="+url+"&"+
                       "format=json&"+
                       "first-view=0&"+
                       "crypt=0&"+
                       "delete-day=0&";
          var request = GM.xmlHttpRequest({"method": "POST",
                                                 "url": "https://lut.im/",
                                                 "responseType": "json",
                                                 "headers": {
                                                    "Content-Type": "application/x-www-form-urlencoded"
                                                 },
                                                 "data": data,
                                                 "onload": function (response) {
                                                    if (response.status != 200) reject("Response error " + response.status);
                                                    if (response.response.success !== true) reject("Failed rehosting image to lut.im");
                                                    else {
                                                        var msg = response.response.msg;
                                                        resolve("https://lut.im/" + msg.short + "." + msg.ext);
                                                    }
                                                 }
           });
        });
    });
    return Promise.all(promises);
}

function get_settings() {
    if (!window.localStorage.ptpimg_it) window.localStorage.ptpimg_it = JSON.stringify(default_settings);
    return JSON.parse(window.localStorage.ptpimg_it);
}

function rehost_button() {

    var settings = get_settings();

    var button = $(this);
    button.prop("disabled", true);
    var input = $("input[name='image']");
    var url = input.val();
    get_api_key().then(function (key) {
        return send_images([url], key);
    }).then(function (new_urls) {
        input.val(new_urls[0]);
        if (settings.alert_when_done) alert("Image successfully uploaded to " + settings.host + "!");
        button.prop("disabled", false);
    }).catch(function (message) {
        button.prop("disabled", false);
        alert(message);
    });
}

function rehost_button_alt() {

    var settings = get_settings();

    var button = $(this);
    button.prop("disabled", true);
    var inputs = $("input[name='image[]']");
    var urls = inputs.map(function () {
        return this.value;
    }).get();
    get_api_key().then(function (key) {
        return send_images(urls, key);
    }).then(function (new_urls) {
        inputs.map(function (index) {
            $(this).val(new_urls[index]);
        });
        if (settings.alert_when_done) alert("Image successfully uploaded to " + settings.host + "!");
        button.prop("disabled", false);
    }).catch(function (message) {
        button.prop("disabled", false);
        alert(message);
    });
}

function add_cover_button() {

    var settings = get_settings();

    $("input[name='image']").after("<input type='button' value='Rehost It!' class='rehost_it_cover'>");
    $(".rehost_it_cover").click(rehost_button);
}

function add_cover_button_alt() {

    var settings = get_settings();

    $(".box.box_image a.brackets[href='#']").click(function () {
        if ($("#rehost_it_cover").length === 0) {
            $("#add_cover").after("<input type='button' value='Rehost It!' id='rehost_it_cover'>");
            $("#rehost_it_cover").click(rehost_button_alt);
        }
    });
}

function add_config() {

    var settings = get_settings();

    $(".main_column").append("<table id='pth_ptpimg_it'><tbody></tbody</table>");
    $("#pth_ptpimg_it>tbody").append("<tr class='colhead_dark'><td colspan='2'><strong>PTPIMG It Settings</strong></td></tr>");
    $("#pth_ptpimg_it>tbody").append("<tr><td class='label'>PTPIMG API Key</td><td><input type='text' id='api_key' placeholder='Enter your API Key here' value='" + (settings.api_key ? settings.api_key : "") + "'></td></tr>");
    $("#pth_ptpimg_it>tbody").append("<tr><td class='label'>Alert when done ?</td><td><input type='checkbox' id='alert_when_done' value='Alert when done ?'" + (settings.alert_when_done ? "checked" : "") + "></td></tr>");
    $("#pth_ptpimg_it>tbody").append("<tr><td class='label'>Image host provider:</td><td><select id='image_host_provider'><option value='lutimg' " + (settings.host === "lutimg" ? "selected": "") + ">lut.img</option><option value='ptpimg' " + (settings.host === "ptpimg" ? "selected": "") + ">ptpimg.me</option></select></td></tr>");
    $("#pth_ptpimg_it>tbody").append("<tr><td colspan='2'><input type='button' id='save' value='Save settings'></td></tr>");

    $("#pth_ptpimg_it #save").click(function () {
        var settings_form = $("#pth_ptpimg_it");
        settings = {
            alert_when_done: settings_form.find("#alert_when_done").prop("checked"),
            api_key: $("#api_key").val() === "" ? undefined : $("#api_key").val(),
            host: $("#image_host_provider").val()
        };
        window.localStorage.ptpimg_it = JSON.stringify(settings);
        alert("Settings saved !");
    });
}

(function() {
    'use strict';
    GM.addStyle(css);
    if (/user\.php\?action=edit/.test(window.location.href)) {
        add_config();
    } else if (/torrents\.php\?id=/.test(window.location.href)) {
        add_cover_button_alt();
    } else {
        $("#categories").on("change", function () {
            setTimeout(add_cover_button, 250);
        });
        add_cover_button();
    }
})();