namespace Flaro.Core.Library; /// Woran ein Lauf gerade ist. public enum Scanphase { /// Das Dateisystem wird durchgegangen. Suchen, /// Eine Datei wird gelesen und vermessen. Pruefen, /// Ein Titel wird bei der Metadatenquelle gesucht. Nachschlagen, /// Die Angaben zu einem gefundenen Titel werden geholt. Holen, /// Plakate und Hintergründe werden geladen. Bilder, /// Verwaistes wird entfernt, Doppeltes zusammengelegt. Aufraeumen, } /// Ein Zwischenstand: was gerade passiert, und wie weit. /// /// /// /// Mit Namen, nicht nur mit Zahlen. Vorher stand in der Verwaltung /// minutenlang „Wird durchsucht…" — ohne Hinweis, ob überhaupt etwas /// passiert. Wer bei vierzigtausend Dateien zusieht, braucht zu sehen, dass /// sich etwas bewegt, und woran es gerade hängt, wenn es hängt. /// /// /// Ein record struct, weil davon im Sekundentakt viele entstehen und /// keiner davon überlebt. /// /// /// Welcher Abschnitt des Laufs. /// Woran genau — ein Titel oder ein Pfad. /// Wie viele Stücke schon durch sind. /// Wie viele es insgesamt sind; 0, wenn unbekannt. public readonly record struct Scanschritt(Scanphase Phase, string Was, int Erledigt = 0, int Gesamt = 0) { /// Der Satz, der in der Oberfläche steht. /// /// /// Hier und nicht in der Oberfläche. Die Apps brauchen denselben /// Satz, und zweimal formuliert driftet er auseinander. /// public string Text() { var zaehler = Gesamt > 0 ? $" — {Erledigt} von {Gesamt}" : ""; return Phase switch { Scanphase.Suchen => $"Suche Medien in {Kurz(Was)}", Scanphase.Pruefen => $"Prüfe {Kurz(Was)}{zaehler}", Scanphase.Nachschlagen => $"Suche „{Was}“ bei der Metadatenquelle{zaehler}", Scanphase.Holen => $"Hole Metadaten zu {Was}{zaehler}", Scanphase.Bilder => $"Lade Bilder zu {Was}{zaehler}", Scanphase.Aufraeumen => "Räume auf und lege Doppeltes zusammen", _ => Was, }; } /// Die letzten zwei Pfadbestandteile — ein ganzer Pfad sprengt die Zeile. private static string Kurz(string pfad) { if (string.IsNullOrEmpty(pfad)) return pfad; var teile = pfad.Split('/', StringSplitOptions.RemoveEmptyEntries); return teile.Length <= 2 ? pfad : string.Join('/', teile[^2..]); } }