raccourci_bureau.py
Rama main · réplica de lectura del repositorio original.
"""Raccourci de bureau : ouvrir ou lancer blink2video en un double-clic.
N'installe rien de permanent, contrairement à autostart.py : un seul fichier
posé sur le Bureau, que l'utilisateur retire lui-même (glisser à la
corbeille) le jour où il n'en veut plus. Pas de pendant « off ».
La pose du fichier (Bureau de chaque système, .lnk, .app, .desktop, marque de
confiance de GNOME) est dans nico579_commons.raccourci, la même pour les
quatre applications. Ne reste ici que ce qui est propre à blink2video : la
commande, le dossier de travail et l'icône.
La commande posée dans le raccourci est simplement « start » : blink_cli
(voir la branche « start » de executer()) se comporte déjà comme « open »
quand une instance écoute déjà sur le port configuré, sans rien relancer.
Le même raccourci sert donc aussi bien à démarrer qu'à rouvrir l'interface
en place. « --open-browser » est ajouté ici : absent de la composition
standard (elle n'ouvre jamais de navigateur toute seule, voir DEFAUT dans
autostart.py), il faut l'ajouter explicitement pour ce raccourci-ci, qui n'a
de sens que si l'interface finit par s'afficher.
"""
import subprocess
import sys
from pathlib import Path
from nico579_commons import raccourci
import autostart
import runtime
def _icone() -> Path:
"""Windows prend le .ico, macOS ignore l'icône. Les bureaux Linux
affichent un PNG : à la racine du bundle (blink2video.spec l'y pose), ou
dans assets/ depuis les sources."""
racine = runtime.resource_dir()
ico = racine / "assets" / "blink2video.ico"
if not sys.platform.startswith("linux"):
return ico
for candidat in (racine / "blink2video.png", racine / "assets" / "blink2video.png"):
if candidat.is_file():
return candidat
return ico
def _lancer(commande):
return runtime.lancer(
list(commande), stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL,
stderr=subprocess.PIPE, text=True, errors="replace", check=False)
def creer(simulation: bool = False) -> int:
"""Pose le raccourci sur le Bureau ; 0 si c'est fait (ou simulé)."""
langue = runtime.lire_langue()
return raccourci.creer(
"blink2video",
# autostart.commande() fait exactement ce qu'il faut : self_command, puis
# substitution de pythonw.exe à python.exe depuis les sources (seule
# façon d'obtenir un lancement sans aucune console sous Windows).
autostart.commande(("start", "--open-browser")),
runtime.app_dir(),
_icone(),
"Ouvrir blink2video" if langue == "fr" else "Open blink2video",
# Exécutable en mode console (console=True dans le .spec) : il ne peut
# pas se lancer sans fenêtre, seulement réduite d'emblée sous Windows,
# ou dans un terminal sous Linux.
terminal=True, reduit=True, simulation=simulation, langue=langue,
lancer=_lancer,
)