def show_softinfo(self,path=None,softname=None): if path != None: self.debfile = DebFile(path) self.install_pkgname = self.debfile.name self.install_version = _("version: ") + self.debfile.version self.parse = parseThread(self.install_pkgname) self.parse.parse_over.connect(self.parse_desktop) self.exec_word = None elif softname != None: self.cache = apt.Cache() pkg = self.cache[softname] self.uninstall_pkgname = pkg.shortname self.uninstall_version = _("version: ") + pkg.versions.keys()[0] if LAUNCH_MODE == 'normal': self.ui.install.setText(_("installation")) self.adaptiveLength(_("select an installation file"), _("version: no")) # 设置包名、版本信息 elif LAUNCH_MODE == 'manual': self.ui.install.setText(_("installation")) self.ui.install.clicked.connect(self.install_debfile) self.adaptiveLength(self.install_pkgname, self.install_version) # 设置包名、版本信息 iconpath = get_icon.get_icon_path(str(self.install_pkgname)) if iconpath: self.ui.icon.setStyleSheet("QLabel{background-image:url('" + iconpath + "');background-color:transparent;background-position:center;background-repeat:none}") elif LAUNCH_MODE == 'remove': if pkg.is_installed: self.ui.install.setText(_("uninstallation")) self.ui.install.clicked.connect(lambda : self.remove(pkg.name)) self.adaptiveLength(self.uninstall_pkgname, self.uninstall_version) # 设置包名、版本信息 iconpath = get_icon.get_icon_path(str(self.uninstall_pkgname)) if iconpath: self.ui.icon.setStyleSheet("QLabel{background-image:url('" + iconpath + "');background-color:transparent;background-position:center;background-repeat:none}") else: #软件未安装时,提示信息 self.ui.install.setText(_("uninstalled")) self.ui.install.setStyleSheet("QPushButton{background-color:#A9A9A9;border:0px;font-size:16px;border-radius:4px;color:#ffffff}") self.ui.install.setEnabled(False) self.adaptiveLength(_("version: no"), _("software not installed")) # 设置包名、版本信息 iconpath = get_icon.get_icon_path(self.uninstall_version) if iconpath: self.ui.icon.setStyleSheet("QLabel{background-image:url('" + iconpath + "');background-color:transparent;background-position:center;background-repeat:none}")
def show_debfile(self,path): self.debfile = DebFile(path) self.ui.pkgname.setStyleSheet(".QLabel{background-color:transparent;border:0px;font-size:26px;color:#444444}") if path == '': # self.ui.pkgname.setText() text = get_icon.setLongTextToElideFormat(self.ui.pkgname, _("暂无可安装文件")) else: text = get_icon.setLongTextToElideFormat(self.ui.pkgname, _(str(self.debfile.name))) if str(text).endswith("…") is True: self.ui.pkgname.setToolTip(self.debfile.name) self.app = self.debfile iconpath = get_icon.get_icon_path(str(self.debfile.name)) if iconpath: self.ui.icon.setStyleSheet("QLabel{background-image:url('" + iconpath + "');background-color:transparent;}") if self.debfile.version: text = get_icon.setLongTextToElideFormat(self.ui.Version, "版本号: " + self.debfile.version) if str(text).endswith("…") is True: self.ui.Version.setToolTip(self.debfile.version) else: self.ui.Version.setText("版本号:暂无") self.ui.install.clicked.connect(self.install_debfile)
def update_xapiandb(self, kwargs): database = xapian.WritableDatabase(XAPIAN_DB_PATH, xapian.DB_OPEN) DB = xapian.Database(XAPIAN_DB_PATH) enquire = xapian.Enquire(database) indexer = xapian.TermGenerator() if "" == kwargs["pkgname"]: modified_num = 0 add_num = 0 xapiandb_update = "No" query_xapiandb_version = xapian.Query("the_#ukxapiandb#_version") enquire.set_query(query_xapiandb_version) matches = enquire.get_mset(0, 1) for re in matches: docid_for_xapiandb_version = re.document.get_docid() doc_for_xapiandb_version = re.document doc_data = doc_for_xapiandb_version.get_data() if (isinstance(doc_data, bytes)): doc_data = doc_data.decode(encoding='utf-8') if ("XAPIANDB_VERSION" == doc_data): the_latest_update_time = doc_for_xapiandb_version.get_value( 2) #valueslot:2 xapiandb update time if (isinstance(the_latest_update_time, bytes)): the_latest_update_time = the_latest_update_time.decode( encoding='utf-8') else: the_latest_update_time = time.strftime( '%Y-%m-%dT%H:%M:%S', time.localtime()) if (Globals.DEBUG_SWITCH): print( "Failed to get the latest update time from client xapiandb,use default time.localtime()" ) reslist = self.premoter.newerapp_for_xapianupdate( the_latest_update_time) for app in reslist: app_name = str(app["app_name"]) display_name_cn = str(app["display_name_cn"]) keywords_for_search = str(app["keywords_for_search"]) query = xapian.Query(app_name) enquire.set_query(query) doccount = DB.get_doccount() matches = enquire.get_mset(0, doccount) if matches.size() != 0: for re in matches: get_name = re.document.get_data() if (isinstance(get_name, bytes)): get_name = get_name.decode(encoding='utf-8') if get_name == app_name: docid = re.docid doc = re.document doc.clear_terms() indexer.set_document(doc) doc.add_term(app_name, 10) if keywords_for_search != "None": keywords = display_name_cn + ";" + keywords_for_search + ";" + app_name else: keywords = display_name_cn + ";" + app_name indexer.index_text(keywords, 10) try: from mmseg.search import seg_txt_search, seg_txt_2_dict for word, value in seg_txt_2_dict( keywords).items(): if word != "none": doc.add_term(word, 10) else: pass except: if (Globals.DEBUG_SWITCH): print("----No mmseg model---") database.replace_document(docid, doc) xapiandb_update = "Yes" modified_num = modified_num + 1 else: continue else: doc = xapian.Document() doc.set_data(app_name) doc.add_term(app_name, 10) indexer.set_document(doc) if keywords_for_search != "None": keywords = display_name_cn + ";" + keywords_for_search + ";" + app_name else: keywords = display_name_cn + ";" + app_name indexer.index_text(keywords, 10) try: for word, value in seg_txt_2_dict(keywords).items(): if word != "none": doc.add_term(word, 10) else: pass except: pass database.add_document(doc) add_num = add_num + 1 if (Globals.DEBUG_SWITCH): print("App:", doc.get_data(), " ", "terms:", end=' ') for itr in doc.termlist(): if (Globals.DEBUG_SWITCH): print(itr.term, end=' ') xapiandb_update = "Yes" if (Globals.DEBUG_SWITCH): print(" ") try: if xapiandb_update == "Yes": now = time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime()) doc_for_xapiandb_version.add_value(2, now) database.replace_document(docid_for_xapiandb_version, doc_for_xapiandb_version) database.commit() if (Globals.DEBUG_SWITCH): print( "Xapiandb has updated . %d app modified, %d app add. Tatal: %d app updated" % (modified_num, add_num, len(reslist))) except: if (Globals.DEBUG_SWITCH): print( "The xapian database (/home/ice_bird/.cache/uksc/xapiandb) is crashed,please remove it and install a new one!" ) if (Globals.DEBUG_SWITCH): print("update uksc xapiandb over") else: appinfo_query = xapian.Query(kwargs["pkgname"]) enquire.set_query(appinfo_query) matches = enquire.get_mset(0, DB.get_doccount()) for re in matches: doc_for_appinfo = re.document doc_data = doc_for_appinfo.get_data() if kwargs["pkgname"] == doc_data: return doc = xapian.Document() doc.set_data(kwargs["pkgname"]) doc.add_term(kwargs["pkgname"], 10) if (Globals.DEBUG_SWITCH): print("debfile path:", kwargs["path"]) deb = DebFile(kwargs["path"]) terms = kwargs["pkgname"] try: terms = terms + " " + deb.description except: if (Globals.DEBUG_SWITCH): print("Failed to get app description") indexer.set_document(doc) indexer.index_text(terms) database.add_document(doc) database.commit() if (Globals.DEBUG_SWITCH): print("update xapiandb over: ", kwargs["pkgname"], "terms:", end=' ') for itr in doc.termlist(): if (Globals.DEBUG_SWITCH): print(itr.term, end=' ') if (Globals.DEBUG_SWITCH): print(" ")