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