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

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

Fixed package size and version

File size: 4.9 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.installer=packagekit.Client()
42                self.count=len(applist)
43                self.result['status']={'status':-1,'msg':''}
44                self.result['data']=[]
45                processedPkg=[]
46                #1.- If the app doesn't exist cancel the action
47                for appInfo in applist:
48                        if appInfo['package'] not in processedPkg:
49                                processedPkg.append(appInfo['package'])
50                                app=self._resolve_App(appInfo['package'])
51                                if app:
52                                        if action=='install':
53                                                self._log("Installing "+appInfo['package'])
54                                                self._install_App(app)
55                                                self.result['data'].append({'package':appInfo['package']})
56                                        if action=='remove':
57                                                self._log("Removing "+appInfo['package'])
58                                                self._remove_App(app)
59                                                self.result['data'].append({'package':appInfo['package']})
60                                        if action=='pkginfo':
61                                                self.result['data'].append(self._get_App_Extended_Info(appInfo,app))
62                                self.progress=self.progress+(self.partialProgress/self.count)
63                self.progress=100
64                return(self.result)
65        #def execute_action
66
67        def _set_status(self,status,msg=''):
68                self.result['status']={'status':status,'msg':msg}
69
70        def _fake_callback(self,status,typ,data=None):
71                pass
72        #def _fake_callback
73
74        def _callback(self,status,typ,data=None):
75                self.partialProgress=status.props.percentage
76                self.progress=self.partialProgress/self.count
77        #def _callback
78
79        def _install_App(self,app):
80                self.return_msg=False
81                self._debug("Installing "+app.get_id())
82                err=0
83                try:
84                        self.installer.install_packages(True,[app.get_id(),],None,self._callback,None)
85                        err=0
86                except Exception as e:
87                        print(str(e))
88                        self._debug("Install error: "+str(e.code))
89                        err=e.code
90                finally:
91                        self.partialProgress=100
92                self._set_status(err)
93                return err
94        #def _install_App_from_Repo
95                       
96        def _remove_App(self,app):
97                try:
98                        self.installer.remove_packages(True,[app.get_id(),],True,False,None,self._callback,None)
99                        self._set_status(0)
100                except Exception as e:
101                        self._debug("Remove error: " +str(e.code))
102                        self._set_status(e.code)
103                finally:
104                        self.partialProgress=100
105        #def _remove_App
106
107        def _get_App_Extended_Info(self,appInfo,app):
108                self._debug("Getting dependencies for "+app.get_id())
109                pkTask=packagekit.Task()
110                results=[]
111                dependsList=[]
112                self._set_status(0)
113                try:
114                        results=pkTask.get_depends(1,[app.get_id(),],True,None,self._fake_callback,None)
115                except Exception as e:
116                        self._set_status(1)
117                        print (str(e))
118                        pass
119                if (results):
120                        appID=app.get_id()
121                        appInfo['version']=app.get_version()
122                        appInfo['arch']=appID.split(';')[2]
123                        for related_app in results.get_package_array():
124                                dependsList.append(related_app.get_id())
125                        appInfo['depends']=dependsList
126                        #app.get_version()
127                try:
128                        results=pkTask.get_details([app.get_id(),],None,self._fake_callback,None)
129                except Exception as e:
130                        self._set_status(1)
131                        print (str(e))
132                        pass
133                if(results):
134                        for app_detail in results.get_details_array():
135                                appInfo['size']=str(app_detail.get_size())
136                                break
137                               
138                return(appInfo)
139        #def _get_App_Extended_Info
140
141        def _get_App_Info(self,appInfo,app,appsCount=0): #DEPRECATED
142                try:
143                        info=app.get_info()
144                        appInfo['status']=info.to_string(info)
145                        self._debug("Status: "+appInfo['status'])
146                except:
147                        self._debug("Status: not available")
148                        pass
149                #Only search dependencies if there's only one package on the package queue
150                if appsCount==1:
151                        self._debug("loading extended info")
152                        appInfo=self._get_App_Extended_Info(appInfo,app)
153                self.partialProgress=100
154                self.result.append(appInfo)
155#               self.result['data'].update({appInfo['package']:appInfo})
156                self._set_status(0)
157                return(appInfo)
158        #def _get_App_Info
159
160        def _resolve_App(self,appName,filters=False):
161                self._debug("Resolving "+appName)
162                app=None
163                applist=[]
164                self.return_msg=False
165                try:
166                        result=self.installer.resolve(1,[appName,],None,self._fake_callback, None)
167                        applist=result.get_package_array()
168                        if applist:
169                                self._debug("Application "+applist[0].get_name()+" resolved succesfully")
170                                app=applist[0]
171                except Exception as e:
172                        self._debug("Couldn't resolve "+appName)
173                        self._debug("Reason: "+str(e))
174                finally:
175                        self.partialProgress=100
176                return(app)
177        #def _resolve_App
Note: See TracBrowser for help on using the repository browser.