Ignore:
Timestamp:
Nov 2, 2018, 9:15:56 AM (13 months ago)
Author:
Juanma
Message:

Implemented cache

File:
1 edited

Legend:

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

    r8185 r8223  
    3939                        except:
    4040                                self.icon_cache_enabled=False
    41                                 self._debug("Icon cache disabled")
     41                                #self._debug("Icon cache disabled")
    4242                if not os.path.isdir(self.images_folder):
    4343                        try:
     
    4545                        except:
    4646                                self.image_cache_enabled=False
    47                                 self._debug("Image cache disabled")
     47                                #self._debug("Image cache disabled")
    4848        #def __init__
    4949
    5050        def set_debug(self,dbg=True):
    5151                self.dbg=dbg
    52                 self._debug ("Debug enabled")
     52                #self._debug ("Debug enabled")
    5353        #def set_debug
    5454
     
    6060        def register(self):
    6161                return(self.plugin_actions)
     62        #def register
    6263
    6364        def enable(self,state=False):
    6465                self.disabled=state
     66        #def enable
    6567
    6668        def execute_action(self,action,applist=None,store=None,results=0):
     
    7375                self.result['data']=''
    7476               
     77                self.snap_client=Snapd.Client()
     78                try:
     79                        self.snap_client.connect_sync(None)
     80                except Exception as e:
     81                        self.disabled=True
     82                        #self._debug("Disabling snap %s"%e)
    7583
    7684                if self.disabled==True:
     
    7987                else:
    8088                        self._check_dirs()
    81                         self.snap_client=Snapd.Client()
    82                         self.snap_client.connect_sync(None)
    8389                        dataList=[]
    8490                        if action=='load':
     
    99105                self.progress=100
    100106                return(self.result)
     107        #def execute_action
    101108
    102109        def _set_status(self,status,msg=''):
     
    117124                if not os.path.isdir(self.cache_xmls):
    118125                        os.makedirs(self.cache_xmls)
     126        #def _check_dirs
    119127
    120128        def _load_snap_store(self,store):
     
    129137                        if int(epoch_time)-int(fcache_update)<86400:
    130138                                if os.listdir(os.path.dirname(self.cache_xmls)):
    131                                         self._debug("Loading snap from cache")
     139                                        #self._debug("Loading snap from cache")
    132140                                        store=self._load_from_cache(store)
    133141                                        return store
     
    153161                        store.add_app(store_pool.get())
    154162                return(store)
     163        #def _load_snap_store
    155164
    156165        def _th_load_store(self,store,pkg,semaphore):
     
    158167                app=self.store.get_app_by_pkgname(pkg.get_name())
    159168                if not app:
    160                         self._debug("Searching for %s"%pkg.get_name())
     169                        #self._debug("Searching for %s"%pkg.get_name())
    161170                        app=self.store.get_app_by_id(pkg.get_name().lower()+".desktop")
    162171                        if app:
     
    170179                                store.put(self._generate_appstream_app_from_snap(pkg))
    171180                semaphore.release()
     181        #def _th_load_store
    172182
    173183        def _load_from_cache(self,store):
     
    175185                        if target_file.endswith('.xml'):
    176186                                store_file=Gio.File.new_for_path(self.cache_xmls+'/'+target_file)
    177                                 self._debug("Adding file %s/%s"%(self.cache_xmls,target_file))
     187                                #self._debug("Adding file %s/%s"%(self.cache_xmls,target_file))
    178188                                try:
    179189                                        store.from_file(store_file,'',None)
    180190                                except Exception as e:
    181                                         self._debug("Couldn't add file %s to store"%target_file)
    182                                         self._debug("Reason: %s"%e)
     191                                        #self._debug("Couldn't add file %s to store"%target_file)
     192                                        #self._debug("Reason: %s"%e)
     193                                        pass
    183194                return store   
     195        #def _load_from_cache
    184196
    185197        def _generate_appstream_app_from_snap(self,pkg):
     
    243255                        xml_data=xml_file.readlines()
    244256                        xml_file.close()
    245                         self._debug("fixing %s"%xml_path)
     257                        #self._debug("fixing %s"%xml_path)
    246258                        try:
    247259                                xml_data[0]=xml_data[0]+"<components>\n"
     
    253265                        xml_file.close()
    254266                return(app)
     267        #def _generate_appstream_app_from_snap
    255268
    256269        def _search_cb(self,obj,request,*args):
    257270                global wrap
    258271                wrap=request
     272        #def _search_cb
    259273
    260274        def _load_sections(self):
     
    266280                                stable_pkgs.append(pkg)
    267281                return(stable_pkgs)
     282        #def _load_sections
    268283
    269284        def _search_snap_async(self,tokens,force_stable=True):
    270                 self._debug("Async Searching %s"%tokens)
     285                #self._debug("Async Searching %s"%tokens)
    271286                pkgs=None
    272287                global wrap
     
    288303                                        stable_pkgs.append(pkg)
    289304                                else:
    290                                         self._debug(pkg.get_channel())
     305                                        #self._debug(pkg.get_channel())
     306                                        pass
    291307                        else:
    292308                                stable_pkgs.append(pkg)
    293309                return(stable_pkgs)
     310        #def _search_snap_async
    294311
    295312        def _search_snap(self,tokens,force_stable=True):
    296                 self._debug("Searching %s"%tokens)
     313                #self._debug("Searching %s"%tokens)
    297314                pkg=None
    298315                pkgs=None
     
    308325                                        stable_pkgs.append(pkg)
    309326                                else:
    310                                         self._debug(pkg.get_channel())
     327                                        #self._debug(pkg.get_channel())
     328                                        pass
    311329                        else:
    312330                                stable_pkgs.append(pkg)
    313                 self._debug("Done")
     331                #self._debug("Done")
    314332                return(stable_pkgs)
    315333        #def _search_snap
     
    319337                if not os.path.isfile(target_file):
    320338                        if not os.path.isfile(target_file):
    321                                 self._debug("Downloading %s to %s"%(url,target_file))
     339                                #self._debug("Downloading %s to %s"%(url,target_file))
    322340                                try:
    323341                                        with urllib.request.urlopen(url) as response, open(target_file, 'wb') as out_file:
     
    332350                                        st = os.stat(target_file)
    333351                                except Exception as e:
    334                                         self._debug("Unable to download %s"%url)
    335                                         self._debug("Reason: %s"%e)
     352                                        #self._debug("Unable to download %s"%url)
     353                                        #self._debug("Reason: %s"%e)
    336354                                        target_file=''
    337355                return(target_file)
     
    341359        def _get_info(self,app_info):
    342360                #switch to launch async method when running under a gui
    343                 #For an unknown reason request will block when sync mode under a gui and async blocks when on cli (really funny)
    344                 self._debug("Getting info for %s"%app_info)
     361                #Request will block when in sync mode under a gui and async mode blocks when on cli (really funny)
     362                #self._debug("Getting info for %s"%app_info)
    345363                pkg=None
    346364                try:
     
    350368                except:
    351369                        app_info['state']='available'
     370                if not app_info['size']:
    352371                        if self.cli_mode:
    353372                                pkgs=self._search_snap(app_info['package'].replace('.snap',''),force_stable=False)
    354373                        else:
    355374                                pkgs=self._search_snap_async(app_info['package'].replace('.snap',''),force_stable=False)
    356                         self._debug("Getting extended info for %s %s"%(app_info['package'],pkgs))
    357                 if type(pkgs)==type([]):
    358                         for pkg in pkgs:
    359                                 self._debug("Getting extended info for %s"%app_info['name'])
    360                                 if pkg.get_download_size():
    361                                         app_info['size']=str(pkg.get_download_size())
    362                                 elif pkg.get_installed_size():
    363                                         app_info['size']=str(pkg.get_installed_size())
    364                                 else:
    365                                         app_info['size']="-1"
    366                                 break
    367                 else:
    368                         app_info['size']='0'
    369                 self._debug("Info for %s"%app_info)
     375                        #self._debug("Getting extended info for %s %s"%(app_info['package'],pkgs))
     376                        if type(pkgs)==type([]):
     377                                for pkg in pkgs:
     378                                        #self._debug("Getting extended info for %s"%app_info['name'])
     379                                        if pkg.get_download_size():
     380                                                app_info['size']=str(pkg.get_download_size())
     381                                        elif pkg.get_installed_size():
     382                                                app_info['size']=str(pkg.get_installed_size())
     383                                        else:
     384                                                app_info['size']="-1"
     385                                        break
     386                        else:
     387                                app_info['size']='0'
     388                #self._debug("Info for %s"%app_info)
    370389                self.partial_progress=100
    371390                return(app_info)
     
    373392
    374393        def _install_snap(self,app_info):
    375                 self._debug("Installing %s"%app_info['name'])
     394                #self._debug("Installing %s"%app_info['name'])
     395                def install(app_name,flags):
     396                        self.snap_client.install2_sync(flags,app_name.replace('.snap',''),
     397                                        None, # channel
     398                                        None, #revision
     399                                        self._callback, (None,),
     400                                        None) # cancellable
     401                        app_info['state']='installed'
     402                        self._set_status(0)
     403
    376404                if app_info['state']=='installed':
    377405                        self._set_status(4)
    378406                else:
    379407                        try:
    380                                 self.snap_client.install_sync(app_info['name'].replace('.snap',''),
    381                         None, # channel
    382                         self._callback, (None,),
    383                         None) # cancellable
    384                                 app_info['state']='installed'
    385                                 self._set_status(0)
     408                                install(app_info['name'],Snapd.InstallFlags.NONE)
    386409                        except Exception as e:
    387                                 print("Install error %s"%e)
    388                                 self._set_status(5)
    389 
    390                 self._debug("Installed %s"%app_info)
     410                                try:
     411                                        if e.code==19:
     412                                                install(app_info['name'],Snapd.InstallFlags.CLASSIC)
     413                                except Exception as e:
     414                                        #self._debug("Install error %s"%e)
     415                                        self._set_status(5)
     416                #self._debug("Installed %s"%app_info)
    391417                return app_info
    392418        #def _install_snap
Note: See TracChangeset for help on using the changeset viewer.