51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
from vinetrimmer.utils.widevine.device import LocalDevice
|
|
|
|
"""
|
|
Code to convert common folder/file structure to a vinetrimmer WVD.
|
|
"""
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("dirs", metavar="DIR", nargs="+", help="Directory containing device files")
|
|
args = parser.parse_args()
|
|
|
|
configs = []
|
|
for d in args.dirs:
|
|
for root, dirs, files in os.walk(d):
|
|
for f in files:
|
|
if f == "wv.json":
|
|
configs.append(os.path.join(root, f))
|
|
|
|
if not configs:
|
|
print("No wv.json file found in any of the specified directories.")
|
|
sys.exit(1)
|
|
|
|
for f in configs:
|
|
d = os.path.dirname(f)
|
|
|
|
print(f"Generating WVD struct file for {os.path.abspath(d)}...")
|
|
|
|
with open(f, encoding="utf-8") as fd:
|
|
config = json.load(fd)
|
|
|
|
device = LocalDevice.from_dir(d)
|
|
|
|
# we cannot output to /data/CDM_Devices etc. as the CWD might not align up
|
|
# also best to keep the security level and system id definition on the filename for easy referencing
|
|
name = re.sub(r"_lvl\d$", "", config["name"])
|
|
out_path = f"{name}_l{device.security_level}_{device.system_id}.wvd"
|
|
|
|
device.dump(out_path)
|
|
|
|
print(device)
|
|
|
|
print(f"Done, saved to: {os.path.abspath(out_path)}")
|
|
print()
|