Ignore:
Timestamp:
Oct 23, 2018, 9:16:33 AM (14 months ago)
Author:
Juanma
Message:

improved performance

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/snapManager.py

    r8139 r8180  
    1212import html
    1313import threading
     14from queue import Queue as pool
    1415#Needed for async find method, perhaps only on xenial
    1516wrap=Gio.SimpleAsyncResult()
     
    134135                fcache=open(self.cache_last_update,'w')
    135136                fcache.write(str(int(time.time())))
    136                 if self.cli_mode:
    137 #                       pkgs=self._search_snap("*")
    138                         pkgs=self._load_sections()
    139                 else:
    140                         pkgs=self._load_sections()
    141 #                       pkgs=self._search_snap_async("*")
     137                pkgs=self._load_sections()
    142138                self._set_status(1)
     139                store_pool=pool()
    143140                for pkg in pkgs:
    144141                        maxconnections = 10
    145142                        threads=[]
    146143                        semaphore = threading.BoundedSemaphore(value=maxconnections)
    147                         th=threading.Thread(target=self._th_load_store, args = (store,pkg,semaphore))
     144                        th=threading.Thread(target=self._th_load_store, args = (store_pool,pkg,semaphore))
    148145                        threads.append(th)
    149146                        th.start()
     147                for thread in threads:
     148                        try:
     149                                thread.join()
     150                        except:
     151                                pass
     152                while store_pool.qsize():
     153                        store.add_app(store_pool.get())
    150154                return(store)
    151155
     
    162166                                app.add_bundle(bundle)
    163167                                app.add_category("Snap")
    164                                 store.add_app(self._generate_appstream_app_from_snap(pkg))
    165                         else:
    166                                 store.add_app(self._generate_appstream_app_from_snap(pkg))
     168                                store.put(self._generate_appstream_app_from_snap(pkg))
     169                        else:
     170                                store.put(self._generate_appstream_app_from_snap(pkg))
    167171                semaphore.release()
    168172
     
    237241                        app.to_file(gioFile)
    238242                        #Fix some things in app_file...
    239                         xml_file=open(xml_path,'r')
     243                        xml_file=open(xml_path,'r',encoding='utf-8')
    240244                        xml_data=xml_file.readlines()
    241245                        xml_file.close()
    242                         count=0
    243                         xml_data[0]=xml_data[0]+"<components>\n"
    244                         xml_data[-1]=xml_data[-1]+"\n"+"</components>"
     246                        self._debug("fixing %s"%xml_path)
     247                        try:
     248                                xml_data[0]=xml_data[0]+"<components>\n"
     249                                xml_data[-1]=xml_data[-1]+"\n"+"</components>"
     250                        except:
     251                                pass
    245252                        xml_file=open(xml_path,'w')
    246253                        xml_file.writelines(xml_data)
     
    261268                return(stable_pkgs)
    262269
    263         def _search_snap_async(self,tokens):
     270        def _search_snap_async(self,tokens,force_stable=True):
    264271                self._debug("Async Searching %s"%tokens)
    265272                pkgs=None
     
    271278                while 'Snapd' not in str(type(wrap)):
    272279                        time.sleep(0.1)
    273 #               snaps,curr=self.snap_client.find_finish(wrap)
    274280                snaps=self.snap_client.find_finish(wrap)
    275281                if type(snaps)!=type([]):
     
    279285                stable_pkgs=[]
    280286                for pkg in pkgs:
    281                         if pkg.get_channel()=='stable':
     287                        if force_stable:
     288                                if pkg.get_channel()=='stable':
     289                                        stable_pkgs.append(pkg)
     290                                else:
     291                                        self._debug(pkg.get_channel())
     292                        else:
    282293                                stable_pkgs.append(pkg)
    283294                return(stable_pkgs)
    284295
    285         def _search_snap(self,tokens):
     296        def _search_snap(self,tokens,force_stable=True):
    286297                self._debug("Searching %s"%tokens)
    287298                pkg=None
    288299                pkgs=None
    289300                try:
    290 #                       pkgs,curr=self.snap_client.find_sync(Snapd.FindFlags.MATCH_NAME,tokens,None)
    291301                        pkgs=self.snap_client.find_sync(Snapd.FindFlags.MATCH_NAME,tokens,None)
    292302                except Exception as e:
     
    295305                stable_pkgs=[]
    296306                for pkg in pkgs:
    297                         if pkg.get_channel()=='stable':
     307                        if force_stable:
     308                                if pkg.get_channel()=='stable':
     309                                        stable_pkgs.append(pkg)
     310                                else:
     311                                        self._debug(pkg.get_channel())
     312                        else:
    298313                                stable_pkgs.append(pkg)
    299                         else:
    300                                 self._debug(pkg.get_channel())
    301314                self._debug("Done")
    302315                return(stable_pkgs)
     
    304317
    305318        def _download_file(self,url,app_name,dest_dir):
    306 #               target_file=self.icons_folder+'/'+app_name+".png"
    307319                target_file=dest_dir+'/'+app_name+".png"
    308320                if not os.path.isfile(target_file):
    309 #                       shutil.copy("/usr/share/icons/hicolor/128x128/apps/lliurex-store.png",target_file)
    310 #                       if not os.fork():
    311321                        if not os.path.isfile(target_file):
    312322                                self._debug("Downloading %s to %s"%(url,target_file))
     
    326336                                        self._debug("Reason: %s"%e)
    327337                                        target_file=''
    328 #                               os._exit(0)
    329338                return(target_file)
    330339        #def _download_file
     
    343352                        app_info['state']='available'
    344353                        if self.cli_mode:
    345                                 pkgs=self._search_snap(app_info['package'].replace('.snap',''))
    346                         else:
    347                                 pkgs=self._search_snap_async(app_info['package'].replace('.snap',''))
    348                         self._debug("Getting extended info for %s %s"%(app_info['name'],pkgs))
     354                                pkgs=self._search_snap(app_info['package'].replace('.snap',''),force_stable=False)
     355                        else:
     356                                pkgs=self._search_snap_async(app_info['package'].replace('.snap',''),force_stable=False)
     357                        self._debug("Getting extended info for %s %s"%(app_info['package'],pkgs))
    349358                if type(pkgs)==type([]):
    350359                        for pkg in pkgs:
     
    352361                                if pkg.get_download_size():
    353362                                        app_info['size']=str(pkg.get_download_size())
     363                                elif pkg.get_installed_size():
     364                                        app_info['size']=str(pkg.get_installed_size())
    354365                                else:
    355                                         app_info['size']=str(pkg.get_installed_size())
     366                                        app_info['size']="-1"
    356367                                break
    357368                else:
Note: See TracChangeset for help on using the changeset viewer.