Initial commit
This commit is contained in:
50
app/userdata.py
Normal file
50
app/userdata.py
Normal 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", [])})
|
||||
Reference in New Issue
Block a user