Ctrl K
ComunidadGuías…

raccourci_bureau.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""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,
    )