def convert_item(lib, dest_dir): while True: item = yield dest = os.path.join(dest_dir, lib.destination(item, fragment=True)) dest = os.path.splitext(dest)[0] + '.mp3' if os.path.exists(dest): log.info(u'Skipping {0} (target file exists)'.format( util.displayable_path(item.path) )) continue # 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.) with _fs_lock: util.mkdirall(dest) maxbr = config['convert']['max_bitrate'].get(int) if item.format == 'MP3' and item.bitrate < 1000 * maxbr: log.info(u'Copying {0}'.format(util.displayable_path(item.path))) util.copy(item.path, dest) else: encode(item.path, dest) item.path = dest item.write() if config['convert']['embed']: album = lib.get_album(item) if album: artpath = album.artpath if artpath: _embed(artpath, [item])
def convert_item(lib, dest_dir): while True: item = yield dest = os.path.join(dest_dir, lib.destination(item, fragment=True)) dest = os.path.splitext(dest)[0] + '.mp3' if os.path.exists(dest): log.info(u'Skipping {0} (target file exists)'.format( util.displayable_path(item.path))) continue # 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.) with _fs_lock: util.mkdirall(dest) maxbr = config['convert']['max_bitrate'].get(int) if item.format == 'MP3' and item.bitrate < 1000 * maxbr: log.info(u'Copying {0}'.format(util.displayable_path(item.path))) util.copy(item.path, dest) else: encode(item.path, dest) item.path = dest item.write() if config['convert']['embed']: album = lib.get_album(item) if album: artpath = album.artpath if artpath: _embed(artpath, [item])
def convert_item(dest_dir, keep_new, path_formats): while True: item = yield dest = _destination(dest_dir, item, keep_new, path_formats) if os.path.exists(util.syspath(dest)): log.info(u'Skipping {0} (target file exists)'.format( util.displayable_path(item.path) )) continue # 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.) with _fs_lock: util.mkdirall(dest) # When keeping the new file in the library, we first move the # current (pristine) file to the destination. We'll then copy it # back to its old path or transcode it to a new path. if keep_new: log.info(u'Moving to {0}'. format(util.displayable_path(dest))) util.move(item.path, dest) original = dest _, ext = get_format() converted = os.path.splitext(item.path)[0] + ext else: original = item.path converted = dest if not should_transcode(item): # No transcoding necessary. log.info(u'Copying {0}'.format(util.displayable_path(item.path))) util.copy(original, converted) else: try: encode(original, converted) except subprocess.CalledProcessError: continue # Write tags from the database to the converted file. item.write(path=converted) if keep_new: # If we're keeping the transcoded file, read it again (after # writing) to get new bitrate, duration, etc. item.path = converted item.read() item.store() # Store new path and audio data. if config['convert']['embed']: album = item.get_album() if album: artpath = album.artpath if artpath: _embed(artpath, [item]) plugins.send('after_convert', item=item, dest=dest, keepnew=keep_new)
def convert_item(lib, dest_dir, keep_new): while True: item = yield dest = _destination(lib, dest_dir, item, keep_new) if os.path.exists(util.syspath(dest)): log.info(u'Skipping {0} (target file exists)'.format( util.displayable_path(item.path) )) continue # 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.) with _fs_lock: util.mkdirall(dest) # When keeping the new file in the library, we first move the # current (pristine) file to the destination. We'll then copy it # back to its old path or transcode it to a new path. if keep_new: log.info(u'Moving to {0}'. format(util.displayable_path(dest))) util.move(item.path, dest) if not should_transcode(item): # No transcoding necessary. log.info(u'Copying {0}'.format(util.displayable_path(item.path))) if keep_new: util.copy(dest, item.path) else: util.copy(item.path, dest) else: if keep_new: item.path = os.path.splitext(item.path)[0] + '.mp3' encode(dest, item.path) else: encode(item.path, dest) # Write tags from the database to the converted file. if not keep_new: item.path = dest item.write() # If we're keeping the transcoded file, read it again (after # writing) to get new bitrate, duration, etc. if keep_new: item.read() lib.store(item) # Store new path and audio data. if config['convert']['embed']: album = lib.get_album(item) if album: artpath = album.artpath if artpath: _embed(artpath, [item])
def convert_item(dest_dir, keep_new, path_formats): while True: item = yield dest = _destination(dest_dir, item, keep_new, path_formats) if os.path.exists(util.syspath(dest)): log.info(u'Skipping {0} (target file exists)'.format( util.displayable_path(item.path))) continue # 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.) with _fs_lock: util.mkdirall(dest) # When keeping the new file in the library, we first move the # current (pristine) file to the destination. We'll then copy it # back to its old path or transcode it to a new path. if keep_new: log.info(u'Moving to {0}'.format(util.displayable_path(dest))) util.move(item.path, dest) if not should_transcode(item): # No transcoding necessary. log.info(u'Copying {0}'.format(util.displayable_path(item.path))) if keep_new: util.copy(dest, item.path) else: util.copy(item.path, dest) else: if keep_new: _, ext = get_format() item.path = os.path.splitext(item.path)[0] + ext encode(dest, item.path) else: encode(item.path, dest) # Write tags from the database to the converted file. if not keep_new: item.path = dest item.write() # If we're keeping the transcoded file, read it again (after # writing) to get new bitrate, duration, etc. if keep_new: item.read() item.store() # Store new path and audio data. if config['convert']['embed']: album = item.get_album() if album: artpath = album.artpath if artpath: _embed(artpath, [item])
def convert_item(dest_dir, keep_new, path_formats): while True: item = yield dest = _destination(dest_dir, item, keep_new, path_formats) if os.path.exists(util.syspath(dest)): log.info(u'Skipping {0} (target file exists)'.format( util.displayable_path(item.path))) continue # 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.) with _fs_lock: util.mkdirall(dest) # When keeping the new file in the library, we first move the # current (pristine) file to the destination. We'll then copy it # back to its old path or transcode it to a new path. if keep_new: log.info(u'Moving to {0}'.format(util.displayable_path(dest))) util.move(item.path, dest) original = dest _, ext = get_format() converted = os.path.splitext(item.path)[0] + ext else: original = item.path converted = dest if not should_transcode(item): # No transcoding necessary. log.info(u'Copying {0}'.format(util.displayable_path(item.path))) util.copy(original, converted) else: try: encode(original, converted) except subprocess.CalledProcessError: continue # Write tags from the database to the converted file. item.write(path=converted) if keep_new: # If we're keeping the transcoded file, read it again (after # writing) to get new bitrate, duration, etc. item.path = converted item.read() item.store() # Store new path and audio data. if config['convert']['embed']: album = item.get_album() if album: artpath = album.artpath if artpath: try: _embed(artpath, [converted]) except IOError as exc: log.warn( u'could not embed cover art in {0}: {1}'.format( util.displayable_path(item.path), exc)) plugins.send('after_convert', item=item, dest=dest, keepnew=keep_new)