import { t } from '@/i18n'; import { createPlugin } from '@/utils'; export default createPlugin< unknown, unknown, { observer?: MutationObserver; waitForElem(selector: string): Promise; start(): void; stop(): void; } >({ name: () => t('plugins.skip-disliked-songs.name'), description: () => t('plugins.skip-disliked-songs.description'), restartNeeded: false, renderer: { waitForElem(selector: string) { return new Promise((resolve) => { const interval = setInterval(() => { const elem = document.querySelector(selector); if (!elem) return; clearInterval(interval); resolve(elem); }); }); }, start() { this.waitForElem('#like-button-renderer').then((likeBtn) => { this.observer = new MutationObserver(() => { if (likeBtn?.getAttribute('like-status') == 'DISLIKE') { document .querySelector('tp-yt-paper-icon-button.next-button') ?.click(); } }); this.observer.observe(likeBtn, { attributes: true, childList: false, subtree: false, }); }); }, stop() { this.observer?.disconnect(); }, }, });