Sync playlister

This commit is contained in:
2026-04-13 13:53:47 +02:00
parent c3623962c5
commit e86173f7ec
2 changed files with 68 additions and 6 deletions

View File

@@ -266,9 +266,33 @@ def pull(
]
})
# Egne playlister
my_playlists = []
for p in db.query(Project).filter_by(owner_id=me.id).all():
songs_out = []
for ps in p.project_songs:
song = db.query(Song).filter_by(id=ps.song_id).first()
if not song:
continue
songs_out.append({
"title": song.title,
"artist": song.artist,
"position": ps.position,
"status": ps.status,
"is_workshop": ps.is_workshop,
"dance_override": ps.dance_override or "",
})
my_playlists.append({
"server_id": p.id,
"name": p.name,
"description": p.description or "",
"songs": sorted(songs_out, key=lambda x: x["position"]),
})
return {
"levels": levels,
"dances": dances,
"community": community,
"shared": shared,
"levels": levels,
"dances": dances,
"community": community,
"shared": shared,
"my_playlists": my_playlists,
}

View File

@@ -220,11 +220,11 @@ class SyncManager:
# ── Anvend pull ───────────────────────────────────────────────────────────
def _apply_pull(self, data: dict):
"""Gem server-data lokalt — opdaterer dans-info og community forslag."""
"""Gem server-data lokalt — opdaterer dans-info og importerer playlister."""
conn = sqlite3.connect(self._db_path)
conn.row_factory = sqlite3.Row
# Opdater dans-info fra server (koreograf, links, noter)
# Opdater dans-info fra server
for d in data.get("dances", []):
if not d.get("name"):
continue
@@ -241,5 +241,43 @@ class SyncManager:
""", (d.get("choreographer",""), d.get("video_url",""),
d.get("stepsheet_url",""), existing["id"]))
# Importer egne playlister fra server hvis de ikke findes lokalt
for pl in data.get("my_playlists", []):
server_id = pl.get("server_id")
name = pl.get("name", "")
if not server_id or not name:
continue
# Tjek om listen allerede eksisterer lokalt
existing = conn.execute(
"SELECT id FROM playlists WHERE api_project_id=?", (server_id,)
).fetchone()
if existing:
continue # Allerede importeret — spring over
# Opret liste
cur = conn.execute(
"INSERT INTO playlists (name, description, api_project_id, is_linked, server_permission) "
"VALUES (?,?,?,1,'edit')",
(name, pl.get("description",""), server_id)
)
pl_id = cur.lastrowid
# Indsæt sange med lokal matching
for song_data in pl.get("songs", []):
local = conn.execute(
"SELECT id FROM songs WHERE title=? AND artist=? AND file_missing=0 LIMIT 1",
(song_data["title"], song_data["artist"])
).fetchone()
if local:
conn.execute("""
INSERT INTO playlist_songs
(playlist_id, song_id, position, status, is_workshop, dance_override)
VALUES (?,?,?,?,?,?)
""", (pl_id, local["id"], song_data["position"],
song_data.get("status","pending"),
1 if song_data.get("is_workshop") else 0,
song_data.get("dance_override","") or ""))
conn.commit()
conn.close()