swingmusic/server/app/lib/folderslib.py
2022-03-24 00:23:43 +03:00

75 lines
1.8 KiB
Python

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)