def setUp(self): super().setUp() self.tmp_directory = self.mktmpdir() self.configpath = os.path.join(self.tmp_directory, 'test.ini') shutil.copy(os.path.join('test', 'data', 'test.ini'), self.configpath) self.addCleanup(os.remove, self.configpath) self.config = Config.from_file(None, self.configpath) self.addCleanup(self.cleanup_config_obj) self.config.application["version"] = "testing" logging.disable(logging.ERROR) Option.registry = {} ListOption('profiles', self.PROFILES_KEY, []) Option('profiles', self.SETTINGS_KEY, {}) # Get valid profile option settings for testing option_settings = list(UserProfileGroups.get_all_settings_list()) self.test_setting_0 = option_settings[0] self.test_setting_1 = option_settings[1] self.test_setting_2 = option_settings[2] self.test_setting_3 = option_settings[3] TextOption("setting", self.test_setting_0, "abc") BoolOption("setting", self.test_setting_1, True) IntOption("setting", self.test_setting_2, 42) TextOption("setting", self.test_setting_3, "xyz")
class CDRipperOptionsPage(OptionsPage): NAME = 'cdripper' TITLE = 'CD Ripper' PARENT = 'plugins' options = [ TextOption('setting', 'cdripper_cdparanoia_opts', '--batch 1:-'), TextOption( 'setting', 'cdripper_flac_opts', '--verify --replay-gain --delete-input-file'), ] def __init__(self, parent=None): OptionsPage.__init__(self) self.ui = Ui_CDRipperOptionsPage() self.ui.setupUi(self) def load(self): self.ui.cdparanoia_opts.setText( self.config.setting['cdripper_cdparanoia_opts']) self.ui.flac_opts.setText(self.config.setting['cdripper_flac_opts']) def save(self): cdparanoia_opts = self.ui.cdparanoia_opts.text() self.config.setting['cdripper_cdparanoia_opts'] = cdparanoia_opts self.config.setting['cdripper_flac_opts'] = self.ui.flac_opts.text()
def upgrade_to_v2_7_0_dev_3(config): """Save file naming scripts to dictionary. """ from picard.script import get_file_naming_script_presets from picard.script.serializer import ( FileNamingScript, ScriptImportError, ) Option("setting", "file_renaming_scripts", {}) ListOption("setting", "file_naming_scripts", []) TextOption("setting", "file_naming_format", DEFAULT_FILE_NAMING_FORMAT) TextOption("setting", "selected_file_naming_script_id", "") scripts = {} for item in config.setting["file_naming_scripts"]: try: script_item = FileNamingScript().create_from_yaml( item, create_new_id=False) scripts[script_item["id"]] = script_item.to_dict() except ScriptImportError: log.error("Error converting file naming script") script_list = set(scripts.keys()) | set( map(lambda item: item["id"], get_file_naming_script_presets())) if config.setting["selected_file_naming_script_id"] not in script_list: script_item = FileNamingScript( script=config.setting["file_naming_format"], title=_("Primary file naming script"), readonly=False, deletable=True, ) scripts[script_item["id"]] = script_item.to_dict() config.setting["selected_file_naming_script_id"] = script_item["id"] config.setting["file_renaming_scripts"] = scripts config.setting.remove("file_naming_scripts") config.setting.remove("file_naming_format")
class LastfmOptionsPage(OptionsPage): NAME = "lastfm" TITLE = "Last.fm" PARENT = "plugins" 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())
class FanartTvOptionsPage(OptionsPage): NAME = "fanarttv" TITLE = "fanart.tv" PARENT = "plugins" options = [ 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
def test_upgrade_to_v2_1_0_dev_1(self): BoolOption("setting", "use_genres", False) IntOption("setting", "max_genres", 5) IntOption("setting", "min_genre_usage", 90) TextOption("setting", "ignore_genres", "seen live, favorites, fixme, owned") TextOption("setting", "join_genres", "") BoolOption("setting", "only_my_genres", False) BoolOption("setting", "artists_genres", False) BoolOption("setting", "folksonomy_tags", False) self.config.setting['folksonomy_tags'] = True self.config.setting['max_tags'] = 6 self.config.setting['min_tag_usage'] = 85 self.config.setting['ignore_tags'] = "abc" self.config.setting['join_tags'] = "abc" self.config.setting['only_my_tags'] = True self.config.setting['artists_tags'] = True upgrade_to_v2_1_0_dev_1(self.config) self.assertEqual(self.config.setting['use_genres'], True) self.assertEqual(self.config.setting['max_genres'], 6) self.assertEqual(self.config.setting['min_genre_usage'], 85) self.assertEqual(self.config.setting['ignore_genres'], "abc") self.assertEqual(self.config.setting['join_genres'], "abc") self.assertEqual(self.config.setting['only_my_genres'], True) self.assertEqual(self.config.setting['artists_genres'], True) self.assertIn('folksonomy_tags', self.config.setting) self.assertNotIn('max_tags', self.config.setting) self.assertNotIn('min_tag_usage', self.config.setting) self.assertNotIn('ignore_tags', self.config.setting) self.assertNotIn('join_tags', self.config.setting) self.assertNotIn('only_my_tags', self.config.setting) self.assertNotIn('artists_tags', self.config.setting)
class FanartTvOptionsPage(ProviderOptions): _options_ui = Ui_FanartTvOptionsPage options = [ TextOption("setting", "fanarttv_client_key", ""), TextOption("setting", "fanarttv_use_cdart", OPTION_CDART_NOALBUMART), ] def load(self): setting = config.setting self.ui.fanarttv_client_key.setText(setting["fanarttv_client_key"]) if setting["fanarttv_use_cdart"] == OPTION_CDART_ALWAYS: self.ui.fanarttv_cdart_use_always.setChecked(True) elif setting["fanarttv_use_cdart"] == OPTION_CDART_NEVER: self.ui.fanarttv_cdart_use_never.setChecked(True) elif setting["fanarttv_use_cdart"] == OPTION_CDART_NOALBUMART: self.ui.fanarttv_cdart_use_if_no_albumcover.setChecked(True) def save(self): setting = config.setting setting["fanarttv_client_key"] = self.ui.fanarttv_client_key.text() if self.ui.fanarttv_cdart_use_always.isChecked(): setting["fanarttv_use_cdart"] = OPTION_CDART_ALWAYS elif self.ui.fanarttv_cdart_use_never.isChecked(): setting["fanarttv_use_cdart"] = OPTION_CDART_NEVER elif self.ui.fanarttv_cdart_use_if_no_albumcover.isChecked(): setting["fanarttv_use_cdart"] = OPTION_CDART_NOALBUMART
class FolksonomyOptionsPage(OptionsPage): NAME = "folsonomy" TITLE = N_("Folksonomy Tags") PARENT = "metadata" SORT_ORDER = 20 ACTIVE = True 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()
def test_upgrade_to_v2_2_0_dev_3(self): TextOption("setting", "ignore_genres", "") TextOption("setting", "genres_filter", "") self.config.setting['ignore_genres'] = "a, b,c" upgrade_to_v2_2_0_dev_3(self.config) self.assertNotIn('ignore_genres', self.config.setting) self.assertEqual(self.config.setting['genres_filter'], "-a\n-b\n-c")
class ReplayGainOptionsPage(OptionsPage): NAME = "replaygain" TITLE = "ReplayGain" PARENT = "plugins" options = [ 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())
class NoReleaseOptionsPage(OptionsPage): NAME = 'norelease' TITLE = 'No release' PARENT = 'plugins' 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( config.setting['norelease_strip_tags']) self.ui.norelease_enable.setChecked(config.setting['norelease_enable']) def save(self): config.setting['norelease_strip_tags'] = str( self.ui.norelease_strip_tags.text()) config.setting[ 'norelease_enable'] = self.ui.norelease_enable.isChecked()
class TheAudioDbOptionsPage(ProviderOptions): _options_ui = Ui_TheAudioDbOptionsPage options = [ TextOption("setting", "theaudiodb_use_cdart", OPTION_CDART_NOALBUMART), BoolOption("setting", "theaudiodb_use_high_quality", False), ] def load(self): if config.setting["theaudiodb_use_cdart"] == OPTION_CDART_ALWAYS: self.ui.theaudiodb_cdart_use_always.setChecked(True) elif config.setting["theaudiodb_use_cdart"] == OPTION_CDART_NEVER: self.ui.theaudiodb_cdart_use_never.setChecked(True) elif config.setting["theaudiodb_use_cdart"] == OPTION_CDART_NOALBUMART: self.ui.theaudiodb_cdart_use_if_no_albumcover.setChecked(True) self.ui.theaudiodb_use_high_quality.setChecked( config.setting['theaudiodb_use_high_quality']) def save(self): if self.ui.theaudiodb_cdart_use_always.isChecked(): config.setting["theaudiodb_use_cdart"] = OPTION_CDART_ALWAYS elif self.ui.theaudiodb_cdart_use_never.isChecked(): config.setting["theaudiodb_use_cdart"] = OPTION_CDART_NEVER elif self.ui.theaudiodb_cdart_use_if_no_albumcover.isChecked(): config.setting["theaudiodb_use_cdart"] = OPTION_CDART_NOALBUMART config.setting['theaudiodb_use_high_quality'] = self.ui.theaudiodb_use_high_quality.isChecked()
class ProviderOptionsLocal(ProviderOptions): """ Options for Local Files cover art provider """ HELP_URL = '/config/options_local_files.html' _DEFAULT_LOCAL_COVER_ART_REGEX = r'^(?:cover|folder|albumart)(.*)\.(?:jpe?g|png|gif|tiff?|webp)$' options = [ TextOption("setting", "local_cover_regex", _DEFAULT_LOCAL_COVER_ART_REGEX), ] _options_ui = Ui_LocalOptions def __init__(self, parent=None): super().__init__(parent) self.init_regex_checker(self.ui.local_cover_regex_edit, self.ui.local_cover_regex_error) self.ui.local_cover_regex_default.clicked.connect( self.set_local_cover_regex_default) def set_local_cover_regex_default(self): self.ui.local_cover_regex_edit.setText( self._DEFAULT_LOCAL_COVER_ART_REGEX) def load(self): config = get_config() self.ui.local_cover_regex_edit.setText( config.setting["local_cover_regex"]) def save(self): config = get_config() config.setting[ "local_cover_regex"] = self.ui.local_cover_regex_edit.text()
class TheAudioDbOptionsPage(OptionsPage): NAME = "theaudiodb" TITLE = "TheAudioDB" PARENT = "plugins" options = [ TextOption("setting", "theaudiodb_use_cdart", OPTION_CDART_NOALBUMART), ] def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_TheAudioDbOptionsPage() self.ui.setupUi(self) def load(self): if config.setting["theaudiodb_use_cdart"] == OPTION_CDART_ALWAYS: self.ui.theaudiodb_cdart_use_always.setChecked(True) elif config.setting["theaudiodb_use_cdart"] == OPTION_CDART_NEVER: self.ui.theaudiodb_cdart_use_never.setChecked(True) elif config.setting["theaudiodb_use_cdart"] == OPTION_CDART_NOALBUMART: self.ui.theaudiodb_cdart_use_if_no_albumcover.setChecked(True) def save(self): if self.ui.theaudiodb_cdart_use_always.isChecked(): config.setting["theaudiodb_use_cdart"] = OPTION_CDART_ALWAYS elif self.ui.theaudiodb_cdart_use_never.isChecked(): config.setting["theaudiodb_use_cdart"] = OPTION_CDART_NEVER elif self.ui.theaudiodb_cdart_use_if_no_albumcover.isChecked(): config.setting["theaudiodb_use_cdart"] = OPTION_CDART_NOALBUMART
class RatingsOptionsPage(OptionsPage): NAME = "ratings" TITLE = N_("Ratings") PARENT = "metadata" 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()
class ScriptingOptionsPage(OptionsPage): NAME = "scripting" TITLE = N_("Scripting") PARENT = "advanced" SORT_ORDER = 30 ACTIVE = True options = [ BoolOption("setting", "enable_tagger_script", False), TextOption("setting", "tagger_script", ""), ] STYLESHEET_ERROR = "QWidget { background-color: #f55; color: white; font-weight:bold }" def __init__(self, parent=None): super(ScriptingOptionsPage, self).__init__(parent) self.ui = Ui_ScriptingOptionsPage() self.ui.setupUi(self) self.highlighter = TaggerScriptSyntaxHighlighter( self.ui.tagger_script.document()) self.connect(self.ui.tagger_script, QtCore.SIGNAL("textChanged()"), self.live_checker) def live_checker(self): self.ui.script_error.setStyleSheet("") self.ui.script_error.setText("") try: self.check() except OptionsCheckError, e: self.ui.script_error.setStyleSheet(self.STYLESHEET_ERROR) self.ui.script_error.setText(e.info) return
def test_text_opt_set_read_back(self): TextOption("setting", "text_option", "abc") # set option to "def", and read back self.config.setting["text_option"] = "def" self.assertEqual(self.config.setting["text_option"], "def") self.assertIs(type(self.config.setting["text_option"]), str)
def test_upgrade_to_v2_6_0_dev_1_frozen(self): TextOption("setting", "acoustid_fpcalc", "") self.config.setting["acoustid_fpcalc"] = r"C:\Program Files\MusicBrainz Picard\fpcalc.exe" picard.config_upgrade.IS_FROZEN = True upgrade_to_v2_6_0_dev_1(self.config) picard.config_upgrade.IS_FROZEN = False self.assertEqual("", self.config.setting["acoustid_fpcalc"])
def test_remove(self): TextOption("setting", "text_option", "abc") self.config.setting["text_option"] = "def" self.assertEqual(self.config.setting["text_option"], "def") self.config.setting.remove("text_option") self.assertEqual(self.config.setting["text_option"], "abc")
def upgrade_to_v2_6_0_beta_3(config): """Replace use_system_theme with ui_theme options""" from picard.ui.theme import UiTheme _s = config.setting TextOption("setting", "ui_theme", str(UiTheme.DEFAULT)) if _s["use_system_theme"]: _s["ui_theme"] = str(UiTheme.SYSTEM) _s.remove("use_system_theme")
class AdvancedOptionsPage(OptionsPage): NAME = "advanced" TITLE = N_("Advanced") PARENT = None SORT_ORDER = 90 ACTIVE = True HELP_URL = '/config/options_advanced.html' options = [ TextOption("setting", "ignore_regex", ""), BoolOption("setting", "ignore_hidden_files", False), BoolOption("setting", "recursively_add_files", True), IntOption("setting", "ignore_track_duration_difference_under", 2), BoolOption("setting", "completeness_ignore_videos", False), BoolOption("setting", "completeness_ignore_pregap", False), BoolOption("setting", "completeness_ignore_data", False), BoolOption("setting", "completeness_ignore_silence", False), ListOption("setting", "compare_ignore_tags", []), ] def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_AdvancedOptionsPage() self.ui.setupUi(self) self.init_regex_checker(self.ui.ignore_regex, self.ui.regex_error) def load(self): config = get_config() self.ui.ignore_regex.setText(config.setting["ignore_regex"]) self.ui.ignore_hidden_files.setChecked(config.setting["ignore_hidden_files"]) self.ui.recursively_add_files.setChecked(config.setting["recursively_add_files"]) self.ui.ignore_track_duration_difference_under.setValue(config.setting["ignore_track_duration_difference_under"]) self.ui.completeness_ignore_videos.setChecked(config.setting["completeness_ignore_videos"]) self.ui.completeness_ignore_pregap.setChecked(config.setting["completeness_ignore_pregap"]) self.ui.completeness_ignore_data.setChecked(config.setting["completeness_ignore_data"]) self.ui.completeness_ignore_silence.setChecked(config.setting["completeness_ignore_silence"]) self.ui.compare_ignore_tags.update(config.setting["compare_ignore_tags"]) self.ui.compare_ignore_tags.set_user_sortable(False) def save(self): config = get_config() config.setting["ignore_regex"] = self.ui.ignore_regex.text() 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()
def test_upgrade_to_v2_2_0_dev_4(self): TextOption("setting", "file_naming_format", "") self.config.setting['file_naming_format'] = 'xxx' upgrade_to_v2_2_0_dev_4(self.config) self.assertEqual('xxx', self.config.setting['file_naming_format']) self.config.setting['file_naming_format'] = OLD_DEFAULT_FILE_NAMING_FORMAT_v2_1 upgrade_to_v2_2_0_dev_4(self.config) self.assertEqual(DEFAULT_FILE_NAMING_FORMAT, self.config.setting['file_naming_format'])
class GeneralOptionsPage(OptionsPage): NAME = "general" TITLE = N_("General") PARENT = None SORT_ORDER = 1 ACTIVE = True options = [ TextOption("setting", "server_host", "musicbrainz.org"), IntOption("setting", "server_port", 80), TextOption("setting", "username", ""), PasswordOption("setting", "password", ""), BoolOption("setting", "analyze_new_files", False), BoolOption("setting", "ignore_file_mbids", False), ] def __init__(self, parent=None): super(GeneralOptionsPage, self).__init__(parent) self.ui = Ui_GeneralOptionsPage() self.ui.setupUi(self) mirror_servers = [ "musicbrainz.org", ] self.ui.server_host.addItems(sorted(mirror_servers)) def load(self): self.ui.server_host.setEditText(self.config.setting["server_host"]) self.ui.server_port.setValue(self.config.setting["server_port"]) self.ui.username.setText(self.config.setting["username"]) self.ui.password.setText(self.config.setting["password"]) self.ui.analyze_new_files.setChecked(self.config.setting["analyze_new_files"]) self.ui.ignore_file_mbids.setChecked(self.config.setting["ignore_file_mbids"]) def save(self): self.config.setting["server_host"] = unicode(self.ui.server_host.currentText()).strip() self.config.setting["server_port"] = self.ui.server_port.value() self.config.setting["username"] = unicode(self.ui.username.text()) # trivially encode the password, just to not make it so apparent self.config.setting["password"] = rot13(unicode(self.ui.password.text())) self.config.setting["analyze_new_files"] = self.ui.analyze_new_files.isChecked() self.config.setting["ignore_file_mbids"] = self.ui.ignore_file_mbids.isChecked()
def test_upgrade_to_v1_0_0_final_0_B(self): TextOption('setting', 'file_naming_format', '') self.config.setting['va_file_naming_format'] = 'abc' self.config.setting['use_va_format'] = "" self.assertIn('va_file_naming_format', self.config.setting) self.assertIn('use_va_format', self.config.setting) upgrade_to_v1_0_0_final_0(self.config, interactive=False, merge=False) self.assertNotIn('va_file_naming_format', self.config.setting) self.assertNotIn('use_va_format', self.config.setting) self.assertNotIn('file_naming_format', self.config.setting)
class ProxyOptionsPage(OptionsPage): NAME = "proxy" TITLE = N_("Web Proxy") PARENT = "advanced" SORT_ORDER = 10 ACTIVE = True 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()
def test_as_dict(self): TextOption("setting", "text_option", "abc") BoolOption("setting", "bool_option", True) IntOption("setting", "int_option", 42) self.config.setting["int_option"] = 123 expected = { "text_option": "abc", "bool_option": True, "int_option": 123, } self.assertEqual(expected, self.config.setting.as_dict())
class MusixmatchOptionsPage(OptionsPage): NAME = 'musixmatch' TITLE = 'Musixmatch API Key' PARENT = "plugins" options = [TextOption("setting", "musixmatch_api_key", "")] def __init__(self, parent=None): super(MusixmatchOptionsPage, self).__init__(parent) self.ui = Ui_MusixmatchOptionsPage() self.ui.setupUi(self) def load(self): self.ui.api_key.setText(self.config.setting["musixmatch_api_key"]) def save(self): self.config.setting["musixmatch_api_key"] = self.ui.api_key.text()
class ApiseedsLyricsOptionsPage(OptionsPage): NAME = 'apiseeds_lyrics' TITLE = 'Apiseeds Lyrics' PARENT = 'plugins' options = [TextOption('setting', 'apiseeds_apikey', '')] def __init__(self, parent=None): super(ApiseedsLyricsOptionsPage, self).__init__(parent) self.box = QtWidgets.QVBoxLayout(self) self.label = QtWidgets.QLabel(self) self.label.setText('Apiseeds API key') self.box.addWidget(self.label) self.description = QtWidgets.QLabel(self) self.description.setText( 'Apiseeds Lyrics provides millions of lyrics from artist all around the world. ' 'Lyrics provided are for educational purposes and personal use only. Commercial use is not allowed. ' 'In order to use Apiseeds Lyrics you need to get a free API key <a href="https://apiseeds.com">here</a>.' ) self.description.setOpenExternalLinks(True) self.box.addWidget(self.description) self.input = QtWidgets.QLineEdit(self) self.box.addWidget(self.input) self.contribute = QtWidgets.QLabel(self) self.contribute.setText( 'Want to contribute? Check out the <a href="https://github.com/avalloneandrea/apiseeds-lyrics">project page</a>!' ) self.contribute.setOpenExternalLinks(True) self.box.addWidget(self.contribute) self.spacer = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.box.addItem(self.spacer) def load(self): self.input.setText(config.setting['apiseeds_apikey']) def save(self): config.setting['apiseeds_apikey'] = self.input.text()
class MoodbarOptionsPage(OptionsPage): NAME = "Moodbars" TITLE = "Moodbars" PARENT = "plugins" options = [ TextOption("setting", "moodbar_vorbis_command", "moodbar"), TextOption("setting", "moodbar_vorbis_options", "-o"), TextOption("setting", "moodbar_mp3_command", "moodbar"), TextOption("setting", "moodbar_mp3_options", "-o"), TextOption("setting", "moodbar_flac_command", "moodbar"), TextOption("setting", "moodbar_flac_options", "-o"), 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"] = string_( self.ui.vorbis_command.text()) self.config.setting["moodbar_mp3_command"] = string_( self.ui.mp3_command.text()) self.config.setting["moodbar_flac_command"] = string_( self.ui.flac_command.text()) self.config.setting["moodbar_wav_command"] = string_( self.ui.wav_command.text())
class CDLookupOptionsPage(OptionsPage): NAME = "cdlookup" TITLE = N_("CD Lookup") PARENT = None SORT_ORDER = 50 ACTIVE = True HELP_URL = '/config/options_cdlookup.html' options = [ TextOption("setting", "cd_lookup_device", ",".join(DEFAULT_DRIVES)), ] def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_CDLookupOptionsPage() self.ui.setupUi(self) if AUTO_DETECT_DRIVES: self._device_list = get_cdrom_drives() self.ui.cd_lookup_device.addItems(self._device_list) def load(self): config = get_config() device = config.setting["cd_lookup_device"] if AUTO_DETECT_DRIVES: try: self.ui.cd_lookup_device.setCurrentIndex( self._device_list.index(device)) except ValueError: pass else: self.ui.cd_lookup_device.setText(device) def save(self): config = get_config() if AUTO_DETECT_DRIVES: device = self.ui.cd_lookup_device.currentText() device_list = self._device_list else: device = self.ui.cd_lookup_device.text() device_list = [device] config.setting["cd_lookup_device"] = device self.tagger.window.update_cd_lookup_drives(device_list)
def test_text_opt_convert(self): opt = TextOption("setting", "text_option", "abc") self.assertEqual(opt.convert(123), "123")