def number_tracks(tags, offset, numtracks, restartdirs, padlength, split_field='__dirpath', output_field='track', by_group=False): """Numbers the selected tracks sequentially in the range between the indexes. The first item of indices is the starting track. The second item of indices is the number of tracks.""" if not split_field: QMessageBox.critical(parent, translate("Autonumbering Wizard", 'Field empty...'), translate("Autonumbering Wizard", "The field specified to use as a directory splitter was invalid. " "Please check your values.")) return if not output_field: QMessageBox.critical(parent, translate("Autonumbering Wizard", 'Field empty...'), translate("Autonumbering Wizard", "The output field specified was invalid. " "Please check your values.")) return if restartdirs: #Restart dir numbering folders = OrderedDict() for tag_index, tag in enumerate(tags): key = findfunc.parsefunc(split_field, tag) if not isinstance(key, basestring): key = tag.stringtags().get(split_field) if key in folders: folders[key].append(tag_index) else: folders[key] = [tag_index] else: folders = {'fol': [i for i, t in enumerate(tags)]} taglist = {} for group_num, tags in enumerate(folders.itervalues()): if numtracks == -2: total = len(tags) elif numtracks is -1: total = None elif numtracks >= 0: total = numtracks for trknum, index in enumerate(tags): if by_group: trknum = group_num + offset else: trknum += offset text = _pad(trknum, total, padlength) taglist[index] = {output_field: text} taglist = [v for k,v in sorted(taglist.items(), key=lambda x: x[0])] emit('writeselected', taglist)
def parse_arg(audio, text): if not isinstance(text, basestring): return text if text[0] == u'%' and text[-1] == u'%': return to_string(audio.get(text[1:-1], u'')) elif text in FIELDS: return to_string(audio.get(text, u'')) else: if text[0] == u'"' and text[-1] == u'"': text = text[1:-1] return findfunc.parsefunc(text, audio) return u""
def number_tracks(tags, offset, numtracks, restartdirs, padlength, split_field='__dirpath', output_field='track', by_group=False): """Numbers the selected tracks sequentially in the range between the indexes. The first item of indices is the starting track. The second item of indices is the number of tracks.""" if not split_field: QMessageBox.critical( parent, translate("Autonumbering Wizard", 'Field empty...'), translate( "Autonumbering Wizard", "The field specified to use as a directory splitter was invalid. " "Please check your values.")) return if not output_field: QMessageBox.critical( parent, translate("Autonumbering Wizard", 'Field empty...'), translate( "Autonumbering Wizard", "The output field specified was invalid. " "Please check your values.")) return if restartdirs: #Restart dir numbering folders = OrderedDict() for tag_index, tag in enumerate(tags): key = findfunc.parsefunc(split_field, tag) if not isinstance(key, basestring): key = tag.stringtags().get(split_field) if key in folders: folders[key].append(tag_index) else: folders[key] = [tag_index] else: folders = {'fol': [i for i, t in enumerate(tags)]} taglist = {} for group_num, tags in enumerate(folders.itervalues()): if numtracks == -2: total = len(tags) elif numtracks is -1: total = None elif numtracks >= 0: total = numtracks for trknum, index in enumerate(tags): if by_group: trknum = group_num + offset else: trknum += offset text = _pad(trknum, total, padlength) taglist[index] = {output_field: text} taglist = [v for k, v in sorted(taglist.items(), key=lambda x: x[0])] emit('writeselected', taglist)
def inline_display(pattern, tags): return parsefunc(pattern, tags)