Greasy Fork

Kinopoisk - Add to folder

Добавить фильм в папку

目前为 2025-01-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         Kinopoisk - Add to folder
// @namespace    scriptomatika
// @author       mouse-karaganda
// @description  Добавить фильм в папку
// @license      MIT
// @match        https://www.kinopoisk.ru/film/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=kinopoisk.ru
// @version      1.1
// @grant        none
// ==/UserScript==

(function() {
    let $$ = unsafeWindow.__krokodil;
    let $ = window.jQuery;
    console.log('kinoscript :: Userscript run at == ', location.href);

    let poisk = {};

    let plugin = {
        insertStyle: function() {
            let styleText = [
                '.styles_userFoldersContainer { text-align: center; margin-bottom: 24px; }',
                '.styles_userFoldersContainer a { color: #3bb33b; text-align: center; text-decoration: none; font-weight: bold; }',
                '.styles_userFoldersContainer a:hover { color: #266fff; }',
                '.styles_userFoldersContainer iframe { width: 0; height: 0; border: 0; w_display: none; }',
                '.styles_userFoldersContainer iframe { width: 280px; height: 280px; }'
            ];
            $('<style type="text/css">').appendTo(document.head)
                .text(styleText.join('\n'));
        },

        createFolders: function() {
            let foldersMenu = $('div[class*=styles_foldersMenu]').parents('div[class*=styles_userControlsContainer]');
            console.log('kinoscript :: foldersMenu = ', foldersMenu);
            if (foldersMenu.length == 0) {
                return;
            }
            poisk.section = $('<div />').insertBefore(foldersMenu).addClass('styles_userFoldersContainer styles_section');
            poisk.link = $('<a href="#" />').appendTo(poisk.section).text('🔻 Список папок')
                .on('click', plugin.openFolderList);
            poisk.frame = $('<iframe />').appendTo(poisk.section);
        },

        openFolderList: function(evt) {
            evt.preventDefault();
            evt.stopPropagation();

            $.get('/mykp/movies/', function(data) {
                let ifrm = poisk.frame[0];
                poisk.doc = (ifrm.contentWindow) ? ifrm.contentWindow.document : ifrm.contentDocument;
                poisk.doc.open();
                poisk.doc.write(data);
                poisk.doc.close();

                window.pok = poisk;
                console.log('kinoscript :: openFolderList doc = ', poisk.doc);

                let frameGetter = () => poisk.frame.contents().find("ul#folderList li");

                let frameReader = (list) => {
                    console.log('kinoscript :: openFolderList ul = ', list);

                    let mapList = list.map((index, item) => {
                        let elem = $(item);
                        let result = {
                            id: elem.data('id'),
                            name: elem.find('a').text(),
                            raw: item
                        };
                        if (result.name == '') {
                            let match = elem.find('.nameAndNum').text().trim().match(/(.+) \(\d+\)/);
                            if (match) {
                                result.name = match[1];
                            }
                        }
                        return result;
                    });
                    console.log('kinoscript :: openFolderList map = ', mapList);
                };
                plugin.missingElement(frameGetter, frameReader);
            });
        },

        missingElement: function(elemGetter, callback) {
            // Итерации 10 раз в секунду
            let missingOne = 100;
            // Ограничим количество попыток разумными пределами
            let maxIterCount = 3000;

            let elemTimer;
            let iterCount = 0;

            let missingHandler = () => {
                let elemList = elemGetter();
                // Определим, что вышел элемент
                let elemStop = (elemList.length > 0);
                // Определим, что кончилось количество попыток
                let iterStop = (iterCount >= maxIterCount);

                if (elementStop || iterStop) {
                    clearInterval(elemTimer);

                    // Если элемент так и не появился
                    if (!elementStop && iterStop) {
                        alert('Нет элемента');
                        return;
                    }
                    if (elemList.length == 1) {
                        elemList = elemList.eq(0);
                    }
                    callback.call(window, elemList);
                }
                iterCount++;
            };
            elemTimer = setInterval(missingHandler, missingOne);
        },

        checkLibrary: function () {
            if ($) {
                plugin.afterLoad();
            } else {
                let tagJS = document.createElement('script');
                tagJS.src = [
                    'https://kinopoisk-ru.clstorage.net/y14jW9200/2e7f125Abj/j-wGvp0kfqLwDa29G0MN_FJDWTAcbisVPvX4ta-ytMC3jApXxnNGOpsuEQMMaHvj5JQK57-KpH4BrrZLGe5FosamC6KKZG',
                    'nLgSec0T1tMdFwcjkpDm0qFCS04aCuv6jZ6tAVe6YlESb6PDVyOR887sTrBrjd-fMCS9SpJgLKNNC00kzo6B5-0JARsMUzYSL3Q1MZOT9bVwYkuO2IrJyw4Kf7LEapTBoN9SASTAoHCMjNyT6I2_fn',
                    'IkvEhiYJxAPevfdT4PkZW8CwLo_wN3YR81N-NhwMXHE-KrnItomQrceP6SRpunUyN8srFmITCQb9z9MdlOXK8R9S37IlM8sn8LT0UfzVAWfelh62wRVbNctkSjgzMW5iJQuWxoGUnILwj-gWYJFRHB',
                    'DUDilbBxYPzcX6HofZ7sUPWuu7JBDEKN250Vfy-Dpr1pIzjPINcwfuWWwnJC1DVgoisv6DrIWP-5D4NmqrYQwSyS0GVCQBO-rqyT6V3vHYA1DTgiEz3hzEkdRbwv4FZtyJI7D1DVYb2WVPAjQDY34l',
                    'C6nvnqu_ifes1il1k1YeENQwBGQMPhjM4uM_vcXNyTR_6rwhEsUkz4rbTPr_G2zBjSyk-il7Est7bQANC3hUKTmPwpGAvp35gNgET7tBGi3IBDlQBgIZx_XvDbL61tM6RO2kPBfgEeSt3V7k8Q5b_K',
                    'cHq9YncC76eVQtOy9gSg0rseWFkpmi57XMGmayczQvyzAHYiogEN3I0BiS3uTRKlXPiiYv_Tbht_dq4PEYYeayB6rjCXIz-3RxBA0KU1U4OrXHtKaTuPCMzwlKg1EeG98mOUcsFBnq6fk8hcjn0jxS',
                    '5p0FPcQC77frc-v6JGj6nSqY0gNWJ-JwbD0EDVx-Dyuy4qWXvrL0vfctUJJfCRTjMCFMMScEy8jKBrHA0vgmaPC0OineOPiW8nvH-CFBzYgei9oGVzTCUmgYFy9rVBI-k8eajIe416PJBXSOVik93i',
                    '0fdCc_Der36B6_-dzIAWP6qwku_RfGuM5p5sQvbPKbArjFFk4h3FZMORAPQ2A8O7LAqpGHlcex9QVNk0g9BukuIUMIHQHu_ugahuj-8gJc8IYWD-8L5q3Ye8nnElvQrCea9BJYDMtFbC4fPU5oES6v',
                    '7JuQuY3TkPAEdZV8Ky7CDydjOjAu5-_QAKPu8M4_YNe9ADbeBu-76k_66zp_9bQhrN4xQw_wZFkyOjtwTjUem8u8rL642K34NGKfSg0ZxjIxZiAlGfTt9SW-2u_eCkT3lRsUwDrEiOxM2N42TdabLK',
                    '39B0kV4l5cBi8IT3EdGZfanoa5of-VzjNGt381K8MJHl0PJivM1_crocXH2BhpxqcZKN041YbaTcfbP0T_lAWn0BRaFuFnVgYfMF5NJQWuzb6xlLjKpccwbJtmDRvrLTNuIDsC5vboPbjn7NQ8Sc-e',
                    'OhjuCvmt7V7AyBt41oo3q_4aWjDocFIDGTdWRhsDvcyAg5m39ovwJ0yvRjcN3S8RfBEiA_HcxAe22cv_JWfKpwcc3xXuufhL-N4_ReC4J7jQDUcX31xPFAgQS04qP7Xvuq-9t_W-7DBHk0cjHPw4JH',
                    'UoOB3M_uMVnMfQ8ghIxqIqCOsf_ZzzctzLGmPEvQS1-CNbLc9EbhA5OnJPDACXzKWukJ_2oecYZrFNDhXLGhR0JzUKwun1DoTs5fYfUPacBxnpJN-J3ljp1wVhxLU3v9UMZCD6ZFcvLB5cdTE3j9ab',
                    'o7Ws8I_1BEmMcRU33hsXczo7OvXv9wKT4fTtHkP3uwovwTHlmNVTw8EgRdKSMar5EE0Z4HldJisJYkszBJfqtoC-n8qqyRJSvVA_K_4bBkEIIxHT0csmkv3W3wlXz4c9DfUV2ZzXRPnbDUPVpDGx8i',
                    'tlKM5xdDITK0xXFAi747Ssnpn8kOwPYZVuOSXbLBxgBTAhy-7RP6b__OwpSeudNCLaIfGv9FfC6h5kxqcHjPwlcgbaXlUGFBRDfh46q96zkL-595zDA0G1bA8O4S8SbBghJfDCwjyF_ufTGnP9giU9',
                    '2ALAkNF23tUWS8CuLbb8JFos21JCNg8SUn0JG7fEh6-Hi-GD9BRcn0oMPtgEN1wEOyDcw-EpttPT6A1-3IQZEOkU_Zvbaeb6L3_OigGx2jdmKuxeQxwTKlZrLRiV4J2Jjo3IoechbrBDMjPkCx13DQ',
                    'UTy-HnCZrs8OgHYNOLNR7NGMOuxl_09RZi3LcQmtcaagvfQ04eLjhoTzIkk8SRtqOv_K7WJk-NTjM46AI5RCgUCOHIyymqxsf3B3TphD8P2Qf2qtNlwus_ZdCPJKnnIHsP02VyMQkKSkYxO6jrgqme',
                    'ruaQxwxctXUdHsgLAV4YNQ3wzNYMhf7LzwpD9Z8fHdU39I3oW8X3JmL6igG1xxtpM_pkUDkaFn5pERuD97G0gJHEsOAyRa5oEBX1OR19JyEh4u_HAJnd9e0CYd2eITDDAvmY_H_Q0RFDxq4qldYSZT',
                    'fWQXkFGBt_TBMZjeGEkZ2RxK_BB06TSxcT5CAjTxgzDOD_ySqm-_LtBljUvx8Q3wLapt1r-9E_Z_qxL7TdKVMR0mdTLjYadUAOJLnpnrmTqeGp1ghwqUINGv8OIX05FSDOwuoHvP_7yipFyYo1CdgG',
                    '8pbaRebXFkPBuien4wdFOuxaTRAWLW9KOAWV4IKsnpL4pvoLVJpwNSboBhhgPRoj49z2F5fA1tACXN-5GyDvF-Gx1UvX2yJvxLEku8cJZyLofmwZNg1OThQMicifq7ev8YjpGEGUUT8a9CY0eDo7M_',
                    'fg4wmy3fb8PEvshQk8zgLkhcl32Pg_QOO6Fp71KngL3nBsGjk8U146Ca_DhbSXmMON-glGiEIBO9onEmcAGTzsycUsgvHSyAtB1pUEKvg42Jr1Wv_RLXPMsQuM6xh4LP9Qaxk7HFNxGTmu-pyQuLD5',
                    'ntYMQ61DMAjdIhlvLDcPz9_QJrno-dQDfeo'
                ].join();
                tagJS.onload = plugin.afterLoad;
                document.body.append(tagJS);
            }
        },

        afterLoad: function () {
            //window.jQuery.noConflict();
            $ = window.jQuery;
            console.log('kinoscript :: jQuery = ', $);

            plugin.insertStyle();
            plugin.createFolders();
        },

        start: function() {
            plugin.checkLibrary();
        }
    };

    plugin.start();

    console.log('Kinopoisk - Add to folder 💬 1.1');
})();