diff --git a/beets/ui/__init__.py b/beets/ui/__init__.py index 993964291..1e64cd89c 100644 --- a/beets/ui/__init__.py +++ b/beets/ui/__init__.py @@ -989,29 +989,3 @@ def main(args=None): except KeyboardInterrupt: # Silently ignore ^C except in verbose mode. log.debug(traceback.format_exc()) - - - -def summarize_items(items): - """Produces a brief summary line for manually resolving duplicates during import. - Accepts a list of tuples, one per item containing: - (path, format, bitrate, duration) - """ - - summary_text = "" - summary_text += "%d items. " % len(items) - format_counts = {} - for item in items: - format_counts[item[1]] = format_counts.get(item[1],0) + 1; - - for format, count in format_counts.iteritems(): - summary_text += '{count} {format}. '.format(format=format, count=count) - - average_bitrate = sum([item[2] for item in items]) / len(items) - total_duration = sum([item[3] for item in items]) - summary_text += '{bitrate}kbps average bitrate. '.format(bitrate=int(average_bitrate/1000)) - summary_text += '{length} total length. '.format(length=human_seconds_short(total_duration)) - - return summary_text - - diff --git a/beets/ui/commands.py b/beets/ui/commands.py index 0cc3bcf9d..4a27bc522 100644 --- a/beets/ui/commands.py +++ b/beets/ui/commands.py @@ -424,6 +424,32 @@ def show_item_change(item, match): print_(' '.join(info)) +def summarize_items(items): + """Produces a brief summary line describing a set of items. Used for + manually resolving duplicates during import. + """ + summary_parts = [] + summary_parts.append("{0} items".format(len(items))) + + format_counts = {} + for item in items: + format_counts[item.format] = format_counts.get(item.format, 0) + 1 + if len(format_counts) == 1: + # A single format. + summary_parts.append(items[0].format) + else: + # Enumerate all the formats. + for format, count in format_counts.iteritems(): + summary_parts.append('{0} {1}'.format(format, count)) + + average_bitrate = sum([item.bitrate for item in items]) / len(items) + total_duration = sum([item.length for item in items]) + summary_parts.append('{0}kbps'.format(int(average_bitrate / 1000))) + summary_parts.append(ui.human_seconds_short(total_duration)) + + return ', '.join(summary_parts) + + def _summary_judment(rec): """Determines whether a decision should be made without even asking the user. This occurs in quiet mode and when an action is chosen for @@ -753,12 +779,11 @@ class TerminalImportSession(importer.ImportSession): log.info('Skipping.') sel = 's' else: - # print some detail about the existing and new items so it can be an informed decision + # Print some detail about the existing and new items so the + # user can make an informed decision. for duplicate in found_duplicates: - old_items = [(item.path, item.format, item.bitrate, item.length) for item in duplicate.items()] - print("OLD: " + ui.summarize_items(old_items)) - new_items = [(item.path, item.format, item.bitrate, item.length) for item in task.items] - print("NEW: " + ui.summarize_items(new_items)) + print("Old: " + summarize_items(list(duplicate.items()))) + print("New: " + summarize_items(task.items)) sel = ui.input_options( ('Skip new', 'Keep both', 'Remove old') diff --git a/beets/util/__init__.py b/beets/util/__init__.py index ec3a3c1bc..428de312a 100644 --- a/beets/util/__init__.py +++ b/beets/util/__init__.py @@ -25,6 +25,7 @@ import traceback import subprocess import platform + MAX_FILENAME_LENGTH = 200 WINDOWS_MAGIC_PREFIX = u'\\\\?\\'