add db versioning

This commit is contained in:
Anthony Samms
2025-12-18 11:45:24 -05:00
parent f827e61b83
commit 627558c489
2 changed files with 34 additions and 7 deletions

View File

@@ -17,6 +17,7 @@ from raylib.defines import (
from libs.audio import audio from libs.audio import audio
from libs.global_data import PlayerNum from libs.global_data import PlayerNum
from libs.screen import Screen from libs.screen import Screen
from libs.song_hash import DB_VERSION
from libs.tja import TJAParser from libs.tja import TJAParser
from libs.utils import ( from libs.utils import (
force_dedicated_gpu, force_dedicated_gpu,
@@ -118,6 +119,13 @@ def create_song_db():
"""Create the scores database if it doesn't exist""" """Create the scores database if it doesn't exist"""
with sqlite3.connect('scores.db') as con: with sqlite3.connect('scores.db') as con:
cursor = con.cursor() cursor = con.cursor()
cursor.execute('''
SELECT name FROM sqlite_master
WHERE type='table' AND name='Scores'
''')
table_exists = cursor.fetchone() is not None
create_table_query = ''' create_table_query = '''
CREATE TABLE IF NOT EXISTS Scores ( CREATE TABLE IF NOT EXISTS Scores (
hash TEXT PRIMARY KEY, hash TEXT PRIMARY KEY,
@@ -134,8 +142,14 @@ def create_song_db():
); );
''' '''
cursor.execute(create_table_query) cursor.execute(create_table_query)
if not table_exists:
cursor.execute(f'PRAGMA user_version = {DB_VERSION}')
logger.info(f"Scores database created successfully with version {DB_VERSION}")
else:
logger.info("Scores database already exists")
con.commit() con.commit()
logger.info("Scores database created successfully")
def update_camera_for_window_size(camera, virtual_width, virtual_height): def update_camera_for_window_size(camera, virtual_width, virtual_height):
"""Update camera zoom, offset, scale, and rotation to maintain aspect ratio""" """Update camera zoom, offset, scale, and rotation to maintain aspect ratio"""

View File

@@ -12,6 +12,7 @@ from libs.utils import global_data
from libs.config import get_config from libs.config import get_config
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
DB_VERSION = 1
def diff_hashes_object_hook(obj): def diff_hashes_object_hook(obj):
if "diff_hashes" in obj: if "diff_hashes" in obj:
@@ -25,6 +26,18 @@ class DiffHashesDecoder(json.JSONDecoder):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(object_hook=diff_hashes_object_hook, *args, **kwargs) super().__init__(object_hook=diff_hashes_object_hook, *args, **kwargs)
def get_db_version():
with sqlite3.connect('scores.db') as con:
cursor = con.cursor()
cursor.execute('PRAGMA user_version')
version = cursor.fetchone()[0]
return version
def update_db_version():
with sqlite3.connect('scores.db') as con:
cursor = con.cursor()
cursor.execute(f'PRAGMA user_version = {DB_VERSION}')
def read_tjap3_score(input_file: Path): def read_tjap3_score(input_file: Path):
"""Read a TJAPlayer3 score.ini file and return the scores and clears.""" """Read a TJAPlayer3 score.ini file and return the scores and clears."""
score_ini = configparser.ConfigParser() score_ini = configparser.ConfigParser()
@@ -70,12 +83,12 @@ def build_song_hashes(output_dir=Path("cache")):
if output_path.exists(): if output_path.exists():
with open(output_path, "r", encoding="utf-8") as f: with open(output_path, "r", encoding="utf-8") as f:
song_hashes = json.load(f, cls=DiffHashesDecoder) song_hashes = json.load(f, cls=DiffHashesDecoder)
''' if get_db_version() != DB_VERSION:
for hash in song_hashes: update_db_version()
entry = song_hashes[hash][0] for hash in song_hashes:
for diff in entry["diff_hashes"]: entry = song_hashes[hash][0]
db_updates.append((entry["diff_hashes"][diff], entry["title"]["en"], entry["title"].get("ja", ""), int(diff))) for diff in entry["diff_hashes"]:
''' db_updates.append((entry["diff_hashes"][diff], entry["title"]["en"], entry["title"].get("ja", ""), int(diff)))
if index_path.exists(): if index_path.exists():
with open(index_path, "r", encoding="utf-8") as f: with open(index_path, "r", encoding="utf-8") as f: