Bedre sync
This commit is contained in:
@@ -323,22 +323,30 @@ class SyncManager:
|
||||
conn.execute("PRAGMA journal_mode=WAL")
|
||||
|
||||
try:
|
||||
# Opdater dans-info
|
||||
# Synkroniser danse fra server — opret nye, opdater eksisterende
|
||||
for d in data.get("dances", []):
|
||||
if not d.get("name"):
|
||||
continue
|
||||
choreo = d.get("choreographer", "") or ""
|
||||
existing = conn.execute(
|
||||
"SELECT id FROM dances WHERE name=? COLLATE NOCASE", (d["name"],)
|
||||
"SELECT id FROM dances WHERE name=? COLLATE NOCASE "
|
||||
"AND choreographer=? LIMIT 1",
|
||||
(d["name"], choreo)
|
||||
).fetchone()
|
||||
if existing and (d.get("choreographer") or d.get("video_url")):
|
||||
if existing:
|
||||
conn.execute("""
|
||||
UPDATE dances SET
|
||||
choreographer = CASE WHEN choreographer='' THEN ? ELSE choreographer END,
|
||||
video_url = CASE WHEN video_url='' THEN ? ELSE video_url END,
|
||||
stepsheet_url = CASE WHEN stepsheet_url='' THEN ? ELSE stepsheet_url END
|
||||
WHERE id=?
|
||||
""", (d.get("choreographer",""), d.get("video_url",""),
|
||||
d.get("stepsheet_url",""), existing["id"]))
|
||||
""", (d.get("video_url",""), d.get("stepsheet_url",""), existing["id"]))
|
||||
else:
|
||||
conn.execute(
|
||||
"INSERT OR IGNORE INTO dances (name, choreographer, video_url, stepsheet_url, notes) "
|
||||
"VALUES (?,?,?,?,?)",
|
||||
(d["name"], choreo,
|
||||
d.get("video_url",""), d.get("stepsheet_url",""), d.get("notes",""))
|
||||
)
|
||||
|
||||
# Hent soft-slettede server-IDs så vi springer dem over
|
||||
deleted_server_ids = {
|
||||
@@ -468,6 +476,49 @@ class SyncManager:
|
||||
song_data.get("dance_override","") or ""))
|
||||
position += 1
|
||||
|
||||
# Importer sang-dans tags fra server
|
||||
for st in data.get("song_tags", []):
|
||||
server_song_id = st.get("song_id", "")
|
||||
dance_name = st.get("dance_name", "")
|
||||
dance_order = st.get("dance_order", 1)
|
||||
choreo = st.get("choreographer", "") or ""
|
||||
if not server_song_id or not dance_name:
|
||||
continue
|
||||
|
||||
# Find lokal sang
|
||||
local_song = conn.execute(
|
||||
"SELECT id FROM songs WHERE id=?", (server_song_id,)
|
||||
).fetchone()
|
||||
if not local_song:
|
||||
continue
|
||||
|
||||
# Find dans
|
||||
dance_row = conn.execute(
|
||||
"SELECT id FROM dances WHERE name=? COLLATE NOCASE "
|
||||
"AND choreographer=? LIMIT 1",
|
||||
(dance_name, choreo)
|
||||
).fetchone()
|
||||
if not dance_row:
|
||||
cur = conn.execute(
|
||||
"INSERT OR IGNORE INTO dances (name, choreographer) VALUES (?,?)",
|
||||
(dance_name, choreo)
|
||||
)
|
||||
dance_id = cur.lastrowid
|
||||
else:
|
||||
dance_id = dance_row["id"]
|
||||
|
||||
# Tilføj sang-dans tag hvis ikke allerede der
|
||||
existing_sd = conn.execute(
|
||||
"SELECT id FROM song_dances WHERE song_id=? AND dance_id=?",
|
||||
(server_song_id, dance_id)
|
||||
).fetchone()
|
||||
if not existing_sd:
|
||||
conn.execute(
|
||||
"INSERT OR IGNORE INTO song_dances (id, song_id, dance_id, dance_order) "
|
||||
"VALUES (?,?,?,?)",
|
||||
(str(uuid.uuid4()), server_song_id, dance_id, dance_order)
|
||||
)
|
||||
|
||||
conn.commit()
|
||||
|
||||
except Exception:
|
||||
|
||||
Reference in New Issue
Block a user