#!/usr/bin/python3 from pathlib import Path EXTENSIONS=(".mp3",".ogg",".wav",".mpa",".m4a",".flac") class ClockyTracklist: """read and monitor directory with audio files""" def __init__(self,path=".",recursive=False,sort=True,verbose=False): """Read (current or supplied) path for all audio files. Add recursive=True to check all subdirectories too""" self.recursive=recursive self.path=path self.__verbose=verbose self.__sort=sort self.__reloaded=False self.supportedformats=EXTENSIONS p=Path(self.path) if not p.exists(): print("ERROR: directory \""+path+"\" does not exist") exit(); if not p.is_dir(): print("ERROR: \""+path+"\" is not an directory") exit(); self.__ReadTrackList() if self.count==0: print("ERROR: no (supported) files found in directory \""+path+"\"") exit(); if(self.__verbose): self.ShowTrackList() def __ReadTrackList(self): """do the actual reading""" self.tracklist=[] self.count=0 path=Path(self.path) if(self.recursive): selection='**/*' else: selection='*' for entry in path.glob(selection): if entry.suffix in EXTENSIONS: self.tracklist.append(entry.as_posix()) self.count+=1 if self.__sort: self.tracklist.sort() def ShowTrackList(self): """Print the list""" print("Tracklist:") print(" path = %s" %self.path) print(" recursive = %s" %self.recursive) print(" count = %d" %self.count) print(" tracks:") for track in self.tracklist: print(" "+track) f=open(track,"r") if(f): f.close() def CheckTrackList(self): """Check path for filechanges""" newtracklist=[] newcount=0 if self.__reloaded: self.__reloaded=False newpath=Path(self.path) if(self.recursive): selection='**/*' else: selection='*' for newentry in newpath.glob(selection): if newentry.suffix in EXTENSIONS: newtracklist.append(newentry.as_posix()) newcount+=1 if self.__sort: newtracklist.sort() if(newcount != self.count) or (newtracklist != self.tracklist): if(self.__verbose): print("Changes in filenames or number of files detected! Re-read tracklist.") self.__ReadTrackList() self.__reloaded=True return self.__reloaded