Sync på ID
This commit is contained in:
@@ -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:
|
||||
# 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
|
||||
|
||||
@@ -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 "",
|
||||
|
||||
Reference in New Issue
Block a user