forked from Etamus/NeveAI
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathneve_window.py
More file actions
79 lines (66 loc) · 2.33 KB
/
Copy pathneve_window.py
File metadata and controls
79 lines (66 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"""
Neve AI — Abre a interface em janela de app isolada usando o navegador padrão
do sistema em modo --app (Chrome, Brave, Edge ou qualquer Chromium).
Sem dependências externas além da stdlib do Python.
"""
import os
import re
import subprocess
import webbrowser
import winreg
_BASE_DIR = os.path.dirname(os.path.abspath(__file__))
_PROFILE = os.path.join(_BASE_DIR, "logs", "browser-app")
_URL = "http://localhost:8080"
# ProgIds de navegadores NÃO-Chromium — não suportam --app isolado
_NON_CHROMIUM = {"firefoxurl", "firefoxhtml", "operahtml", "iexplore", "msedgehtm"}
def _chromium_exe_from_progid(prog_id: str) -> str | None:
"""
Lê HKCR\\<ProgId>\\shell\\open\\command e extrai o caminho do .exe.
Retorna None se o ProgId não for de um navegador Chromium.
"""
if prog_id.lower() in _NON_CHROMIUM:
return None
try:
key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT,
rf"{prog_id}\shell\open\command")
cmd, _ = winreg.QueryValueEx(key, "")
winreg.CloseKey(key)
# Extrai caminho entre aspas: "C:\path\browser.exe" ...
m = re.match(r'"([^"]+\.exe)"', cmd, re.IGNORECASE)
if m:
exe = m.group(1)
return exe if os.path.exists(exe) else None
except OSError:
pass
return None
def _find_chromium_browser() -> str | None:
"""Detecta o navegador padrão do sistema e retorna o exe se for Chromium."""
try:
key = winreg.OpenKey(
winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\Shell\Associations"
r"\UrlAssociations\http\UserChoice",
)
prog_id, _ = winreg.QueryValueEx(key, "ProgId")
winreg.CloseKey(key)
return _chromium_exe_from_progid(prog_id)
except OSError:
return None
def main():
browser = _find_chromium_browser()
if browser:
os.makedirs(_PROFILE, exist_ok=True)
subprocess.Popen([
browser,
f"--app={_URL}",
"--window-size=1280,820",
"--no-first-run",
"--no-default-browser-check",
"--disable-extensions",
f"--user-data-dir={_PROFILE}",
])
else:
# Navegador não-Chromium ou não detectado — abre normalmente
webbrowser.open(_URL)
if __name__ == "__main__":
main()