1
0

Serienfans/Filmfans Releasegruppen Filter

This commit is contained in:
Akamaru
2025-09-30 19:14:26 +02:00
parent 2bcd9621af
commit 35964c1cf4

View File

@@ -0,0 +1,150 @@
// ==UserScript==
// @name Serienfans/Filmfans Releasegruppen Filter
// @namespace https://git.ponywave.de/Akamaru/Userscripts
// @version 1.0
// @description Blende Uploads bestimmter Releasegruppen aus
// @author Akamaru
// @match https://serienfans.org/*
// @match https://serienfreaks.org/*
// @match https://filmfans.org/*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @grant GM_addStyle
// @updateURL https://git.ponywave.de/Akamaru/Userscripts/raw/branch/master/serienfans-releasegroup-filter.user.js
// @downloadURL https://git.ponywave.de/Akamaru/Userscripts/raw/branch/master/serienfans-releasegroup-filter.user.js
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
// CSS für Block-Button
GM_addStyle(`
.block-group-btn {
display: inline;
margin-left: 5px;
background: none;
border: none;
cursor: pointer;
font-size: 14px;
padding: 0;
line-height: 1;
width: auto;
min-width: 0;
vertical-align: middle;
}
`);
// Standard-Blacklist (kann über das Menü bearbeitet werden)
const defaultBlacklist = [];
// Lade die Blacklist aus den gespeicherten Einstellungen
let blacklist = GM_getValue('releasegroup_blacklist', defaultBlacklist);
// Funktion zum Ausblenden von Einträgen
function filterReleases() {
const entries = document.querySelectorAll('.entry');
entries.forEach(entry => {
const releasegroupSpan = entry.querySelector('.audiotag:has(small:contains("Releasegruppe:"))');
if (releasegroupSpan) {
const releasegroupText = releasegroupSpan.textContent.trim();
const releasegroup = releasegroupText.replace('Releasegruppe:', '').trim();
if (blacklist.some(blocked => blocked.toLowerCase() === releasegroup.toLowerCase())) {
// Blende den Entry-Container und das dazugehörige Checkbox aus
entry.style.display = 'none';
const checkbox = entry.previousElementSibling;
if (checkbox && checkbox.classList.contains('show_nfo')) {
checkbox.style.display = 'none';
}
}
}
});
}
// Funktion zum Blocken einer Releasegruppe
function blockReleasegroup(releasegroup) {
if (!blacklist.some(blocked => blocked.toLowerCase() === releasegroup.toLowerCase())) {
blacklist.push(releasegroup);
GM_setValue('releasegroup_blacklist', blacklist);
location.reload();
}
}
// Alternative querySelector-Methode (robuster)
function filterReleasesAlternative() {
const entries = document.querySelectorAll('.entry');
entries.forEach(entry => {
const audiotags = entry.querySelectorAll('.audiotag');
let releasegroup = null;
// Finde die Releasegruppe
audiotags.forEach(tag => {
const small = tag.querySelector('small');
if (small && small.textContent.includes('Releasegruppe:')) {
releasegroup = tag.textContent.replace('Releasegruppe:', '').trim();
if (blacklist.some(blocked => blocked.toLowerCase() === releasegroup.toLowerCase())) {
entry.style.display = 'none';
const checkbox = entry.previousElementSibling;
if (checkbox && checkbox.classList.contains('show_nfo')) {
checkbox.style.display = 'none';
}
}
}
});
// Füge Block-Button hinzu, wenn noch nicht vorhanden
if (releasegroup && !entry.querySelector('.block-group-btn')) {
const h3 = entry.querySelector('h3');
if (h3) {
const blockBtn = document.createElement('button');
blockBtn.textContent = '🚫';
blockBtn.className = 'block-group-btn';
blockBtn.title = `Releasegruppe "${releasegroup}" blocken`;
blockBtn.onclick = (e) => {
e.preventDefault();
e.stopPropagation();
if (confirm(`Releasegruppe "${releasegroup}" zur Blacklist hinzufügen?`)) {
blockReleasegroup(releasegroup);
}
};
h3.appendChild(blockBtn);
}
}
});
}
// Funktion zum Bearbeiten der Blacklist
function editBlacklist() {
const currentList = blacklist.join(', ');
const newList = prompt('Releasegruppen zum Ausblenden (kommagetrennt):\n\nBeispiel: SURCODE, WATCHABLE, ENDSTATiON', currentList);
if (newList !== null) {
blacklist = newList.split(',').map(item => item.trim()).filter(item => item !== '');
GM_setValue('releasegroup_blacklist', blacklist);
alert('Blacklist gespeichert! Die Seite wird neu geladen.');
location.reload();
}
}
// Registriere Menübefehl
GM_registerMenuCommand('Releasegruppen-Filter bearbeiten', editBlacklist);
// Filtere beim Laden der Seite
filterReleasesAlternative();
// Beobachte Änderungen (falls Inhalte dynamisch nachgeladen werden)
const observer = new MutationObserver(() => {
filterReleasesAlternative();
});
const listContainer = document.getElementById('list');
if (listContainer) {
observer.observe(listContainer, { childList: true, subtree: true });
}
})();