Changeset 7120


Ignore:
Timestamp:
Apr 6, 2018, 2:53:26 PM (19 months ago)
Author:
Juanma
Message:

WIP on bundles/releases

Location:
lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore
Files:
4 edited

Legend:

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

    r7118 r7120  
    410410                        package=package.replace("-.",".")
    411411
    412                 filename=outdir+package.lower().replace('appimage',"appdata")+".xml"
    413                 self._debug("checking if we need to download "+filename)
    414                 if not os.path.isfile(filename):
    415                         repo_info={'info_url':info_url,'repo':repo,repo_name:'repo_name'}
    416                         self._write_xml_file(filename,appinfo,repo_info,lock)
     412#               filename=outdir+package.lower().replace('appimage',"appdata")+".xml"
     413#               self._debug("checking if we need to download "+filename)
     414#               if not os.path.isfile(filename):
     415                repo_info={'info_url':info_url,'repo':repo,repo_name:'repo_name'}
     416                self._write_xml_file(appinfo,repo_info,lock)
    417417                semaphore.release()
    418418        #def _th_write_xml
    419419
    420         def _write_xml_file(self,filename,appinfo,repo_info,lock):
    421                         name=appinfo['name'].lower().replace(".appimage","")
    422                         self._debug("Generating %s xml"%appinfo['package'])
    423                         f=open(filename,'w')
    424                         f.write('<?xml version="1.0" encoding="UTF-8"?>'+"\n")
    425                         f.write("<components version=\"0.10\">\n")
    426                         f.write("<component  type=\"desktop-application\">\n")
    427                         f.write("  <id>%s</id>\n"%appinfo['package'].lower())
    428                         f.write("  <pkgname>%s</pkgname>\n"%appinfo['package'])
    429                         f.write("  <name>%s</name>\n"%name)
    430                         f.write("  <metadata_license>CC0-1.0</metadata_license>\n")
    431                         f.write("  <provides><binary>%s</binary></provides>\n"%appinfo['package'])
    432                         if 'releases' in appinfo.keys():
    433                                 f.write("  <releases>\n")
    434                                 for release in appinfo['releases']:
    435                                         tmp_release=release.split('/')
    436                                         rel_number='/'.join(tmp_release[-2:])
    437                                         f.write("    <release version=\"%s\" urgency=\"medium\">"%rel_number)
    438                                         f.write("</release>\n")
    439                                 f.write("  </releases>\n")
    440                         f.write("  <launchable type=\"desktop-id\">%s.desktop</launchable>\n"%name)
    441                         if appinfo['description']=='':
    442                                 with lock:
    443                                         try:
    444                                                 if appinfo['name'] in self.descriptions_dict.keys():
    445                                                         (description,icon)=self.descriptions_dict[appinfo['name']]
    446                                                 else:
    447                                                         (description,icon)=self._get_description_icon(appinfo['name'],repo_info)
    448                                                         self.descriptions_dict.update({appinfo['name']:[description,icon]})
    449                                         except:
    450                                                 description=''
    451                                                 icon=''
    452                         else:
    453                                 description=appinfo['description']
     420        def _write_xml_file(self,appinfo,repo_info,lock):
     421                #Search in local store for the app
     422                app=self.store.get_app_by_pkgname(appinfo['package'].lower())
     423                sw_new=False
     424                if not app:
     425                        app=appstream.App()
     426                        sw_new=True
     427                bundle=appstream.Bundle()
     428                icon=appstream.Icon()
     429                screenshot=appstream.Screenshot()
     430                #F*****g appstream have kinds undefined but kind_from_string works... wtf?
     431#               bundle.set_kind(appstream.BundleKind.SNAP)
     432                bundle.set_kind(bundle.kind_from_string('APPIMAGE'))
     433                bundle.set_id(appinfo['package']+'.appimage')
     434                app.add_bundle(bundle)
     435                app.add_category("AppImage")
     436                if sw_new:
     437                        app.set_name("C",appinfo['name'])
     438#               app.add_pkgname(pkg.get_name()+'.snap')
     439                        app.add_pkgname(appinfo['package'])
     440#               release=appstream.Release()
     441#               release.set_version(pkg.get_version())
     442#               app.add_release(release)
     443                        app.set_id("appimagehub.%s"%appinfo['name']+'.appimage')
     444#               app.set_id(pkg.get_name()+'.snap')
     445                        app.set_id_kind=appstream.IdKind.DESKTOP
     446                        description="This is an AppImage bundle of app %s. It hasn't been tested by our developers and comes from a 3rd party dev team. Please use it carefully.\n%s"%(appinfo['name'],appinfo['description'])
    454447                        summary=' '.join(list(description.split(' ')[:8]))
    455448                        if len(description.split(' '))>8:
    456449                                summary+="... "
    457                         description="This is an AppImage bundle of app %s. It hasn't been tested by our developers and comes from a 3rd party dev team. Please use it carefully.\n%s"%(name,description)
    458                         if summary=='':
    459                                 summary=' '.join(list(description.split(' ')[:8]))
    460                         f.write("  <description><p></p><p>%s</p></description>\n"%description)
    461                         f.write("  <summary>%s</summary>\n"%summary)
    462 #                       f.write("  <icon type=\"local\">%s</icon>\n"%appinfo['icon'])
    463                         f.write("<icon type=\"cached\">"+name+"_"+name+".png</icon>\n")
    464                         f.write("  <url type=\"homepage\">%s</url>\n"%appinfo['homepage'])
    465                         f.write("  <bundle type=\"appimage\">%s</bundle>\n"%appinfo['name'])
    466                         f.write("  <keywords>\n")
    467                         keywords=name.split("-")
    468                         banned_keywords=["linux","x86_64","i386","ia32","amd64"]
    469                         for keyword in keywords:
    470                                 #Better than isalpha method for this purpose
    471                                 if keyword.isidentifier() and keyword not in banned_keywords:
    472                                         f.write("       <keyword>%s</keyword>\n"%keyword)
    473                         f.write("       <keyword>appimage</keyword>\n")
    474                         f.write("  </keywords>\n")
    475                         f.write("  <categories>\n")
    476                         f.write("       <category>AppImage</category>\n")
    477                         if 'categories' in appinfo.keys():
    478                                 for category in appinfo['categories']:
    479                                         f.write("       <category>%s</category>\n"%category)
    480                         f.write("  </categories>\n")
    481                         f.write("</component>\n")
    482                         f.write("</components>\n")
    483                         f.close()
     450                        app.set_description("C",description)
     451                        app.set_comment("C",summary)
     452                        self.store.add_app(app)
     453
     454#               app.add_keyword("C",pkg.get_name())
     455#               for word in pkg.get_summary().split(' '):
     456#                       app.add_keyword("C",word)
     457
     458#               if pkg.get_icon():
     459#                       if self.icon_cache_enabled:
     460#                               icon.set_kind(appstream.IconKind.LOCAL)
     461#                               icon.set_name(self._download_file(pkg.get_icon(),pkg.get_name(),self.icons_folder))
     462#                       else:
     463#                               icon.set_kind(appstream.IconKind.REMOTE)
     464#                               icon.set_name(pkg.get_icon())
     465#                       app.add_icon(icon)
     466
     467#               if pkg.get_license():
     468#                       app.set_project_license(pkg.get_license())
     469
     470#               if pkg.get_screenshots():
     471#                       for snap_screen in pkg.get_screenshots():
     472#                               img=appstream.Image()
     473##                              img.load_filename(self._download_file(snap_screen.get_url(),pkg.get_name(),self.images_folder))
     474#                               img.set_kind(appstream.ImageKind.SOURCE)
     475#                               img.set_url(snap_screen.get_url())
     476#                               break
     477#                       screenshot.add_image(img)
     478#                       app.add_screenshot(screenshot)
     479                return(app)
     480#                       name=appinfo['name'].lower().replace(".appimage","")
     481#                       self._debug("Generating %s xml"%appinfo['package'])
     482#                       f=open(filename,'w')
     483#                       f.write('<?xml version="1.0" encoding="UTF-8"?>'+"\n")
     484#                       f.write("<components version=\"0.10\">\n")
     485#                       f.write("<component  type=\"desktop-application\">\n")
     486#                       f.write("  <id>%s</id>\n"%appinfo['package'].lower())
     487#                       f.write("  <pkgname>%s</pkgname>\n"%appinfo['package'])
     488#                       f.write("  <name>%s</name>\n"%name)
     489#                       f.write("  <metadata_license>CC0-1.0</metadata_license>\n")
     490#                       f.write("  <provides><binary>%s</binary></provides>\n"%appinfo['package'])
     491#                       if 'releases' in appinfo.keys():
     492#                               f.write("  <releases>\n")
     493#                               for release in appinfo['releases']:
     494#                                       tmp_release=release.split('/')
     495#                                       rel_number='/'.join(tmp_release[-2:])
     496#                                       f.write("    <release version=\"%s\" urgency=\"medium\">"%rel_number)
     497#                                       f.write("</release>\n")
     498#                               f.write("  </releases>\n")
     499#                       f.write("  <launchable type=\"desktop-id\">%s.desktop</launchable>\n"%name)
     500#                       if appinfo['description']=='':
     501#                               with lock:
     502#                                       try:
     503#                                               if appinfo['name'] in self.descriptions_dict.keys():
     504#                                                       (description,icon)=self.descriptions_dict[appinfo['name']]
     505#                                               else:
     506#                                                       (description,icon)=self._get_description_icon(appinfo['name'],repo_info)
     507#                                                       self.descriptions_dict.update({appinfo['name']:[description,icon]})
     508#                                       except:
     509#                                               description=''
     510#                                               icon=''
     511#                       else:
     512#                               description=appinfo['description']
     513#                       summary=' '.join(list(description.split(' ')[:8]))
     514#                       if len(description.split(' '))>8:
     515#                               summary+="... "
     516#                       description="This is an AppImage bundle of app %s. It hasn't been tested by our developers and comes from a 3rd party dev team. Please use it carefully.\n%s"%(name,description)
     517#                       if summary=='':
     518#                               summary=' '.join(list(description.split(' ')[:8]))
     519#                       f.write("  <description><p></p><p>%s</p></description>\n"%description)
     520#                       f.write("  <summary>%s</summary>\n"%summary)
     521##                      f.write("  <icon type=\"local\">%s</icon>\n"%appinfo['icon'])
     522#                       f.write("<icon type=\"cached\">"+name+"_"+name+".png</icon>\n")
     523#                       f.write("  <url type=\"homepage\">%s</url>\n"%appinfo['homepage'])
     524#                       f.write("  <bundle type=\"appimage\">%s</bundle>\n"%appinfo['name'])
     525#                       f.write("  <keywords>\n")
     526#                       keywords=name.split("-")
     527#                       banned_keywords=["linux","x86_64","i386","ia32","amd64"]
     528#                       for keyword in keywords:
     529#                               #Better than isalpha method for this purpose
     530#                               if keyword.isidentifier() and keyword not in banned_keywords:
     531#                                       f.write("       <keyword>%s</keyword>\n"%keyword)
     532#                       f.write("       <keyword>appimage</keyword>\n")
     533#                       f.write("  </keywords>\n")
     534#                       f.write("  <categories>\n")
     535#                       f.write("       <category>AppImage</category>\n")
     536#                       if 'categories' in appinfo.keys():
     537#                               for category in appinfo['categories']:
     538#                                       f.write("       <category>%s</category>\n"%category)
     539#                       f.write("  </categories>\n")
     540#                       f.write("</component>\n")
     541#                       f.write("</components>\n")
     542#                       f.close()
    484543        #def _write_xml_file
    485544
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/infoManager.py

    r7118 r7120  
    198198                'bundle':[],\
    199199                'updatable':'',\
     200                'component':'',\
    200201                'releases':[]
    201202                }
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/snapManager.py

    r7118 r7120  
    122122                                bundle.set_id(pkg.get_name()+'.snap')
    123123                                app.add_bundle(bundle)
     124                                app.add_category("Snap")
    124125#                               store.add_app(self._generate_appstream_app_from_snap(pkg))
    125126                        else:
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/storeManager.py

    r7119 r7120  
    423423        #  - Dict with the related info
    424424        ####
    425         def _get_Extended_App_Info(self,info_applist,launchedby=None,fullsearch=True):
     425        def _get_Extended_App_Info(self,info_applist,launchedby=None,fullsearch=True,channel=''):
    426426                #Check if there's any plugin for the distinct type of packages
    427427                action='pkginfo'
     
    431431                result['status']={'status':0,'msg':''}
    432432                for app_info in info_applist:
    433                         available_channels=self._check_package_type(app_info)
    434                         for package_type in available_channels:
    435                                 if package_type in types_dict:
    436                                         types_dict[package_type].append(app_info)
    437                                 else:
    438                                         types_dict[package_type]=[app_info]
     433                        if channel:
     434                                types_dict[channel]=[app_info]
     435                        else:
     436                                available_channels=self._check_package_type(app_info)
     437                                for package_type in available_channels:
     438                                        if package_type in types_dict:
     439                                                types_dict[package_type].append(app_info)
     440                                        else:
     441                                                types_dict[package_type]=[app_info]
    439442                for package_type in types_dict:
    440443                        self._debug("Checking plugin for %s %s"%(action,package_type))
     
    504507                if (launchedby=='search'):
    505508                                exact_match=False
     509                target_channel=''
     510                if '=' in search_item:
     511                        target_channel=search_item.split('=')[-1]
     512                        search_item=search_item.split('=')[0]
    506513                for package_type in self.plugins_registered[action]:
    507514                        search_function=self._execute_class_method(action,'*',launchedby=launchedby)
     
    519526                        #2.- Get rest of metadata (slower)
    520527                        subordinate_action='pkginfo'
    521                         result=self._get_Extended_App_Info(result['data'],launchedby,fullsearch)
     528                        self._debug("Target channel: %s"%target_channel)
     529                        result=self._get_Extended_App_Info(result['data'],launchedby,fullsearch,target_channel)
    522530                        if launchedby:
    523531                                realAction=launchedby
Note: See TracChangeset for help on using the changeset viewer.