From f8966222e41e20f0ca6aa087a80569d0cb73f147 Mon Sep 17 00:00:00 2001
From: ed
Date: Tue, 12 Mar 2024 23:06:20 +0000
Subject: [PATCH 1/4] todo-done: IdP secret-tokens
---
docs/TODO.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/docs/TODO.md b/docs/TODO.md
index 9227ace5..7a9ccf1a 100644
--- a/docs/TODO.md
+++ b/docs/TODO.md
@@ -8,7 +8,6 @@ a living list of upcoming features / fixes / changes, very roughly in order of p
* docker: suggest putting hists in /cfg/hists/
* [github issue #62](https://github.com/9001/copyparty/issues/62) - IdP / single-sign-on powered by a local identity provider service which is possibly hooked up to ldap or an oauth service
- * secret token header between reverse-proxy and copyparty to confirm the headers are legit
* persist autogenerated volumes for db-init + nullmapping on next startup (`_map_volume` += `only_if_exist`)
* sanchk that autogenerated volumes below inaccessible parent
* disable logout links if idp detected
From 645bb5c99008b3114de0e41731df2797fec7f029 Mon Sep 17 00:00:00 2001
From: ed
Date: Wed, 13 Mar 2024 15:08:05 +0000
Subject: [PATCH 2/4] tweak some sus logic re: mtp on config reload
and fix controlpanel status listing so the state-change from
mtp to idle happens immediately as each volume finishes up
---
copyparty/up2k.py | 33 ++++++++++++++-------------------
1 file changed, 14 insertions(+), 19 deletions(-)
diff --git a/copyparty/up2k.py b/copyparty/up2k.py
index 00d06bc2..caf8447d 100644
--- a/copyparty/up2k.py
+++ b/copyparty/up2k.py
@@ -232,8 +232,6 @@ class Up2k(object):
for n in range(max(1, self.args.mtag_mt)):
Daemon(self._tagger, "tagger-{}".format(n))
- Daemon(self._run_all_mtp, "up2k-mtp-init", (self.gid,))
-
def log(self, msg: str, c: Union[int, str] = 0) -> None:
if self.pp:
msg += "\033[K"
@@ -830,20 +828,14 @@ class Up2k(object):
msg = "could not read tags because no backends are available (Mutagen or FFprobe)"
self.log(msg, c=1)
- thr = None
- if self.mtag:
- t = "online (running mtp)"
- if scan_vols:
- thr = Daemon(self._run_all_mtp, "up2k-mtp-scan", (gid,), r=False)
- else:
- self.pp = None
- t = "online, idle"
-
+ t = "online (running mtp)" if self.mtag else "online, idle"
for vol in vols:
self.volstate[vol.vpath] = t
- if thr:
- thr.start()
+ if self.mtag:
+ Daemon(self._run_all_mtp, "up2k-mtp-scan", (gid,))
+ else:
+ self.pp = None
return have_e2d
@@ -1875,18 +1867,21 @@ class Up2k(object):
if ptop not in self.entags:
t = "skipping mtp for unavailable volume {}"
self.log(t.format(ptop), 1)
- continue
- self._run_one_mtp(ptop, gid)
+ else:
+ self._run_one_mtp(ptop, gid)
+
+ vtop = "\n"
+ for vol in self.asrv.vfs.all_vols.values():
+ if vol.realpath == ptop:
+ vtop = vol.vpath
+ if "running mtp" in self.volstate.get(vtop, ""):
+ self.volstate[vtop] = "online, idle"
td = time.time() - t0
msg = "mtp finished in {:.2f} sec ({})"
self.log(msg.format(td, s2hms(td, True)))
self.pp = None
- for k in list(self.volstate.keys()):
- if "OFFLINE" not in self.volstate[k]:
- self.volstate[k] = "online, idle"
-
if self.args.exit == "idx":
self.hub.sigterm()
From 206af8f1510eab851774f109dc2ff11812731ab4 Mon Sep 17 00:00:00 2001
From: ed
Date: Wed, 13 Mar 2024 15:30:47 +0000
Subject: [PATCH 3/4] handle mediaplayer hash collisions between folders;
when switching to another folder with identical filenames, the
mediaplayer would get confused and think it was the same files,
messing up the playback order
---
copyparty/web/browser.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js
index 5c9ec3bc..ea872adf 100644
--- a/copyparty/web/browser.js
+++ b/copyparty/web/browser.js
@@ -2323,7 +2323,7 @@ function seek_au_sec(seek) {
function song_skip(n, dirskip) {
- var tid = mp.au ? mp.au.tid : null,
+ var tid = mp.au && mp.au.evp == get_evpath() ? mp.au.tid : null,
ofs = tid ? mp.order.indexOf(tid) : -1;
if (dirskip && ofs + 1 && ofs > mp.order.length - 2) {
@@ -8175,7 +8175,7 @@ function reload_mp() {
plays[a].parentNode.innerHTML = '-';
mp = new MPlayer();
- if (mp.au && mp.au.tid) {
+ if (mp.au && mp.au.tid && mp.au.evp == get_evpath()) {
var el = QS('a#a' + mp.au.tid);
if (el)
clmod(el, 'act', 1);
From 04b55f1a1d9cdbac16d69514c55b53c0c8af50ba Mon Sep 17 00:00:00 2001
From: ed
Date: Wed, 13 Mar 2024 15:41:43 +0000
Subject: [PATCH 4/4] get rid of the halted-playback detector,
underlying cause probably fixed by f262aee8
---
copyparty/web/browser.js | 37 ++++---------------------------------
1 file changed, 4 insertions(+), 33 deletions(-)
diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js
index ea872adf..479d9469 100644
--- a/copyparty/web/browser.js
+++ b/copyparty/web/browser.js
@@ -278,8 +278,6 @@ var Ls = {
"mm_prescan": "Looking for music to play next...",
"mm_scank": "Found the next song:",
"mm_uncache": "cache cleared; all songs will redownload on next playback",
- "mm_pwrsv": "
it looks like playback is being interrupted by your phone's power-saving settings!
" + 'please go to the app settings of your browser and then allow unrestricted battery usage to fix it.
however, it could also be due to the browser\'s autoplay settings;
Firefox: tap the icon on the left side of the address bar, then select "autoplay" and "allow audio"
Chrome: the problem will gradually dissipate as you play more music on this site
', - "mm_iosblk": "your web browser thinks the audio playback is unwanted, and it decided to block playback until you start another track manually... unfortunately we are both powerless in telling it otherwise
supposedly this will get better as you continue playing music on this site, but I'm unfamiliar with apple devices so idk if that's true
you could try another browser, maybe firefox or chrome?
", "mm_hnf": "that song no longer exists", "im_hnf": "that image no longer exists", @@ -781,8 +779,6 @@ var Ls = { "mm_prescan": "Leter etter neste sang...", "mm_scank": "Fant neste sang:", "mm_uncache": "alle sanger vil lastes på nytt ved neste avspilling", - "mm_pwrsv": "det ser ut som musikken ble avbrutt av telefonen sine strømsparings-innstillinger!
" + 'ta en tur innom app-innstillingene til nettleseren din og så tillat ubegrenset batteriforbruk
NB: det kan også være pga. autoplay-innstillingene, så prøv dette:
Firefox: klikk på ikonet i venstre side av addressefeltet, velg "autoplay" og "tillat lyd"
Chrome: problemet vil minske gradvis jo mer musikk du spiller på denne siden
', - "mm_iosblk": "nettleseren din tror at musikken er uønsket, og den bestemte seg for å stoppe avspillingen slik at du manuelt må velge en ny sang... dessverre er både du og jeg maktesløse når den har bestemt seg.
det ryktes at problemet vil minske jo mer musikk du spiller på denne siden, men jeg er ikke godt kjent med apple-dingser så jeg er ikke sikker.
kanskje firefox eller chrome fungerer bedre?
", "mm_hnf": "sangen finnes ikke lenger", "im_hnf": "bildet finnes ikke lenger", @@ -1668,7 +1664,6 @@ var re_au_native = can_ogg ? /\.(aac|flac|m4a|mp3|ogg|opus|wav)$/i : // extract songs + add play column var mpo = { "au": null, "au2": null, "acs": null }; -var t_fchg = 0; function MPlayer() { var r = this; r.id = Date.now(); @@ -2338,15 +2333,7 @@ function song_skip(n, dirskip) { else play(mp.order[n == -1 ? mp.order.length - 1 : 0]); } -function next_song_sig(e) { - t_fchg = document.hasFocus() ? 0 : Date.now(); - return next_song_cmn(e); -} function next_song(e) { - t_fchg = 0; - return next_song_cmn(e); -} -function next_song_cmn(e) { ev(e); if (mp.order.length) { var dirskip = mpl.traversals; @@ -2354,17 +2341,12 @@ function next_song_cmn(e) { return song_skip(1, dirskip); } if (mpl.traversals++ < 5) { - if (MOBILE && t_fchg && Date.now() - t_fchg > 30 * 1000) - modal.alert(IPHONE ? L.mm_iosblk : L.mm_pwrsv); - - t_fchg = document.hasFocus() ? 0 : Date.now(); - treectl.ls_cb = next_song_cmn; + treectl.ls_cb = next_song; return tree_neigh(1); } toast.inf(10, L.mm_nof); console.log("mm_nof2"); mpl.traversals = 0; - t_fchg = 0; } function last_song(e) { ev(e); @@ -2379,7 +2361,6 @@ function last_song(e) { toast.inf(10, L.mm_nof); console.log("mm_nof2"); mpl.traversals = 0; - t_fchg = 0; } function prev_song(e) { ev(e); @@ -2527,15 +2508,6 @@ var mpui = (function () { pbar.drawbuf(); } - if (pos > 0.3 && t_fchg) { - // cannot check document.hasFocus to avoid false positives; - // it continues on power-on, doesn't need to be in-browser - if (MOBILE && Date.now() - t_fchg > 30 * 1000) - modal.alert(IPHONE ? L.mm_iosblk : L.mm_pwrsv); - - t_fchg = 0; - } - // preload next song if (mpl.preload && preloaded != mp.au.rsrc) { var len = mp.au.duration, @@ -3037,7 +3009,6 @@ function play(tid, is_ev, seek) { tn = 0; } else if (mpl.pb_mode == 'next') { - t_fchg = document.hasFocus() ? 0 : Date.now(); treectl.ls_cb = next_song; return tree_neigh(1); } @@ -3067,7 +3038,7 @@ function play(tid, is_ev, seek) { mp.au.onerror = evau_error; mp.au.onprogress = pbar.drawpos; mp.au.onplaying = mpui.progress_updater; - mp.au.onended = next_song_sig; + mp.au.onended = next_song; widget.open(); } @@ -3084,7 +3055,7 @@ function play(tid, is_ev, seek) { mp.au.onerror = evau_error; mp.au.onprogress = pbar.drawpos; mp.au.onplaying = mpui.progress_updater; - mp.au.onended = next_song_sig; + mp.au.onended = next_song; t = mp.au.currentTime; if (isNum(t) && t > 0.1) mp.au.currentTime = 0; @@ -3148,7 +3119,7 @@ function play(tid, is_ev, seek) { toast.err(0, esc(L.mm_playerr + basenames(ex))); } clmod(ebi(oid), 'act'); - setTimeout(next_song_sig, 5000); + setTimeout(next_song, 5000); }