Re-raise errors when loading WVD files so it's more understandable

It also looks for the "expected 2 but parsed 1" error which is likely an error while parsing the WVD version field. If this happens, it will inform the user to use `pywidevine migrate`.
This commit is contained in:
rlaphoenix 2023-05-25 04:45:49 +01:00
parent a24633fe61
commit 6a9598021d
1 changed files with 11 additions and 1 deletions

View File

@ -24,6 +24,7 @@ import click
import jsonpickle import jsonpickle
import pycaption import pycaption
import yaml import yaml
from construct import ConstError
from pymediainfo import MediaInfo from pymediainfo import MediaInfo
from pywidevine.cdm import Cdm as WidevineCdm from pywidevine.cdm import Cdm as WidevineCdm
from pywidevine.device import Device from pywidevine.device import Device
@ -1023,5 +1024,14 @@ class dl:
cdm_path = config.directories.wvds / f"{cdm_name}.wvd" cdm_path = config.directories.wvds / f"{cdm_name}.wvd"
if not cdm_path.is_file(): if not cdm_path.is_file():
raise ValueError(f"{cdm_name} does not exist or is not a file") raise ValueError(f"{cdm_name} does not exist or is not a file")
try:
device = Device.load(cdm_path) device = Device.load(cdm_path)
except ConstError as e:
if "expected 2 but parsed 1" in str(e):
raise ValueError(
f"{cdm_name}.wvd seems to be a v1 WVD file, use `pywidevine migrate --help` to migrate it to v2."
)
raise ValueError(f"{cdm_name}.wvd is an invalid or corrupt Widevine Device file, {e}")
return WidevineCdm.from_device(device) return WidevineCdm.from_device(device)