Adresy a data podle systému, ne podle Linuxu
Než začneme rozdávat binárky pro macOS a Windows, musí se na nich chovat rozumně to, co dosud počítalo s Linuxem. Adresy rozhraní se hledaly linuxovým ioctl. Na Windows chybí fcntl, na macOS to číslo znamená něco jiného, takže obojí propadlo až na poslední zálohu přes hostname — a ta na macOS vrátí jednu adresu. Tabule by tam nabídla jedinou volbu, přesně to, co jsme minule opravovali. Přibyla mezizáloha přes ifconfig; spouští se jen tam, kde ioctl nic nenašel, takže na Linuxu se neplatí nic. Parsování je zvlášť jako čistá funkce, ať jde otestovat i bez macOS pod rukama. Databáze z binárky mířila do XDG adresáře na všech systémech. Na Windows by to znamenalo C:\Users\...\.local\share\, což tam nikdo nečeká. Teď se volí podle systému: LOCALAPPDATA, Library/Application Support, XDG. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
298919d71b
commit
26338bfa29
4 files changed
+118
-5
No files matched your search
+13
-3
@@ -16,20 +16,30 @@ from pathlib import Path
|
||||
|
||||
from core import FINAL_SCORE, Game, Turn
|
||||
|
||||
def data_home() -> Path:
|
||||
"""Adresář, kam podle zvyklostí systému patří data aplikací."""
|
||||
if sys.platform == "win32":
|
||||
local = os.environ.get("LOCALAPPDATA")
|
||||
return Path(local) if local else Path.home() / "AppData" / "Local"
|
||||
if sys.platform == "darwin":
|
||||
return Path.home() / "Library" / "Application Support"
|
||||
return Path(os.environ.get("XDG_DATA_HOME")
|
||||
or Path.home() / ".local" / "share")
|
||||
|
||||
|
||||
def default_db() -> Path:
|
||||
"""Kam se ukládá databáze.
|
||||
|
||||
Ze zdrojáků do pracovního adresáře — dá se tak mít víc rozehraných
|
||||
sad vedle sebe a je vidět, s čím se pracuje. Z binárky do datového
|
||||
adresáře podle XDG: binárka se spouští odkudkoli a rozbaluje se do
|
||||
adresáře podle systému: binárka se spouští odkudkoli a rozbaluje se do
|
||||
dočasného adresáře, takže relativní cesta by databázi rozsypala po disku.
|
||||
"""
|
||||
chosen = os.environ.get("DICE_DB")
|
||||
if chosen:
|
||||
return Path(chosen)
|
||||
if getattr(sys, "frozen", False):
|
||||
share = os.environ.get("XDG_DATA_HOME") or Path.home() / ".local" / "share"
|
||||
return Path(share) / "kostky" / "dice.db"
|
||||
return data_home() / "kostky" / "dice.db"
|
||||
return Path("dice.db")
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user