from pathlib import Path from .file import File, Track, Art, MiscFile from abc import ABC, abstractmethod from log import Log, LogCat class Directory(ABC): def __init__(self, path: Path, log: Log, logcat: str): self.path = path self.log = LogCat(log.queue, logcat) self.contents = self.populate(log) def __iter__(self): return self.contents.__iter__() def __getitem__(self, name): for e in self: if e.name == name: return e raise KeyError def prune(self, name): for e in self: if e.name == name: self.contents.remove(e) return raise KeyError def __str__(self): return self.name @property def all_files(self) -> list: files = list() for c in self: # todo: handle unexpected files files += c.all_files return files @property def name(self): return self.path.name def by_name(self): return [e.name for e in self.contents] @abstractmethod def populate(self, log: Log) -> list: raise NotImplementedError @staticmethod def create_file(file: Path) -> File: suffix = file.suffix if suffix in ['.flac']: return Track(file) elif suffix in ['.jpg', '.jpeg', '.png']: return Art(file) else: return MiscFile(file)