Changeset 8747


Ignore:
Timestamp:
Oct 22, 2019, 11:59:38 AM (4 months ago)
Author:
Juanma
Message:

Backport from bionic

Location:
air-manager/trunk/fuentes
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • air-manager/trunk/fuentes/air-installer/src/air_installer.py

    r7459 r8747  
    3636                Gtk.Window.__init__(self,title=_("Install air app"))
    3737                self.set_position(Gtk.WindowPosition.CENTER)
     38                self.set_resizable(False)
    3839                style_provider=Gtk.CssProvider()
    3940                css=b"""
  • air-manager/trunk/fuentes/air-manager/src/ManageBox.py

    r7466 r8747  
    8383                for app,data in self.airinstaller.get_installed_apps().items():
    8484                        count+=1
     85                        app_name=os.path.basename(data['desktop']).replace('.desktop','')
    8586#                       listrow=Gtk.Box(spacing=12,hexpand=True)
    8687                        listrow=Gtk.Grid(row_spacing=6,hexpand=True,column_spacing=12)
     
    99100                        btn_remove.props.halign=Gtk.Align.END
    100101                        btn_remove.set_name("BTN_REMOVE")
     102                        btn_remove.set_tooltip_text(_("Remove %s")%app_name)
    101103                        btn_remove.connect('clicked',self._remove_air,data)
    102104                        img_exe=Gtk.Image.new_from_file(img_run)
     
    106108                        btn_run.props.halign=Gtk.Align.END
    107109                        btn_run.set_name("BTN_RUN")
     110                        btn_run.set_tooltip_text(_("Run %s")%app_name)
    108111                        btn_run.connect('clicked',self._run_air,data)
    109112                        info_box=Gtk.Box(spacing=12,hexpand=True)
  • air-manager/trunk/fuentes/debian/changelog

    r8157 r8747  
     1air-manager (1.3.0) xenial; urgency=medium
     2
     3  * Backported from bionic
     4
     5 -- Juanma Navarro Mañez <juanma1980@gmail.com>  Tue, 22 Oct 2019 11:56:19 +0200
     6
    17air-manager (0.9.7) xenial; urgency=medium
    28
  • air-manager/trunk/fuentes/debian/control

    r7384 r8747  
    1515Package: air-installer
    1616Architecture: all
    17 Depends: ${misc:Depends}, python3-air-manager(=${binary:Version}),air-helper(=${binary:Version}),python3-dialog
     17Depends: ${misc:Depends}, python3-air-manager(=${binary:Version}),air-helper(=${binary:Version}),python3-dialog,airapps-fixes
    1818Description: Air installer dialog
    1919
  • air-manager/trunk/fuentes/python3-air-manager/airmanager/airmanager.py

    r7464 r8747  
    11#!/usr/bin/env python3
     2# -*- coding: utf-8 -*-
     3
    24import os
    35import stat
     
    1113import urllib.request as url
    1214import glob
     15import json
     16import re
    1317from gi.repository import GdkPixbuf
    1418
     
    1721class AirManager():
    1822        def __init__(self):
    19                 self.dbg=True
     23                self.dbg=False
    2024                self.default_icon="/usr/share/air-installer/rsrc/air-installer_icon.png"
    2125                self.adobeair_folder="/opt/AdobeAirApp/"
    2226                self.adobeairsdk_folder="/opt/adobe-air-sdk/"
    2327                self.adobeair_pkgname="adobeair"
     28                self.confDir="/usr/share/air-manager/config.d"
     29                self.rebuild=False
     30                self.pkgConfig={}
    2431        #def __init__
    2532
     
    3138
    3239        def _log(self,msg):
    33                 f=open(LOG,'a')
    34                 f.write("%s"%msg)
    35                 f.close()
     40                try:
     41                        f=open(LOG,'a')
     42                        f.write("%s"%msg)
     43                        f.close()
     44                except:
     45                        print("Can't write log")
    3646        #def _log
    3747
     
    4151        def install(self,air_file,icon=None):
    4252                sw_err=0
     53                self.rebuild=False
    4354                sw_install_sdk=False
    4455                self._check_adobeair()
     
    5061                        basedir_name=file_name.replace(".air","")
    5162                        self._debug("Installing %s"%air_file)
     63                        config=self._chk_config_file(air_file)
     64                        if 'preinstall' in config.keys():
     65                                air_file=self._recompile_for_preinstall(air_file,config['preinstall'])
    5266                        sw_err=self._install_air_package(air_file)
    53                         if sw_err:
     67                        if sw_err and not self.rebuild:
    5468                                self._debug("Trying rebuild...")
    5569                                modified_air_file=self._recompile_for_certificate_issue(air_file)
     
    6276                                sw_install_sdk=True
    6377
     78                        sw_desktop=True
     79                        if 'generate-desktop' in config.keys():
     80                                sw_desktop=config['generate-desktop']
     81
    6482                        if not sw_err and sw_install_sdk:
    6583                                #Copy icon to hicolor
    66                                 sw_installed=self._generate_desktop(file_name)
    67                                 if sw_installed:
    68                                         hicolor_icon='/usr/share/icons/hicolor/48x48/apps/%s.png'%basedir_name
    69                                         shutil.copyfile (icon,hicolor_icon)
    70                                         self._debug("Installed in %s"%(basedir_name))
    71                                 else:
    72                                         self._debug("%s Not Installed!!!"%(basedir_name))
     84                                if sw_desktop:
     85                                        sw_installed=self._generate_desktop(file_name)
     86                                        if sw_installed:
     87                                                hicolor_icon='/usr/share/icons/hicolor/48x48/apps/%s.png'%basedir_name
     88                                                shutil.copyfile (icon,hicolor_icon)
     89                                                self._debug("Installed in %s"%(basedir_name))
     90                                        else:
     91                                                self._debug("%s Not Installed!!!"%(basedir_name))
    7392#                       elif not sw_err and icon!=self.default_icon:
    74                         elif not sw_err:
     93                        elif not sw_err and sw_desktop:
    7594                                #Modify desktop with icon
    7695                                hicolor_icon='/usr/share/icons/hicolor/48x48/apps/%s.png'%basedir_name
     
    7897                                icon_new=os.path.basename(hicolor_icon)
    7998                                self._modify_desktop(air_file,icon_name=icon_new)
     99               
     100                        if 'postinst' in config.keys() and not sw_err:
     101                                self._execute_postinstall(config['postinst'])
     102
    80103                #Remove adobeair mime association
    81104                time.sleep(1)
     
    91114                self._debug("Default result: %s"%a)
    92115        #def install
     116
     117        def _chk_config_file(self,air_file):
     118                pkgConfig={}
     119                airName=os.path.basename(air_file).replace(".air","")
     120                self._debug("Name: %s"%airName)
     121                if os.path.isdir(self.confDir):
     122                        for conf in glob.glob("%s/*"%self.confDir):
     123                                if os.path.basename(conf).replace(".json","").lower() in airName.lower():
     124                                        self._debug("Conf file: %s"%conf)
     125                                        try:
     126                                                with open(conf,'r') as f:
     127                                                        pkgConfig=json.load(f)
     128                                        except Exception as e:
     129                                                self._debug("Error reading %s"%conf)
     130                                                self._debug("Reason: %s"%e)
     131                return(pkgConfig)
     132
     133        def _recompile_for_preinstall(self,air_file,conf):
     134                self._debug("Modifying package %s"%air_file)
     135                sw_ok=True
     136                new_air_file=air_file
     137                tmpdir=self._unzip_air_file(air_file)
     138                cwd=os.getcwd()
     139                os.chdir(tmpdir)
     140                for targetFile,values in conf.items():
     141                        self._debug("Searching for %s"%targetFile)
     142                        if os.path.isfile(targetFile):
     143                                self._debug("File: %s"%targetFile)
     144                                f=open(targetFile,'r')
     145                                fcontents=f.readlines()
     146                                f.close()
     147                                newContents=[]
     148                                for line in fcontents:
     149                                        for regTarget,regReplace in values.items():
     150                                                if re.search(regTarget,line):
     151                                                        line=re.sub(regTarget,regReplace,line)
     152                                                newContents.append(line)
     153                                f=open(targetFile,'w')
     154                                f.writelines(newContents)
     155                                f.close()
     156
     157                for xml_file in os.listdir("META-INF/AIR"):
     158                        if xml_file.endswith(".xml"):
     159                                air_xml=xml_file
     160                                break
     161                if air_xml:
     162                        shutil.move("META-INF/AIR/"+air_xml,air_xml)
     163                        shutil.rmtree("META-INF/",ignore_errors=True)
     164                        os.remove("mimetype")
     165                        self._debug("Generating new cert")
     166                        subprocess.call(["/opt/adobe-air-sdk/bin/adt","-certificate","-cn","lliurex","2048-RSA","lliurex.p12","lliurex"])
     167                        new_air_file=os.path.basename(air_file)
     168                        my_env=os.environ.copy()
     169                        my_env["DISPLAY"]=":0"
     170                        try:
     171                                subprocess.check_output(["/opt/adobe-air-sdk/bin/adt","-package","-tsa","none","-storetype","pkcs12","-keystore","lliurex.p12",new_air_file,air_xml,"."],input=b"lliurex",env=my_env)
     172                                new_air_file="%s/%s"%(tmpdir,new_air_file)
     173                        except Exception as e:
     174                                self._debug(e)
     175                os.chdir(cwd)
     176                self.rebuild=True
     177                return (new_air_file)
     178        #def _recompile_for_certificate_issue
     179
     180        def _execute_postinstall(self,conf):
     181                self._debug("Postinstall %s"%conf)
     182                sw_ok=True
     183                for targetFile,values in conf.items():
     184                        self._debug("Searching for %s"%targetFile)
     185                        if os.path.isfile(targetFile):
     186                                self._debug("File: %s"%targetFile)
     187                                with open(targetFile,'r') as f:
     188                                        fcontents=f.readlines()
     189                                newContents=[]
     190                                for line in fcontents:
     191                                        deleteKey=""
     192                                        for regTarget,regReplace in values.items():
     193                                                if regTarget=='--append':
     194                                                        newContents.extend(regReplace)
     195                                                        deleteKey=regTarget
     196                                                else:
     197                                                        line=re.sub(regTarget,regReplace,line)
     198                                                newContents.append(line)
     199                                        if deleteKey:
     200                                                values.pop(deleteKey,None)
     201                                f=open(targetFile,'w')
     202                                f.writelines(newContents)
     203                                f.close()
    93204
    94205        def _modify_desktop(self,air_file,icon_name=None):
     
    163274                sw_err=1
    164275                my_env=os.environ.copy()
     276                my_env["PATH"]="/usr/share/air-installer/src/bin:%s"%my_env["PATH"]
     277                self._debug("PATH: %s"%my_env)
    165278                my_env["DISPLAY"]=":0"
    166279                try:
     
    193306                        try:
    194307                                shutil.copyfile (air_file,wrkdir+"/"+file_name)
    195                         except:
     308                        except Exception as e:
    196309                                sw_err=1
     310                                self._debug("SDK Install Fail: %s"%e)
    197311                #Copy icon to hicolor
    198312                if sw_err==0:
     
    205319                self._generate_desktop_sdk(file_name)
    206320                self._debug("Installed in %s/%s"%(wrkdir,air_file))
    207                 return sw_err
     321                return (sw_err)
    208322        #def _install_air_package_sdk
    209323
     
    329443                        os.chmod(tmpfile_name,st.st_mode | 0o111)
    330444#                       subprocess.call([tmpfile_name,"-silent","-eulaAccepted","-pingbackAllowed"])
    331                         os.system("DISPLAY=:0 " + tmpfile_name + " -silent -eulaAccepted -pingbackAllowed")
     445                        os.system("DISPLAY=:0 LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu " + tmpfile_name + " -silent -eulaAccepted -pingbackAllowed")
    332446                        os.remove(tmpfile_name)
    333447                        #Remove symlinks
     
    401515                return tmpdir+'/'+new_air_file
    402516        #def _recompile_for_certificate_issue
     517       
    403518
    404519        def _unzip_air_file(self,air_file):
Note: See TracChangeset for help on using the changeset viewer.