示例#1
0
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
示例#2
0
 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()
示例#3
0
 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()
示例#4
0
    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")