YouPlay 0.40 erschienen
Mi, 21. Dezember 2022, Ralf Hersel
Ein wenig Werbung in eigener Sache gefällig? YouPlay ist eine Gtk-Anwendung, mit der man Musiktitel bei YouTube suchen und diese herunterladen und abspielen kann. Die heruntergeladenen Stücke werden in einem Unterordner des Musik-Verzeichnisses abgelegt und können mit YouPlay eingelesen und wiedergegeben werden. Die Anwendung unterstützt einen GUI- und CLI-Modus.
Bei der neuen Version 0.40, habe ich die Anwendung von Gtk3 auf Gtk4 und LibAdwaita portiert. Aufgrund der ungenügenden Gtk4-Dokumentation für Python war diese Aufgabe von vielen Suchen im Internet und einigen Programmzeilen geprägt, die mehr auf Versuchen als auf Wissen beruhten. Trotzdem ist es mir gelungen, YouPlay auf den aktuellen Stand der Technik umzustellen.
Falls euch die Anwendung gefällt, oder ihr bereits eine frühere Version installiert habt, würde ich mich über Rückmeldungen freuen. Funktional gibt es keine Unterschiede zur letzten Version 0.38. Mein Aufwand steckt bei 0.40 nur in der Portierung auf Gtk4 und LibAdwaita.
Leider gibt es immer noch kein Flatpak oder ein anderes Paketformat für YouPlay. Die Installation des 600-Zeilen Programms ist jedoch sehr einfach, wenn man der Anleitung folgt. Alle, die YouPlay bereits installiert haben, müssen nur die Datei youplay.py austauschen. Die übrigen Dateien wurden zwar teilweise aktualisiert, haben aber keinen Einfluss auf die Funktionalität.
YouPlay verwendet yt-dlp, um die Musikinformation von YouTube zu beziehen und für das Herunterladen der Stücke. Für die Ermittlung der Dauer kommt ffmpeg zum Einsatz und die Wiedergabe erledigt mpv. Die Bedienung der Anwendung ist intuitiv: Gebt in das Suchfeld einen Titel ein; dann werden euch 10 Treffer angezeigt. Ein Doppelklick auf einen Eintrag in der Liste startet das Herunterladen des Stücks in den Ordner ~/Musik/youplay und beginnt mit der Wiedergabe. Die übrigen Schaltflächen sollten selbsterklärend sein. Songs lädt die Liste aller bereits heruntergeladenen Titel.
Den grössten Aufwand bei der Portierung hatte ich mit der Implementierung von Nebenläufigkeiten (threading), den schlecht dokumentierten Eigenschaften und Methoden von Gtk4 in Python und dem generellen App-Handling von Gtk4 und LibAdwaita, welches noch schlechter dokumentiert ist, als Gtk4. Hier ist kleines Beispiel für den About-Dialog.
In der Gtk3-Version habe ich einfach einen Info-Dialog verwendet:
def on_button_about_clicked(self, widget):
self.show_info_dialog(PROG_NAME, ABOUT)
Bei Gtk4 kommt stattdessen ein About-Dialog zum Einsatz:
def on_button_about_clicked(self, widget):
about = Adw.AboutWindow()
about.set_application_name(PROG_NAME)
# ~ about.set_application_icon("youplay.svg")
about.set_version(VERSION)
about.set_license_type(Gtk.License(Gtk.License.GPL_3_0))
about.set_developer_name(AUTHOR)
about.set_comments(ABOUT)
about.set_website("https://codeberg.org/ralfhersel/youplay")
about.set_issue_url("https://codeberg.org/ralfhersel/youplay/issues")
about.show()
Wobei ich noch nicht herausgefunden habe, wie man das Application-Icon korrekt verwendet. Es gäbe viele weitere Beispiele, bei denen sich der Code substanziell geändert hat, aber damit möchte ich euch nicht langweilen. Ich hatte erwogen, die Beschriftung der Schaltflächen durch Symbole zu ersetzen. Nach ein paar Diskussionen mit meiner Frau, habe ich mich gegen die Symbole und für die Texte entschieden, weil sie besser verständlich sind, als Symbole. Dieser Drops ist aber noch nicht endgültig gelutscht.
Falls euch YouPlay gefällt, freue ich mich über eure Rückmeldungen und Verbesserungsvorschläge.