mirror of
				https://github.com/9001/copyparty.git
				synced 2025-10-31 04:32:20 -06:00 
			
		
		
		
	epub: handle missing covers; closes #860
This commit is contained in:
		
							parent
							
								
									171ca985c8
								
							
						
					
					
						commit
						4177c1d9ed
					
				|  | @ -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) | ||||
| 
 | ||||
|         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] | ||||
|  |  | |||
|  | @ -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,15 +453,19 @@ 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) | ||||
|                 elif not conv_ok: | ||||
|                     try: | ||||
|                         open(tpath, "ab").close() | ||||
|                     except: | ||||
|                         pass | ||||
| 
 | ||||
|             untemp = [] | ||||
|  | @ -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") | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue