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

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

Initial release

File size: 2.9 KB
Line 
1import sys
2import os
3import subprocess
4import stat
5import locale
6import tempfile
7import xmlrpc.client as n4d
8import ssl
9import time
10
11class zmdmanager:
12        def __init__(self):
13                self.locale=locale.getlocale()[0]
14                self.dbg=1
15                self.zmdPath='/usr/share/zero-center/zmds'
16                self.pluginInfo=['install','zmd','pkginfo','zmd']
17                self.progress=0
18                self.n4dclient=''
19                self.result=[]
20        #def __init__
21
22        def set_debug(self,dbg='1'):
23                self.dbg=int(dbg)
24                self._debug ("Debug enabled")
25        #def set__debug
26
27        def _debug(self,msg=''):
28                if self.dbg==1:
29                        print ('_debug Zmd: '+msg)
30        #def _debug
31
32        def register(self):
33                return(self.pluginInfo)
34
35        def execute_action(self,action,applist):
36                count=len(applist)
37                self.n4dclient=self._n4d_connect()
38                for appInfo in applist:
39                        if not (os.path.exists(self.zmdPath)):
40                                exit(1)
41                        if (action):
42                                if action=='install':
43                                        self._install_Zmd(appInfo)
44                                if action=='pkginfo':
45                                        self._get_Zmd_Info(appInfo)
46                self.progress=100
47                return(self.result)
48       
49        def _callback(self,zmdLauncher):
50                inc=1
51                limit=99
52                n4dvars=self.n4dclient.get_variable("","VariablesManager","ZEROCENTER")
53                if zmdLauncher in n4dvars.keys():
54                        if n4dvars[zmdLauncher]['pulsating']:
55                                margin=limit-self.progress
56                                inc=round(margin/limit,3)
57                                self.progress=self.progress+inc
58
59        def _install_Zmd(self,appInfo):
60                zmd=appInfo['installerUrl']
61                self._debug("Installing "+str(zmd))
62                os.chdir(self.zmdPath)
63                try:
64                        zmdsudo=['gksudo',zmd]
65                        zmdCmd=subprocess.Popen(zmdsudo,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
66                        zmdLauncher=os.path.basename(zmd)
67                        zmdLauncher=os.path.splitext(zmdLauncher)[0]
68                        while zmdCmd.poll() is None:
69                                self._callback(zmdLauncher)
70                                time.sleep(0.2)
71                        zmdResult=zmdCmd.stdout.read()
72                        zmdError=zmdCmd.stderr.read()
73                        self._debug("Result: "+str(zmdError))
74                        if not zmdError:
75#                               zmdCmd.wait()
76                               
77                                zmdCmd.task_done()
78                                self.result=[{appInfo['name']:" installed succesfully"}]
79                        else:
80                                appInfo=self._get_Zmd_Info(appInfo)
81                                if appInfo['status']=='Installed':
82                                        self.result=[{appInfo['name']:" installed succesfully"}]
83                                else:
84                                        self.result=[{appInfo['name']:" failed to install"}]
85                except Exception as e:
86                        self._debug(str(e))
87                        if appInfo['status']=='Installed':
88                                self.result=[{appInfo['name']:" installed succesfully"}]
89                        else:
90                                self.result=[{appInfo['name']:" failed to install"}]
91
92        def _get_Zmd_Info(self,appInfo):
93                n4dvars=self.n4dclient.get_variable("","VariablesManager","ZEROCENTER")
94                zmd=appInfo['installerUrl']
95                zmd=os.path.basename(zmd)
96                zmd=zmd.split('.')[0]
97                appInfo['status']='Available'
98                for key in n4dvars:
99                        if appInfo['name'].lower() in key.lower():
100                                if n4dvars[key]['state']==1:
101                                        appInfo['status']='Installed'
102                self.result.append(appInfo)
103                return(appInfo)
104
105        def _n4d_connect(self):
106                #Setup SSL
107                context=ssl._create_unverified_context()
108                n4dclient = n4d.ServerProxy("https://localhost:9779",context=context)
109                return(n4dclient)
Note: See TracBrowser for help on using the repository browser.