def test_path_to_local_track_uri(path, uri): media_dir = pathlib.Path("/home/alice/Music") result = translator.path_to_local_track_uri(path, media_dir) assert isinstance(result, str) assert result == uri
def test_add_noname_utf8(self): name = "Mi\xf0vikudags.mp3" uri = translator.path_to_local_track_uri(name.encode(), pathlib.Path("/media/dir")) track = Track(name=name, uri=uri) self.storage.begin() self.storage.add(track) self.storage.close() assert [track] == self.library.lookup(uri).get()
def test_add_noname_ascii(self): name = "Test.mp3" uri = translator.path_to_local_track_uri(name, pathlib.Path("/media/dir")) track = Track(name=name, uri=uri) self.storage.begin() self.storage.add(track) self.storage.close() assert [track] == self.library.lookup(uri).get()
def _scan_metadata( self, *, media_dir, file_mtimes, files, library, timeout, flush_threshold, limit ): logger.info("Scanning...") files = sorted(files)[:limit] scanner = scan.Scanner(timeout) progress = _ScanProgress(batch_size=flush_threshold, total=len(files)) for absolute_path in files: try: file_uri = absolute_path.as_uri() result = scanner.scan(file_uri) if not result.playable: logger.warning( f"Failed scanning {file_uri}: No audio found in file" ) elif result.duration is None: logger.warning( f"Failed scanning {file_uri}: " "No duration information found in file" ) elif result.duration < MIN_DURATION_MS: logger.warning( f"Failed scanning {file_uri}: " f"Track shorter than {MIN_DURATION_MS}ms" ) else: local_uri = translator.path_to_local_track_uri( absolute_path, media_dir ) mtime = file_mtimes.get(absolute_path) track = tags.convert_tags_to_track(result.tags).replace( uri=local_uri, length=result.duration, last_modified=mtime ) library.add(track, result.tags, result.duration) logger.debug(f"Added {track.uri}") except Exception as error: logger.warning(f"Failed scanning {file_uri}: {error}") if progress.increment(): progress.log() if library.flush(): logger.debug("Progress flushed") progress.log() logger.info("Done scanning")