mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 08:39:17 +01:00
convert: playlist: Generate m3u file in one batch
to avoid any possible interference with the threaded file conversion mechanism.
This commit is contained in:
parent
d589e77ade
commit
c251ed19c4
1 changed files with 18 additions and 26 deletions
|
|
@ -267,7 +267,7 @@ class ConvertPlugin(BeetsPlugin):
|
|||
util.displayable_path(source))
|
||||
|
||||
def convert_item(self, dest_dir, keep_new, path_formats, fmt,
|
||||
pretend=False, link=False, hardlink=False, playlist=None):
|
||||
pretend=False, link=False, hardlink=False):
|
||||
"""A pipeline thread that converts `Item` objects from a
|
||||
library.
|
||||
"""
|
||||
|
|
@ -292,26 +292,6 @@ class ConvertPlugin(BeetsPlugin):
|
|||
dest = replace_ext(dest, ext)
|
||||
converted = dest
|
||||
|
||||
# When the playlist argument is passed, add the current filename to
|
||||
# an m3u8 playlist file located in the destination folder.
|
||||
if playlist:
|
||||
self._log.debug(
|
||||
"Appending to playlist file {0}",
|
||||
util.displayable_path(playlist)
|
||||
)
|
||||
# The classic m3u format doesn't support special characters in
|
||||
# media file paths, thus we use the m3u8 format which requires
|
||||
# media file paths to be unicode. Additionally we use relative
|
||||
# paths to ensure readability of the playlist on remote
|
||||
# computers.
|
||||
dest_relative = item.destination(
|
||||
basedir=dest_dir,
|
||||
path_formats=path_formats,
|
||||
fragment=True
|
||||
)
|
||||
with open(playlist, "a") as playlist_file:
|
||||
playlist_file.write(dest_relative + "\n")
|
||||
|
||||
# Ensure that only one thread tries to create directories at a
|
||||
# time. (The existence check is not atomic with the directory
|
||||
# creation inside this function.)
|
||||
|
|
@ -492,13 +472,26 @@ class ConvertPlugin(BeetsPlugin):
|
|||
link, hardlink)
|
||||
|
||||
if playlist:
|
||||
# When playlist arg is passed create an m3u8 file in dest folder.
|
||||
#
|
||||
# The classic m3u format doesn't support special characters in
|
||||
# media file paths, thus we use the m3u8 format which requires
|
||||
# media file paths to be unicode. Additionally we use relative
|
||||
# paths to ensure readability of the playlist on remote
|
||||
# computers.
|
||||
self._log.info("Creating playlist file: {0}", playlist)
|
||||
items_paths = [
|
||||
item.destination(
|
||||
basedir=dest, path_formats=path_formats, fragment=True
|
||||
) for item in items
|
||||
]
|
||||
items_paths = ["#EXTM3U"] + items_paths
|
||||
if not pretend:
|
||||
with open(playlist, "w") as playlist_file:
|
||||
playlist_file.write("#EXTM3U" + "\n")
|
||||
playlist_file.writelines('\n'.join(items_paths))
|
||||
|
||||
self._parallel_convert(dest, opts.keep_new, path_formats, fmt, pretend,
|
||||
link, hardlink, threads, items, playlist)
|
||||
link, hardlink, threads, items)
|
||||
|
||||
def convert_on_import(self, lib, item):
|
||||
"""Transcode a file automatically after it is imported into the
|
||||
|
|
@ -603,7 +596,7 @@ class ConvertPlugin(BeetsPlugin):
|
|||
playlist)
|
||||
|
||||
def _parallel_convert(self, dest, keep_new, path_formats, fmt,
|
||||
pretend, link, hardlink, threads, items, playlist):
|
||||
pretend, link, hardlink, threads, items):
|
||||
"""Run the convert_item function for every items on as many thread as
|
||||
defined in threads
|
||||
"""
|
||||
|
|
@ -613,8 +606,7 @@ class ConvertPlugin(BeetsPlugin):
|
|||
fmt,
|
||||
pretend,
|
||||
link,
|
||||
hardlink,
|
||||
playlist)
|
||||
hardlink)
|
||||
for _ in range(threads)]
|
||||
pipe = util.pipeline.Pipeline([iter(items), convert])
|
||||
pipe.run_parallel()
|
||||
|
|
|
|||
Loading…
Reference in a new issue