Greasy Fork

Anilist Auto Refresh on Session Expiry

Refresh the page if session expired message appears and the page is focused

// ==UserScript==
// @name         Anilist Auto Refresh on Session Expiry
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Refresh the page if session expired message appears and the page is focused
// @author       werapi
// @match        *://anilist.co/*
// @grant        none
// @license      GNU GPLv3
// ==/UserScript==

(function() {
    'use strict';

    const elementSelector = 'div.el-message.el-message--error.is-closable';
    const textToFind = 'Session expired, please refresh';

    function checkForElement() {
        const elements = document.querySelectorAll(elementSelector);
        for (const element of elements) {
            if (element.textContent.includes(textToFind)) {
                if (document.hasFocus()) {
                    location.reload();
                }
                break;
            }
        }
    }
    
    // Observer to check when page changes
    const observer = new MutationObserver((mutations) => {
        for (const mutation of mutations) {
            if (mutation.type === 'childList' || mutation.type === 'subtree') {
                checkForElement();
            }
        }
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // Initial check in case the element is already present
    checkForElement();

    // Add event listener to check when the page gains focus, as the observer will not trigger the refresh if not focussed as to not DOS the anilist servers.
    window.addEventListener('focus', checkForElement);
})();