def update_extra_credits(): db_file = '\\'.join([paths.DB_LOG_PATH, "ExtraCreditz.txt"]) db_json = File.get_json_data(db_file) check_path = "G:\\Filme\\ExtraCreditz" files_list = list_files_sub(check_path) for element in files_list: abs_path = element["path"] + "\\" + element["filename"] if abs_path.endswith(constants.MP4): metadata = Ffmpeg.metadata_to_json(Ffmpeg.get_metadata(abs_path)) print(metadata) track = int(metadata.get("TRACK", -1)) episode_id = metadata.get("EPISODE_ID", None) if (track > 0) and (episode_id is None): for key, value in db_json.items(): if value["NUMBER"] == track and value["STATUS"] == "UNABLE": print(key, track) tags = { "episode_id": key } if File.exists(abs_path): Ffmpeg.add_tags(abs_path, tags) value["STATUS"] = "DOWNLOADED" File.write_json_data(db_file, db_json)
def sync_pos_files_lib_with_db(monitor_name, lib_path, extension): db_file = '\\'.join([paths.DB_LOG_PATH, monitor_name + ".txt"]) db_json = File.get_json_data(db_file) # Get all files in the directory files_list = File.list_files_sub(lib_path) for element in files_list: if element["filename"].endswith(extension): abs_path = element["path"] + "\\" + element["filename"] metadata = Ffmpeg.metadata_to_json(Ffmpeg.get_metadata(abs_path)) file_id = metadata.get("DISC", None) if file_id is None: raise ValueError("File has no ID: " + abs_path) json_info = db_json.get(file_id, None) position = json_info[YoutubeVideo.NUMBER] if int(metadata.get("TRACK")) != position: if json_info is None: raise ValueError("File has no JSON: " + abs_path) tags = {"track": str(position)} Ffmpeg.add_tags(abs_path, tags) new_name = element["path"] + "\\" + json_info[ YoutubeVideo.FILE_NAME] + "." + extension os.rename(abs_path, new_name)
def download_db_missing(): monitors_db = paths.MAIN_MONITORS_PATH # monitors_db = paths.SIDE_MONITORS_PATH # monitors_db = paths.SECONDARY_MONITORS_PATH dk_file = paths.API_RESERVE_KEY_PATH worker = YoutubeWorker(dk_file) manager = MonitorManager(monitors_db, worker, paths.YOUTUBE_API_LOG) for monitor in manager.monitors: db_file = '\\'.join([paths.DB_LOG_PATH, monitor.name + ".txt"]) db_json = File.get_json_data(db_file) for key, value in db_json.items(): if value["STATUS"] == "MISSING": # if value["STATUS"] == "UNABLE": yt_video = YoutubeVideo(key, value[YoutubeVideo.TITLE], value[YoutubeVideo.PUBLISHED_AT], value[YoutubeVideo.CHANNEL_NAME], value[YoutubeVideo.NUMBER]) monitor.append_video(yt_video) queue_manager = YoutubeQueueManager(paths.YOUTUBE_API_LOG) queue_manager.process_monitor_manager(manager) manager.append_tags() manager.update_track_list_log() manager.update_db_log()
def check_db_integrity(): monitors_db = paths.MAIN_MONITORS_PATH # monitors_db = paths.PGM_MONITORS_PATH # monitors_db = paths.SECONDARY_MONITORS_PATH dk_file = paths.API_KEY_PATH worker = YoutubeWorker(dk_file) manager = MonitorManager(monitors_db, worker, paths.YOUTUBE_API_LOG) for monitor in manager.monitors: default_reference_date = yt_datetime.get_default_ytdate() db_file = '\\'.join([paths.DB_LOG_PATH, monitor.name + ".txt"]) db_json = File.get_json_data(db_file) prepare_videos(manager, monitor, default_reference_date) for video in monitor.videos: db_video = db_json.get(video.id, None) # Check if video exists in db if db_video is None: db_json[video.id] = { "STATUS": "MISSING", "TITLE": video.title, "PUBLISHED_AT": video.publishedAt, "FILE_NAME": video.file_name, "SAVE_LOCATION": video.save_location, "NUMBER": video.number, "CHANNEL_NAME": video.channel_name, "FORMAT": monitor.format } print(db_json[video.id]) else: # Add timestamp if missing if db_video.get(YoutubeVideo.PUBLISHED_AT, None) is None: db_json[video.id][ YoutubeVideo.PUBLISHED_AT] = video.publishedAt # Compare timestamp if compare_yt_dates(db_video.get(YoutubeVideo.PUBLISHED_AT), video.publishedAt) != 0: print(str(db_video.get(YoutubeVideo.NUMBER)), "API: ", video.publishedAt, "DB: ", db_video.get(YoutubeVideo.PUBLISHED_AT), sep=" | ") db_json[video.id][ YoutubeVideo.PUBLISHED_AT] = video.publishedAt # Check and update video title in db if changed if not db_video.get(YoutubeVideo.TITLE) == video.title: print(str(db_video.get(YoutubeVideo.NUMBER)), video.title, db_video.get(YoutubeVideo.TITLE), sep=" | ") db_json[video.id][YoutubeVideo.TITLE] = video.title File.write_json_data(db_file, db_json)
def shift_db_at_position(monitor_name, position, step): db_file = '\\'.join([paths.DB_LOG_PATH, monitor_name + ".txt"]) db_json = File.get_json_data(db_file) for key, value in db_json.items(): if value["NUMBER"] >= position: number = value["NUMBER"] next_number = number + step value["FILE_NAME"] = value["FILE_NAME"].replace( str(number) + " - ", str(next_number) + " - ") value["NUMBER"] = next_number File.write_json_data(db_file, db_json)