Extrait les appels macOS derriere le contrat Systeme
- systeme/macos.py : SystemeMacOS (sons afplay, modificateurs Quartz, chemins, verrou d'instance fcntl) implementant le contrat Systeme. - systeme/__init__.py : choisir_systeme() fabrique selon sys.platform, refuse clairement une plateforme inconnue. - core.py : verrou d'instance (fcntl, LOCK_PATH, acquire_single_instance_lock) retire ; import os retire aussi, verifie inutilise ailleurs dans le fichier. - app.py : passe par choisir_systeme().acquerir_verrou_instance(dossier_donnees() + instance.lock) au lieu de core.acquire_single_instance_lock. Seul changement dans ce fichier, nom de fichier inchange. - tests/test_single_instance.py : reoriente vers choisir_systeme(), memes assertions et meme nombre de tests. - tests/test_systeme.py (nouveau) : verrou du test_le_verrou_refuse_une_seconde_prise garde desormais la reference au premier verrou — sans variable, CPython le garbage-collectait entre les deux assert (refcount 0 -> fermeture -> verrou relache), le test passait pour la mauvaise raison. 89 tests verts (84 + 5).
This commit is contained in:
@@ -12,6 +12,7 @@ native est de toute façon minuscule pour nos besoins : une icône, deux items d
|
||||
Zonza vit dans la barre de menu, jamais dans le Dock : c'est le LSUIElement de
|
||||
l'Info.plist (posé par build_app.sh) qui s'en charge.
|
||||
"""
|
||||
import os
|
||||
import threading
|
||||
|
||||
from objc import super
|
||||
@@ -28,8 +29,9 @@ from PyObjCTools import AppHelper
|
||||
from pynput import keyboard
|
||||
|
||||
from controller import ZonzaController
|
||||
from core import CONFIG, acquire_single_instance_lock, validate_config
|
||||
from core import CONFIG, validate_config
|
||||
from pulse_window import PulseWindow
|
||||
from systeme import choisir_systeme
|
||||
|
||||
_STATE_TITLES = {
|
||||
"idle": "🎙️",
|
||||
@@ -128,8 +130,11 @@ class ZonzaApp(NSObject):
|
||||
|
||||
def main():
|
||||
# une seule instance a la fois : sinon deux modeles en RAM et la meme
|
||||
# hotkey captee deux fois (cf acquire_single_instance_lock).
|
||||
lock = acquire_single_instance_lock()
|
||||
# hotkey captee deux fois (cf systeme.acquerir_verrou_instance).
|
||||
systeme = choisir_systeme()
|
||||
lock = systeme.acquerir_verrou_instance(
|
||||
os.path.join(systeme.dossier_donnees(), "instance.lock")
|
||||
)
|
||||
if lock is None:
|
||||
print("[garde] une autre instance de Zonza tourne deja — arret.")
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user