115网盘播放器增强

115播放器功能增强,优化快进快退功能。

// ==UserScript==
// @name         115网盘播放器增强
// @version      1.0.2
// @description  115播放器功能增强,优化快进快退功能。
// @author       Xiaowu
// @license      GPL3
// @match        http*://115.com/*
// @match        http*://anxia.com/*
// @match        http*://*.anxia.com/*
// @namespace https://greasyfork.org/users/859588
// ==/UserScript==

var defaultOpeningDuration = 10;

var fieldDefs = {
    'OpeningDuration': {
        'label': 'OP 时长',
        'type': 'unsigned int',
        'default': defaultOpeningDuration
    }
};

GM_config.init({
    id: 'GM_config',
    title: '115播放器增强',
    fields: fieldDefs
});

function appendElement(current, next) {
    console.log('add ', next);
    return current.insertAdjacentElement('afterend', next);
}

function registerHotkey(key, fn) {
    document.body.addEventListener('keyup', function (e) {
        if (e.key === key) {
            fn();
        }
    });
}

function retry(fn, interval, times) {
    var ret = fn();
    if (!ret && times) {
        setTimeout(function () {
            retry(fn, interval, times--);
        }, interval);
    }
}

function createButton(onclick, alt) {
    var button = document.createElement('a');
    button.href = 'javascript:;';
    button.className = 'btn-switch';
    button.alt = alt;
    button.onclick = onclick;
    return button;
}

function getPlayer() {
    return $('#js-video')[0];
}

function getNextItem() {
    var items = Array.apply(null, document.querySelectorAll('.video-playlist .vpl-container .item-list li'));
    var remainingItems = _.dropWhile(items, function (item) {
        return item.className !== 'hover';
    });
    return _.head(_.tail(remainingItems));
}

(function () {
    'use strict';

    function main() {
        var video = getPlayer();
        var configration = function () {
            GM_config.open();
        };

        var playButton = document.querySelector('.operate-bar a[btn="play"]');
        var currentButton = playButton;

        var skipOp = function () {
            video.currentTime += GM_config.get('OpeningDuration');
        };
        var skipOpButton = createButton(skipOp, '跳过OP (快捷键END)');
        skipOpButton.innerHTML = '<i class="icon-operate iop-playing" style="background-size: 240px 40px;"></i><div class="tooltip">点击跳过OP</div>';
        currentButton = appendElement(currentButton, skipOpButton);
        //registerHotkey('End', skipOp);
        registerHotkey('2', skipOp);

        var configButton = createButton(configration, '设置');
        configButton.innerHTML = '<i class="icon-operate iop-setting"></i>';
        currentButton = appendElement(currentButton, configButton);

        //替换默认的快进,快退,使用OP设计的值进行快进快退
        var skipLeftOp = function () {
            console.log(video.currentTime);
            if ((video.currentTime - GM_config.get('OpeningDuration')) <= 0) {
                video.currentTime = 0;
            } else {
                video.currentTime -= GM_config.get('OpeningDuration');
            }
        };
        //registerHotkey('ArrowLeft', skipLeftOp);
        registerHotkey('1', skipLeftOp);
        registerHotkey('ArrowRight', skipLeftOp);

        registerHotkey('PageDown', function () {
            document.getElementById('js-video_next').click();
            console.log('click');
        });
        return true;
    }

    function inject() {
        var video = getPlayer();
        if (video) {
            video.addEventListener('playing', main, {once: true});
            return true;
        }
    }

    retry(inject, 500, 10);
})();