Næster version
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
"""
|
||||
share_dialog.py — Del en playliste med andre brugere eller sæt den public.
|
||||
share_dialog.py — Forenklet del-dialog.
|
||||
Kun ejer kan dele. Delte brugere får listen ved næste sync.
|
||||
"""
|
||||
from PyQt6.QtWidgets import (
|
||||
QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit,
|
||||
@@ -19,7 +20,7 @@ class ShareDialog(QDialog):
|
||||
self._token = token
|
||||
|
||||
self.setWindowTitle(f"Del — {playlist_name}")
|
||||
self.setMinimumWidth(480)
|
||||
self.setMinimumWidth(440)
|
||||
self._build_ui()
|
||||
self._load_shares()
|
||||
self._load_visibility()
|
||||
@@ -42,9 +43,9 @@ class ShareDialog(QDialog):
|
||||
vis_layout.setContentsMargins(10, 8, 10, 8)
|
||||
vis_layout.addWidget(QLabel("Synlighed:"))
|
||||
self._vis_combo = QComboBox()
|
||||
self._vis_combo.addItem("🔒 Privat (kun mig)", "private")
|
||||
self._vis_combo.addItem("👥 Delt (inviterede)", "shared")
|
||||
self._vis_combo.addItem("🌐 Public (alle kan se)", "public")
|
||||
self._vis_combo.addItem("Privat — kun dig", "private")
|
||||
self._vis_combo.addItem("Delt — kun inviterede", "shared")
|
||||
self._vis_combo.addItem("Public — hjemmesiden", "public")
|
||||
vis_layout.addWidget(self._vis_combo, stretch=1)
|
||||
btn_vis = QPushButton("Gem")
|
||||
btn_vis.setFixedHeight(28)
|
||||
@@ -52,38 +53,34 @@ class ShareDialog(QDialog):
|
||||
vis_layout.addWidget(btn_vis)
|
||||
layout.addWidget(vis_frame)
|
||||
|
||||
# Invitér bruger
|
||||
# Del med bruger
|
||||
inv_frame = QFrame()
|
||||
inv_frame.setObjectName("track_display")
|
||||
inv_layout = QVBoxLayout(inv_frame)
|
||||
inv_layout.setContentsMargins(10, 8, 10, 8)
|
||||
inv_layout.setSpacing(6)
|
||||
inv_layout.addWidget(QLabel("Invitér via e-mail:"))
|
||||
|
||||
inv_layout.addWidget(QLabel("Del med (e-mail):"))
|
||||
row = QHBoxLayout()
|
||||
self._email_input = QLineEdit()
|
||||
self._email_input.setPlaceholderText("bruger@eksempel.dk")
|
||||
row.addWidget(self._email_input)
|
||||
self._perm_combo = QComboBox()
|
||||
self._perm_combo.addItem("Se", "view")
|
||||
self._perm_combo.addItem("Kopiere", "copy")
|
||||
self._perm_combo.addItem("Redigere","edit")
|
||||
self._perm_combo.setFixedWidth(90)
|
||||
row.addWidget(self._perm_combo)
|
||||
btn_inv = QPushButton("Invitér")
|
||||
btn_inv = QPushButton("Del")
|
||||
btn_inv.setFixedHeight(28)
|
||||
btn_inv.clicked.connect(self._invite)
|
||||
row.addWidget(btn_inv)
|
||||
inv_layout.addLayout(row)
|
||||
note = QLabel("Brugeren får listen ved næste synkronisering.\nKun du kan redigere listen.")
|
||||
note.setObjectName("result_count")
|
||||
note.setWordWrap(True)
|
||||
inv_layout.addWidget(note)
|
||||
layout.addWidget(inv_frame)
|
||||
|
||||
# Liste over delinger
|
||||
# Liste
|
||||
lbl = QLabel("Delt med:")
|
||||
lbl.setObjectName("track_meta")
|
||||
layout.addWidget(lbl)
|
||||
|
||||
self._shares_list = QListWidget()
|
||||
self._shares_list.setMaximumHeight(150)
|
||||
self._shares_list.setMaximumHeight(120)
|
||||
layout.addWidget(self._shares_list)
|
||||
|
||||
btn_remove = QPushButton("✕ Fjern valgt deling")
|
||||
@@ -116,6 +113,19 @@ class ShareDialog(QDialog):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def _set_visibility(self):
|
||||
vis = self._vis_combo.currentData()
|
||||
try:
|
||||
import urllib.request, json
|
||||
req = urllib.request.Request(
|
||||
f"{self._server_url}/sharing/playlists/{self._playlist_id}/visibility?visibility={vis}",
|
||||
data=b"", headers=self._headers(), method="PATCH"
|
||||
)
|
||||
urllib.request.urlopen(req, timeout=8)
|
||||
self._status.setText(f"✓ Synlighed gemt")
|
||||
except Exception as e:
|
||||
self._status.setText(f"⚠ {e}")
|
||||
|
||||
def _load_shares(self):
|
||||
try:
|
||||
import urllib.request, json
|
||||
@@ -127,52 +137,30 @@ class ShareDialog(QDialog):
|
||||
shares = json.loads(resp.read())
|
||||
self._shares_list.clear()
|
||||
for s in shares:
|
||||
perm = {"view": "Se", "copy": "Kopiere", "edit": "Redigere"}.get(
|
||||
s["permission"], s["permission"]
|
||||
)
|
||||
accepted = "✓" if s["accepted"] else "⏳"
|
||||
item = QListWidgetItem(f"{accepted} {s['email']} — {perm}")
|
||||
item = QListWidgetItem(s["email"])
|
||||
item.setData(Qt.ItemDataRole.UserRole, s["id"])
|
||||
self._shares_list.addItem(item)
|
||||
except Exception as e:
|
||||
self._status.setText(f"Kunne ikke hente delinger: {e}")
|
||||
|
||||
def _set_visibility(self):
|
||||
vis = self._vis_combo.currentData()
|
||||
try:
|
||||
import urllib.request, json
|
||||
req = urllib.request.Request(
|
||||
f"{self._server_url}/sharing/playlists/{self._playlist_id}/visibility?visibility={vis}",
|
||||
data=b"",
|
||||
headers=self._headers(),
|
||||
method="PATCH"
|
||||
)
|
||||
with urllib.request.urlopen(req, timeout=8) as resp:
|
||||
json.loads(resp.read())
|
||||
self._status.setText(f"✓ Synlighed sat til {self._vis_combo.currentText()}")
|
||||
except Exception as e:
|
||||
self._status.setText(f"⚠ Fejl: {e}")
|
||||
|
||||
def _invite(self):
|
||||
email = self._email_input.text().strip()
|
||||
perm = self._perm_combo.currentData()
|
||||
if not email or "@" not in email:
|
||||
self._status.setText("⚠ Ugyldig e-mailadresse")
|
||||
return
|
||||
try:
|
||||
import urllib.request, json
|
||||
data = json.dumps({"email": email, "permission": perm}).encode()
|
||||
data = json.dumps({"email": email}).encode()
|
||||
req = urllib.request.Request(
|
||||
f"{self._server_url}/sharing/playlists/{self._playlist_id}/share",
|
||||
data=data, headers=self._headers(), method="POST"
|
||||
)
|
||||
with urllib.request.urlopen(req, timeout=8) as resp:
|
||||
json.loads(resp.read())
|
||||
urllib.request.urlopen(req, timeout=8)
|
||||
self._email_input.clear()
|
||||
self._status.setText(f"✓ Invitation sendt til {email}")
|
||||
self._status.setText(f"✓ Delt med {email}")
|
||||
self._load_shares()
|
||||
except Exception as e:
|
||||
self._status.setText(f"⚠ Fejl: {e}")
|
||||
self._status.setText(f"⚠ {e}")
|
||||
|
||||
def _remove_share(self):
|
||||
item = self._shares_list.currentItem()
|
||||
@@ -189,4 +177,4 @@ class ShareDialog(QDialog):
|
||||
self._status.setText("✓ Deling fjernet")
|
||||
self._load_shares()
|
||||
except Exception as e:
|
||||
self._status.setText(f"⚠ Fejl: {e}")
|
||||
self._status.setText(f"⚠ {e}")
|
||||
|
||||
Reference in New Issue
Block a user