Première version stable — toutes les fonctionnalités prévues sont implémentées et les bugs connus de la bêta sont corrigés.
Corrections
Fermeture de l'application
MPV restait actif en arrière-plan après fermeture — corrigé via kill_all_mpv() et signal close-request GTK (merci tycooon)
Le processus pOpcOrn lui-même ne se terminait pas — corrigé avec self.quit() + Gio.ApplicationFlags
Plusieurs instances de MPV pouvaient s'accumuler — le socket IPC est maintenant ciblé précisément
Communication IPC avec MPV
Le socket IPC utilisait /tmp (privé dans le sandbox Flatpak) — déplacé vers ~/.var/app/io.mpv.Mpv/ accessible par les deux sandboxes
Broken pipe lors du chargement d'un fichier traité comme une erreur — corrigé, c'est un comportement normal de MPV
La fenêtre WebKit ne revenait pas après fin naturelle d'une vidéo — corrigé via un événement _playback_ended déclenché par le tracking IPC
Historique
Le titre affiché était "YouTube" au lieu du titre de la vidéo — remplacé par une récupération asynchrone via yt-dlp
yt-dlp dans le sandbox Flatpak utilisait un mauvais wrapper — remplacé par le binaire standalone officiel
Reprise de lecture
Les URLs YouTube contiennent des paramètres de tracking (pp=, si=) qui changeaient à chaque session — normalisées via urllib.parse pour ne conserver que v= et list=
La position n'était pas appliquée au relancement via IPC — corrigé avec un seek absolute après le premier time-pos valide
Stabilité
Instance unique : plusieurs lancements simultanés pouvaient créer plusieurs fenêtres — corrigé avec Gio.ApplicationFlags.DEFAULT_FLAGS
Nouvelles fonctionnalités
Mode éco WebKit : WebGL et WebAudio désactivés, Shorts redirigés vers MPV — accessible dans les réglages ⚙
Installation native : Makefile + wrapper-native.sh pour une installation sans Flatpak
Détection automatique Flatpak/natif dans updater.py — plus besoin de patch pour les builds natifs (merci Christophe !)
README bilingue français / anglais
Améliorations
La fenêtre WebKit se cache uniquement quand MPV joue réellement — supprime le gap visuel noir entre les deux fenêtres
Détection de fin de lecture accélérée (polling 1s au lieu de 5s) — la fenêtre WebKit revient en ~2s
Socket IPC pré-chauffé utilisé systématiquement — délai de lancement réduit
Navigation
Interface YouTube complète via WebKitGTK — recherche, recommandations, chaînes, Shorts, tout fonctionne comme dans un navigateur classique.
Lecture vidéo
La lecture est déléguée à MPV avec décodage matériel automatique (VAAPI/VDPAU). MPV étant un lecteur natif, les publicités YouTube ne sont pas lues — effet de bord bienvenu, non garanti selon les évolutions de YouTube.
Qualité cible configurable : 480p / 720p / 1080p / 1440p / 2160p
Mode fenêtré ou plein écran, taille ajustable
Retour automatique à l'interface YouTube après la lecture
Historique et reprise
Fonctionne quelle que soit la page YouTube d'origine (page d'accueil, recherche, chaîne…)
Confidentialité
Aucune télémétrie, aucun serveur tiers. Tout reste local : cookies, historique, positions de reprise.
SponsorBlock : Saut automatique des segments sponsorisés dans les vidéos (désactivé par défaut, activable dans les réglages ⚙).
Merci encore pour le PKGBUILD, ça a vraiment lancé la dynamique pour l'installation native !
Depuis ton test, pas mal de choses ont évolué — voici un résumé des changements qui impactent directement ton build :
updater.py — la détection Flatpak/natif est intégrée proprement avec _IS_FLATPAK = os.path.exists("/app") et une méthode _build_cmd() qui adapte les appels automatiquement. Plus besoin de patch.
player.py — le plus important : le socket IPC MPV est maintenant dans ~/.var/app/io.mpv.Mpv/ en mode Flatpak (accessible par les deux sandboxes), et dans XDG_RUNTIME_DIR en mode natif. Ce changement a débloqué la reprise de lecture et le retour de la fenêtre WebKit après la fin naturelle d'une vidéo. Plusieurs correctifs importants : fermeture propre de l'app et de MPV, titre dans l'historique via yt-dlp, détection de fin de lecture par événement IPC.
app.py — signal close-request ajouté pour la fermeture propre, instance unique via Gio.ApplicationFlags, mode éco WebKit (WebGL/WebAudio désactivés, Shorts redirigés vers MPV).
Tout est dans le dépôt. Le Makefile et wrapper-native.sh sont inchangés. Pour ton PKGBUILD, seul le patch updater.py peut être retiré — le reste du build devrait fonctionner tel quel.
J'ai bien pris en compte ta remarque. J'ai ajouté un Makefile ainsi qu'un script wrapper-native.sh au dépôt pour faciliter l'installation manuelle et la création de paquets natifs par la communauté.
Pour l'instant, je privilégie officiellement le format Flatpak durant cette phase bêta afin de garantir un environnement d'exécution stable et contrôlé.
# Mise à jour et v0.1.0
Posté par bbs . En réponse au message [v0.1.0] BBS pOpcOrn 🍿 – Client YouTube léger (GTK4 + MPV). Évalué à 1 (+1/-1).
Première version stable — toutes les fonctionnalités prévues sont implémentées et les bugs connus de la bêta sont corrigés.
Corrections
Fermeture de l'application
MPV restait actif en arrière-plan après fermeture — corrigé via kill_all_mpv() et signal close-request GTK (merci tycooon)
Le processus pOpcOrn lui-même ne se terminait pas — corrigé avec self.quit() + Gio.ApplicationFlags
Plusieurs instances de MPV pouvaient s'accumuler — le socket IPC est maintenant ciblé précisément
Communication IPC avec MPV
Le socket IPC utilisait /tmp (privé dans le sandbox Flatpak) — déplacé vers ~/.var/app/io.mpv.Mpv/ accessible par les deux sandboxes
Broken pipe lors du chargement d'un fichier traité comme une erreur — corrigé, c'est un comportement normal de MPV
La fenêtre WebKit ne revenait pas après fin naturelle d'une vidéo — corrigé via un événement _playback_ended déclenché par le tracking IPC
Historique
Le titre affiché était "YouTube" au lieu du titre de la vidéo — remplacé par une récupération asynchrone via yt-dlp
yt-dlp dans le sandbox Flatpak utilisait un mauvais wrapper — remplacé par le binaire standalone officiel
Reprise de lecture
Les URLs YouTube contiennent des paramètres de tracking (pp=, si=) qui changeaient à chaque session — normalisées via urllib.parse pour ne conserver que v= et list=
La position n'était pas appliquée au relancement via IPC — corrigé avec un seek absolute après le premier time-pos valide
Stabilité
Instance unique : plusieurs lancements simultanés pouvaient créer plusieurs fenêtres — corrigé avec Gio.ApplicationFlags.DEFAULT_FLAGS
Nouvelles fonctionnalités
Mode éco WebKit : WebGL et WebAudio désactivés, Shorts redirigés vers MPV — accessible dans les réglages ⚙
Installation native : Makefile + wrapper-native.sh pour une installation sans Flatpak
Détection automatique Flatpak/natif dans updater.py — plus besoin de patch pour les builds natifs (merci Christophe !)
README bilingue français / anglais
Améliorations
La fenêtre WebKit se cache uniquement quand MPV joue réellement — supprime le gap visuel noir entre les deux fenêtres
Détection de fin de lecture accélérée (polling 1s au lieu de 5s) — la fenêtre WebKit revient en ~2s
Socket IPC pré-chauffé utilisé systématiquement — délai de lancement réduit
Navigation
Interface YouTube complète via WebKitGTK — recherche, recommandations, chaînes, Shorts, tout fonctionne comme dans un navigateur classique.
Lecture vidéo
La lecture est déléguée à MPV avec décodage matériel automatique (VAAPI/VDPAU). MPV étant un lecteur natif, les publicités YouTube ne sont pas lues — effet de bord bienvenu, non garanti selon les évolutions de YouTube.
Qualité cible configurable : 480p / 720p / 1080p / 1440p / 2160p
Mode fenêtré ou plein écran, taille ajustable
Retour automatique à l'interface YouTube après la lecture
Historique et reprise
Fonctionne quelle que soit la page YouTube d'origine (page d'accueil, recherche, chaîne…)
Confidentialité
Aucune télémétrie, aucun serveur tiers. Tout reste local : cookies, historique, positions de reprise.
SponsorBlock : Saut automatique des segments sponsorisés dans les vidéos (désactivé par défaut, activable dans les réglages ⚙).
[^] # Re: Alternative à Flatpak ?
Posté par bbs . En réponse au message [v0.1.0] BBS pOpcOrn 🍿 – Client YouTube léger (GTK4 + MPV). Évalué à 2 (+2/-1).
Merci encore pour le PKGBUILD, ça a vraiment lancé la dynamique pour l'installation native !
Depuis ton test, pas mal de choses ont évolué — voici un résumé des changements qui impactent directement ton build :
updater.py — la détection Flatpak/natif est intégrée proprement avec _IS_FLATPAK = os.path.exists("/app") et une méthode _build_cmd() qui adapte les appels automatiquement. Plus besoin de patch.
player.py — le plus important : le socket IPC MPV est maintenant dans ~/.var/app/io.mpv.Mpv/ en mode Flatpak (accessible par les deux sandboxes), et dans XDG_RUNTIME_DIR en mode natif. Ce changement a débloqué la reprise de lecture et le retour de la fenêtre WebKit après la fin naturelle d'une vidéo. Plusieurs correctifs importants : fermeture propre de l'app et de MPV, titre dans l'historique via yt-dlp, détection de fin de lecture par événement IPC.
app.py — signal close-request ajouté pour la fermeture propre, instance unique via Gio.ApplicationFlags, mode éco WebKit (WebGL/WebAudio désactivés, Shorts redirigés vers MPV).
Tout est dans le dépôt. Le Makefile et wrapper-native.sh sont inchangés. Pour ton PKGBUILD, seul le patch updater.py peut être retiré — le reste du build devrait fonctionner tel quel.
[^] # Re: Alternative à Flatpak ?
Posté par bbs . En réponse au message [v0.1.0] BBS pOpcOrn 🍿 – Client YouTube léger (GTK4 + MPV). Évalué à 2 (+1/-0).
Bonjour Christophe,
J'ai bien pris en compte ta remarque. J'ai ajouté un Makefile ainsi qu'un script wrapper-native.sh au dépôt pour faciliter l'installation manuelle et la création de paquets natifs par la communauté.
Pour l'instant, je privilégie officiellement le format Flatpak durant cette phase bêta afin de garantir un environnement d'exécution stable et contrôlé.
Est-ce que cela répond à tes attentes ?