def update_status(enable = True): files = status['selectedfiles'] pattern = status['patterntext'] tf = lambda *args, **kwargs: encode_fn(findfunc.tagtofilename(*args, **kwargs)) if not files: return tag = files[0] state = {'__counter': u'1', '__total_files': unicode(len(files))} x = findfunc.filenametotag(pattern, tag[PATH], True) emit('ftstatus', display_tag(x)) bold_error = translate("Status Bar", "<b>%s</b>") try: newfilename = functions.move(tag, pattern, tag, state=state.copy()) if newfilename: newfilename = newfilename['__path'] emit('tfstatus', translate("Status Bar", "New Filename: <b>%1</b>").arg( decode_fn(newfilename))) else: emit('tfstatus', u'<b>No change</b>') except findfunc.ParseError, e: emit('tfstatus', bold_error % e.message)
def _dirChanged(self, dirs): if not dirs: self.setWindowTitle('puddletag') return if isinstance(dirs, basestring): dirs = [dirs] dirs = [encode_fn(d) for d in dirs] if self._lastdir: initial = self._lastdir[0] else: initial = None if initial not in dirs: initial = dirs[0] if isinstance(initial, str): initial = initial.decode('utf8', 'replace') if len(dirs) > 1: self.setWindowTitle(translate("Main Window", 'puddletag: %1 + others').arg(initial)) else: self.setWindowTitle(translate("Main Window", 'puddletag: %1').arg(initial)) self._lastdir = dirs
def update_status(enable=True): files = status['selectedfiles'] pattern = status['patterntext'] tf = lambda *args, **kwargs: encode_fn( findfunc.tagtofilename(*args, **kwargs)) if not files: return tag = files[0] state = {'__counter': u'1', '__total_files': unicode(len(files))} x = findfunc.filenametotag(pattern, tag[PATH], True) emit('ftstatus', display_tag(x)) bold_error = translate("Status Bar", "<b>%s</b>") try: newfilename = functions.move(tag, pattern, tag, state=state.copy()) if newfilename: newfilename = newfilename['__path'] emit( 'tfstatus', translate("Status Bar", "New Filename: <b>%1</b>").arg( decode_fn(newfilename))) else: emit('tfstatus', u'<b>No change</b>') except findfunc.ParseError, e: emit('tfstatus', bold_error % e.message)
def savePlayList(self): tags = status['selectedfiles'] if not tags: tags = status['alltags'] settings = PuddleConfig() try: dirname = self._lastdir[0] except IndexError: dirname = constants.HOMEDIR filepattern = settings.get('playlist', 'filepattern', 'puddletag.m3u') default = encode_fn(findfunc.tagtofilename(filepattern, tags[0])) f = unicode( QFileDialog.getSaveFileName( self, translate("Playlist", 'Save Playlist...'), os.path.join(dirname, default))) if f: if settings.get('playlist', 'extinfo', 1, True): pattern = settings.get('playlist', 'extpattern', '%artist% - %title%') else: pattern = None reldir = settings.get('playlist', 'reldir', 0, True) windows_separator = settings.get('playlist', 'windows_separator', 0, False) m3u.exportm3u(tags, f, pattern, reldir, windows_separator)
def _dirChanged(self, dirs): if not dirs: self.setWindowTitle('puddletag') return if isinstance(dirs, basestring): dirs = [dirs] dirs = [encode_fn(d) for d in dirs] if self._lastdir: initial = self._lastdir[0] else: initial = None if initial not in dirs: initial = dirs[0] if isinstance(initial, str): initial = initial.decode('utf8', 'replace') if len(dirs) > 1: self.setWindowTitle( translate("Main Window", 'puddletag: %1 + others').arg(initial)) else: self.setWindowTitle( translate("Main Window", 'puddletag: %1').arg(initial)) self._lastdir = dirs
def openDir(self, filename=None, append=False): """Opens a folder. If filename != None, then the table is filled with the folder. If filename is None, show the open folder dialog and open that. If appenddir = True, the folder is appended. Otherwise, the folder is just loaded.""" if filename is None: filename = self._getDir() if not filename: return else: if not isinstance(filename, basestring): filename = filename[0] filename = os.path.abspath(filename) if isinstance(filename, unicode): filename = encode_fn(filename) self.emit(SIGNAL('loadFiles'), None, [filename], append)
def savePlayList(self): tags = status['selectedfiles'] if not tags: tags = status['alltags'] settings = PuddleConfig() try: dirname = self._lastdir[0] except IndexError: dirname = constants.HOMEDIR filepattern = settings.get('playlist', 'filepattern','puddletag.m3u') default = encode_fn(findfunc.tagtofilename(filepattern, tags[0])) f = unicode(QFileDialog.getSaveFileName(self, translate("Playlist", 'Save Playlist...'), os.path.join(dirname, default))) if f: if settings.get('playlist', 'extinfo', 1, True): pattern = settings.get('playlist', 'extpattern','%artist% - %title%') else: pattern = None reldir = settings.get('playlist', 'reldir', 0, True) windows_separator = settings.get('playlist', 'windows_separator', 0, False) m3u.exportm3u(tags, f, pattern, reldir, windows_separator)
def savePlayList(self): tags = status["selectedfiles"] if not tags: tags = status["alltags"] settings = PuddleConfig() try: dirname = self._lastdir[0] except IndexError: dirname = constants.HOMEDIR filepattern = settings.get("playlist", "filepattern", "puddletag.m3u") default = encode_fn(findfunc.tagtofilename(filepattern, tags[0])) f = unicode( QFileDialog.getSaveFileName(self, translate("Playlist", "Save Playlist..."), os.path.join(dirname, default)) ) if f: if settings.get("playlist", "extinfo", 1, True): pattern = settings.get("playlist", "extpattern", "%artist% - %title%") else: pattern = None reldir = settings.get("playlist", "reldir", 0, True) windows_separator = settings.get("playlist", "windows_separator", 0, False) m3u.exportm3u(tags, f, pattern, reldir, windows_separator)
def exportm3u(tags, tofile, format = None, reldir = False, winsep=False): header = ['#EXTM3U'] if reldir: reldir = os.path.dirname(os.path.abspath(tofile)) filenames = [relpath(f.filepath, reldir) for f in tags] else: filenames = [f.filepath for f in tags] if winsep: filenames = [f.replace('/', '\\') for f in filenames] if format is None: text = '\n'.join(header + filenames) else: text = header extinfo = ('#EXTINF: %s, %s' % (str(lnglength(f.length)), encode_fn(tagtofilename(format, f, False))) for f in tags) [text.extend([z,y]) for z,y in zip(extinfo, filenames)] text = '\n'.join(text) playlist = open(tofile, 'w') playlist.write(text) playlist.close()
def restoreSettings(self): scts = action_shortcuts.create_action_shortcuts( mainwin.funcs.applyaction, self) self.addShortcuts('&Actions', scts) connect_actions(scts, PuddleDock._controls) cparser = PuddleConfig() settings = QSettings(constants.QT_CONFIG, QSettings.IniFormat) gensettings = {} controls = PuddleDock._controls.values() for control in controls: if hasattr(control, 'loadSettings'): control.loadSettings() if hasattr(control, 'gensettings'): t = load_gen_settings(control.gensettings) gensettings[control] = dict(t) for control, val in gensettings.items(): control.applyGenSettings(val, 0) self._lastdir = [encode_fn(cparser.get( 'main', 'lastfolder', constants.HOMEDIR))] mapping = { u'VorbisComment': {u'date': u'year', u'tracknumber': u'track', u'musicbrainz_albumid': u'mbrainz_album_id', u'musicbrainz_artistid': u'mbrainz_artist_id', u'musicbrainz_trackid': u'mbrainz_track_id'}, u'MP4': {u'MusicBrainz Track Id': u'mbrainz_track_id', u'MusicBrainz Artist Id': u'mbrainz_artist_id', u'MusicBrainz Album Id': u'mbrainz_album_id'}, u'ID3': {u'ufid:http://musicbrainz.org': u'mbrainz_track_id', u'MusicBrainz Album Id': u'mbrainz_album_id', u'MusicBrainz Artist Id': u'mbrainz_artist_id'}, u'APEv2': {u'musicbrainz_albumid': u'mbrainz_album_id', u'musicbrainz_artistid': u'mbrainz_artist_id', u'musicbrainz_trackid': u'mbrainz_track_id'}} filepath = os.path.join(cparser.savedir, 'mappings') audioinfo.setmapping(audioinfo.loadmapping(filepath, mapping)) status['genres'] = genres.load_genres() connect_controls(controls + [mainwin.previews.obj]) cover_pattern = cparser.get('tags', 'cover_pattern', 'folder') status['cover_pattern'] = cover_pattern winsettings('mainwin', self) if cparser.get("main", "maximized", True): self.showMaximized() QApplication.processEvents() if constants.FS_ENC == "ascii": QMessageBox.warning(self, "puddletag", translate("Errors", "Your filesystem encoding was detected as <b>ASCII</b>. <br />" "You won't be able to rename files using accented, <br />" " cyrillic or any characters outside the ASCII alphabet.")) for control, val in gensettings.items(): control.applyGenSettings(val, 1) h = self._table.horizontalHeader() h.restoreState(settings.value('table/header').toByteArray()) self.restoreState(settings.value('main/state').toByteArray()) confirmations.load() shortcutsettings.ActionEditorDialog._loadSettings(status['actions']) update_settings() QApplication.processEvents()
def convert_mtps(dirpath=PROFILEDIR): for fn in glob.glob(PROFILEDIR + '/*.conf'): mtp = convert_mtp(fn) os.rename(fn, os.path.splitext(fn)[0] + '.old') save_mtp(mtp, os.path.join(dirpath, encode_fn(mtp.name)) + '.mtp')
def restoreSettings(self): scts = action_shortcuts.create_action_shortcuts( mainwin.funcs.applyaction, self) self.addShortcuts('&Actions', scts) connect_actions(scts, PuddleDock._controls) cparser = PuddleConfig() settings = QSettings(constants.QT_CONFIG, QSettings.IniFormat) gensettings = {} controls = PuddleDock._controls.values() for control in controls: if hasattr(control, 'loadSettings'): control.loadSettings() if hasattr(control, 'gensettings'): t = load_gen_settings(control.gensettings) gensettings[control] = dict(t) for control, val in gensettings.items(): control.applyGenSettings(val, 0) self._lastdir = [ encode_fn(cparser.get('main', 'lastfolder', constants.HOMEDIR)) ] mapping = { u'VorbisComment': { u'date': u'year', u'tracknumber': u'track', u'musicbrainz_albumid': u'mbrainz_album_id', u'musicbrainz_artistid': u'mbrainz_artist_id', u'musicbrainz_trackid': u'mbrainz_track_id' }, u'MP4': { u'MusicBrainz Track Id': u'mbrainz_track_id', u'MusicBrainz Artist Id': u'mbrainz_artist_id', u'MusicBrainz Album Id': u'mbrainz_album_id' }, u'ID3': { u'ufid:http://musicbrainz.org': u'mbrainz_track_id', u'MusicBrainz Album Id': u'mbrainz_album_id', u'MusicBrainz Artist Id': u'mbrainz_artist_id' }, u'APEv2': { u'musicbrainz_albumid': u'mbrainz_album_id', u'musicbrainz_artistid': u'mbrainz_artist_id', u'musicbrainz_trackid': u'mbrainz_track_id' } } filepath = os.path.join(cparser.savedir, 'mappings') audioinfo.setmapping(audioinfo.loadmapping(filepath, mapping)) status['genres'] = genres.load_genres() connect_controls(controls + [mainwin.previews.obj]) cover_pattern = cparser.get('tags', 'cover_pattern', 'folder') status['cover_pattern'] = cover_pattern winsettings('mainwin', self) if cparser.get("main", "maximized", True): self.showMaximized() QApplication.processEvents() if constants.FS_ENC == "ascii": QMessageBox.warning( self, "puddletag", translate( "Errors", "Your filesystem encoding was detected as <b>ASCII</b>. <br />" "You won't be able to rename files using accented, <br />" " cyrillic or any characters outside the ASCII alphabet.")) for control, val in gensettings.items(): control.applyGenSettings(val, 1) h = self._table.horizontalHeader() h.restoreState(settings.value('table/header').toByteArray()) self.restoreState(settings.value('main/state').toByteArray()) confirmations.load() shortcutsettings.ActionEditorDialog._loadSettings(status['actions']) update_settings() QApplication.processEvents()