diff --git a/server/app/lib/folderslib.py b/server/app/lib/folderslib.py new file mode 100644 index 0000000..4411b4d --- /dev/null +++ b/server/app/lib/folderslib.py @@ -0,0 +1,74 @@ +import time +from typing import List +from app import api, helpers, models +from progress.bar import Bar + + +def get_valid_folders() -> None: + for track in api.TRACKS: + api.VALID_FOLDERS.add(track.folder) + + +def get_folder_track_count(foldername: str) -> int: + """ + Returns the number of files associated with a folder. + """ + track_list = [track for track in api.TRACKS if foldername in track.folder] + return len(track_list) + + + +def create_folder(foldername: str) -> models.Folder: + """Create a single Folder object""" + folder = { + "name": foldername.split("/")[-1], + "path": foldername + "/", + "trackcount": get_folder_track_count(foldername), + } + + return models.Folder(folder) + + +def create_all_folders(foldernames: List[str]) -> List[models.Folder]: + folders_: List[models.Folder] = [] + _bar = Bar("Creating folders", max=len(foldernames)) + + for foldername in foldernames: + folder = create_folder(foldername) + folders_.append(folder) + _bar.next() + _bar.finish() + + return folders_ + + +def get_subdirs(foldername: str) -> List[models.Folder]: + """ + Finds and Creates models.Folder objects for each sub-directory string in the foldername passed. + """ + subdirs = set() + + for folder in api.VALID_FOLDERS: + str0 = folder.replace(foldername, "") + str1 = str0.split("/")[0] + + if str1 != "": + subdirs.add(foldername + str1) + + + return [create_folder(dir) for dir in subdirs] + + +@helpers.background +def run_scandir(): + flag = False + + while flag is False: + get_valid_folders() + folders_ = create_all_folders(api.VALID_FOLDERS) + """Create all the folder objects before clearing api.FOLDERS""" + + api.FOLDERS.clear() + api.FOLDERS.extend(folders_) + + time.sleep(300)