source: lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/infoManager.py @ 5215

Last change on this file since 5215 was 5215, checked in by Juanma, 3 years ago

Avoid reload the cache when installing/uninstalling apps

File size: 5.7 KB
Line 
1import locale
2import re
3class infomanager:
4        def __init__(self):
5                self.dbg=0
6                self.pluginInfo={'get_info':'*'}
7                self.result={}
8                self.result['status']={'status':-1,'msg':''}
9                self.result['data']=[]
10                self.progress=0
11                self.inc=0
12                self._set_locale()
13        #def __init__
14
15        def set_debug(self,dbg='1'):
16                self.dbg=int(dbg)
17                self._debug ("Debug enabled")
18        #def set__debug
19
20        def _debug(self,msg=''):
21                if self.dbg==1:
22                        print ('DEBUG Info: '+str(msg))
23        #def _debug
24
25        def register(self):
26                return(self.pluginInfo)
27        #def register
28
29        def execute_action(self,appstream,action,applist):
30                self.progress=0
31                self.appstream=appstream
32                count=len(applist)
33                if action=='get_info' and count>0:
34                        inc=100.0/count
35                        self.result['data']=self._get_info(applist)
36                self.progress=100
37                return(self.result)
38        #def execute_action
39       
40        def _set_status(self,status,msg=''):
41                self.result['status']={'status':status,'msg':msg}
42
43        def _callback_progress(self):
44                self.progress=self.progress+self.inc
45        #def _callback_progress
46
47        def _set_locale(self):
48                if locale.getdefaultlocale()[0]=="ca_ES":
49                        self.locale=['ca_ES@valencia','ca@valencia','qcv','ca','ca_ES','es_ES','es','en_US','en','C']
50                else:
51                        if locale.getdefaultlocale()[0]=="es_ES":
52                                self.locale=['es_ES','es','ca_ES@valencia','ca@valencia','qcv','ca','ca_ES','en_US','en','C']
53                        else:
54                                self.locale=[locale.getlocale()[0],'en_US','en','ca_ES@valencia','ca@valencia','qcv','ca','es_ES','es','C']
55        #def _set_locale
56
57        def _get_info(self,applist):
58                applistInfo=[]
59                for app in applist:
60                        appInfo=self._init_appInfo()
61#                       self._debug("Gathering package info for "+app.get_id())
62                        appInfo['appstream_id']=app
63                        if app.get_id():
64                                appInfo['id']=app.get_id()
65                        for localeItem in self.locale:
66                                if app.get_name(localeItem):
67                                        appInfo['name']=app.get_name(localeItem)
68                                        break
69                        if app.get_release_default():
70                                appInfo['version']=app.get_release_default().get_version()
71                        else:
72                                for release in app.get_releases():
73                                        appinfo['version']=release.get_version()
74                                        break
75                        if app.get_pkgname_default():
76                                appInfo['package']=app.get_pkgname_default()
77                        if app.get_project_license():
78                                appInfo['license']=app.get_project_license()
79                        else:
80                                orig=app.get_origin()
81                                if orig:
82                                        if '-main' in orig or '-universe' in orig:
83                                                appInfo['license']='open source'
84                                        else:
85                                                appInfo['license']='propietary/restricted'
86                        for localeItem in self.locale:
87                                if app.get_comment(localeItem):
88                                        appInfo['summary']=app.get_comment(localeItem)
89                                        break
90                        for localeItem in self.locale:
91                                if app.get_description(localeItem):
92                                        appInfo['description']=app.get_description(localeItem)
93                                        break
94                        if app.get_categories():
95                                appInfo['categories']=app.get_categories()
96                        if app.get_icon_default():
97                                appInfo['icon']=app.get_icon_default().get_name()
98                                if appInfo['icon']==None:
99                                        icons=app_get_icons()
100                                        if icons:
101                                                for icon in icons:
102                                                        appInfo['icon']=icon.get_name()
103                                                        break
104                                        else:
105                                                #If there's no icon set empty icon path
106                                                appInfo['icon']=""
107#                               if app.get_icon_default():
108#                                       appInfo['icon']=appInfo['icon']+'/'+app.get_icon_default().get_name()
109                               
110                        if app.get_screenshots():       
111                                thumbnails_list=[]
112                                default_screenshot=''
113                                screenshots_list=[]
114                                for screenshot in app.get_screenshots():
115                                        for img in screenshot.get_images():
116                        #The values are the values of appstream.ImageKind. 1=Source, 2=Thumbnail, 0=UNKNOWN
117                        #yml currently doen's support unkown images so we assign videos depending on file extension
118                                                if not re.search(r'\.....?$',img.get_url()):
119                                                        appInfo['video']=img.get_url()
120                                                        continue
121                                                if img.get_kind()==0:   
122                                                        appInfo['video']=img.get_url()
123                                                        continue
124                                                if img.get_kind()==1: #2=Default;1=normal;0=unknown
125                                                        default_screenshot=img.get_url()
126                                                        screenshots_list.append(img.get_url())
127                                                        continue
128                                                if img.get_kind()==2:   
129                                                        thumbnails_list.append(img.get_url())
130                                                        continue
131
132                                        appInfo['thumbnails']=thumbnails_list
133                                appInfo['screenshot']=default_screenshot
134                                appInfo["screenshots"]=screenshots_list
135                        #The values are the values of appstream.UrlKind. 1=HOMEPAGE, 0=UNKNOWN
136                        if app.get_url_item(1):
137                                appInfo['homepage']=app.get_url_item(1).strip()
138                        if app.get_url_item(0):
139                                appInfo['installerUrl']=app.get_url_item(0).strip()
140                        if app.get_state()==1: #1=Installed
141                                appInfo['state']='installed'
142                        else:
143                                appInfo['state']='available'
144                        if app.get_kudos():
145                                appInfo['kudos']=app.get_kudos()
146                        if app.get_metadata_item('x-zomando'):
147                                appInfo['installerUrl']=app.get_metadata_item('x-zomando')
148                        if app.get_origin():
149                                appInfo['component']=app.get_origin()
150                        if app.get_metadata_item('x-video'):
151                                appInfo['video']=app.get_metadata_item('x-video')
152                                #Modify the url and create the url embed code
153                                if 'embed' not in appInfo['video']:
154                                        appInfo['video']=appInfo['video'].replace('watch?v=','embed/')
155                        for bundle in app.get_bundles():
156                                if bundle.get_kind()==0:
157                                #F***g appstream returns unknown for all the possible types
158                                        if bundle.get_id().endswith('AppImage'):
159                                                appInfo['appImage']=bundle.get_id()
160                                        else:
161                                                appInfo['installerUrl']=bundle.get_id()
162                                if bundle.get_kind()==6:
163                                        appInfo['appImage']=bundle.get_id()
164                        applistInfo.append(appInfo)
165                        self._callback_progress()
166                self._set_status(0)
167                return(applistInfo)
168        #def _get_info
169
170        def _init_appInfo(self):
171                appInfo={'appstream_id':'',\
172                'id':'',\
173                'name':'',\
174                'version':'',\
175                'package':'',\
176                'license':'',\
177                'summary':'',\
178                'description':'',\
179                'categories':[],\
180                'icon':'',\
181                'screenshot':'',\
182                'thumbnails':[],\
183                'video':'',\
184                'homepage':'',\
185                'installerUrl':'',\
186                'state':'',\
187                'depends':'',\
188                'kudos':'',\
189                'suggests':'',\
190                'extraInfo':'',\
191                'size':'',\
192                'appImage':'',\
193                }
194                return(appInfo)
195        #def _init_appInfo
196
197#class infomanager
Note: See TracBrowser for help on using the repository browser.