From f6843713e73b7ee7acc3fb287ef041f81271e410 Mon Sep 17 00:00:00 2001 From: user Date: Fri, 5 Apr 2024 18:51:39 +0300 Subject: [PATCH] fix cover --- app/api/routes/node_storage.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/app/api/routes/node_storage.py b/app/api/routes/node_storage.py index 5767d91..5ceed04 100644 --- a/app/api/routes/node_storage.py +++ b/app/api/routes/node_storage.py @@ -132,10 +132,28 @@ async def s_api_v1_storage_get(request, file_hash=None): if content_type == 'audio': tempfile_path += "_mpeg" + (f"_{seconds_limit}" if seconds_limit else "") if not os.path.exists(tempfile_path): + try: + cover_content = StoredContent.from_cid(content.meta.get('cover_cid')) + cover_tempfile_path = os.path.join(UPLOADS_DIR, f"tmp_{cover_content.hash}_jpeg") + if not os.path.exists(cover_tempfile_path): + cover_image = Image.open(cover_content.filepath) + cover_image = cover_image.convert('RGB') + quality = 95 + while quality > 10: + cover_image.save(cover_tempfile_path, 'JPEG', quality=quality) + if os.path.getsize(cover_tempfile_path) <= 200 * 1024: # Проверка размера файла в килобайтах + break + quality -= 5 + + assert os.path.exists(cover_tempfile_path), "Cover image not found" + except: + cover_content = None + cover_tempfile_path = None + try: audio = AudioSegment(content_file_bin) audio = audio[:seconds_limit * 1000] if seconds_limit else audio - audio.export(tempfile_path, format="mp3") + audio.export(tempfile_path, format="mp3", cover=cover_tempfile_path) except BaseException as e: make_log("Storage", f"Error converting audio: {e}" + '\n' + traceback.format_exc(), level="error")