feature/integracion-cpanel-asrecovery
This commit is contained in:
88
app/config/autostart.py
Normal file
88
app/config/autostart.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""Registro de arranque automático al login (Windows / Linux)."""
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from ..constants import APP_DIR, CONFIG_DIR, IS_WINDOWS
|
||||
from .env_loader import _env_bool, load_env_file
|
||||
|
||||
|
||||
def _marker_path() -> Path:
|
||||
return CONFIG_DIR / ".autostart_registered"
|
||||
|
||||
|
||||
def _executable_command() -> tuple[str, list[str]]:
|
||||
if getattr(sys, "frozen", False):
|
||||
exe = Path(sys.executable).resolve()
|
||||
return str(exe), ["--start-engine"]
|
||||
runner = (APP_DIR / "runner.py").resolve()
|
||||
return sys.executable, [str(runner), "--start-engine"]
|
||||
|
||||
|
||||
def _register_windows(exe: str, args: list[str]) -> None:
|
||||
task_name = "CloudRestoreAS"
|
||||
arg_str = " ".join(f'"{a}"' if " " in a else a for a in args)
|
||||
tr = f'"{exe}" {arg_str}'
|
||||
check = subprocess.run(
|
||||
["schtasks", "/Query", "/TN", task_name],
|
||||
capture_output=True,
|
||||
creationflags=subprocess.CREATE_NO_WINDOW if hasattr(subprocess, "CREATE_NO_WINDOW") else 0,
|
||||
)
|
||||
if check.returncode == 0:
|
||||
return
|
||||
subprocess.run(
|
||||
[
|
||||
"schtasks",
|
||||
"/Create",
|
||||
"/TN",
|
||||
task_name,
|
||||
"/TR",
|
||||
tr,
|
||||
"/SC",
|
||||
"ONLOGON",
|
||||
"/RL",
|
||||
"LIMITED",
|
||||
"/F",
|
||||
],
|
||||
check=False,
|
||||
creationflags=subprocess.CREATE_NO_WINDOW if hasattr(subprocess, "CREATE_NO_WINDOW") else 0,
|
||||
)
|
||||
|
||||
|
||||
def _register_linux(exe: str, args: list[str]) -> None:
|
||||
autostart_dir = Path.home() / ".config" / "autostart"
|
||||
autostart_dir.mkdir(parents=True, exist_ok=True)
|
||||
desktop = autostart_dir / "cloudrestoreas.desktop"
|
||||
if desktop.exists():
|
||||
return
|
||||
exec_line = " ".join([exe, *args])
|
||||
content = f"""[Desktop Entry]
|
||||
Type=Application
|
||||
Name=CloudRestoreAS
|
||||
Comment=Restauración automática SQL Server
|
||||
Exec={exec_line}
|
||||
Path={APP_DIR}
|
||||
Terminal=false
|
||||
X-GNOME-Autostart-enabled=true
|
||||
"""
|
||||
desktop.write_text(content, encoding="utf-8")
|
||||
|
||||
|
||||
def register_autostart_if_requested() -> None:
|
||||
load_env_file()
|
||||
if not _env_bool("CLOUDRESTORE_REGISTER_AUTOSTART", True):
|
||||
return
|
||||
if _marker_path().exists():
|
||||
return
|
||||
|
||||
exe, args = _executable_command()
|
||||
try:
|
||||
if IS_WINDOWS:
|
||||
_register_windows(exe, args)
|
||||
else:
|
||||
_register_linux(exe, args)
|
||||
_marker_path().write_text("ok", encoding="utf-8")
|
||||
except OSError:
|
||||
pass
|
||||
Reference in New Issue
Block a user