def find_media(self, session, library): if not os.path.isdir(library.path): log.warning("Unable to find directory: '%s'", library.path) return for root, dirs, files in os.walk(library.path): if files: log.info("This is most likely an album: '%s'", root) items = [os.path.join(root, f) for f in files] media_files = [] for item in items: if any(item.lower().endswith('.' + x.lower()) for x in MEDIA_FORMATS): song_path = os.path.join(root, item) try: media_files.append(MediaFile(song_path)) except (FileTypeError, UnreadableFileError): log.warning("Unable to read media file '%s'", song_path) except IOError: log.warning("Unable to read media file '%s'", song_path) if media_files: media_files = self.set_common_album(media_files) # album_metadata = self.album_metadata(media_files) for media_file in media_files: media_dict = { 'artist': None, 'album': None, 'title': None, 'track': None, } duration, fingerprint = acoustid.fingerprint_file(media_file.path) # m.format = MP3 # m.type = mp3 missing_metadata = False # TODO: Make this all into a nice dictionary # Set the artist if media_file.albumartist: media_dict['artist'] = media_file.albumartist elif media_file.artist: media_dict['artist'] = media_file.artist else: missing_metadata = True # Set the album if media_file.album: media_dict['album'] = media_file.album else: media_dict['album'] = 'Unknown' missing_metadata = True # Set track information if media_file.title: media_dict['title'] = media_file.title else: missing_metadata = True if media_file.track: media_dict['track'] = media_file.track else: missing_metadata = True if missing_metadata: metadata = utils.metadata_from_filename(media_file.path) if not media_dict['track']: media_dict['track'] = metadata.get('track', 0) if not media_dict['artist']: media_dict['artist'] = metadata.get('artist', 'Unknown') if not media_dict['title']: media_dict['title'] = metadata.get('title', 'Unknown') song = get_or_create(session, Song, path=os.path.dirname(media_file.path), filename=os.path.split(media_file.path)[1]) song.album = media_dict['album'] song.artist = media_dict['artist'] song.title = media_dict['title'] song.track = media_dict['track'] song.content_type = CONTENT_TYPES.get(media_file.type, 'mp3') song.length = media_file.length song.fingerprint = fingerprint
def add_music_directory(self, music_path=None): if not os.path.isdir(music_path): return library = get_or_create(self.session, Library, path=music_path) self.session.commit() self.refresh_listbox()