Persistent Invidious Settings

Makes Invidious settings persist across instances and in private browsing.

22.04.2023 itibariyledir. En son verisyonu görün.

// ==UserScript==
// @name         Persistent Invidious Settings
// @namespace    http://tampermonkey.net/
// @version      1.07
// @description  Makes Invidious settings persist across instances and in private browsing.
// @author       Veeno
// @license      GPLv3
// @match        yewtu.be/*
// @match        vid.puffyan.us/*
// @match        inv.riverside.rocks/*
// @match        invidious.kavin.rocks/*
// @match        y.com.sb/*
// @match        invidious.nerdvpn.de/*
// @match        invidious.tiekoetter.com/*
// @match        yt.artemislena.eu/*
// @match        invidious.flokinet.to/*
// @match        inv.bp.projectsegfau.lt/*
// @match        inv.odyssey346.dev/*
// @match        invidious.sethforprivacy.com/*
// @match        invidious.projectsegfau.lt/*
// @match        invidious.baczek.me/*
// @match        yt.funami.tech/*
// @match        iv.ggtyler.dev/*
// @match        invidious.lunar.icu/*
// @match        invidious.privacydev.net/*
// @match        vid.priv.au/*
// @match        invidious.0011.lt/*
// @match        inv.zzls.xyz/*
// @match        invidious.esmailelbob.xyz/*
// @match        iv.melmac.space/*
// @match        invidious.vpsburti.com/*
// @match        invidious.snopyta.org/*
// @icon         https://invidious.io/invidious-colored-vector.svg
// @run-at       document-start
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

/* jshint esversion: 11 */

(function() {
    'use strict';

    if(window.self !== window.top) return;

    const domain = location.hostname;

    const storedDomainUpToDate = GM_getValue("Invidious_DomainUpToDate", {});

    const domainUpToDate = Object.fromEntries(
        GM_info.script.matches.map(
            match => {
                const key = match.slice(0, -2);
                return [key, storedDomainUpToDate[key] || false];
            }
        )
    );

    function validateCurrentDomain(){
        domainUpToDate[domain] = true;
        GM_setValue("Invidious_DomainUpToDate", domainUpToDate);
    }

    function invalidateOtherDomains(){
        Object.keys(domainUpToDate).forEach(key => { domainUpToDate[key] = false; });
        validateCurrentDomain();
    }

    const defaultSettings = encodeURIComponent(JSON.stringify({
        annotations:                 false,
        annotations_subscribed:      false,
        autoplay:                    true,
        automatic_instance_redirect: false,
        captions:                    ["", "", ""],
        comments:                    ["youtube", ""],
        continue:                    false,
        continue_autoplay:           true,
        dark_mode:                   "",
        latest_only:                 false,
        listen:                      false,
        local:                       false,
        watch_history:               false,
        vr_mode:                     true,
        show_nick:                   false,
        locale:                      "en-US",
        region:                      "US",
        max_results:                 40,
        notifications_only:          false,
        player_style:                "invidious",
        quality:                     "hd720",
        quality_dash:                "auto",
        default_home:                "Popular",
        feed_menu:                   ["Popular", "Trending"],
        related_videos:              true,
        sort:                        "published",
        speed:                       1,
        thin_mode:                   false,
        unseen_only:                 false,
        video_loop:                  false,
        extend_desc:                 false,
        volume:                      100,
        save_player_pos:             false
    }));

    const storedSettings = GM_getValue("Invidious_Settings", defaultSettings);

    const cookieSettings = document.cookie
                                   .split("; ")
                                   .find((entry) => entry.startsWith("PREFS="))
                                   ?.slice(6);

    if(cookieSettings && domainUpToDate[domain]){
        if(cookieSettings !== storedSettings){
            GM_setValue("Invidious_Settings", cookieSettings);
            invalidateOtherDomains();
        }
    } else{
        const date = new Date();
        date.setFullYear(date.getFullYear() + 2);
        document.cookie = "PREFS=" + storedSettings + "; domain=" + domain + "; path=/; expires=" + date.toGMTString() + "; Secure; SameSite=Lax";
        validateCurrentDomain();
        location.reload();
    }
})();
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元