Auto YouTube Watch Later Empty

Auto empty your YouTube Watch Later playlist.

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name            Auto YouTube Watch Later Empty
// @name:tr         Otomatik YouTube Daha Sonra İzle Temizleyici
// @namespace       https://github.com/Arcdashckr/Auto-Youtube-WatchLater-Empty
// @version         1.0.0
// @description     Auto empty your YouTube Watch Later playlist.
// @description:tr  Otomatik olarak YouTube Daha Sonra İzle listenizi boşaltın.
// @author          Arcdashckr
// @match           https://www.youtube.com/*
// @icon            https://cdn.simpleicons.org/youtube/FF0000
// @run-at          document-end
// @grant           GM_registerMenuCommand
// @license         MIT
// @supportURL      https://github.com/Arcdashckr/Auto-Youtube-WatchLater-Empty/issues
// ==/UserScript==

(function() {
    'use strict';

    // --- AYARLAR VE DEĞİŞKENLER ---
    const DELAY = 1500;
    let isRunning = false;
    let lastUrl = location.href;

    // Hedef XPath'ler
    const VIDEO_MENU_XPATH = "/html/body/ytd-app/div[1]/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-playlist-video-list-renderer/div[3]/ytd-playlist-video-renderer[1]/div[3]/ytd-menu-renderer/yt-icon-button/button";
    const REMOVE_BUTTON_XPATH = "/html/body/ytd-app/ytd-popup-container/tp-yt-iron-dropdown/div/ytd-menu-popup-renderer/tp-yt-paper-listbox/ytd-menu-service-item-renderer[2]/tp-yt-paper-item";

    // --- YARDIMCI FONKSİYONLAR ---
    const log = (msg, type = 'info') => {
        const prefix = '[WatchLater-Cleaner]';
        const style = type === 'error' ? 'color: #ff4d4d; font-weight: bold;' : 'color: #00ff88; font-weight: bold;';
        console.log(`%c${prefix} %c${msg}`, style, 'color: inherit;');
    };

    const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

    function getElementByXpath(path) {
        return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    }

    // --- ANA MANTIK ---
    async function startCleaning() {
        if (!location.href.includes("list=WL")) {
            alert(navigator.language.startsWith('tr') ? "Lütfen 'Daha Sonra İzle' listesine gidin!" : "Please go to 'Watch Later' playlist!");
            return;
        }

        if (isRunning) return;

        const confirmMsg = navigator.language.startsWith('tr')
            ? "Listedeki TÜM videolar kaldırılacak. Devam edilsin mi?"
            : "ALL videos in the list will be removed. Proceed?";

        if (!confirm(confirmMsg)) return;

        isRunning = true;
        log("Temizlik işlemi başlatıldı...");

        while (isRunning) {
            const menuButton = getElementByXpath(VIDEO_MENU_XPATH);

            if (!menuButton) {
                log("Temizlenecek video bulunamadı veya liste sonu.");
                isRunning = false;
                break;
            }

            try {
                menuButton.scrollIntoView({block: "center"});
                menuButton.click();
                await sleep(DELAY);

                const removeButton = getElementByXpath(REMOVE_BUTTON_XPATH);

                if (removeButton) {
                    removeButton.click();
                    log("Video kaldırıldı.");
                } else {
                    log("Kaldır butonu bulunamadı, yedek yöntem deneniyor...", 'error');
                    const menuItems = document.querySelectorAll('ytd-menu-service-item-renderer');
                    let foundFallback = false;
                    for (const item of menuItems) {
                        if (item.textContent.toLowerCase().includes("kaldır") || item.textContent.toLowerCase().includes("remove")) {
                            item.click();
                            foundFallback = true;
                            break;
                        }
                    }
                    if (!foundFallback) {
                        document.body.click();
                        isRunning = false;
                        break;
                    }
                }
            } catch (err) {
                log("Hata oluştu: " + err, 'error');
                isRunning = false;
            }

            await sleep(DELAY);
        }

        const doneMsg = navigator.language.startsWith('tr') ? "İşlem tamamlandı!" : "Process completed!";
        alert(doneMsg);
        log("İşlem bitti.");
    }

    // --- DİNAMİK SAYFA KONTROLÜ ---
    function init() {
        // Tampermonkey menüsüne komutları ekle
        GM_registerMenuCommand(navigator.language.startsWith('tr') ? "🚀 Temizliği Başlat" : "🚀 Start Cleaning", startCleaning);
        GM_registerMenuCommand(navigator.language.startsWith('tr') ? "🛑 Durdur" : "🛑 Stop", () => {
            isRunning = false;
            log("İşlem durduruldu.");
        });

        log("Script aktif. Kullanmak için Tampermonkey menüsünü açın.");
    }

    // Sayfa değişikliklerini izle (YouTube SPA Navigasyonu için)
    const observer = new MutationObserver(() => {
        if (location.href !== lastUrl) {
            lastUrl = location.href;
            if (location.href.includes("list=WL")) {
                log("Daha Sonra İzle listesi algılandı.");
            }
        }
    });

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

    // İlk çalıştırma
    init();

})();