def call_end_loading(self): """Call end_loading event at all widgets.""" for widget in self.widgets.values(): try: widget.end_loading() except: print_stack_trace()()
def save(widget): try: widget.edit_mode(mode) if not mode: self.config.add(widget.info.NAME) except: print_stack_trace()()
def _kill_procs(self): for p in self.__procs: try: if p and p.is_alive(): p.terminate() except: print_stack_trace()() self.__procs.clear()
def _logs_box_fill(self): for key in LogLevel.get_keys(): try: self.log_levels.addItem(key) except: print_stack_trace()() self.log_levels.setCurrentText( LogLevel.from_int(int(self.settings['LOGS']['log_level'])))
def exit(self, checked=False): self.timer.stop() try: if self.__proc and self.__proc.is_alive(): self.__proc.terminate() self.__proc = None except: print_stack_trace()() self.close()
def __init__(self, widget_manager): self.wm = widget_manager """WidgetManager object""" self.config = RawConfigParser() """RawConfigParser object""" try: if os.path.isfile(CONF_WIDGETS): self.config.read(CONF_WIDGETS, 'UTF-8') except: print_stack_trace()()
def call_delete_other_widget(self, name): """Call delete_other_widget event at all widgets. :param name: str, widget name """ for widget in self.widgets: try: widget.delete_other_widget(name) except: print_stack_trace()()
def call_unload_other(self, name): """Call unload_other event at all widgets. :param name: str, widget name """ for widget in self.widgets.values(): try: widget.unload_other(name) except: print_stack_trace()()
def _show_add_new(self, checked): names = add_new.install() for name in names: try: manager.load(name) except: print_stack_trace()() if names: self._list_fill() self.__change_enabled()
def _hide_widgets(self, checked): for name in manager.widgets: try: if manager.widgets[name].isHidden(): manager.widgets[name].hide_event(False) manager.widgets[name].setHidden(False) else: manager.widgets[name].hide_event(True) manager.widgets[name].setHidden(True) except: print_stack_trace()()
def call_purge_other(self, name, reminconf): """Call purge_other event at all widgets. :param name: str, widget name :param reminconf: bool, True - remove widget all data from config """ for widget in self.widgets.values(): try: widget.purge_other(name, reminconf) except: print_stack_trace()()
def _langs_box_fill(self): for name in get_locales(): try: conf = get_locale(name) item = conf['LANG']['name'] + ' (' item += conf['LANG']['description'] + ')' self.language.addItem(item) if name == self.settings['MAIN']['locale']: self.language.setCurrentText(item) self._loc_items[item] = name except: print_stack_trace()()
def _load_widgets(self): for i in range(len(self.notes)): if i == 0: continue try: note = Note(self, i) note.setAccessibleName(self.info.NAME) note._init() note.show() self.widgets.append(note) except: print_stack_trace()()
def unload(self, name): """Unload Widget object (only Main class) from runtime. Destroy. :param name: str, widget name """ self.call_unload_other(name) try: self.widgets[name].unload() self.widgets[name].close() self.widgets[name].deleteLater() except: print_stack_trace()() del self.widgets[name]
def _load_widgets(self): for i in range(len(self.times)): try: if i == 0: DTime._init(self) continue dtime = DTime(self, i) dtime.setAccessibleName(self.info.NAME) dtime._init() dtime.show() self.widgets.append(dtime) except: print_stack_trace()()
def ping(): self.__info_buffer['online'] = '' self.__info_buffer['max'] = '' self.__info_buffer['version'] = '' self.__info_buffer['protocol'] = '' self.__info_buffer['players'] = '' self.__info_buffer['ping'] = '' self.__info_buffer['description'] = '' self.__info_buffer['map'] = '' self.__info_buffer['brand'] = '' self.__info_buffer['plugins'] = '' config = self.main.widget_manager.config.config if 'servers' not in config[self.main.info.NAME]: return servers = json.loads(config[self.main.info.NAME]['servers']) if not servers: return addr = servers[self.main.list.currentRow()] try: status = MinecraftServer.lookup(addr).status() except: print_stack_trace(LogLevel.DEBUG)() return self.__info_buffer['online'] = str(status.players.online) self.__info_buffer['max'] = str(status.players.max) self.__info_buffer['version'] = status.version.name self.__info_buffer['protocol'] = status.version.protocol self.__info_buffer['ping'] = str(status.latency) players = '' if status.players.sample: for p in status.players.sample: players += p.name + '(' + p.id + ')' + ', <br/>' self.__info_buffer['players'] = players[:-7] self.__info_buffer['description'] = get_description( status.description) try: query = MinecraftServer.lookup(addr).query() except: print_stack_trace(LogLevel.DEBUG)() return self.__info_buffer['map'] = query.map self.__info_buffer['brand'] = query.software.brand plugins = '' for p in query.software.plugins: plugins += p + ', ' self.__info_buffer['plugins'] = plugins[:-2] for p in query.players.names: if p not in players: players += p + ', <br/>' self.__info_buffer['players'] = players[:-7]
def _load_note(self): try: if 'note' in self.main.conf: # base64 -> gzip -> AES-256 -> gzip -> text note = gzip.decompress(base64.b64decode( self.main.conf['note'])) self.text_edit.setPlainText(self.cip.decrypt(note)) self.main.image.setPixmap(OPEN_PIXMAP) self.main.image.show() self.show() except: print_stack_trace()() self.cip.hexpass = None self.main.show_pass_error() self._exit()
def _list_fill(self): self.list.clear() for info in manager.info.values(): try: item = QListWidgetItem(self.list) item.setIcon(info.ICON) item.setText(info.NAME) item.setToolTip(info.DESCRIPTION) if manager.config.is_placed(info.NAME): font = item.font() font.setBold(True) item.setFont(font) self.list.addItem(item) except: print_stack_trace()()
def _list_fill(self): self.w_list.clear() for name in self.manager.custom_widgets: try: if name not in self.manager.info: continue info = self.manager.info[name] item = QListWidgetItem(self.w_list) item.setIcon(info.ICON) item.setText(info.NAME) item.setToolTip(info.DESCRIPTION) if self.manager.config.is_placed(info.NAME): font = item.font() font.setBold(True) item.setFont(font) self.w_list.addItem(item) except: print_stack_trace()()
def _save(self, checked): self.main._session = self.session_sbox.value() self.main._hot_save = self.hot_save.isChecked() if 'note' in self.main.conf: # text edit checks if self.new_pass.text() != self.rep_pass.text(): mbox = QMessageBox(QMessageBox.Critical, self.lang['disagree_title'], self.lang['disagree_text'], QMessageBox.Ok, self) mbox.setWindowIcon(QIcon(ERROR)) ok = mbox.button(QMessageBox.Ok) ok.setText(self.lang['dis_ok_button']) ok.setToolTip(self.lang['dis_ok_button_tt']) mbox.exec() return elif self.old_pass.text() and (not self.new_pass.text() or not self.rep_pass.text()): self.main.show_pass_error(True) return elif not self.old_pass.text() and (self.new_pass.text() or self.rep_pass.text()): self.main.show_pass_error(True) return else: try: # replacing note content cip = AESCip(self.old_pass.text()) # base64 -> gzip -> AES-256 -> gzip -> text note = gzip.decompress( base64.b64decode(self.main.conf['note'])) note = cip.decrypt(note) cip.update_pass(self.new_pass.text()) # text -> gzip -> AES-256 -> gzip -> base64 note = base64.b64encode(gzip.compress( cip.encrypt(note), 9)).decode('ASCII') self.main.conf['note'] = note except: # if bad password (possible) print_stack_trace()() self.main.show_pass_error() return self.main.save_settings() self.close()
def delete_widget(self, name): """Remove widget file (after remove widget data from config and unload). For only placed widgets. :param name: str, widget name """ self.call_delete_other_widget(name) path = self.paths[name] try: self.widgets[name].delete_widget() except: print_stack_trace()() self.remove_from_desktop(name, True) try: self.widgets[name].unload() except: print_stack_trace()() self.unload(name) self.config.remove(name) # warranty self.del_from_dicts(name) os.remove(path)
def remove_from_desktop(self, name, reminconf=False): """Remove widget from desktop. :param name: str, widget name :param reminconf: bool, True - remove widget all data from config """ self.call_purge_other(name, reminconf) if reminconf: try: self.widgets[name].purge() except: print_stack_trace()() else: try: self.widgets[name].remove() except: print_stack_trace()() self.config.add(name) try: self.widgets[name].close() except: print_stack_trace()() self.unload(name) self.config.set_placed(name, False) if reminconf: self.config.remove(name) self.config.save()
def __start(): is_new = False if not properties.is_exists(): is_new = True properties.create_default_settings() prop = properties.read_settings() __setup_loggers(prop) if is_new: logging.getLogger('stdout').critical('written default settings config') try: # start logging.getLogger('stdout').info('start') app = QApplication(sys.argv) app.setQuitOnLastWindowClosed(False) gui.__init__(app, prop) # exit status = app.exec() # waiting sys.exit(status) except SystemExit as se: logging.getLogger('stdout').info('exit code: ' + str(se)) except: print_stack_trace()() finally: # correct exit try: # unload widgets and save config if gui.manager: gui.manager.unload_all() gui.manager.config.save() except: print_stack_trace()() try: # remove lock file lock.remove_lock() except: print_stack_trace()()
def _list_fill(self, checked=False): self._pool_ping() self.list.clear() for addr in self.servers: item = QListWidgetItem(self.list) try: if addr not in self.list_buffer: item.setText(addr) continue text, favicon, tooltip = json.loads(self.list_buffer[addr]) favicon = base64.b64decode(favicon) item.setIcon(QIcon(QPixmap.fromImage( QImage.fromData(favicon)))) item.setText(text) font = item.font() font.setPixelSize(10) font.setBold(True) item.setFont(font) item.setToolTip(tooltip) except: item.setText(addr) print_stack_trace()()
def load(self, module_name, only_info=True) -> bool: """Load widget from module. :param module_name: str, module name :param only_info: bool, if True - load only WidgetInfo classes :return: bool, True if load correctly """ @try_except(lambda: False) def return_false(): if module_name in sys.modules: del sys.modules[module_name] return False try: if module_name in sys.modules: # get module mod = sys.modules[module_name] else: # import module mod = __import__(module_name) # validate module if not self.validate_widget_module(mod): self.logger.info(module_name + ' fail validation module') return return_false() if self.is_loading_skip(mod): self.logger.debug(module_name + ' skipped') return return_false() # init and validate WidgetInfo info = mod.Info(self.lang) if not self.validate_widget_info(info): self.logger.info(module_name + ' fail validation WidgetInfo') return return_false() # check exists if only_info: if info.NAME in self.info: self.logger.info(module_name + ', name "' + info.NAME + '" is exists') return return_false() elif info.NAME in self.widgets: self.logger.info(module_name + ', name "' + info.NAME + '" is exists') return return_false() # fill data if os.path.dirname(mod.__file__) == C_WIDGETS: if info.NAME in self.custom_widgets: # check exists self.logger.info(module_name + ', name "' + info.NAME + '" is exists') return return_false() else: self.custom_widgets.append(info.NAME) self.info[info.NAME] = info self.paths[info.NAME] = mod.__file__ if only_info and not self.config.is_placed(info.NAME): return True # init and validate Main class widget = mod.Main(self, info) if not self.validate_widget_main(widget): self.logger.info(module_name + ' fail validation Main') return return_false() # setup Main class self.setup_widget(widget, info) self.widgets[info.NAME] = widget self.config.load(info.NAME) self.call_load_other(info.NAME) return True except: print_stack_trace()() self.logger.error(module_name + ' fail loading') return return_false()