🎯 Zentrales Metadata-Framework mit Provider-System für alle Disc-Typen in disk2iso.
- 🔌 Provider-System - Modulares Registrierungssystem für Metadata-Provider (MusicBrainz, TMDB, Discogs, etc.)
- 🔄 Generic Workflow - Query/Wait/Apply-Pattern für alle Provider
- 💾 Cache-Management - Intelligente Zwischenspeicherung von Metadaten
- 🎯 State-Machine Integration - Nahtlose Integration in disk2iso State-Machine
- 🌍 Mehrsprachig - 4 Sprachen (de, en, es, fr)
- 📊 API-Integration - REST-API Support für externe Abfragen
Das Framework ermöglicht die dynamische Registrierung von Metadata-Providern:
# Provider registrieren (in Provider-Modul)
metadata_register_provider "musicbrainz" \
"musicbrainz_query" \
"musicbrainz_wait_for_selection" \
"musicbrainz_apply_metadata"
# Automatischer Aufruf durch Framework
metadata_query_all_providers # Ruft alle registrierten Provider auf
metadata_wait_for_selection # Wartet auf Nutzer-Auswahl
metadata_apply_selected # Wendet gewählte Metadaten an1. Query Phase
└─> Framework ruft query-Funktion aller Provider auf
└─> Provider suchen nach Metadaten
└─> Ergebnisse werden zwischengespeichert
2. Wait Phase
└─> Framework wartet auf Nutzer-Auswahl (Web-UI/API)
└─> Provider zeigen ihre Ergebnisse an
3. Apply Phase
└─> Framework ruft apply-Funktion des gewählten Providers auf
└─> Provider schreibt Metadaten in Dateien/Tags
| Provider | Status | Beschreibung | Repository |
|---|---|---|---|
| MusicBrainz | ✅ Stabil | Audio-CD Metadaten mit Disc-ID Lookup | GitHub |
| TMDB | ✅ Stabil | Film-/TV-Metadaten mit Cover-Art | GitHub |
| Discogs | 🚧 Geplant | Erweiterte Audio-Metadaten | - |
Das Metadata-Framework wird automatisch mit disk2iso installiert (Core-Komponente).
# disk2iso Installation
git clone https://github.com/DirkGoetze/disk2iso.git
cd disk2iso
sudo ./install.sh# Repository klonen
git clone https://github.com/DirkGoetze/disk2iso-metadata.git
cd disk2iso-metadata
# Framework-Bibliothek einbinden
source lib/libmetadata.sh
# Abhängigkeiten prüfen
metadata_check_dependenciesDatei: conf/libmetadata.ini
# Metadata Framework Konfiguration
METADATA_CACHE_DIR=/tmp/disk2iso/metadata
METADATA_CACHE_TTL=3600
METADATA_AUTO_APPLY=false
METADATA_PROVIDER_TIMEOUT=30Beschreibung:
METADATA_CACHE_DIR: Verzeichnis für Metadaten-CacheMETADATA_CACHE_TTL: Cache-Gültigkeit in SekundenMETADATA_AUTO_APPLY: Automatische Anwendung der ersten TrefferMETADATA_PROVIDER_TIMEOUT: Timeout für Provider-Abfragen
metadata_register_provider <name> <query_func> <wait_func> <apply_func>Parameter:
name: Eindeutiger Provider-Namequery_func: Funktion für Metadaten-Suchewait_func: Funktion für Nutzer-Auswahlapply_func: Funktion zum Anwenden der Metadaten
Beispiel:
metadata_register_provider "tmdb" \
"tmdb_query" \
"tmdb_wait_for_selection" \
"tmdb_apply_metadata"# Alle Provider abfragen
metadata_query_all_providers
# Auf Auswahl warten
metadata_wait_for_selection
# Metadaten anwenden
metadata_apply_selected <provider> <result_id># Cache initialisieren
metadata_init_cache
# Cache lesen
metadata_get_cached <disc_id> <provider>
# Cache schreiben
metadata_set_cache <disc_id> <provider> <data>
# Cache löschen
metadata_clear_cache [disc_id]Minimales Provider-Modul:
#!/bin/bash
# lib/libmyprovider.sh
# 1. Query-Funktion (Metadaten suchen)
myprovider_query() {
local disc_type="$1"
local disc_id="$2"
# API-Abfrage durchführen
# Ergebnisse in JSON speichern
# Return 0 bei Erfolg
}
# 2. Wait-Funktion (Auf Nutzer-Auswahl warten)
myprovider_wait_for_selection() {
# Ergebnisse in UI anzeigen
# Warten auf API-Callback
# Return 0 bei Auswahl
}
# 3. Apply-Funktion (Metadaten anwenden)
myprovider_apply_metadata() {
local result_id="$1"
# Gewählte Metadaten laden
# In Dateien/Tags schreiben
# Return 0 bei Erfolg
}
# 4. Provider registrieren
metadata_register_provider "myprovider" \
"myprovider_query" \
"myprovider_wait_for_selection" \
"myprovider_apply_metadata"Das Framework unterstützt 4 Sprachen:
- 🇩🇪 Deutsch (
lang/libmetadata.de) - 🇬🇧 Englisch (
lang/libmetadata.en) - 🇪🇸 Spanisch (
lang/libmetadata.es) - 🇫🇷 Französisch (
lang/libmetadata.fr)
Sprache ändern:
# In disk2iso.conf
LANGUAGE="en"- Dateigröße: ~34 KB (843 Zeilen)
- Funktionen: 25+ Framework-Funktionen
- Provider-API: 3 Callback-Funktionen pro Provider
- Cache-System: TTL-basiert mit automatischer Bereinigung
Das Framework ist integraler Bestandteil von disk2iso:
# In disk2iso.sh
source lib/libmetadata.sh
metadata_check_dependencies
# Automatischer Aufruf in State-Machine
state_metadata_query() {
metadata_query_all_providers || return 1
}
state_metadata_wait() {
metadata_wait_for_selection || return 1
}
state_metadata_apply() {
metadata_apply_selected || return 1
}# Flask Route für Metadaten-Auswahl
@app.route('/api/metadata/select', methods=['POST'])
def select_metadata():
provider = request.json['provider']
result_id = request.json['result_id']
# Trigger metadata_apply_selected# Debug-Modus aktivieren
export DEBUG_METADATA=true
# Provider-Status anzeigen
metadata_list_providers
# Cache-Inhalt prüfen
ls -lh /tmp/disk2iso/metadata/
# Log-Ausgabe
tail -f /var/log/disk2iso/disk2iso.log | grep METADATASiehe CHANGELOG.md für Details zu allen Änderungen.
MIT License - siehe LICENSE Datei.
- Hauptprojekt: disk2iso
- MusicBrainz Provider: disk2iso-musicbrainz
- TMDB Provider: disk2iso-tmdb
- Dokumentation: disk2iso Handbuch
D. Götze
- MusicBrainz API für Audio-Metadaten
- TMDB API für Film-/TV-Metadaten
- disk2iso Community