import os, sys from json import loads from dvrip import DVRIPCam from nvr_core import NVR from nvr_types import File def app_dir(): return os.path.dirname(os.path.abspath(__file__)) def load_config(config_name): try: path = os.path.join(app_dir(), config_name) print("Looking config file", path) with open(path, "r", encoding="utf8") as f: return loads(f.read()) except Exception as e: print("cannot find or parse config.json", e) sys.exit(1) class Recorder: def __init__(self, address, port, username, password, name = ""): self.address = address self.port = int(port) self.username = username self.password = password self.name = name @property def client(self) -> DVRIPCam: return DVRIPCam(self.address, port = self.port, user = self.username, password = self.password) @property def nvr(self) -> NVR: return NVR(self.client) def __str__(self) -> str: if not self.name: return f"{self.address}:{self.port}" else: return self.name class Config: def __init__(self, config_name = "config.json") -> None: raw = load_config(config_name) self.listen_address = raw.get("backend", {}).get("address", "0.0.0.0") self.listen_port = int(raw.get("backend", {}).get("port", "8080")) self.recorders = [] for raw_server in raw.get("recorders", []): self.recorders.append(Recorder(raw_server.get("ip"), raw_server.get("port"), raw_server.get("user"), raw_server.get("password"), raw_server.get("name", ""))) if (self.recorders.__len__() == 0): print("Recorders not find") else: for recorder in self.recorders: print(recorder) def getRecorder(self, index = 0) -> Recorder: return self.recorders[index] def getRecorders(self): return [str(r) for r in self.recorders] if __name__ == "__main__": print(app_dir()) config = Config() recorder: Recorder = config.getRecorder() nvr: NVR = recorder.nvr nvr.login() f: File = File.from_b64("eyJiZWdpbiI6ICIyMDI0LTA4LTA2IDAyOjI3OjQxIiwgImVuZCI6ICIyMDI0LTA4LTA2IDAyOjI5OjQxIiwgIkRpc2tObyI6IDAsICJTZXJpYWxObyI6IDAsICJzaXplIjogMTI2NTMzNjMyLCAiZmlsZW5hbWUiOiAiL2lkZWEwLzIwMjQtMDgtMDYvMDAxLzAyLjI3LjQxLTAyLjI5LjQxW01dW0A3NjRlXVswXS5oMjY0IiwgImZpbGVuYW1lX2NsZWFyZWQiOiAiMDIuMjcuNDEtMDIuMjkuNDFfTV9fXzc2NGVfXzBfLmgyNjQiLCAiY2hhbm5lbCI6IDAsICJzdHJlYW0iOiAwfQ==") nvr.save_file(f) nvr.logout() #client: DVRIPCam = recorder.client #client.debug() #if not client.login(): # print("can't login") # sys.exit(2) #print(client.get_system_info()) #print(client.get_channel_titles()) #print(client.get_channel_statuses()) #print(client.list_local_files(START, END, "h264", channel=3)) #client.close()