예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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()
예제 #4
0
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)
예제 #5
0
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)