Sync på ID

This commit is contained in:
2026-04-19 22:01:56 +02:00
parent 34040af464
commit f943c5ffba
2 changed files with 23 additions and 6 deletions

View File

@@ -199,12 +199,24 @@ def push(
})
# ── Playlister ────────────────────────────────────────────────────────────
# VIGTIGT: Match altid på local_id (= api_project_id på klienten),
# aldrig på navn — navn er ikke unikt og giver duplikater.
playlist_id_map = {}
for pl in payload.playlists:
existing = db.query(Project).filter_by(
owner_id=me.id, name=pl.name
).first()
# Prøv først at finde via server-ID (local_id er klientens lokale db-id
# som tidligere er returneret som server-ID via playlist_id_map)
existing = None
if pl.local_id:
existing = db.query(Project).filter_by(
id=pl.local_id, owner_id=me.id
).first()
# Fallback: navn — kun hvis vi aldrig har set denne liste før
if not existing:
existing = db.query(Project).filter_by(
owner_id=me.id, name=pl.name
).first()
if existing:
existing.name = pl.name
existing.description = pl.description
existing.visibility = pl.visibility
# Opdater kun sange hvis push faktisk har sange med

View File

@@ -223,11 +223,13 @@ class SyncManager:
"note": row["note"] or "",
})
# Playlister (kun lokalt oprettede — IKKE dem der kom fra serveren)
# Playlister — send alle (nye og eksisterende) til serveren.
# Brug api_project_id som local_id hvis den kendes — så serveren
# kan matche på ID og ikke oprette duplikater.
playlists = []
for pl in conn.execute(
"SELECT id, name, description, tags, api_project_id FROM playlists "
"WHERE name != '__aktiv__' AND (api_project_id IS NULL OR api_project_id = '')"
"WHERE name != '__aktiv__' AND is_deleted = 0"
).fetchall():
pl_songs = []
for ps in conn.execute("""
@@ -246,8 +248,11 @@ class SyncManager:
"is_workshop": bool(ps["is_workshop"]),
"dance_override": ps["dance_override"] or "",
})
# Brug api_project_id som local_id hvis den kendes —
# serveren bruger dette til at finde eksisterende liste
local_id = pl["api_project_id"] or str(pl["id"])
playlists.append({
"local_id": str(pl["id"]),
"local_id": local_id,
"name": pl["name"],
"description": pl["description"] or "",
"tags": pl["tags"] or "",