def register_cover_art_provider(provider): _cover_art_providers.register(provider.__module__, provider) if hasattr(provider, 'OPTIONS') and provider.OPTIONS: if not hasattr(provider.OPTIONS, 'NAME'): provider.OPTIONS.NAME = provider.name.lower().replace(' ', '_') if not hasattr(provider.OPTIONS, 'TITLE'): provider.OPTIONS.TITLE = provider.title register_options_page(provider.OPTIONS)
args["translator-credits"] = _("translator-credits") if args["translator-credits"] != "translator-credits": # TR: Replace LANG with language you are translatig to. args["translator-credits"] = _( "<br/>Translated to LANG by %s" ) % args["translator-credits"].replace("\n", "<br/>") else: args["translator-credits"] = "" text = _( u"""<p align="center"><span style="font-size:15px;font-weight:bold;">MusicBrainz Picard</span><br/> Version %(version)s</p> <p align="center"><small> PyQt %(pyqt-version)s<br/> Mutagen %(mutagen-version)s<br/> Discid %(discid-version)s </small></p> <p align="center"><strong>Supported formats</strong><br/>%(formats)s</p> <p align="center"><strong>Please donate</strong><br/> Thank you for using Picard. Picard relies on the MusicBrainz database, which is operated by the MetaBrainz Foundation with the help of thousands of volunteers. If you like this application please consider donating to the MetaBrainz Foundation to keep the service running.</p> <p align="center"><a href="http://metabrainz.org/donate">Donate now!</a></p> <p align="center"><strong>Credits</strong><br/> <small>Copyright © 2004-2011 Robert Kaye, Lukáš Lalinský and others%(translator-credits)s</small></p> <p align="center"><a href="http://musicbrainz.org/doc/MusicBrainz_Picard">http://musicbrainz.org/doc/MusicBrainz_Picard</a></p> """) % args self.ui.label.setOpenExternalLinks(True) self.ui.label.setText(text) register_options_page(AboutOptionsPage)
if self.ui.write_id3v23.isChecked(): if self.ui.enc_utf8.isChecked(): self.ui.enc_utf16.setChecked(True) self.ui.enc_utf8.setEnabled(False) self.ui.label_id3v23_join_with.setEnabled(True) self.ui.id3v23_join_with.setEnabled(True) else: self.ui.enc_utf8.setEnabled(True) self.ui.enc_utf8.setChecked(True) self.ui.label_id3v23_join_with.setEnabled(False) self.ui.id3v23_join_with.setEnabled(False) def preserved_tags_edited(self, text): prefix = text[:self.ui.preserved_tags.cursorPosition()].split(",")[-1] self.completer.setCompletionPrefix(prefix) if prefix: self.completer.complete() else: self.completer.popup().hide() def completer_activated(self, text): input = self.ui.preserved_tags current = input.text() i = input.cursorPosition() p = len(self.completer.completionPrefix()) input.setText("%s%s %s" % (current[:i - p], text, current[i:])) input.setCursorPosition(i - p + len(text) + 1) register_options_page(TagsOptionsPage)
self.ui.cb_embed_front_only.setChecked(config.setting["embed_only_one_front_image"]) self.ui.save_images_to_files.setChecked(config.setting["save_images_to_files"]) self.ui.cover_image_filename.setText(config.setting["cover_image_filename"]) self.ui.save_images_overwrite.setChecked(config.setting["save_images_overwrite"]) self.ca_providers = config.setting["ca_providers"] self.load_cover_art_providers() self.update_all() def save(self): config.setting["save_images_to_tags"] = self.ui.save_images_to_tags.isChecked() config.setting["embed_only_one_front_image"] = self.ui.cb_embed_front_only.isChecked() config.setting["save_images_to_files"] = self.ui.save_images_to_files.isChecked() config.setting["cover_image_filename"] = self.ui.cover_image_filename.text() config.setting["save_images_overwrite"] = self.ui.save_images_overwrite.isChecked() config.setting["ca_providers"] = self.ca_providers def update_all(self): self.update_filename() self.update_save_images_to_tags() def update_filename(self): enabled = self.ui.save_images_to_files.isChecked() self.ui.cover_image_filename.setEnabled(enabled) self.ui.save_images_overwrite.setEnabled(enabled) def update_save_images_to_tags(self): enabled = self.ui.save_images_to_tags.isChecked() self.ui.cb_embed_front_only.setEnabled(enabled) register_options_page(CoverOptionsPage)
self.ui.track_ars.setChecked(config.setting["track_ars"]) self.ui.folksonomy_tags.setChecked(config.setting["folksonomy_tags"]) self.ui.va_name.setText(config.setting["va_name"]) self.ui.nat_name.setText(config.setting["nat_name"]) self.ui.standardize_artists.setChecked(config.setting["standardize_artists"]) def save(self): config.setting["translate_artist_names"] = self.ui.translate_artist_names.isChecked() config.setting["artist_locale"] = self.ui.artist_locale.itemData(self.ui.artist_locale.currentIndex()) config.setting["convert_punctuation"] = self.ui.convert_punctuation.isChecked() config.setting["release_ars"] = self.ui.release_ars.isChecked() config.setting["track_ars"] = self.ui.track_ars.isChecked() config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked() config.setting["va_name"] = self.ui.va_name.text() nat_name = unicode(self.ui.nat_name.text()) if nat_name != config.setting["nat_name"]: config.setting["nat_name"] = nat_name self.tagger.nats.update() config.setting["standardize_artists"] = self.ui.standardize_artists.isChecked() def set_va_name_default(self): self.ui.va_name.setText(self.options[0].default) self.ui.va_name.setCursorPosition(0) def set_nat_name_default(self): self.ui.nat_name.setText(self.options[1].default) self.ui.nat_name.setCursorPosition(0) register_options_page(MetadataOptionsPage)
"remove_ape_from_aac"] = self.ui.remove_ape_from_aac.isChecked() config.setting["ac3_save_ape"] = self.ui.ac3_save_ape.isChecked() config.setting[ "remove_ape_from_ac3"] = self.ui.remove_ape_from_ac3.isChecked() config.setting[ "write_wave_riff_info"] = self.ui.write_wave_riff_info.isChecked() config.setting[ "remove_wave_riff_info"] = self.ui.remove_wave_riff_info.isChecked( ) if self.ui.wave_riff_info_enc_utf8.isChecked(): config.setting["wave_riff_info_encoding"] = "utf-8" else: config.setting["wave_riff_info_encoding"] = "windows-1252" def update_encodings(self, force_utf8=False): if self.ui.write_id3v23.isChecked(): if self.ui.enc_utf8.isChecked(): self.ui.enc_utf16.setChecked(True) self.ui.enc_utf8.setEnabled(False) self.ui.label_id3v23_join_with.setEnabled(True) self.ui.id3v23_join_with.setEnabled(True) else: self.ui.enc_utf8.setEnabled(True) if force_utf8: self.ui.enc_utf8.setChecked(True) self.ui.label_id3v23_join_with.setEnabled(False) self.ui.id3v23_join_with.setEnabled(False) register_options_page(TagsCompatibilityOptionsPage)
config.BoolOption("setting", "folksonomy_tags", False), ] def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_GenresOptionsPage() self.ui.setupUi(self) def load(self): self.ui.use_genres.setChecked(config.setting["use_genres"]) self.ui.max_genres.setValue(config.setting["max_genres"]) self.ui.min_genre_usage.setValue(config.setting["min_genre_usage"]) self.ui.join_genres.setEditText(config.setting["join_genres"]) self.ui.ignore_genres.setText(config.setting["ignore_genres"]) self.ui.only_my_genres.setChecked(config.setting["only_my_genres"]) self.ui.artists_genres.setChecked(config.setting["artists_genres"]) self.ui.folksonomy_tags.setChecked(config.setting["folksonomy_tags"]) def save(self): config.setting["use_genres"] = self.ui.use_genres.isChecked() config.setting["max_genres"] = self.ui.max_genres.value() config.setting["min_genre_usage"] = self.ui.min_genre_usage.value() config.setting["join_genres"] = self.ui.join_genres.currentText() config.setting["ignore_genres"] = self.ui.ignore_genres.text() config.setting["only_my_genres"] = self.ui.only_my_genres.isChecked() config.setting["artists_genres"] = self.ui.artists_genres.isChecked() config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked() register_options_page(GenresOptionsPage)
def update_login_logout(self): if self.tagger.webservice.oauth_manager.is_logged_in(): self.ui.logged_in.setText( _("Logged in as <b>%s</b>.") % config.persist["oauth_username"]) self.ui.logged_in.show() self.ui.login.hide() self.ui.logout.show() else: self.ui.logged_in.hide() self.ui.login.show() self.ui.logout.hide() def login(self): self.tagger.mb_login(self.on_login_finished, self) def restore_defaults(self): super().restore_defaults() self.logout() def on_login_finished(self, successful): self.update_login_logout() def logout(self): self.tagger.mb_logout() self.update_login_logout() register_options_page(GeneralOptionsPage)
TextOption("setting", "fanarttv_client_key", ""), TextOption("setting", "fanarttv_use_cdart", OPTION_CDART_NOALBUMART), ] def __init__(self, parent=None): super(FanartTvOptionsPage, self).__init__(parent) self.ui = Ui_FanartTvOptionsPage() self.ui.setupUi(self) def load(self): self.ui.fanarttv_client_key.setText(config.setting["fanarttv_client_key"]) if config.setting["fanarttv_use_cdart"] == OPTION_CDART_ALWAYS: self.ui.fanarttv_cdart_use_always.setChecked(True) elif config.setting["fanarttv_use_cdart"] == OPTION_CDART_NEVER: self.ui.fanarttv_cdart_use_never.setChecked(True) elif config.setting["fanarttv_use_cdart"] == OPTION_CDART_NOALBUMART: self.ui.fanarttv_cdart_use_if_no_albumcover.setChecked(True) def save(self): config.setting["fanarttv_client_key"] = unicode(self.ui.fanarttv_client_key.text()) if self.ui.fanarttv_cdart_use_always.isChecked(): config.setting["fanarttv_use_cdart"] = OPTION_CDART_ALWAYS elif self.ui.fanarttv_cdart_use_never.isChecked(): config.setting["fanarttv_use_cdart"] = OPTION_CDART_NEVER elif self.ui.fanarttv_cdart_use_if_no_albumcover.isChecked(): config.setting["fanarttv_use_cdart"] = OPTION_CDART_NOALBUMART register_cover_art_provider(CoverArtProviderFanartTv) register_options_page(FanartTvOptionsPage)
options = [ BoolOption("setting", "lastfm_use_track_tags", False), BoolOption("setting", "lastfm_use_artist_tags", False), IntOption("setting", "lastfm_min_tag_usage", 15), TextOption("setting", "lastfm_ignore_tags", "seen live,favorites"), TextOption("setting", "lastfm_join_tags", ""), ] def __init__(self, parent=None): super(LastfmOptionsPage, self).__init__(parent) self.ui = Ui_LastfmOptionsPage() self.ui.setupUi(self) def load(self): self.ui.use_track_tags.setChecked(self.config.setting["lastfm_use_track_tags"]) self.ui.use_artist_tags.setChecked(self.config.setting["lastfm_use_artist_tags"]) self.ui.min_tag_usage.setValue(self.config.setting["lastfm_min_tag_usage"]) self.ui.ignore_tags.setText(self.config.setting["lastfm_ignore_tags"]) self.ui.join_tags.setEditText(self.config.setting["lastfm_join_tags"]) def save(self): self.config.setting["lastfm_use_track_tags"] = self.ui.use_track_tags.isChecked() self.config.setting["lastfm_use_artist_tags"] = self.ui.use_artist_tags.isChecked() self.config.setting["lastfm_min_tag_usage"] = self.ui.min_tag_usage.value() self.config.setting["lastfm_ignore_tags"] = unicode(self.ui.ignore_tags.text()) self.config.setting["lastfm_join_tags"] = unicode(self.ui.join_tags.currentText()) register_track_metadata_processor(process_track) register_options_page(LastfmOptionsPage)
self.ui.setupUi(self) self.ui.code.textChanged.connect(self.check_code) def load(self): self.ui.code.setPlainText(self.config.setting["iprefersnakes_code"]) def save(self): self.config.setting["iprefersnakes_code"] = self.ui.code.toPlainText() def check(self): code = self.ui.code.toPlainText() try: compile_code(code) except SyntaxError as e: raise OptionsCheckError("Compilation failure", e) def check_code(self): self.ui.code_error.setStyleSheet("") self.ui.code_error.setText("") code = self.ui.code.toPlainText() try: compile_code(code) except SyntaxError as e: # We add some lines at the top, substract them again e.lineno = e.lineno - 3 self.ui.code_error.setStyleSheet(self.STYLESHEET_ERROR) self.ui.code_error.setText(e) register_options_page(IPreferSnakesOptionsPage)
class MetaFlacReplayGainRemove(BaseAction): NAME = _("MetaFlac:: &Remove ReplayGain information from files...") def callback(self, objs): run_MetaFlac('--remove-replay-gain', get_files(objs), self.tagger) class MetaFlacReplayGainOptionsPage(OptionsPage): NAME = "metaflac_rgscan" TITLE = "MetaFlac ReplayGain" PARENT = "plugins" options = [ TextOption('setting', 'metaflac_rgscan_metaflac_path', get_metaflac_path()), ] def __init__(self, parent=None): super(MetaFlacReplayGainOptionsPage, self).__init__(parent) self.ui = Ui_MetaFlacReplayGainOptionsPage() self.ui.setupUi(self) def load(self): self.ui.metaflac_path.setText(self.config.setting['metaflac_rgscan_metaflac_path']) def save(self): self.config.setting['metaflac_rgscan_metaflac_path'] = unicode(self.ui.metaflac_path.text()) register_file_action(MetaFlacReplayGainScanTrack()) register_file_action(MetaFlacReplayGainRemove()) register_album_action(MetaFlacReplayGainScanAlbumByTags()) register_album_action(MetaFlacReplayGainRemove()) register_options_page(MetaFlacReplayGainOptionsPage)
options = [ BoolOption("setting", "use_proxy", False), TextOption("setting", "proxy_server_host", ""), IntOption("setting", "proxy_server_port", 80), TextOption("setting", "proxy_username", ""), TextOption("setting", "proxy_password", ""), ] def __init__(self, parent=None): super(ProxyOptionsPage, self).__init__(parent) self.ui = Ui_ProxyOptionsPage() self.ui.setupUi(self) def load(self): self.ui.web_proxy.setChecked(self.config.setting["use_proxy"]) self.ui.server_host.setText(self.config.setting["proxy_server_host"]) self.ui.server_port.setValue(self.config.setting["proxy_server_port"]) self.ui.username.setText(self.config.setting["proxy_username"]) self.ui.password.setText(self.config.setting["proxy_password"]) def save(self): self.config.setting["use_proxy"] = self.ui.web_proxy.isChecked() self.config.setting["proxy_server_host"] = unicode(self.ui.server_host.text()) self.config.setting["proxy_server_port"] = self.ui.server_port.value() self.config.setting["proxy_username"] = unicode(self.ui.username.text()) self.config.setting["proxy_password"] = unicode(self.ui.password.text()) self.tagger.xmlws.setup_proxy() register_options_page(ProxyOptionsPage)
SORT_ORDER = 20 ACTIVE = True HELP_URL = '/config/options_ratings.html' options = [ BoolOption("setting", "enable_ratings", False), TextOption("setting", "rating_user_email", "*****@*****.**"), BoolOption("setting", "submit_ratings", True), IntOption("setting", "rating_steps", 6), ] def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_RatingsOptionsPage() self.ui.setupUi(self) def load(self): config = get_config() self.ui.enable_ratings.setChecked(config.setting["enable_ratings"]) self.ui.rating_user_email.setText(config.setting["rating_user_email"]) self.ui.submit_ratings.setChecked(config.setting["submit_ratings"]) def save(self): config = get_config() config.setting["enable_ratings"] = self.ui.enable_ratings.isChecked() config.setting["rating_user_email"] = self.ui.rating_user_email.text() config.setting["submit_ratings"] = self.ui.submit_ratings.isChecked() register_options_page(RatingsOptionsPage)
options = [ IntOption("setting", "bpm_slider_parameter", 1) ] def __init__(self, parent=None): super(BPMOptionsPage, self).__init__(parent) self.ui = Ui_BPMOptionsPage() self.ui.setupUi(self) self.ui.slider_parameter.valueChanged.connect(self.update_parameters) def load(self): cfg = self.config.setting self.ui.slider_parameter.setValue(cfg["bpm_slider_parameter"]) def save(self): cfg = self.config.setting cfg["bpm_slider_parameter"] = self.ui.slider_parameter.value() def update_parameters(self): val = self.ui.slider_parameter.value() samplerate, buf_size, hop_size = [unicode(v) for v in bpm_slider_settings[val]] self.ui.samplerate_value.setText(samplerate) self.ui.win_s_value.setText(buf_size) self.ui.hop_s_value.setText(hop_size) register_file_action(FileBPM()) register_options_page(BPMOptionsPage)
def __init__(self, parent=None): super(CDLookupOptionsPage, self).__init__(parent) self.ui = Ui_CDLookupOptionsPage() self.ui.setupUi(self) if AUTO_DETECT_DRIVES: self.drives = get_cdrom_drives() self.ui.cd_lookup_device.addItems(self.drives) def load(self): if AUTO_DETECT_DRIVES: try: self.ui.cd_lookup_device.setCurrentIndex( self.drives.index(config.setting["cd_lookup_device"])) except ValueError: pass else: self.ui.cd_lookup_device.setText( config.setting["cd_lookup_device"]) def save(self): if AUTO_DETECT_DRIVES: config.setting["cd_lookup_device"] = unicode( self.ui.cd_lookup_device.currentText()) else: config.setting["cd_lookup_device"] = unicode( self.ui.cd_lookup_device.text()) register_options_page(CDLookupOptionsPage)
file.metadata['~primaryreleasetype'] = ['album'] file.metadata['~secondaryreleasetype'] = ['compilation'] file.metadata['releasestatus'] = 'official' file.metadata['releasecountry'] = 'US' file.metadata['compilation'] = '1' file.metadata['~extension'] = 'mp3' file.metadata['musicbrainz_albumid'] = 'bcc97e8a-2055-400b-a6ed-83288285c6fc' file.metadata['musicbrainz_albumartistid'] = '89ad4ac3-39f7-470e-963a-56509c546377' file.metadata['musicbrainz_artistid'] = '06704773-aafe-4aca-8833-b449e0a6467f' file.metadata['musicbrainz_recordingid'] = 'd92837ee-b1e4-4649-935f-e433c3e5e429' file.metadata['musicbrainz_releasetrackid'] = 'eac99807-93d4-3668-9714-fa0c1b487ccf' return file def move_files_to_browse(self): path = QtGui.QFileDialog.getExistingDirectory(self, "", self.ui.move_files_to.text()) if path: path = os.path.normpath(unicode(path)) self.ui.move_files_to.setText(path) def test(self): self.ui.renaming_error.setStyleSheet("") self.ui.renaming_error.setText("") try: self.check_format() except OptionsCheckError as e: self.ui.renaming_error.setStyleSheet(self.STYLESHEET_ERROR) self.ui.renaming_error.setText(e.info) return register_options_page(RenamingOptionsPage)
source.items()] elif setting == "preferred_release_formats": source_list = [(c[0], ugettext_attr(c[1], u"medium_format")) for c in source.items()] else: source_list = [(c[0], _(c[1])) for c in source.items()] source_list.sort(key=itemgetter(1), cmp=strcoll) saved_data = config.setting[setting] move = [] for data, name in source_list: item = QtGui.QListWidgetItem(name) item.setData(QtCore.Qt.UserRole, data) try: i = saved_data.index(data) move.append((i, item)) except: list1.addItem(item) move.sort(key=itemgetter(0)) for i, item in move: list2.addItem(item) def _save_list_items(self, setting, list1): data = [] for i in range(list1.count()): item = list1.item(i) data.append(unicode(item.data(QtCore.Qt.UserRole))) config.setting[setting] = data register_options_page(ReleasesOptionsPage)
options = [ TextOption("setting", "cd_lookup_device", ""), ] def __init__(self, parent=None): super(CDLookupOptionsPage, self).__init__(parent) self.ui = Ui_CDLookupOptionsPage() self.ui.setupUi(self) if AUTO_DETECT_DRIVES: self.drives = get_cdrom_drives() self.ui.cd_lookup_device.addItems(self.drives) def load(self): if AUTO_DETECT_DRIVES: try: self.ui.cd_lookup_device.setCurrentIndex(self.drives.index(self.config.setting["cd_lookup_device"])) except ValueError: pass else: self.ui.cd_lookup_device.setText(self.config.setting["cd_lookup_device"]) def save(self): if AUTO_DETECT_DRIVES: self.config.setting["cd_lookup_device"] = unicode(self.ui.cd_lookup_device.currentText()) else: self.config.setting["cd_lookup_device"] = unicode(self.ui.cd_lookup_device.text()) register_options_page(CDLookupOptionsPage)
def register_cover_art_provider(provider): _cover_art_providers.register(provider.__module__, provider) if hasattr(provider, 'OPTIONS') and provider.OPTIONS: provider.OPTIONS.NAME = provider.name provider.OPTIONS.TITLE = provider.title register_options_page(provider.OPTIONS)
button = ColorButton(color_value) button.color_changed.connect(partial(color_changed, color_key)) hlayout.addWidget(button, 0, QtCore.Qt.AlignRight) widget.setLayout(hlayout) self.colors_list.addWidget(widget) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.colors_list.addItem(spacerItem1) def load(self): interface_colors.load_from_config() self.update_color_selectors() def save(self): if interface_colors.save_to_config(): dialog = QtWidgets.QMessageBox( QtWidgets.QMessageBox.Information, _('Colors changed'), _('You have changed the interface colors. You may have to restart Picard in order for the changes to take effect.' ), QtWidgets.QMessageBox.Ok, self) dialog.exec_() def restore_defaults(self): interface_colors.set_default_colors() self.update_color_selectors() register_options_page(InterfaceColorsOptionsPage)
self.config.setting["fingerprinting_system"] = "acoustid" else: self.config.setting["fingerprinting_system"] = "" self.config.setting["acoustid_fpcalc"] = unicode(self.ui.acoustid_fpcalc.text()) self.config.setting["acoustid_apikey"] = unicode(self.ui.acoustid_apikey.text()) def update_groupboxes(self): if self.ui.use_acoustid.isChecked(): self.ui.acoustid_settings.setEnabled(True) if self.ui.acoustid_fpcalc.text().isEmpty(): fpcalc_path = find_executable(*FPCALC_NAMES) if fpcalc_path: self.ui.acoustid_fpcalc.setText(fpcalc_path) else: self.ui.acoustid_settings.setEnabled(False) def acoustid_fpcalc_browse(self): path = QtGui.QFileDialog.getOpenFileName(self, "", self.ui.acoustid_fpcalc.text()) if path: path = os.path.normpath(unicode(path)) self.ui.acoustid_fpcalc.setText(path) def acoustid_fpcalc_download(self): webbrowser2.open("http://acoustid.org/chromaprint#download") def acoustid_apikey_get(self): webbrowser2.open("http://acoustid.org/api-key") register_options_page(FingerprintingOptionsPage)
_("Error"), _("The location to move files to must not be empty.")) def save(self): self.config.setting["move_files"] = self.ui.move_files.isChecked() self.config.setting["move_files_to"] = os.path.normpath( unicode(self.ui.move_files_to.text())) self.config.setting[ "move_additional_files"] = self.ui.move_additional_files.isChecked( ) self.config.setting["move_additional_files_pattern"] = unicode( self.ui.move_additional_files_pattern.text()) self.config.setting[ "delete_empty_dirs"] = self.ui.delete_empty_dirs.isChecked() self.tagger.window.enable_moving_action.setChecked( self.config.setting["move_files"]) def move_files_to_browse(self): path = QtGui.QFileDialog.getExistingDirectory( self, "", self.ui.move_files_to.text()) if path: path = os.path.normpath(unicode(path)) self.ui.move_files_to.setText(path) def update_move_additional_files(self): self.ui.move_additional_files_pattern.setEnabled( self.ui.move_additional_files.isChecked()) register_options_page(MovingOptionsPage)
def save(self): config.setting[ "translate_artist_names"] = self.ui.translate_artist_names.isChecked( ) config.setting["artist_locale"] = self.ui.artist_locale.itemData( self.ui.artist_locale.currentIndex()) config.setting[ "convert_punctuation"] = self.ui.convert_punctuation.isChecked() config.setting["release_ars"] = self.ui.release_ars.isChecked() config.setting["track_ars"] = self.ui.track_ars.isChecked() config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked() config.setting["va_name"] = self.ui.va_name.text() nat_name = unicode(self.ui.nat_name.text()) if nat_name != config.setting["nat_name"]: config.setting["nat_name"] = nat_name self.tagger.nats.update() config.setting[ "standardize_artists"] = self.ui.standardize_artists.isChecked() def set_va_name_default(self): self.ui.va_name.setText(self.options[0].default) self.ui.va_name.setCursorPosition(0) def set_nat_name_default(self): self.ui.nat_name.setText(self.options[1].default) self.ui.nat_name.setCursorPosition(0) register_options_page(MetadataOptionsPage)
} instruments_example = self.build_example(instruments_credits, word_dict, settings) self.ui.example_instruments.setText(instruments_example) vocals_credits = { "additional solo lead vocals": ["Robert Plant"], "additional solo guest lead vocals": ["Sandy Denny"], } vocals_example = self.build_example(vocals_credits, word_dict, settings) self.ui.example_vocals.setText(vocals_example) @staticmethod def build_example(credits, word_dict, settings): prefix = "performer:" metadata = Metadata() for key, values in credits.items(): rewrite_tag(prefix + key, values, metadata, word_dict, settings) examples = [] for key, values in metadata.rawitems(): credit = "%s: %s" % (key, ", ".join(values)) if credit.startswith(prefix): credit = credit[len(prefix):] examples.append(credit) return "\n".join(examples) # Register the plugin to run at a HIGH priority. register_track_metadata_processor(format_performer_tags, priority=PluginPriority.HIGH) register_options_page(FormatPerformerTagsOptionsPage)
options = [ BoolOption('setting', 'norelease_enable', False), TextOption('setting', 'norelease_strip_tags', 'asin,barcode,catalognumber,date,label,media,releasecountry,releasestatus'), ] def __init__(self, parent=None): super(NoReleaseOptionsPage, self).__init__(parent) self.ui = Ui_NoReleaseOptionsPage() self.ui.setupUi(self) def load(self): self.ui.norelease_strip_tags.setText(self.config.setting['norelease_strip_tags']) self.ui.norelease_enable.setChecked(self.config.setting['norelease_enable']) def save(self): self.config.setting['norelease_strip_tags'] = unicode(self.ui.norelease_strip_tags.text()) self.config.setting['norelease_enable'] = self.ui.norelease_enable.isChecked() def NoReleaseAlbumProcessor(tagger, metadata, release): if tagger.config.setting['norelease_enable']: strip_release_specific_metadata(tagger, metadata) def NoReleaseTrackProcessor(tagger, metadata, track, release): if tagger.config.setting['norelease_enable']: strip_release_specific_metadata(tagger, metadata) register_album_metadata_processor(NoReleaseAlbumProcessor) register_track_metadata_processor(NoReleaseTrackProcessor) register_album_action(NoReleaseAction()) register_options_page(NoReleaseOptionsPage)
TITLE = N_("Matching") PARENT = "advanced" SORT_ORDER = 30 ACTIVE = True options = [ FloatOption("setting", "file_lookup_threshold", 0.7), FloatOption("setting", "cluster_lookup_threshold", 0.8), FloatOption("setting", "track_matching_threshold", 0.4), ] _release_type_sliders = {} def __init__(self, parent=None): super(MatchingOptionsPage, self).__init__(parent) self.ui = Ui_MatchingOptionsPage() self.ui.setupUi(self) def load(self): self.ui.file_lookup_threshold.setValue(int(self.config.setting["file_lookup_threshold"] * 100)) self.ui.cluster_lookup_threshold.setValue(int(self.config.setting["cluster_lookup_threshold"] * 100)) self.ui.track_matching_threshold.setValue(int(self.config.setting["track_matching_threshold"] * 100)) def save(self): self.config.setting["file_lookup_threshold"] = float(self.ui.file_lookup_threshold.value()) / 100.0 self.config.setting["cluster_lookup_threshold"] = float(self.ui.cluster_lookup_threshold.value()) / 100.0 self.config.setting["track_matching_threshold"] = float(self.ui.track_matching_threshold.value()) / 100.0 register_options_page(MatchingOptionsPage)
class Foobar2000ReplayGainRemove(BaseAction): NAME = _("Foobar2000: &Remove ReplayGain information from files...") def callback(self, objs): run_foobar2000('remove', get_files(objs), self.tagger) class Foobar2000ReplayGainOptionsPage(OptionsPage): NAME = "f2k_rgscan" TITLE = "Foobar2000 ReplayGain" PARENT = "plugins" options = [ TextOption('setting', 'f2k_rgscan_foobar2000_path', get_foobar2000_path()), ] def __init__(self, parent=None): super(Foobar2000ReplayGainOptionsPage, self).__init__(parent) self.ui = Ui_Foobar2000ReplayGainOptionsPage() self.ui.setupUi(self) def load(self): self.ui.foobar2000_path.setText(self.config.setting['f2k_rgscan_foobar2000_path']) def save(self): self.config.setting['f2k_rgscan_foobar2000_path'] = unicode(self.ui.foobar2000_path.text()) register_file_action(Foobar2000ReplayGainScanTrack()) register_file_action(Foobar2000ReplayGainRemove()) register_album_action(Foobar2000ReplayGainScanAlbumByTags()) register_album_action(Foobar2000ReplayGainRemove()) register_options_page(Foobar2000ReplayGainOptionsPage)
config.setting[ "ignore_hidden_files"] = self.ui.ignore_hidden_files.isChecked() config.setting[ "recursively_add_files"] = self.ui.recursively_add_files.isChecked( ) config.setting[ "ignore_track_duration_difference_under"] = self.ui.ignore_track_duration_difference_under.value( ) config.setting[ "completeness_ignore_videos"] = self.ui.completeness_ignore_videos.isChecked( ) config.setting[ "completeness_ignore_pregap"] = self.ui.completeness_ignore_pregap.isChecked( ) config.setting[ "completeness_ignore_data"] = self.ui.completeness_ignore_data.isChecked( ) config.setting[ "completeness_ignore_silence"] = self.ui.completeness_ignore_silence.isChecked( ) tags = list(self.ui.compare_ignore_tags.tags) if tags != config.setting["compare_ignore_tags"]: config.setting["compare_ignore_tags"] = tags def restore_defaults(self): self.ui.compare_ignore_tags.clear() super().restore_defaults() register_options_page(AdvancedOptionsPage)
super(AddActionDialog, self).__init__(*args, **kwargs) layout = QtWidgets.QVBoxLayout(self) self.action_list = sorted([[_(self.parent().TOOLBAR_BUTTONS[action]['label']), action] for action in action_list]) self.combo_box = QtWidgets.QComboBox(self) self.combo_box.addItems([label for label, action in self.action_list]) layout.addWidget(self.combo_box) buttons = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) def selected_action(self): return self.action_list[self.combo_box.currentIndex()][1] @staticmethod def get_selected_action(action_list, parent=None): dialog = AddActionDialog(action_list, parent) result = dialog.exec_() selected_action = dialog.selected_action() return (selected_action, result == QtWidgets.QDialog.Accepted) register_options_page(InterfaceOptionsPage)
TextOption("setting", "moodbar_wav_command", "moodbar"), TextOption("setting", "moodbar_wav_options", "-o") ] def __init__(self, parent=None): super(MoodbarOptionsPage, self).__init__(parent) self.ui = Ui_MoodbarOptionsPage() self.ui.setupUi(self) def load(self): self.ui.vorbis_command.setText( self.config.setting["moodbar_vorbis_command"]) self.ui.mp3_command.setText(self.config.setting["moodbar_mp3_command"]) self.ui.flac_command.setText( self.config.setting["moodbar_flac_command"]) self.ui.wav_command.setText(self.config.setting["moodbar_wav_command"]) def save(self): self.config.setting["moodbar_vorbis_command"] = unicode( self.ui.vorbis_command.text()) self.config.setting["moodbar_mp3_command"] = unicode( self.ui.mp3_command.text()) self.config.setting["moodbar_flac_command"] = unicode( self.ui.flac_command.text()) self.config.setting["moodbar_wav_command"] = unicode( self.ui.wav_command.text()) register_file_action(MoodBar()) register_options_page(MoodbarOptionsPage)
if extractor_path: version = ab_check_version(extractor_path) if version: if try_find: # extractor path will not be saved to config file if it was auto-detected self.ui.acousticbrainz_extractor.clear() self.ui.acousticbrainz_extractor.setPlaceholderText(extractor_path) self._acousticbrainz_extractor_set_success(_("Extractor version: %s") % version) return self._acousticbrainz_extractor_set_error() def _acousticbrainz_extractor_set_success(self, version): self._extractor_valid = True self.ui.acousticbrainz_extractor_info.setStyleSheet("") self.ui.acousticbrainz_extractor_info.setText(version) def _acousticbrainz_extractor_set_error(self): self._extractor_valid = False self.ui.acousticbrainz_extractor_info.setStyleSheet(self.STYLESHEET_ERROR) self.ui.acousticbrainz_extractor_info.setText(_("Please select a valid extractor executable.")) def check(self): if not self._extractor_valid: raise OptionsCheckError(_("Invalid extractor executable"), _("Please select a valid extractor executable.")) def display_error(self, error): pass register_options_page(AcousticBrainzOptionsPage)
if self.ui.enc_utf8.isChecked(): self.ui.enc_utf16.setChecked(True) self.ui.enc_utf8.setEnabled(False) self.ui.label_id3v23_join_with.setEnabled(True) self.ui.id3v23_join_with.setEnabled(True) else: self.ui.enc_utf8.setEnabled(True) if force_utf8: self.ui.enc_utf8.setChecked(True) self.ui.label_id3v23_join_with.setEnabled(False) self.ui.id3v23_join_with.setEnabled(False) def preserved_tags_edited(self, text): prefix = text[:self.ui.preserved_tags.cursorPosition()].split(",")[-1] self.completer.setCompletionPrefix(prefix) if prefix: self.completer.complete() else: self.completer.popup().hide() def completer_activated(self, text): input_field = self.ui.preserved_tags current = input_field.text() i = input_field.cursorPosition() p = len(self.completer.completionPrefix()) input_field.setText("%s%s %s" % (current[:i - p], text, current[i:])) input_field.setCursorPosition(i - p + len(text) + 1) register_options_page(TagsOptionsPage)
config.IntOption("setting", "min_tag_usage", 90), config.TextOption("setting", "ignore_tags", "seen live,favorites,fixme,owned"), config.TextOption("setting", "join_tags", ""), config.BoolOption("setting", "only_my_tags", False), config.BoolOption("setting", "artists_tags", False), ] def __init__(self, parent=None): super(FolksonomyOptionsPage, self).__init__(parent) self.ui = Ui_FolksonomyOptionsPage() self.ui.setupUi(self) def load(self): self.ui.max_tags.setValue(config.setting["max_tags"]) self.ui.min_tag_usage.setValue(config.setting["min_tag_usage"]) self.ui.join_tags.setEditText(config.setting["join_tags"]) self.ui.ignore_tags.setText(config.setting["ignore_tags"]) self.ui.only_my_tags.setChecked(config.setting["only_my_tags"]) self.ui.artists_tags.setChecked(config.setting["artists_tags"]) def save(self): config.setting["max_tags"] = self.ui.max_tags.value() config.setting["min_tag_usage"] = self.ui.min_tag_usage.value() config.setting["join_tags"] = self.ui.join_tags.currentText() config.setting["ignore_tags"] = self.ui.ignore_tags.text() config.setting["only_my_tags"] = self.ui.only_my_tags.isChecked() config.setting["artists_tags"] = self.ui.artists_tags.isChecked() register_options_page(FolksonomyOptionsPage)
update=update, plugin_name=plugin.module_name, plugin_data=response, ) @staticmethod def open_plugin_dir(): if sys.platform == 'win32': url = 'file:///' + USER_PLUGIN_DIR else: url = 'file://' + USER_PLUGIN_DIR QtGui.QDesktopServices.openUrl( QtCore.QUrl(url, QtCore.QUrl.TolerantMode)) def mimeTypes(self): return ["text/uri-list"] def dragEnterEvent(self, event): event.setDropAction(QtCore.Qt.CopyAction) event.accept() def dropEvent(self, event): for path in [ os.path.normpath(u.toLocalFile()) for u in event.mimeData().urls() ]: self.manager.install_plugin(path) register_options_page(PluginsOptionsPage)
babel_415_workaround_list = [] for action in action_list: babel_415_workaround = self.parent( ).TOOLBAR_BUTTONS[action]['label'] babel_415_workaround_list.append([_(babel_415_workaround), action]) self.action_list = sorted(babel_415_workaround_list) self.combo_box = QtWidgets.QComboBox(self) self.combo_box.addItems([label for label, action in self.action_list]) layout.addWidget(self.combo_box) buttons = QtWidgets.QDialogButtonBox( QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel, QtCore.Qt.Horizontal, self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) def selected_action(self): return self.action_list[self.combo_box.currentIndex()][1] @staticmethod def get_selected_action(action_list, parent=None): dialog = AddActionDialog(action_list, parent) result = dialog.exec_() selected_action = dialog.selected_action() return (selected_action, result == QtWidgets.QDialog.Accepted) register_options_page(InterfaceOptionsPage)
config.FloatOption("setting", "file_lookup_threshold", 0.7), config.FloatOption("setting", "cluster_lookup_threshold", 0.7), config.FloatOption("setting", "track_matching_threshold", 0.4), ] _release_type_sliders = {} def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_MatchingOptionsPage() self.ui.setupUi(self) def load(self): self.ui.file_lookup_threshold.setValue( int(config.setting["file_lookup_threshold"] * 100)) self.ui.cluster_lookup_threshold.setValue( int(config.setting["cluster_lookup_threshold"] * 100)) self.ui.track_matching_threshold.setValue( int(config.setting["track_matching_threshold"] * 100)) def save(self): config.setting["file_lookup_threshold"] = float( self.ui.file_lookup_threshold.value()) / 100.0 config.setting["cluster_lookup_threshold"] = float( self.ui.cluster_lookup_threshold.value()) / 100.0 config.setting["track_matching_threshold"] = float( self.ui.track_matching_threshold.value()) / 100.0 register_options_page(MatchingOptionsPage)
options = [ IntOption("setting", "max_tags", 5), IntOption("setting", "min_tag_usage", 90), TextOption("setting", "ignore_tags", "seen live,favorites,fixme,owned"), TextOption("setting", "join_tags", ""), BoolOption("setting", "only_my_tags", False), ] def __init__(self, parent=None): super(FolksonomyOptionsPage, self).__init__(parent) self.ui = Ui_FolksonomyOptionsPage() self.ui.setupUi(self) def load(self): self.ui.max_tags.setValue(self.config.setting["max_tags"]) self.ui.min_tag_usage.setValue(self.config.setting["min_tag_usage"]) self.ui.join_tags.setEditText(self.config.setting["join_tags"]) self.ui.ignore_tags.setText(self.config.setting["ignore_tags"]) self.ui.only_my_tags.setChecked(self.config.setting["only_my_tags"]) def save(self): self.config.setting["max_tags"] = self.ui.max_tags.value() self.config.setting["min_tag_usage"] = self.ui.min_tag_usage.value() self.config.setting["join_tags"] = self.ui.join_tags.currentText() self.config.setting["ignore_tags"] = self.ui.ignore_tags.text() self.config.setting["only_my_tags"] = self.ui.only_my_tags.isChecked() register_options_page(FolksonomyOptionsPage)
] def __init__(self, parent=None): super(LastfmOptionsPage, self).__init__(parent) self.ui = Ui_LastfmOptionsPage() self.ui.setupUi(self) def load(self): setting = config.setting self.ui.use_track_tags.setChecked(setting["lastfm_use_track_tags"]) self.ui.use_artist_tags.setChecked(setting["lastfm_use_artist_tags"]) self.ui.min_tag_usage.setValue(setting["lastfm_min_tag_usage"]) self.ui.ignore_tags.setText(setting["lastfm_ignore_tags"]) self.ui.join_tags.setEditText(setting["lastfm_join_tags"]) def save(self): global _cache setting = config.setting if setting["lastfm_min_tag_usage"] != self.ui.min_tag_usage.value() \ or setting["lastfm_ignore_tags"] != str(self.ui.ignore_tags.text()): _cache = {} setting["lastfm_use_track_tags"] = self.ui.use_track_tags.isChecked() setting["lastfm_use_artist_tags"] = self.ui.use_artist_tags.isChecked() setting["lastfm_min_tag_usage"] = self.ui.min_tag_usage.value() setting["lastfm_ignore_tags"] = str(self.ui.ignore_tags.text()) setting["lastfm_join_tags"] = str(self.ui.join_tags.currentText()) register_track_metadata_processor(process_track) register_options_page(LastfmOptionsPage)
self.ui = Ui_AdvancedOptionsPage() self.ui.setupUi(self) self.ui.ignore_regex.textChanged.connect(self.live_checker) def load(self): self.ui.ignore_regex.setText(config.setting["ignore_regex"]) self.ui.ignore_hidden_files.setChecked(config.setting["ignore_hidden_files"]) def save(self): config.setting["ignore_regex"] = unicode(self.ui.ignore_regex.text()) config.setting["ignore_hidden_files"] = self.ui.ignore_hidden_files.isChecked() def live_checker(self, text): self.ui.regex_error.setStyleSheet("") self.ui.regex_error.setText("") try: self.check() except OptionsCheckError as e: self.ui.regex_error.setStyleSheet(self.STYLESHEET_ERROR) self.ui.regex_error.setText(e.info) return def check(self): try: re.compile(unicode(self.ui.ignore_regex.text())) except re.error as e: raise OptionsCheckError(_("Regex Error"), str(e)) register_options_page(AdvancedOptionsPage)
class EchoNestOptionsPage(OptionsPage): NAME = "echonest" TITLE = "echonest" PARENT = "plugins" options = [ BoolOption("setting", "echonest_upload", False), BoolOption("setting", "echonest_artist_title_lookup", True), FloatOption("setting", "echonest_duration_diff", 5.0), ] def __init__(self, parent=None): super(EchoNestOptionsPage, self).__init__(parent) self.ui = Ui_EchoNestOptionsPage() self.ui.setupUi(self) def load(self): #self.ui.echonest_upload.setChecked(self.config.setting["echonest_upload"]) self.ui.echonest_artist_title_lookup.setChecked(self.config.setting["echonest_artist_title_lookup"]) #self.ui.echonest_duration_diff.setChecked(self.config.setting["echonest_duration_diff"]) def save(self): #self.config.setting["echonest_upload"] = self.ui.echonest_upload.isChecked() self.config.setting["echonest_artist_title_lookup"] = self.ui.echonest_artist_title_lookup.isChecked() #self.config.setting["echonest_duration_diff"] = self.ui.echonest_duration_diff.value() register_track_metadata_processor(process_track) register_options_page(EchoNestOptionsPage) # eof
NAME = "ratings" TITLE = N_("Ratings") PARENT = "metadata" SORT_ORDER = 20 ACTIVE = True options = [ config.BoolOption("setting", "enable_ratings", False), config.TextOption("setting", "rating_user_email", "*****@*****.**"), config.BoolOption("setting", "submit_ratings", True), config.IntOption("setting", "rating_steps", 6), ] def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_RatingsOptionsPage() self.ui.setupUi(self) def load(self): self.ui.enable_ratings.setChecked(config.setting["enable_ratings"]) self.ui.rating_user_email.setText(config.setting["rating_user_email"]) self.ui.submit_ratings.setChecked(config.setting["submit_ratings"]) def save(self): config.setting["enable_ratings"] = self.ui.enable_ratings.isChecked() config.setting["rating_user_email"] = self.ui.rating_user_email.text() config.setting["submit_ratings"] = self.ui.submit_ratings.isChecked() register_options_page(RatingsOptionsPage)
options = [BoolOption(r'setting', r'purgeUnmapped', False)] def __init__(self, parent=None): super().__init__(parent) self.box = QtWidgets.QVBoxLayout(self) self.purgeUnmapped = QtWidgets.QCheckBox(self) self.purgeUnmapped.setCheckable(True) self.purgeUnmapped.setChecked(False) self.purgeUnmapped.setText(r'Purge non-standard tags left unmapped') self.box.addWidget(self.purgeUnmapped) self.spacer = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.box.addItem(self.spacer) def load(self): self.purgeUnmapped.setChecked(config.setting[r'purgeUnmapped']) def save(self): config.setting[r'purgeUnmapped'] = self.purgeUnmapped.isChecked() register_file_post_addition_to_track_processor(AutoMapper().processFile, priority=PluginPriority.HIGH) register_file_post_load_processor(AutoMapper().processFileOnLoad, priority=110) # 110 > HIGH register_file_post_save_processor(AutoMapper().processFileAfterSaving, priority=PluginPriority.HIGH) # register_track_metadata_processor(AutoMapper().process) register_options_page(AutoMapperOptionsPage)
def save(self): if not self.ui.enable_cleanup.checkState() == QtCore.Qt.Checked: return to_remove = set(self.selected_options()) if to_remove and QtWidgets.QMessageBox.question( self, _('Confirm Remove'), _("Are you sure you want to remove the selected option settings?" ), ) == QtWidgets.QMessageBox.Yes: config = get_config() for item in to_remove: Option.add_if_missing('setting', item, None) log.warning("Removing option setting '%s' from the INI file.", item) config.setting.remove(item) def make_setting_value_text(self, key): config = get_config() value = config.setting.raw_value(key) return repr(value) def enable_cleanup_changed(self): state = self.ui.enable_cleanup.checkState() self.ui.select_all.setEnabled(state) self.ui.tableWidget.setEnabled(state) register_options_page(MaintenanceOptionsPage)
def live_checker(self): self.ui.script_error.setStyleSheet("") self.ui.script_error.setText("") try: self.check() except OptionsCheckError as e: self.ui.script_error.setStyleSheet(self.STYLESHEET_ERROR) self.ui.script_error.setText(e.info) return def check(self): parser = ScriptParser() try: parser.eval(unicode(self.ui.tagger_script.toPlainText())) except Exception as e: raise OptionsCheckError(_("Script Error"), str(e)) def load(self): self.ui.enable_tagger_script.setChecked(config.setting["enable_tagger_script"]) self.ui.tagger_script.document().setPlainText(config.setting["tagger_script"]) def save(self): config.setting["enable_tagger_script"] = self.ui.enable_tagger_script.isChecked() config.setting["tagger_script"] = self.ui.tagger_script.toPlainText() def display_error(self, error): pass register_options_page(ScriptingOptionsPage)
self.ui.browser_integration.setChecked(config.setting["browser_integration"]) self.ui.browser_integration_port.setValue(config.setting["browser_integration_port"]) self.ui.browser_integration_localhost_only.setChecked(config.setting["browser_integration_localhost_only"]) QtCore.QObject.connect( self.ui.browser_integration_port, QtCore.SIGNAL("valueChanged(int)"), self.change_browser_integration_port ) def save(self): config.setting["use_proxy"] = self.ui.web_proxy.isChecked() config.setting["proxy_server_host"] = unicode(self.ui.server_host.text()) config.setting["proxy_server_port"] = self.ui.server_port.value() config.setting["proxy_username"] = unicode(self.ui.username.text()) config.setting["proxy_password"] = unicode(self.ui.password.text()) self.tagger.xmlws.setup_proxy() config.setting["browser_integration"] = self.ui.browser_integration.isChecked() config.setting["browser_integration_port"] = self.ui.browser_integration_port.value() config.setting["browser_integration_localhost_only"] = self.ui.browser_integration_localhost_only.isChecked() self.update_browser_integration() def update_browser_integration(self): if self.ui.browser_integration.isChecked(): self.tagger.browser_integration.start() else: self.tagger.browser_integration.stop() def change_browser_integration_port(self, port): config.setting["browser_integration_port"] = self.ui.browser_integration_port.value() register_options_page(NetworkOptionsPage)
last_selected_script.setSelected(True) self.restore_state() def _all_scripts(self): for row in range(0, self.ui.script_list.count()): item = self.ui.script_list.item(row) yield item.get_all() @restore_method def restore_state(self): # Preserve previous splitter position self.ui.splitter.restoreState(config.persist["scripting_splitter"]) def save(self): config.setting[ "enable_tagger_scripts"] = self.ui.enable_tagger_scripts.isChecked( ) config.setting["list_of_scripts"] = list(self._all_scripts()) config.persist[ "last_selected_script_pos"] = self.ui.script_list.currentRow() config.persist["scripting_splitter"] = self.ui.splitter.saveState() def display_error(self, error): # Ignore scripting errors, those are handled inline if not isinstance(error, ScriptCheckError): super().display_error(error) register_options_page(ScriptingOptionsPage)
config.setting["acoustid_fpcalc"] = unicode( self.ui.acoustid_fpcalc.text()) config.setting["acoustid_apikey"] = unicode( self.ui.acoustid_apikey.text()) def update_groupboxes(self): if self.ui.use_acoustid.isChecked(): self.ui.acoustid_settings.setEnabled(True) if not self.ui.acoustid_fpcalc.text(): fpcalc_path = find_executable(*FPCALC_NAMES) if fpcalc_path: self.ui.acoustid_fpcalc.setText(fpcalc_path) else: self.ui.acoustid_settings.setEnabled(False) def acoustid_fpcalc_browse(self): path = QtGui.QFileDialog.getOpenFileName( self, "", self.ui.acoustid_fpcalc.text()) if path: path = os.path.normpath(unicode(path)) self.ui.acoustid_fpcalc.setText(path) def acoustid_fpcalc_download(self): webbrowser2.goto('chromaprint') def acoustid_apikey_get(self): webbrowser2.goto('acoustid_apikey') register_options_page(FingerprintingOptionsPage)
return self.manager.install_plugin( None, update=update, plugin_name=plugin.module_name, plugin_data=response, ) @staticmethod def open_plugin_dir(): if sys.platform == 'win32': url = 'file:///' + USER_PLUGIN_DIR else: url = 'file://' + USER_PLUGIN_DIR QtGui.QDesktopServices.openUrl(QtCore.QUrl(url, QtCore.QUrl.TolerantMode)) def mimeTypes(self): return ["text/uri-list"] def dragEnterEvent(self, event): event.setDropAction(QtCore.Qt.CopyAction) event.accept() def dropEvent(self, event): for path in [os.path.normpath(u.toLocalFile()) for u in event.mimeData().urls()]: self.manager.install_plugin(path) register_options_page(PluginsOptionsPage)
TextOption("setting", "replaygain_vorbisgain_command", "vorbisgain"), TextOption("setting", "replaygain_vorbisgain_options", "-asf"), TextOption("setting", "replaygain_mp3gain_command", "mp3gain"), TextOption("setting", "replaygain_mp3gain_options", "-a -s i"), TextOption("setting", "replaygain_metaflac_command", "metaflac"), TextOption("setting", "replaygain_metaflac_options", "--add-replay-gain"), TextOption("setting", "replaygain_wvgain_command", "wvgain"), TextOption("setting", "replaygain_wvgain_options", "-a") ] def __init__(self, parent=None): super(ReplayGainOptionsPage, self).__init__(parent) self.ui = Ui_ReplayGainOptionsPage() self.ui.setupUi(self) def load(self): self.ui.vorbisgain_command.setText(self.config.setting["replaygain_vorbisgain_command"]) self.ui.mp3gain_command.setText(self.config.setting["replaygain_mp3gain_command"]) self.ui.metaflac_command.setText(self.config.setting["replaygain_metaflac_command"]) self.ui.wvgain_command.setText(self.config.setting["replaygain_wvgain_command"]) def save(self): self.config.setting["replaygain_vorbisgain_command"] = unicode(self.ui.vorbisgain_command.text()) self.config.setting["replaygain_mp3gain_command"] = unicode(self.ui.mp3gain_command.text()) self.config.setting["replaygain_metaflac_command"] = unicode(self.ui.metaflac_command.text()) self.config.setting["replaygain_wvgain_command"] = unicode(self.ui.wvgain_command.text()) register_file_action(ReplayGain()) register_album_action(AlbumGain()) register_options_page(ReplayGainOptionsPage)
scopes = "profile tag rating collection submit_isrc submit_barcode" authorization_url = self.tagger.xmlws.oauth_manager.get_authorization_url(scopes) webbrowser2.open(authorization_url) authorization_code, ok = QInputDialog.getText(self, _("MusicBrainz Account"), _("Authorization code:")) if ok: self.tagger.xmlws.oauth_manager.exchange_authorization_code( authorization_code, scopes, self.on_authorization_finished) def restore_defaults(self): super(GeneralOptionsPage, self).restore_defaults() self.logout() def on_authorization_finished(self, successful): if successful: self.tagger.xmlws.oauth_manager.fetch_username( self.on_login_finished) def on_login_finished(self, successful): self.update_login_logout() if successful: load_user_collections() def logout(self): self.tagger.xmlws.oauth_manager.revoke_tokens() self.update_login_logout() load_user_collections() register_options_page(GeneralOptionsPage)
else: source_list = [(c[0], _(c[1])) for c in source.items()] def fcmp(x): return strxfrm(x[1]) source_list.sort(key=fcmp) saved_data = config.setting[setting] move = [] for data, name in source_list: item = QtWidgets.QListWidgetItem(name) item.setData(QtCore.Qt.UserRole, data) try: i = saved_data.index(data) move.append((i, item)) except BaseException: list1.addItem(item) move.sort(key=itemgetter(0)) for i, item in move: list2.addItem(item) def _save_list_items(self, setting, list1): data = [] for i in range(list1.count()): item = list1.item(i) data.append(item.data(QtCore.Qt.UserRole)) config.setting[setting] = data register_options_page(ReleasesOptionsPage)
args["formats"] = ", ".join(formats) # TR: Replace this with your name to have it appear in the "About" dialog. args["translator-credits"] = _("translator-credits") if args["translator-credits"] != "translator-credits": # TR: Replace LANG with language you are translatig to. args["translator-credits"] = _("<br/>Translated to LANG by %s") % args["translator-credits"].replace("\n", "<br/>") else: args["translator-credits"] = "" text = _(u"""<p align="center"><span style="font-size:15px;font-weight:bold;">MusicBrainz Picard</span><br/> Version %(version)s</p> <p align="center"><small> PyQt %(pyqt-version)s<br/> Mutagen %(mutagen-version)s<br/> Discid %(discid-version)s </small></p> <p align="center"><strong>Supported formats</strong><br/>%(formats)s</p> <p align="center"><strong>Please donate</strong><br/> Thank you for using Picard. Picard relies on the MusicBrainz database, which is operated by the MetaBrainz Foundation with the help of thousands of volunteers. If you like this application please consider donating to the MetaBrainz Foundation to keep the service running.</p> <p align="center"><a href="http://metabrainz.org/donate">Donate now!</a></p> <p align="center"><strong>Credits</strong><br/> <small>Copyright © 2004-2011 Robert Kaye, Lukáš Lalinský and others%(translator-credits)s</small></p> <p align="center"><a href="http://musicbrainz.org/doc/MusicBrainz_Picard">http://musicbrainz.org/doc/MusicBrainz_Picard</a></p> """) % args self.ui.label.setOpenExternalLinks(True) self.ui.label.setText(text) register_options_page(AboutOptionsPage)
file.metadata[ 'musicbrainz_recordingid'] = u'b3c487cb-0e55-477d-8df3-01ec6590f099' file.metadata[ 'musicbrainz_releasetrackid'] = u'f8649a05-da39-39ba-957c-7abf8f9012be' file.metadata[ 'musicbrainz_albumartistid'] = u'89ad4ac3-39f7-470e-963a-56509c546377' file.metadata['musicbrainz_artistid'] = [ u'7b593455-d207-482c-8c6f-19ce22c94679', u'9e082466-2390-40d1-891e-4803531f43fd' ] return file def move_files_to_browse(self): path = QtGui.QFileDialog.getExistingDirectory( self, "", self.ui.move_files_to.text()) if path: path = os.path.normpath(unicode(path)) self.ui.move_files_to.setText(path) def test(self): self.ui.renaming_error.setStyleSheet("") self.ui.renaming_error.setText("") try: self.check_format() except OptionsCheckError as e: self.ui.renaming_error.setStyleSheet(self.STYLESHEET_ERROR) self.ui.renaming_error.setText(e.info) return register_options_page(RenamingOptionsPage)
def register_cover_art_provider(provider): _cover_art_providers.register(provider.__module__, provider) if hasattr(provider, "OPTIONS") and provider.OPTIONS: provider.OPTIONS.NAME = provider.NAME provider.OPTIONS.TITLE = provider.TITLE or provider.NAME register_options_page(provider.OPTIONS)