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

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

zmdManager and infoManager changes

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