source: lliurex-store/trunk/fuentes/lliurex-appstore.install/usr/bin/plugins/debManager.py @ 3093

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

wip on lliurex_apps.xml

File size: 3.7 KB
Line 
1import gi
2gi.require_version('PackageKitGlib', '1.0')
3from gi.repository import PackageKitGlib as packagekit
4class debmanager:
5        def __init__(self):
6                self.installer=''
7                self.dbg=0
8                self.pkgList=[]
9                self.result=[]
10                self.progress=0
11                self.partialProgress=0
12                #self.pluginInfo=['install','deb','remove','deb','pkginfo','deb','remove','zmd']
13                self.pluginInfo=['install','deb','remove','deb','pkginfo','deb']
14                self.count=0
15        #def __init__
16
17        def set_debug(self,dbg='1'):
18                self.dbg=int(dbg)
19                self._debug ("Debug enabled")
20        #def set_debug
21
22        def _debug(self,msg=''):
23                if self.dbg==1:
24                        print ('DEBUG Deb: '+msg)
25        #def debug
26
27        def register(self):
28                return(self.pluginInfo)
29        #def register
30
31        def execute_action(self,action,applist):
32                self.installer=packagekit.Client()
33                self.count=len(applist)
34                #1.- If the app doesn't exist cancel the action
35                for appInfo in applist:
36                        app=self._resolve_App(appInfo['package'])
37                        if app:
38                                if action=='install':
39                                        self._install_App(app)
40                                if action=='remove':
41                                        self._remove_App(app)
42                                if action=='pkginfo' and self.count==1:
43                                        self._get_App_Dependencies(appInfo,app)
44#                               if action=='pkginfo':
45#                                       self._get_App_Info(appInfo,app,count)
46                        self.progress=self.progress+(self.partialProgress/self.count)
47                        self._debug("Progress: "+str(self.progress))
48                self.progress=100
49                return(self.result)
50
51        def _callback(self,status,typ,data=None):
52                self.partialProgress=status.get_property('percentage')
53                self.progress=self.partialProgress/self.count
54                self._debug("Progress"+str(self.partialProgress))
55
56        def initialize_list(self):
57                self.pkgList=[]
58        #def initialize_list
59
60        def _install_App(self,app):
61                self.return_msg=False
62                self._debug("Installing "+app.get_id())
63                try:
64                        self.installer.install_packages(False,[app.get_id(),],None,self._callback,None)
65                        self.result.append({app.get_id():" installed succesfully"})
66                except Exception as e:
67                        self._debug(e.message)
68                        self.result.append({app.get_id():e.message})
69                self.partialProgress=100
70        #def _install_App_from_Repo
71                       
72        def _remove_App(self,app):
73                try:
74                        self.installer.remove_packages(False,[app.get_id(),],True,True,None,self._callback,None)
75                        self.result.append({app.get_id():" removed succesfully"})
76                except Exception as e:
77                        self._debug(e.message)
78                        self.result.append({app.get_id():e.message})
79                self.partialProgress=100
80        #def _remove_App
81
82        def _get_App_Dependencies(self,appInfo,app):
83                self._debug("Getting dependencies for "+app.get_id())
84                pkTask=packagekit.Task()
85                results=[]
86                dependsList=[]
87                try:
88                        results=pkTask.get_depends(1,[app.get_id(),],True,None,self._callback,None)
89                except:
90                        pass
91                if (results):
92                        for app in results.get_package_array():
93                                dependsList.append(app.get_id())
94                appInfo['depends']=dependsList
95#               return(dependsList)
96                return(appInfo)
97
98        def _get_App_Info(self,appInfo,app,appsCount=0):
99                info=app.get_info()
100                appInfo['status']=info.to_string(info)
101                self._debug("Status: "+appInfo['status'])
102                #Only search dependencies if there's only one package on the package queue
103                if appsCount==1:
104                        self._debug("loading depends")
105                        appInfo['depends']=self._get_App_Dependencies(appInfo,app)
106                self.partialProgress=100
107                self.result.append(appInfo)
108                return(appInfo)
109
110        def _resolve_App(self,appName,filters=False):
111                self._debug("Resolving "+appName)
112                app=None
113                applist=[]
114                self.return_msg=False
115                try:
116                        result=self.installer.resolve(1,[appName,],None,self._callback, None)
117                        applist=result.get_package_array()
118                        if applist:
119                                self._debug("Application "+applist[0].get_name()+" resolved succesfully")
120                                app=applist[0]
121                except Exception as e:
122                        self._debug("Couldn't resolve "+appName)
123                        self._debug("Reason: "+str(e))
124                self.partialProgress=100
125                return(app)
126        #def _resolve_App
127
128       
Note: See TracBrowser for help on using the repository browser.