Yet another DfPlayer-SD-Karten-Inhalt-Verwalter

Hallo liebe TonUINO-Community,

ich weiß, nicht noch ein Tool für Dinge, die es schon gibt :wink: Und tatächlich sind die vorhandenen Tools hier (Übersicht der Tools / Anleitungen für den TonUINO) bereits völlig ausreichend. Nichtsdestotrotz wollte ich die eine oder andere Sache gern anders haben, als es die einzelnen Tools machen und daher habe ich ein wenig Code produziert, der im DFPlayer Card Manager gemündet ist.

Die wichtigsten Details:
Es ist ein Python package für die Kommandozeile (Windows/Linux/MacOS), das

  • Die Synchronisation eines Musikarchives auf die SD Karte übernimmt (wie im Prinzip alle Tools zum Bespielen der SD Karte)
  • sicherstellt, dass die Anforderungen an Dateisystem und Dateistruktur eingehalten werden.

Letzteres meint:

  • Check, ob die Karte passend formattiert ist (FAT32 mit 32 KByte Allocation Unit Size)
  • Check, ob FAT Sortierung gemäß Ordnerstruktur vorliegt
  • Check, dass keine unerwünschten Ordner und Dateien auf der SD Karte liegen inkl. dem Aufzeigen von Nummerierungslücken
  • Anzeigen oder Löschen von unerwünschten Dateien auf der SD-Karte

Der Sync des Musikarchives benötigt im Defaul eine Ordnerstruktur, die mit Platzhaltern ausgedrückt so aussieht:

audio_repo_root
└── 01.ARTIST.ALBUM/
|   ├── 001.TITLE.mp3
|   ├── 002.TITLE.mp3
|   ├── ...
|   └── 255.TITLE.mp3
├── ...
└── 99.ARTIST.ALBUM/

Im Ziel sieht es dann logischerweise so aus:

sd_card_root
└── 01/
|    ├── 001.mp3
|    ├── 002.mp3
|    ├── ...
|    └── 255.mp3
|
└── ../
└── 99/

Für die Quelle (audio_repo_root) kann das jedoch per Konfiguration (global für alle Ordner aber jeden Unterordner separat) angepasst werden, falls Bedarf besteht. Die Details erspare ich in diesem Thread :wink:

Die Synchronisation fügt hinzu, löscht und macht auf Lücken aufmerksam. Das geschieht im Standard, indem Tags und der Hash des Musikcontainers verglichen werden. Der Hash check wird vermutlich sehr selten relevant sein… Vielleicht bei alten SD Karten, die die Bits nicht mehr zusammenhalten :wink:

Hier noch ein Beispiel, wie man Probleme mit der SD Karte aufdeckt und gleich auch behebt:
image

Und noch ein Beispiel eines Syncs:

So, das war eh schon zu viel Text :wink: Vielleicht ist es ja für jemanden nützlich. Für meine Anforderungen ist das Paket soweit „Feature-complete“, es ist keine Entwicklung mehr geplant. Falls es jedoch irgendwen gibt, der das Tool auch einsetzen will und noch Bedarf für Verbesserung sieht, sehe ich gern, was ich tuen kann :wink:

1 „Gefällt mir“

Sehr schön! Ich werde das mal ausprobieren.

Noch besser wäre es, wenn du noch eine grafische Oberfläche drum bauen würdest und vielleicht auch die Executable bereitstellen würdest (pyinstall), so dass es auch verwendet werden kann, ohne Python installiert zu haben.

Hi, danke für dein Feedback.

Die geäußerten Wünsche kann ich sehr gut nachvollziehen.
Bzgl. der GUI wird es jedoch meinerseits keine Anstrengungen geben, da dies den Entwicklungsaufwand überproportional steigert :frowning: Deswegen habe ich von vornherein die Weichen dafür nicht gestellt (API, …).

Bzgl. der Paketierung als ausführbare Datei grübele ich gern noch einmal. Mein erster Reflex: Ich mag ungern ausführbare Dateien hosten, über die keine automatischen Security-Scans gelaufen sind. Sprich: Um meinem eigenen Anspruch gerecht zu werden, müsste ich es z. B. unter Windows bei WinGet hosten und hoffen, dass die ihre Sache dort sauber erledigen. Zudem lese ich von vielen Möglichleiten, warum Virenscanner unter Windows anschlagen. Ich möchte keine Kultur fördern, in der False-Positives wie dieser dann dazu führen, dass man Warnungen der Scanner zu leicht ignoriert. Damit das nicht passiert, müsste ich stets viele Tests bei der Paketierung durchlaufen. Scheint mir sehr viel Aufwand zu sein.

Bei PyPi kann ich zumindest im Entwicklungsprozess ohne großen Aufwand zentral für alle späteren Plattformen dies und das scannen… Auch alles nicht ideal da aber immerhin.

VG

Ich habe versucht, das Tool zu testen aber ohne Erfolg. Ich bekomme folgende Fehlermeldung:

(dfplayer_card_manager) $ dfplayer-card-manager check /run/media/b/INTENSO
Task: Checking /run/media/b/INTENSO
Checking failed.
Error: /run/media/b/INTENSO is not a path within a FAT32 filesystem.
Aborted.

„lsblk“ sagt aber eindeutig, dass das FAT32 ist.

(dfplayer_card_manager) $ lsblk -f
NAME        FSTYPE FSVER LABEL   UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
...
mmcblk0                                                                              
└─mmcblk0p1 vfat   FAT32 INTENSO 0403-0201                              17,2G    41% /run/media/b/INTENSO

Hi @Boerge1 danke fürs Testen :slight_smile: Da nutze ich eeeeinmal Windows zum Entwickeln, weil ich die SD Karte so am besten für E2E Tests nutzen kann :wink:

Anyway, der Bug liegt hier:

Jetzt muss ich mal kurz Dokus checken, ob ich lieber auf FSTYPE oder FSVER prüfen sollte oder beides, um eine gültige FAT32 Kombi herauszubekommen.

Fixe ich asap :slight_smile:

Okay, asap lässt ja Raum für Interpretation :wink: Nebst dem Bugfix habe ich gleich noch die Test-Coverage insbesondere für non-Windows erhöht, musste dafür noch Fehler in abhängigen Bibliotheken fixen lassen und daher hat es dann doch bis jetzt gedauert. Version 0.2.1 ist online https://pypi.org/project/dfplayer-card-manager/