Spaces:
Sleeping
Sleeping
""" | |
ivitools.scan | |
扫描 ivi 文件相关 | |
""" | |
import os | |
import json | |
import time | |
import zipfile | |
import tempfile | |
from tqdm import tqdm | |
from colorama import Fore, Cursor | |
from colorama.ansi import clear_line | |
from .touch import touch_ivi | |
def scan_ivi_file(path: str): | |
print(Fore.RESET + f"Scanning {path} ...") | |
# First, make a temp folder. | |
tmp_dir = tempfile.gettempdir() | |
if not os.path.exists(os.path.join(tmp_dir, "ivitools")): | |
os.mkdir(os.path.join(tmp_dir, "ivitools")) | |
for root, dirs, files in os.walk(os.path.join(tmp_dir, "ivitools"), topdown=False): | |
for name in files: | |
os.remove(os.path.join(root, name)) | |
for name in dirs: | |
os.rmdir(os.path.join(root, name)) | |
# Then, extract the ivi file. | |
extract_dir = os.path.join(tmp_dir, "ivitools", str(time.time())) | |
# Use the time to make folders different | |
zipfile.ZipFile(open(path, "rb")).extractall(extract_dir) | |
# Finally, display the result. | |
Cursor.UP() | |
clear_line() | |
print(path) | |
meta = touch_ivi(path) | |
print(f'{meta["title"]}({meta["bvid"]})') | |
graph = json.load(open(os.path.join(extract_dir, "ivideo.json"), encoding="utf-8")) | |
print(f"There're {len(graph.keys())} nodes in the file! ") | |
bar = tqdm(graph.keys()) | |
for item in bar: | |
bar.set_description("Scanning node ") | |
if not ("cid" in graph[str(item)].keys()): | |
raise Exception(f"Missing CID in the node {item}") | |
return | |
else: | |
cid = graph[str(item)]["cid"] | |
if not (os.path.exists(os.path.join(extract_dir, str(cid) + ".mp4"))): | |
raise Exception(f"Missing video source of the node {item}") | |
time.sleep(0.01) | |
print(Fore.GREEN + "Congratulation! Your file is OK. ", Fore.RESET) | |