diff --git a/copyparty/up2k.py b/copyparty/up2k.py index 37c698aa..dcf364cc 100644 --- a/copyparty/up2k.py +++ b/copyparty/up2k.py @@ -237,8 +237,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" @@ -835,19 +833,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 and scan_vols: - t = "online (running mtp)" - 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 @@ -1879,18 +1872,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() diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 5c9ec3bc..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(); @@ -2323,7 +2318,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) { @@ -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); } @@ -8175,7 +8146,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); 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