# -*- coding: utf-8 -*- import os import threading import logging import sound_lib import paths import widgetUtils import output from collections import OrderedDict from wxUI import commonMessageDialogs from wxUI.dialogs.mastodon import configuration from extra.autocompletionUsers import scan, manage from extra.ocr import OCRSpace from controller.settings import globalSettingsController from . templateEditor import EditTemplate log = logging.getLogger("Settings") class accountSettingsController(globalSettingsController): def __init__(self, buffer, window): self.user = buffer.session.db["user_name"] self.buffer = buffer self.window = window self.config = buffer.session.settings self.dialog = configuration.configurationDialog() self.create_config() self.needs_restart = False self.is_started = True def create_config(self): self.dialog.create_general_account() # widgetUtils.connect_event(self.dialog.general.userAutocompletionScan, widgetUtils.BUTTON_PRESSED, self.on_autocompletion_scan) # widgetUtils.connect_event(self.dialog.general.userAutocompletionManage, widgetUtils.BUTTON_PRESSED, self.on_autocompletion_manage) self.dialog.set_value("general", "disable_streaming", self.config["general"]["disable_streaming"]) self.dialog.set_value("general", "relative_time", self.config["general"]["relative_times"]) self.dialog.set_value("general", "read_preferences_from_instance", self.config["general"]["read_preferences_from_instance"]) self.dialog.set_value("general", "show_screen_names", self.config["general"]["show_screen_names"]) self.dialog.set_value("general", "hide_emojis", self.config["general"]["hide_emojis"]) self.dialog.set_value("general", "itemsPerApiCall", self.config["general"]["max_posts_per_call"]) self.dialog.set_value("general", "reverse_timelines", self.config["general"]["reverse_timelines"]) boost_mode = self.config["general"]["boost_mode"] if boost_mode == "ask": self.dialog.set_value("general", "ask_before_boost", True) else: self.dialog.set_value("general", "ask_before_boost", False) self.dialog.set_value("general", "persist_size", str(self.config["general"]["persist_size"])) self.dialog.set_value("general", "load_cache_in_memory", self.config["general"]["load_cache_in_memory"]) self.dialog.create_reporting() self.dialog.set_value("reporting", "speech_reporting", self.config["reporting"]["speech_reporting"]) self.dialog.set_value("reporting", "braille_reporting", self.config["reporting"]["braille_reporting"]) post_template = self.config["templates"]["post"] conversation_template = self.config["templates"]["conversation"] person_template = self.config["templates"]["person"] self.dialog.create_templates(post_template=post_template, conversation_template=conversation_template, person_template=person_template) widgetUtils.connect_event(self.dialog.templates.post, widgetUtils.BUTTON_PRESSED, self.edit_post_template) widgetUtils.connect_event(self.dialog.templates.conversation, widgetUtils.BUTTON_PRESSED, self.edit_conversation_template) widgetUtils.connect_event(self.dialog.templates.person, widgetUtils.BUTTON_PRESSED, self.edit_person_template) self.dialog.create_other_buffers() buffer_values = self.get_buffers_list() self.dialog.buffers.insert_buffers(buffer_values) self.dialog.buffers.connect_hook_func(self.toggle_buffer_active) widgetUtils.connect_event(self.dialog.buffers.toggle_state, widgetUtils.BUTTON_PRESSED, self.toggle_state) widgetUtils.connect_event(self.dialog.buffers.up, widgetUtils.BUTTON_PRESSED, self.dialog.buffers.move_up) widgetUtils.connect_event(self.dialog.buffers.down, widgetUtils.BUTTON_PRESSED, self.dialog.buffers.move_down) self.input_devices = sound_lib.input.Input.get_device_names() self.output_devices = sound_lib.output.Output.get_device_names() self.soundpacks = [] [self.soundpacks.append(i) for i in os.listdir(paths.sound_path()) if os.path.isdir(os.path.join(paths.sound_path(), i)) == True ] self.dialog.create_sound(self.input_devices, self.output_devices, self.soundpacks) self.dialog.set_value("sound", "volumeCtrl", int(self.config["sound"]["volume"]*100)) self.dialog.set_value("sound", "input", self.config["sound"]["input_device"]) self.dialog.set_value("sound", "output", self.config["sound"]["output_device"]) self.dialog.set_value("sound", "session_mute", self.config["sound"]["session_mute"]) self.dialog.set_value("sound", "soundpack", self.config["sound"]["current_soundpack"]) self.dialog.set_value("sound", "indicate_audio", self.config["sound"]["indicate_audio"]) self.dialog.set_value("sound", "indicate_img", self.config["sound"]["indicate_img"]) self.dialog.create_extras(OCRSpace.translatable_langs) language_index = OCRSpace.OcrLangs.index(self.config["mysc"]["ocr_language"]) self.dialog.extras.ocr_lang.SetSelection(language_index) self.dialog.realize() self.dialog.set_title(_("Account settings for %s") % (self.user,)) self.response = self.dialog.get_response() def edit_post_template(self, *args, **kwargs): template = self.config["templates"]["post"] control = EditTemplate(template=template, type="post") result = control.run_dialog() if result != "": # Template has been saved. self.config["templates"]["post"] = result self.config.write() self.dialog.templates.post.SetLabel(_("Edit template for posts. Current template: {}").format(result)) def edit_conversation_template(self, *args, **kwargs): template = self.config["templates"]["conversation"] control = EditTemplate(template=template, type="conversation") result = control.run_dialog() if result != "": # Template has been saved. self.config["templates"]["conversation"] = result self.config.write() self.dialog.templates.conversation.SetLabel(_("Edit template for conversations. Current template: {}").format(result)) def edit_person_template(self, *args, **kwargs): template = self.config["templates"]["person"] control = EditTemplate(template=template, type="person") result = control.run_dialog() if result != "": # Template has been saved. self.config["templates"]["person"] = result self.config.write() self.dialog.templates.person.SetLabel(_("Edit template for persons. Current template: {}").format(result)) def save_configuration(self): if self.config["general"]["relative_times"] != self.dialog.get_value("general", "relative_time"): self.needs_restart = True log.debug("Triggered app restart due to change in relative times.") self.config["general"]["relative_times"] = self.dialog.get_value("general", "relative_time") if self.config["general"]["disable_streaming"] != self.dialog.get_value("general", "disable_streaming"): self.needs_restart = True log.debug("Triggered app restart due to change in streaming settings.") self.config["general"]["disable_streaming"] = self.dialog.get_value("general", "disable_streaming") self.config["general"]["read_preferences_from_instance"] = self.dialog.get_value("general", "read_preferences_from_instance") self.config["general"]["show_screen_names"] = self.dialog.get_value("general", "show_screen_names") self.config["general"]["hide_emojis"] = self.dialog.get_value("general", "hide_emojis") self.config["general"]["max_posts_per_call"] = self.dialog.get_value("general", "itemsPerApiCall") if self.config["general"]["load_cache_in_memory"] != self.dialog.get_value("general", "load_cache_in_memory"): self.config["general"]["load_cache_in_memory"] = self.dialog.get_value("general", "load_cache_in_memory") self.needs_restart = True log.debug("Triggered app restart due to change in database strategy management.") if self.config["general"]["persist_size"] != self.dialog.get_value("general", "persist_size"): if self.dialog.get_value("general", "persist_size") == '': self.config["general"]["persist_size"] =-1 else: try: self.config["general"]["persist_size"] = int(self.dialog.get_value("general", "persist_size")) except ValueError: output.speak("Invalid cache size, setting to default.",True) self.config["general"]["persist_size"] =1764 if self.config["general"]["reverse_timelines"] != self.dialog.get_value("general", "reverse_timelines"): self.needs_restart = True log.debug("Triggered app restart due to change in timeline order.") self.config["general"]["reverse_timelines"] = self.dialog.get_value("general", "reverse_timelines") ask_before_boost = self.dialog.get_value("general", "ask_before_boost") if ask_before_boost == True: self.config["general"]["boost_mode"] = "ask" else: self.config["general"]["boost_mode"] = "direct" buffers_list = self.dialog.buffers.get_list() if buffers_list != self.config["general"]["buffer_order"]: self.needs_restart = True log.debug("Triggered app restart due to change in buffer ordering.") self.config["general"]["buffer_order"] = buffers_list self.config["reporting"]["speech_reporting"] = self.dialog.get_value("reporting", "speech_reporting") self.config["reporting"]["braille_reporting"] = self.dialog.get_value("reporting", "braille_reporting") self.config["mysc"]["ocr_language"] = OCRSpace.OcrLangs[self.dialog.extras.ocr_lang.GetSelection()] if self.config["sound"]["input_device"] != self.dialog.sound.get("input"): self.config["sound"]["input_device"] = self.dialog.sound.get("input") try: self.buffer.session.sound.input.set_device(self.buffer.session.sound.input.find_device_by_name(self.config["sound"]["input_device"])) except: self.config["sound"]["input_device"] = "default" if self.config["sound"]["output_device"] != self.dialog.sound.get("output"): self.config["sound"]["output_device"] = self.dialog.sound.get("output") try: self.buffer.session.sound.output.set_device(self.buffer.session.sound.output.find_device_by_name(self.config["sound"]["output_device"])) except: self.config["sound"]["output_device"] = "default" self.config["sound"]["volume"] = self.dialog.get_value("sound", "volumeCtrl")/100.0 self.config["sound"]["session_mute"] = self.dialog.get_value("sound", "session_mute") self.config["sound"]["current_soundpack"] = self.dialog.sound.get("soundpack") self.config["sound"]["indicate_audio"] = self.dialog.get_value("sound", "indicate_audio") self.config["sound"]["indicate_img"] = self.dialog.get_value("sound", "indicate_img") self.buffer.session.sound.config = self.config["sound"] self.buffer.session.sound.check_soundpack() self.config.write() def toggle_state(self,*args,**kwargs): return self.dialog.buffers.change_selected_item() def on_autocompletion_scan(self, *args, **kwargs): configuration = scan.autocompletionScan(self.buffer.session.settings, self.buffer, self.window) to_scan = configuration.show_dialog() if to_scan == True: configuration.prepare_progress_dialog() t = threading.Thread(target=configuration.scan) t.start() def on_autocompletion_manage(self, *args, **kwargs): configuration = manage.autocompletionManage(self.buffer.session) configuration.show_settings() def get_buffers_list(self): all_buffers=OrderedDict() all_buffers['home']=_("Home") all_buffers['local'] = _("Local") all_buffers['federated'] = _("Federated") all_buffers['mentions']=_("Mentions") all_buffers['direct_messages']=_("Direct Messages") all_buffers['sent']=_("Sent") all_buffers['favorites']=_("Favorites") all_buffers['bookmarks']=_("Bookmarks") all_buffers['followers']=_("Followers") all_buffers['following']=_("Following") all_buffers['blocked']=_("Blocked users") all_buffers['muted']=_("Muted users") all_buffers['notifications']=_("Notifications") list_buffers = [] hidden_buffers=[] all_buffers_keys = list(all_buffers.keys()) # Check buffers shown first. for i in self.config["general"]["buffer_order"]: if i in all_buffers_keys: list_buffers.append((i, all_buffers[i], True)) # This second pass will retrieve all hidden buffers. for i in all_buffers_keys: if i not in self.config["general"]["buffer_order"]: hidden_buffers.append((i, all_buffers[i], False)) list_buffers.extend(hidden_buffers) return list_buffers def toggle_buffer_active(self, ev): change = self.dialog.buffers.get_event(ev) if change == True: self.dialog.buffers.change_selected_item()