feat: retry when raise DecryptException

pull/8/head
WorldObservationLog 4 months ago
parent 4586c7b4bb
commit 4af2b17a75
  1. 11
      src/decrypt.py

@ -1,6 +1,8 @@
import asyncio
import logging
from loguru import logger
from tenacity import retry, retry_if_exception_type, stop_after_attempt, before_sleep_log
from src.adb import Device
from src.exceptions import DecryptException
@ -9,6 +11,8 @@ from src.mp4 import SongInfo, SampleInfo
from src.types import defaultId, prefetchKey
@retry(retry=retry_if_exception_type(DecryptException), stop=stop_after_attempt(3),
before_sleep=before_sleep_log(logger, logging.WARN))
async def decrypt(info: SongInfo, keys: list[str], manifest: Datum, device: Device) -> bytes:
async with device.decryptLock:
logger.info(f"Decrypting song: {manifest.attributes.artistName} - {manifest.attributes.name}")
@ -28,7 +32,12 @@ async def decrypt(info: SongInfo, keys: list[str], manifest: Datum, device: Devi
writer.write(bytes([len(key_uri)]))
writer.write(key_uri.encode("utf-8"))
last_index = sample.descIndex
result = await decrypt_sample(writer, reader, sample)
try:
result = await decrypt_sample(writer, reader, sample)
except DecryptException as e:
writer.write(bytes([0, 0, 0, 0]))
writer.close()
raise e
decrypted += result
writer.write(bytes([0, 0, 0, 0]))
writer.close()

Loading…
Cancel
Save