Serienfans/Filmfans Releasegruppen Filter
This commit is contained in:
150
serienfans-releasegroup-filter.user.js
Normal file
150
serienfans-releasegroup-filter.user.js
Normal 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 });
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user