Initial commit

This commit is contained in:
2026-10-09 02:48:24 +02:00
commit e05d973a8d
133 changed files with 101507 additions and 0 deletions

50
app/userdata.py Normal file
View File

@@ -0,0 +1,50 @@
"""Per-user notes, tags and favorites for sounds (user data folder, never the game folder)."""
import json
import os
from ackit.paths import user_dir
class UserData:
def __init__(self, path=None):
self.path = path or os.path.join(user_dir("data"), "sound_notes.json")
try:
self.data = json.load(open(self.path, encoding="utf-8"))
except (OSError, ValueError):
self.data = {}
def save(self):
tmp = self.path + ".tmp"
with open(tmp, "w", encoding="utf-8") as f:
json.dump(self.data, f, indent=1, ensure_ascii=False)
os.replace(tmp, self.path)
def _get(self, key):
return self.data.get(key, {})
def note(self, key):
return self._get(key).get("note", "")
def tags(self, key):
return self._get(key).get("tags", [])
def favorite(self, key):
return bool(self._get(key).get("fav"))
def update(self, key, note=None, tags=None, fav=None):
d = dict(self._get(key))
if note is not None:
d["note"] = note.strip()
if tags is not None:
d["tags"] = sorted({t.strip() for t in tags if t.strip()})
if fav is not None:
d["fav"] = bool(fav)
d = {k: v for k, v in d.items() if v}
if d:
self.data[key] = d
else:
self.data.pop(key, None)
self.save()
def all_tags(self):
return sorted({t for d in self.data.values() for t in d.get("tags", [])})