Ignore:
Timestamp:
Jun 16, 2017, 1:39:45 PM (21 months ago)
Author:
Juanma
Message:

appimage fully functional

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-store/trunk/fuentes/python3-lliurex-store.install/usr/share/lliurexstore/plugins/appImageManager.py

    r5188 r5199  
    1212class appimagemanager:
    1313        def __init__(self):
    14                 self.example='This is an example plugin'
    15                 self.dbg=0
     14                self.dbg=1
    1615                self.progress=0
    1716                #This dict defines wich package_type relies on what action
     
    2221                self.result['data']={}
    2322                self.result['status']={}
    24                 self.appImageFolder='/tmp'
    25                 self.pkginfo=self.appImageFolder+'/.bundles.json'
     23                self.appImageFolder='/opt/bundles/appimg'
     24                self.repoPage='https://dl.bintray.com/probono/AppImages'
     25                #To get the description of an app we must go to a specific url.
     26                #$(appname) we'll be replaced with the appname so the url matches the right one.
     27                #If other site has other url naming convention it'll be mandatory to define it with the appropiate replacements
     28                self.infoPage='https://bintray.com/probono/AppImages/$(appname)'
    2629                self.count=0
    2730        #def __init__
     
    4144
    4245        def execute_action(self,action,applist=None):
     46                self._chk_installDir()
    4347                self.progress=0
    4448                self.result['status']={'status':-1,'msg':''}
    4549                self.result['data']=''
    4650                dataList=[]
    47                 if action=='loadCatalogue':
    48                         dataList.append(self._download_appImg_catalogue())
    49                 else:
    50                         for appInfo in applist:
    51                                 if action=='install':
    52                                         dataList.append(self._install_appImg(appInfo))
    53                                 if action=='remove':
    54                                         dataList.append(self._remove_appImg(appInfo))
    55                                 if action=='pkginfo':
    56                                         dataList.append(self._get_info(appInfo))
     51                for appInfo in applist:
     52                        if action=='install':
     53                                dataList.append(self._install_appImg(appInfo))
     54                        if action=='remove':
     55                                dataList.append(self._remove_appImg(appInfo))
     56                        if action=='pkginfo':
     57                                dataList.append(self._get_info(appInfo))
    5758                self.result['data']=list(dataList)
    5859                self.progress=100
     
    7677                        self.progress=limit
    7778
     79        def _chk_installDir(self):
     80                msg_status=True
     81                if not os.path.isdir(self.appImageFolder):
     82                        try:
     83                                os.makedirs(self.appImageFolder)
     84                        except:
     85                                msg_status=False
     86                return msg_status                               
     87
    7888        def _install_appImg(self,appInfo):
    7989                appInfo=self._get_info(appInfo)
     
    8191                        self._set_status(4)
    8292                else:
    83                         appImgUrl='https://dl.bintray.com/probono/AppImages/'+appInfo['appImage']
     93                        appImgUrl=self.repoPage+'/'+appInfo['appImage']
    8494                        self._debug("Downloading "+appImgUrl)
    85                         dest_path='/tmp/'+appInfo['appImage']
     95                        dest_path=self.appImageFolder+'/'+appInfo['appImage']
    8696                        if appImgUrl:
    8797                                try:
     
    99109                                        os.chmod(dest_path, st.st_mode | 0o111)
    100110                                        self._set_status(0)
    101                                         self._write_info(appInfo,'install')
    102111                                except:
    103112                                        self._set_status(5)
     
    108117
    109118        def _remove_appImg(self,appInfo):
    110                 appInfo=self._get_info(appInfo)
    111                 if appInfo['state']=='available':
    112                         self._set_status(3)
    113                 else:
     119                self._debug("Removing "+appInfo['appImage'])
     120                if os.path.isfile(self.appImageFolder+'/'+appInfo['appImage']):
    114121                        try:
    115122                                call([self.appImageFolder+"/"+appInfo['appImage'], "--remove-appimage-desktop-integration"])
    116123                                os.remove(self.appImageFolder+"/"+appInfo['appImage'])
    117                                 self._write_info(appInfo,'remove')
    118124                                self._set_status(0)
    119125                        except:
     
    121127                return(appInfo)
    122128        #def _remove_appImg
    123        
    124         def _write_info(self,appInfo,action):
    125                 infoBundle={}
    126                 if os.path.isfile(self.pkginfo):
    127                         try:
    128                                 infoFile=open(self.pkginfo).read()
    129                                 infoBundle=json.loads(infoFile)
    130                         except:
    131                                 pass
    132                 if action=='remove':
    133                         infoBundle.pop(appInfo['appImage'],None)
    134                 if action=='install':
    135                         infoBundle.update({appInfo['appImage']:'installed'})
    136                 try:
    137                         with open(self.pkginfo, 'w') as infoFile:
    138                             infoBundle=json.dump(infoBundle,infoFile)
    139                 except:
    140                         pass
    141         #def _write_info
    142129
    143130        def _get_info(self,appInfo):
    144131                appInfo['state']='available'
    145                 if os.path.isfile(self.pkginfo):
    146                         try:
    147                                 infoFile=open(self.pkginfo).read()
    148                                 infoBundle=json.loads(infoFile)
    149                                 if appInfo['appImage'] in infoBundle:
    150                                         appInfo['state']=infoBundle[appInfo['appImage']]
    151                         except:
    152                                 pass
     132                if os.path.isfile(self.appImageFolder+'/'+appInfo['appImage']):
     133                        appInfo['state']='installed'
    153134                self._set_status(0)
    154135                return(appInfo)
Note: See TracChangeset for help on using the changeset viewer.