# Release & Update Guide

Diese Anleitung beschreibt die Schritte, die notwendig sind, um eine neue Version des **MediaBar** Plugins zu veröffentlichen.

## 1. Version erhöhen

Bevor du baust, musst du die Versionsnummer in den folgenden Dateien aktualisieren (z.B. von `1.0.0.0` auf `1.0.1.0`):

1.  **`Jellyfin.Plugin.MediaBar/Jellyfin.Plugin.MediaBar.csproj`**
    Suche nach `<Version>...</Version>` und ändere die Nummer.

2.  **`manifest.json`**
    Füge einen neuen Eintrag oben in die `versions`-Liste ein (oder bearbeite den vorhandenen, wenn es noch kein Release gab).
    *   `version`: Deine neue Nummer.
    *   `changelog`: Was hat sich geändert?
    *   `timestamp`: Das aktuelle Datum (wird später aktualisiert).
    *   `checksum`: (wird nach dem Build aktualisiert).

### Versionierungsschema: Major.Minor.Build.Revision
(Beispiel: 1.0.0.0)

1. **Major** (1.x.x.x)
   * **Bedeutung:** Hauptversion.
   * **Erhöhen bei:** Inkompatiblen Änderungen (Breaking Changes) oder komplettem Rewrite.
   * **Folge:** Setzt alle nachfolgenden Zahlen auf 0.

2. **Minor** (x.1.x.x)
   * **Bedeutung:** Nebenversion.
   * **Erhöhen bei:** Neuen Features / Funktionen, die abwärtskompatibel sind.
   * **Folge:** Setzt Build und Revision auf 0.

3. **Build** (x.x.1.x)
   * **Bedeutung:** Patch / Fehlerbehebung.
   * **Erhöhen bei:** Bugfixes, Sicherheitsupdates (keine neuen Features).
   * **Folge:** Setzt Revision auf 0.

4. **Revision** (x.x.x.1)
   * **Bedeutung:** Feingranularer Zähler.
   * **Erhöhen bei:** Notfall-Fixes (Hotfixes), automatisierter Erstellung (CI/CD) oder internen Anpassungen.

## 2. Plugin bauen und packen

Führe den folgenden Befehl im Terminal (PowerShell) im Hauptverzeichnis aus. Wir nutzen hier `dotnet build` statt `publish`, um unnötige Dateien zu vermeiden.

```powershell
dotnet build Jellyfin.Plugin.MediaBar/Jellyfin.Plugin.MediaBar.csproj --configuration Release --output bin/Publish; Compress-Archive -Path bin/Publish/* -DestinationPath bin/Publish/Jellyfin.Plugin.MediaBar.zip -Force; $hash = (Get-FileHash -Algorithm MD5 bin/Publish/Jellyfin.Plugin.MediaBar.zip).Hash.ToLower(); $time = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); Write-Output "`n----------------------------------------"; Write-Output "NEUE CHECKSUMME (MD5): $hash"; Write-Output "ZEITSTEMPEL:           $time"; Write-Output "----------------------------------------`n"
```

## 3. Manifest aktualisieren

Nachdem der Befehl durchgelaufen ist, siehst du am Ende eine Ausgabe wie:

```text
----------------------------------------
NEUE CHECKSUMME (MD5): ef8654666ffeae9695e660944f644ad3
ZEITSTEMPEL:           2025-12-15T12:34:56Z
----------------------------------------
```

1.  Kopiere die **Checksumme**.
2.  Öffne `manifest.json`.
3.  Füge die Checksumme bei deinem Versionseintrag unter `"checksum"` ein.
4.  Kopiere den **Zeitstempel** und füge ihn unter `"timestamp"` ein.
5.  Stelle sicher, dass die `sourceUrl` korrekt auf dein Repository zeigt.

## 4. Veröffentlichen

1.  Lade die Datei `bin/Publish/Jellyfin.Plugin.MediaBar.zip` irgendwo hoch (z.B. GitHub Releases).
2.  Stelle sicher, dass die `sourceUrl` im `manifest.json` auf diesen Download zeigt (oder auf das Repo, je nachdem wie Jellyfin das handhabt - meistens ist `sourceUrl` der Link zum ZIP).
    *   *Hinweis:* Wenn du das Plugin über ein Repo hostest, muss die URL im Manifest direkt auf die ZIP-Datei zeigen.

## Zusammenfassung der Dateien

| Datei | Zweck | Änderung nötig? |
| :--- | :--- | :--- |
| `Jellyfin.Plugin.MediaBar.csproj` | Definiert die DLL-Version | **Ja** |
| `build.yaml` | Build-Konfiguration | **Ja** |
| `manifest.json` | Plugin-Liste für Jellyfin | **Ja** (Version, Hash, Zeit) |
