feat: target running Outlook PWA instance directly via app-id shortcut
This commit is contained in:
parent
946cbcae91
commit
a1f8b4412e
1 changed files with 36 additions and 4 deletions
|
|
@ -29,6 +29,10 @@ import webbrowser
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
import re
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
def find_chromium_cmd() -> list:
|
def find_chromium_cmd() -> list:
|
||||||
"""Détecte la commande Chromium disponible pour ouvrir la session PWA sous Ubuntu."""
|
"""Détecte la commande Chromium disponible pour ouvrir la session PWA sous Ubuntu."""
|
||||||
candidates = [
|
candidates = [
|
||||||
|
|
@ -40,11 +44,26 @@ def find_chromium_cmd() -> list:
|
||||||
]
|
]
|
||||||
for cmd in candidates:
|
for cmd in candidates:
|
||||||
if shutil.which(cmd):
|
if shutil.which(cmd):
|
||||||
# Vérifier si on peut ajouter le profil Default
|
|
||||||
return [cmd, "--profile-directory=Default"]
|
return [cmd, "--profile-directory=Default"]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def find_pwa_app_id() -> Optional[str]:
|
||||||
|
"""Recherche l'App-ID de la PWA Outlook dans ~/.local/share/applications/"""
|
||||||
|
app_dir = Path.home() / ".local" / "share" / "applications"
|
||||||
|
if app_dir.exists():
|
||||||
|
for desktop_file in app_dir.glob("*outlook*.desktop"):
|
||||||
|
try:
|
||||||
|
content = desktop_file.read_text(encoding="utf-8")
|
||||||
|
match = re.search(r"--app-id=([a-zA-Z0-9]+)", content)
|
||||||
|
if match:
|
||||||
|
return match.group(1)
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
# Fallback sur l'App ID standard Outlook PWA Chromium
|
||||||
|
return "eoficlgicibekocmfdomjbfnjmehnhcd"
|
||||||
|
|
||||||
|
|
||||||
def create_eml_draft(to_email: str, subject: str, body: str, output_path: Path):
|
def create_eml_draft(to_email: str, subject: str, body: str, output_path: Path):
|
||||||
"""Génère un fichier .eml standard marqué comme brouillon (X-Unsent: 1)."""
|
"""Génère un fichier .eml standard marqué comme brouillon (X-Unsent: 1)."""
|
||||||
msg = email.message.EmailMessage()
|
msg = email.message.EmailMessage()
|
||||||
|
|
@ -152,7 +171,12 @@ def main():
|
||||||
|
|
||||||
# Mode PWA (Défaut)
|
# Mode PWA (Défaut)
|
||||||
chromium_cmd = find_chromium_cmd()
|
chromium_cmd = find_chromium_cmd()
|
||||||
if chromium_cmd:
|
pwa_app_id = find_pwa_app_id()
|
||||||
|
|
||||||
|
if chromium_cmd and pwa_app_id:
|
||||||
|
print(f"Session PWA Outlook détectée (App ID : {pwa_app_id})")
|
||||||
|
print("Les brouillons vont être envoyés directement dans votre fenêtre Outlook ouverte.")
|
||||||
|
elif chromium_cmd:
|
||||||
print(f"Navigateur détecté pour la session PWA : {' '.join(chromium_cmd)}")
|
print(f"Navigateur détecté pour la session PWA : {' '.join(chromium_cmd)}")
|
||||||
else:
|
else:
|
||||||
print("Utilisation du navigateur système par défaut.")
|
print("Utilisation du navigateur système par défaut.")
|
||||||
|
|
@ -193,8 +217,16 @@ def main():
|
||||||
else:
|
else:
|
||||||
if chromium_cmd:
|
if chromium_cmd:
|
||||||
try:
|
try:
|
||||||
|
if pwa_app_id:
|
||||||
|
cmd = chromium_cmd + [
|
||||||
|
f"--app-id={pwa_app_id}",
|
||||||
|
f"--app-launch-url-for-shortcuts-menu-item={deeplink}",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
cmd = chromium_cmd + [deeplink]
|
||||||
|
|
||||||
subprocess.Popen(
|
subprocess.Popen(
|
||||||
chromium_cmd + [deeplink],
|
cmd,
|
||||||
stdout=subprocess.DEVNULL,
|
stdout=subprocess.DEVNULL,
|
||||||
stderr=subprocess.DEVNULL,
|
stderr=subprocess.DEVNULL,
|
||||||
)
|
)
|
||||||
|
|
@ -203,7 +235,7 @@ def main():
|
||||||
else:
|
else:
|
||||||
webbrowser.open(deeplink)
|
webbrowser.open(deeplink)
|
||||||
|
|
||||||
print(" -> Brouillon ouvert dans Outlook !")
|
print(" -> Brouillon ouvert dans votre fenêtre Outlook !")
|
||||||
|
|
||||||
if not args.step and idx < len(drafts) and not args.dry_run:
|
if not args.step and idx < len(drafts) and not args.dry_run:
|
||||||
time.sleep(args.delay)
|
time.sleep(args.delay)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue