diff --git a/copyparty/mtag.py b/copyparty/mtag.py index e006b688..b9058a5a 100644 --- a/copyparty/mtag.py +++ b/copyparty/mtag.py @@ -200,9 +200,10 @@ def au_unpk( except Exception as ex: if ret: - t = "failed to decompress audio file %r: %r" + t = "failed to decompress file %r: %r" log(t % (abspath, ex)) wunlink(log, ret, vn.flags if vn else VF_CAREFUL) + return "" return abspath @@ -422,10 +423,17 @@ def get_cover_from_epub(log: "NamedLogger", abspath: str) -> Optional[IO[bytes]] # This might be an EPUB2 file, try the legacy way of specifying covers coverimage_path = _get_cover_from_epub2(log, package_root, package_ns) + if not coverimage_path: + raise Exception("no cover inside epub") + # This url is either absolute (in the .epub) or relative to the package document adjusted_cover_path = urljoin(rootfile_path, coverimage_path) - return z.open(adjusted_cover_path) + try: + return z.open(adjusted_cover_path) + except KeyError: + t = "epub: cover specified in package document, but doesn't exist: %s" + log(t % (adjusted_cover_path,)) def _get_cover_from_epub2( @@ -643,6 +651,9 @@ class MTag(object): return self._get(abspath) ap = au_unpk(self.log, self.args.au_unpk, abspath) + if not ap: + return {} + ret = self._get(ap) if ap != abspath: wunlink(self.log, ap, VF_CAREFUL) @@ -748,6 +759,9 @@ class MTag(object): ap = abspath ret: dict[str, Any] = {} + if not ap: + return ret + for tagname, parser in sorted(parsers.items(), key=lambda x: (x[1].pri, x[0])): try: cmd = [parser.bin, ap] diff --git a/copyparty/th_srv.py b/copyparty/th_srv.py index 86c3c469..2faee236 100644 --- a/copyparty/th_srv.py +++ b/copyparty/th_srv.py @@ -381,7 +381,7 @@ class ThumbSrv(object): else: ap_unpk = abspath - if not bos.path.exists(tpath): + if ap_unpk and not bos.path.exists(tpath): tex = tpath.rsplit(".", 1)[-1] want_mp3 = tex == "mp3" want_opus = tex in ("opus", "owa", "caf") @@ -424,12 +424,14 @@ class ThumbSrv(object): except: pass + conv_ok = False for fun in funs: try: if not png_ok and tpath.endswith(".png"): raise Exception("png only allowed for waveforms") fun(ap_unpk, ttpath, fmt, vn) + conv_ok = True break except Exception as ex: msg = "%s could not create thumbnail of %r\n%s" @@ -451,16 +453,20 @@ class ThumbSrv(object): except: pass - if abspath != ap_unpk: + if abspath != ap_unpk and ap_unpk: wunlink(self.log, ap_unpk, vn.flags) try: atomic_move(self.log, ttpath, tpath, vn.flags) except Exception as ex: - if not os.path.exists(tpath): + if conv_ok and not os.path.exists(tpath): t = "failed to move [%s] to [%s]: %r" self.log(t % (ttpath, tpath, ex), 3) - pass + elif not conv_ok: + try: + open(tpath, "ab").close() + except: + pass untemp = [] with self.mutex: @@ -682,7 +688,7 @@ class ThumbSrv(object): return c: Union[str, int] = "90" - t = "FFmpeg failed (probably a corrupt video file):\n" + t = "FFmpeg failed (probably a corrupt file):\n" if ( (not self.args.th_ff_jpg or time.time() - int(self.args.th_ff_jpg) < 60) and cmd[-1].lower().endswith(b".webp")