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 ──────────────────────────────────────────────────────────── # ── 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 = {} playlist_id_map = {}
for pl in payload.playlists: for pl in payload.playlists:
existing = db.query(Project).filter_by( # Prøv først at finde via server-ID (local_id er klientens lokale db-id
owner_id=me.id, name=pl.name # som tidligere er returneret som server-ID via playlist_id_map)
).first() 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: if existing:
existing.name = pl.name
existing.description = pl.description existing.description = pl.description
existing.visibility = pl.visibility existing.visibility = pl.visibility
# Opdater kun sange hvis push faktisk har sange med # Opdater kun sange hvis push faktisk har sange med

View File

@@ -223,11 +223,13 @@ class SyncManager:
"note": row["note"] or "", "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 = [] playlists = []
for pl in conn.execute( for pl in conn.execute(
"SELECT id, name, description, tags, api_project_id FROM playlists " "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(): ).fetchall():
pl_songs = [] pl_songs = []
for ps in conn.execute(""" for ps in conn.execute("""
@@ -246,8 +248,11 @@ class SyncManager:
"is_workshop": bool(ps["is_workshop"]), "is_workshop": bool(ps["is_workshop"]),
"dance_override": ps["dance_override"] or "", "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({ playlists.append({
"local_id": str(pl["id"]), "local_id": local_id,
"name": pl["name"], "name": pl["name"],
"description": pl["description"] or "", "description": pl["description"] or "",
"tags": pl["tags"] or "", "tags": pl["tags"] or "",