예제 #1
0
파일: manager.py 프로젝트: twixi/DeWidgets
 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()()
예제 #2
0
파일: manager.py 프로젝트: twixi/DeWidgets
 def save(widget):
     try:
         widget.edit_mode(mode)
         if not mode:
             self.config.add(widget.info.NAME)
     except:
         print_stack_trace()()
예제 #3
0
 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()
예제 #4
0
 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'])))
예제 #5
0
 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()
예제 #6
0
파일: manager.py 프로젝트: twixi/DeWidgets
 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()()
예제 #7
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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()()
예제 #8
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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()()
예제 #9
0
파일: gui.py 프로젝트: twixi/DeWidgets
 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()
예제 #10
0
파일: gui.py 프로젝트: twixi/DeWidgets
 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()()
예제 #11
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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()()
예제 #12
0
 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()()
예제 #13
0
 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()()
예제 #14
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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]
예제 #15
0
 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()()
예제 #16
0
 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]
예제 #17
0
 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()
예제 #18
0
파일: gui.py 프로젝트: twixi/DeWidgets
 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()()
예제 #19
0
 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()()
예제 #20
0
 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()
예제 #21
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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)
예제 #22
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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()
예제 #23
0
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()()
예제 #24
0
 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()()
예제 #25
0
파일: manager.py 프로젝트: twixi/DeWidgets
    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()