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

Last change on this file since 5187 was 5187, checked in by Juanma, 2 years ago

added appImage catalogue download

File size: 5.6 KB
Line 
1import syslog
2import gi
3gi.require_version('PackageKitGlib', '1.0')
4from gi.repository import PackageKitGlib as packagekit
5class debmanager:
6        def __init__(self):
7                self.installer=''
8                self.dbg=0
9                self.pkgList=[]
10                self.result=[]
11                self.progress=0
12                self.partialProgress=0
13                #self.pluginInfo=['install','deb','remove','deb','pkginfo','deb','remove','zmd']
14                self.pluginInfo={'install':'deb','remove':'deb','pkginfo':'deb'}
15                self.result={}
16                self.result['data']={}
17                self.result['status']={}
18                self.count=0
19        #def __init__
20
21        def set_debug(self,dbg='1'):
22                self.dbg=int(dbg)
23                self._debug ("Debug enabled")
24        #def set_debug
25
26        def _debug(self,msg=''):
27                if self.dbg==1:
28                        print ('DEBUG Deb: '+str(msg))
29        #def debug
30
31        def _log(self,msg=None):
32                if msg:
33                        syslog.openlog('lliurex-store')
34                        syslog.syslog(msg)
35
36        def register(self):
37                return(self.pluginInfo)
38        #def register
39
40        def execute_action(self,action,applist):
41                self._debug("Applist: "+str(applist))
42                self.progress=0
43                self.installer=packagekit.Client()
44                self.count=len(applist)
45                self.result['status']={'status':-1,'msg':''}
46                self.result['data']=[]
47                processedPkg=[]
48                #1.- If the app doesn't exist cancel the action
49                for appInfo in applist:
50                        if appInfo['package'] not in processedPkg:
51                                processedPkg.append(appInfo['package'])
52                                filters=1
53                                if action=='remove':
54                                        filters=2
55                                app=self._resolve_App(appInfo['package'],filters)
56                                if app:
57                                        if action=='install':
58                                                self._log("Installing "+appInfo['package'])
59                                                self._install_App(app)
60                                                self.result['data'].append({'package':appInfo['package']})
61                                        if action=='remove':
62                                                self._log("Removing "+appInfo['package'])
63                                                self._remove_App(app)
64                                                self.result['data'].append({'package':appInfo['package']})
65                                        if action=='pkginfo':
66                                                self._log("Looking "+appInfo['package'])
67                                                self.result['data'].append(self._get_App_Extended_Info(appInfo,app))
68                                self.progress=self.progress+(self.partialProgress/self.count)
69                self.progress=100
70                return(self.result)
71        #def execute_action
72
73        def _set_status(self,status,msg=''):
74                self.result['status']={'status':status,'msg':msg}
75
76        def _fake_callback(self,status,typ,data=None):
77                pass
78        #def _fake_callback
79
80        def _callback(self,status,typ,data=None):
81                self.partialProgress=status.props.percentage
82                self.progress=self.partialProgress/self.count
83        #def _callback
84
85        def _install_App(self,app):
86                self.return_msg=False
87                self._debug("Installing "+app.get_id())
88                err=0
89                try:
90                        self.installer.install_packages(True,[app.get_id(),],None,self._callback,None)
91                        err=0
92                except Exception as e:
93                        print(str(e))
94                        self._debug("Install error: "+str(e.code))
95                        err=e.code
96                finally:
97                        self.partialProgress=100
98                self._set_status(err)
99                return err
100        #def _install_App_from_Repo
101                       
102        def _remove_App(self,app):
103                try:
104                        self.installer.remove_packages(True,[app.get_id(),],True,False,None,self._callback,None)
105                        self._set_status(0)
106                except Exception as e:
107                        self._debug("Remove error: " +str(e.code))
108                        self._debug("Remove error: " +str(e))
109                        self._set_status(e.code)
110                finally:
111                        self.partialProgress=100
112        #def _remove_App
113
114        def _get_App_Extended_Info(self,appInfo,app):
115                self._debug("Getting dependencies for "+app.get_id())
116                pkTask=packagekit.Task()
117                results=[]
118                dependsList=[]
119                self._set_status(0)
120                try:
121                        results=pkTask.get_depends(1,[app.get_id(),],True,None,self._fake_callback,None)
122                except Exception as e:
123#                       self._set_status(1)
124                        print (str(e))
125                        pass
126                if (results):
127                        appInfo['version']=app.get_version()
128                        appInfo['arch']=app.get_id().split(';')[2]
129                        for related_app in results.get_package_array():
130                                dependsList.append(related_app.get_id())
131                        appInfo['depends']=dependsList
132                        #app.get_version()
133                try:
134                        results=pkTask.get_details([app.get_id(),],None,self._fake_callback,None)
135                except Exception as e:
136#                       self._set_status(1)
137                        print (str(e))
138                        pass
139                if(results):
140                        for app_detail in results.get_details_array():
141                                appInfo['size']=str(app_detail.get_size())
142                                break
143                try:
144                        info=app.get_info()
145                        appInfo['state']=info.to_string(info)
146                        self._debug("State: "+appInfo['state'])
147                except:
148                        self._debug("State: not available")
149                        pass
150                               
151                return(appInfo)
152        #def _get_App_Extended_Info
153
154        def _get_App_Info(self,appInfo,app,appsCount=0): #DEPRECATED
155                try:
156                        info=app.get_info()
157                        appInfo['status']=info.to_string(info)
158                        self._debug("Status: "+appInfo['status'])
159                except:
160                        self._debug("Status: not available")
161                        pass
162                #Only search dependencies if there's only one package on the package queue
163                if appsCount==1:
164                        self._debug("loading extended info")
165                        appInfo=self._get_App_Extended_Info(appInfo,app)
166                self.partialProgress=100
167                self.result.append(appInfo)
168#               self.result['data'].update({appInfo['package']:appInfo})
169                self._set_status(0)
170                return(appInfo)
171        #def _get_App_Info
172
173        def _resolve_App(self,appName,filters=False):
174                self._debug("Resolving "+appName)
175                app=None
176                resolvelist=[]
177                self.return_msg=False
178                if not filters:
179                        filters=1
180                try:
181                        self._debug("Filter for resolver: "+str(filters))
182                        result=self.installer.resolve(filters,[appName,],None,self._fake_callback, None)
183                        resolvelist=result.get_package_array()
184                        resolvedApp=resolvelist[0]
185                        #resolver bug: filters not work so if we want to remove an app first we must get the installed version...
186                        if filters==2:
187                                for app in resolvelist:
188                                        if (str(app.get_info()).find('PK_INFO_ENUM_INSTALLED')!=-1):
189                                                resolvedApp=app
190                        if resolvedApp:
191                                self._debug("Application "+resolvedApp.get_name()+" resolved succesfully")
192                                app=resolvedApp
193                except Exception as e:
194                        self._debug("Couldn't resolve "+appName)
195                        self._debug("Reason: "+str(e))
196                finally:
197                        self.partialProgress=100
198                return(app)
199        #def _resolve_App
200       
Note: See TracBrowser for help on using the repository browser.