From e38e5eca4bf1659a31e6d522a26a0ec58ee2a769 Mon Sep 17 00:00:00 2001 From: papajoker Date: Sat, 18 Aug 2018 01:05:33 +0200 Subject: [PATCH 1/9] fix: exit if icon not exist --- manjaro-software-install-tool | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index 24dd341..89095c5 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -180,7 +180,10 @@ class MyWindow(Gtk.Window): Gtk.Window.__init__(self, title="Manjaro Linux Software Installation Tool") #Set to start at the Center and add default icon for the panel self.set_position(Gtk.WindowPosition.CENTER) - self.set_default_icon_from_file('/usr/share/icons/manjaro/maia/48x48.png') + try: + self.set_default_icon_from_file('/usr/share/icons/manjaro/maia/48x48.png') + except: + print('Icon not found ! not manjaro ?') # self.set_border_width(6) self.set_default_size(1280, 768) -- GitLab From 54f86eb245b7cacfd2228f371aa8740029cfaad7 Mon Sep 17 00:00:00 2001 From: papajoker Date: Sat, 18 Aug 2018 01:08:10 +0200 Subject: [PATCH 2/9] btn install packages: enable/disable --- manjaro-software-install-tool | 2 ++ 1 file changed, 2 insertions(+) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index 89095c5..d22dea6 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -174,6 +174,7 @@ class MyWindow(Gtk.Window): self.packages.remove(widget.pkg) else: self.packages.append(widget.pkg) + self.installbutton.set_sensitive(len(self.packages)>0) print(self.packages) def __init__(self): @@ -209,6 +210,7 @@ class MyWindow(Gtk.Window): self.buttonbox.set_spacing(20) self.installbutton = Gtk.Button(label="Install Selected Packages") self.installbutton.connect("clicked", self.install) + self.installbutton.set_sensitive(False) self.closebutton = Gtk.Button(label="Close") self.closebutton.connect("clicked", Gtk.main_quit) self.buttonbox.pack_end(self.closebutton, False, False, 0) -- GitLab From 112e0eaf0bff30bf14c5839e3a38f49a9f4357df Mon Sep 17 00:00:00 2001 From: papajoker Date: Sat, 18 Aug 2018 01:12:03 +0200 Subject: [PATCH 3/9] create btn only if package not installed --- manjaro-software-install-tool | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index d22dea6..5768852 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -153,9 +153,6 @@ class MyWindow(Gtk.Window): except: True box.pack_start(Gtk.Label(label=soft.desc), True, True, 0) - button = Gtk.CheckButton(label="Install") - button.connect("clicked", self.btnOnClick) - button.pkg = soft.pkg # Checking to see if the package is already installed # and packing the appropriate button/label @@ -165,6 +162,9 @@ class MyWindow(Gtk.Window): if soft.installed: box.pack_end(Gtk.Label(label="Installed"), False, False, 0) else: + button = Gtk.CheckButton(label="Install") + button.connect("clicked", self.btnOnClick) + button.pkg = soft.pkg box.pack_end(button, False, False, 0) -- GitLab From fdfc51fd2612e4e58d5ba16e7ea7bab393fc2950 Mon Sep 17 00:00:00 2001 From: papajoker Date: Sat, 18 Aug 2018 01:17:30 +0200 Subject: [PATCH 4/9] default icon app + constant icon theme size --- manjaro-software-install-tool | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index 5768852..4a93c94 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -19,6 +19,7 @@ from gi.repository.GdkPixbuf import Pixbuf import json, glob, pprint import sys +ICONSIZE = 32 # 24,32,48 class packageItem: ''' @@ -140,18 +141,18 @@ class MyWindow(Gtk.Window): box.set_homogeneous(1) box.pack_start(Gtk.Label(label=soft.caption), True, True, 0) currentPage.pack_start(box, True, True, 0) - icon_path = '/usr/share/icons/Papirus/48x48/apps/' - if len(sys.argv)>1: - #for test other theme - icon_path = '/usr/share/icons/'+sys.argv[1]+'/48x48/apps/' - if not os.path.isfile(icon_path+soft.icon): - print('Error: icon '+icon_path+soft.icon+' not found') - try: - icoimage = Gtk.Image() - icoimage.set_from_file(f'{icon_path}'+soft.icon) - box.pack_start(icoimage, True, True, 0) - except: - True + icon_path = '/usr/share/icons/Papirus/'+str(ICONSIZE)+'x'+str(ICONSIZE)+'/apps/' + if len(sys.argv) > 1: + # for test other theme + icon_path = '/usr/share/icons/'+sys.argv[1]+'/'+str(ICONSIZE)+'x'+str(ICONSIZE)+'/apps/' + if not os.path.isfile(icon_path+soft.icon): + print('Error: icon '+icon_path+soft.icon+' not found') + soft.icon = '../emblems/emblem-question.svg' + print('new default value: '+icon_path+soft.icon) + icoimage = Gtk.Image() + icoimage.set_from_file(f'{icon_path}'+soft.icon) + box.pack_start(icoimage, True, True, 0) + box.pack_start(Gtk.Label(label=soft.desc), True, True, 0) # Checking to see if the package is already installed -- GitLab From 220dbc5bc93c1bb4dc18d8b973da0ca1fe6f2b2c Mon Sep 17 00:00:00 2001 From: papajoker Date: Sat, 18 Aug 2018 21:31:30 +0200 Subject: [PATCH 5/9] icon: create method getIconFile --- manjaro-software-install-tool | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index 4a93c94..54ae987 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -20,17 +20,18 @@ import json, glob, pprint import sys ICONSIZE = 32 # 24,32,48 +THEME_PATH = "Papirus" class packageItem: - ''' + """ easy acces at software config - ''' + """ def __init__(self, adict: dict): - ''' + """ constructor adict : sub-dict from json file - ''' + """ if not isinstance(adict, dict): raise "Error: parameter bad type" self._reset(adict["name"], adict["pkg"]) @@ -66,6 +67,15 @@ class packageItem: return " Installed" return "" + def getIconFile(self): + icon = self.icon + icon_path = '/usr/share/icons/'+THEME_PATH+'/'+str(ICONSIZE)+'x'+str(ICONSIZE)+'/apps/' + if not os.path.isfile(icon_path+icon): + print('Error: icon '+icon_path+icon+' not found') + icon = '../emblems/emblem-question.svg' + print('new default value: '+icon_path+icon) + return icon_path + icon + def __str__(self) -> str: return "{}: ({}{instal}) {desc} {ico}".format( p.caption, p.pkg, instal=p.getInstalledStr(), desc=p.desc, ico=p.icon) @@ -136,21 +146,15 @@ def check_if_app_is_installed(app_name): class MyWindow(Gtk.Window): + def addSoftware(self, currentPage, soft:packageItem): box = Gtk.Box(spacing=10) box.set_homogeneous(1) box.pack_start(Gtk.Label(label=soft.caption), True, True, 0) currentPage.pack_start(box, True, True, 0) - icon_path = '/usr/share/icons/Papirus/'+str(ICONSIZE)+'x'+str(ICONSIZE)+'/apps/' - if len(sys.argv) > 1: - # for test other theme - icon_path = '/usr/share/icons/'+sys.argv[1]+'/'+str(ICONSIZE)+'x'+str(ICONSIZE)+'/apps/' - if not os.path.isfile(icon_path+soft.icon): - print('Error: icon '+icon_path+soft.icon+' not found') - soft.icon = '../emblems/emblem-question.svg' - print('new default value: '+icon_path+soft.icon) + icoimage = Gtk.Image() - icoimage.set_from_file(f'{icon_path}'+soft.icon) + icoimage.set_from_file(f'{soft.getIconFile()}') box.pack_start(icoimage, True, True, 0) box.pack_start(Gtk.Label(label=soft.desc), True, True, 0) @@ -272,6 +276,10 @@ class MyWindow(Gtk.Window): file.close() os.system('gksu-polkit installapps.sh') + +if len(sys.argv) > 1: + THEME_PATH = sys.argv[1] # for test other theme + win = MyWindow() win.connect("delete-event", Gtk.main_quit) win.show_all() -- GitLab From 61ebe90e2e891f2a07f54b408efffd817869f47d Mon Sep 17 00:00:00 2001 From: papajoker Date: Sat, 18 Aug 2018 22:20:52 +0200 Subject: [PATCH 6/9] use f-strings thanks @codesardine --- manjaro-software-install-tool | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index 54ae987..5d6d329 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -59,7 +59,7 @@ class packageItem: not use a slow pacman -Qq ''' self.installed = False - if glob.glob("/var/lib/pacman/local/{}-[0-9]*".format(self.pkg)): + if glob.glob(f"/var/lib/pacman/local/{self.pkg}-[0-9]*"): self.installed = True def getInstalledStr(self)-> str: @@ -69,16 +69,15 @@ class packageItem: def getIconFile(self): icon = self.icon - icon_path = '/usr/share/icons/'+THEME_PATH+'/'+str(ICONSIZE)+'x'+str(ICONSIZE)+'/apps/' + icon_path = f'/usr/share/icons/{THEME_PATH}/{ICONSIZE}x{ICONSIZE}/apps/' if not os.path.isfile(icon_path+icon): - print('Error: icon '+icon_path+icon+' not found') + print(f'Error: icon {icon_path}{icon} not found') icon = '../emblems/emblem-question.svg' - print('new default value: '+icon_path+icon) + print(f'new default value: {icon_path}{icon}') return icon_path + icon def __str__(self) -> str: - return "{}: ({}{instal}) {desc} {ico}".format( - p.caption, p.pkg, instal=p.getInstalledStr(), desc=p.desc, ico=p.icon) + return f"{p.caption}: ({p.pkg}{p.getInstalledStr()}) {p.desc} {p.icon}" class PkgsList(object): @@ -90,10 +89,10 @@ class PkgsList(object): self.pages = json.loads(f.read()) #print(json.dumps(self.pages, indent=2, sort_keys=False)) except: - print("Error: bad json File {} !".format(fileName)) + print(f"Error: bad json File {fileName} !") raise except FileNotFoundError: - print("Error: File {} not found !".format(fileName)) + print(f"Error: File {fileName} not found !") raise def __getattr__(self, name: str): @@ -101,7 +100,7 @@ class PkgsList(object): try: return self.pages[name] except KeyError: - print("Error: page "+name+" not found") + print(f"Error: page {name} not found") raise """ @@ -154,7 +153,7 @@ class MyWindow(Gtk.Window): currentPage.pack_start(box, True, True, 0) icoimage = Gtk.Image() - icoimage.set_from_file(f'{soft.getIconFile()}') + icoimage.set_from_file(soft.getIconFile()) box.pack_start(icoimage, True, True, 0) box.pack_start(Gtk.Label(label=soft.desc), True, True, 0) -- GitLab From e843c845a64d42fdc5d3aa8b190cffd68228286b Mon Sep 17 00:00:00 2001 From: papajoker Date: Sun, 19 Aug 2018 16:18:35 +0200 Subject: [PATCH 7/9] clear code --- manjaro-software-install-tool | 47 +++-------------------------------- 1 file changed, 4 insertions(+), 43 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index 5d6d329..af1d764 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -67,7 +67,8 @@ class packageItem: return " Installed" return "" - def getIconFile(self): + @property + def iconFile(self): icon = self.icon icon_path = f'/usr/share/icons/{THEME_PATH}/{ICONSIZE}x{ICONSIZE}/apps/' if not os.path.isfile(icon_path+icon): @@ -77,7 +78,7 @@ class packageItem: return icon_path + icon def __str__(self) -> str: - return f"{p.caption}: ({p.pkg}{p.getInstalledStr()}) {p.desc} {p.icon}" + return f"{self.caption}: ({self.pkg}{self.getInstalledStr()}) {self.desc} {self.icon}" class PkgsList(object): @@ -103,46 +104,6 @@ class PkgsList(object): print(f"Error: page {name} not found") raise -""" -console test class result - -datas = PkgsList('./config/softs.json') -p = packageItem(datas.pages['internet']['items'][0]) - -print(datas.internet['caption']) # test __getattr__ -print(type(datas.internet)) - -print("\nset my page {}".format(datas.internet['caption'])) -for p in datas.pages['internet']['items']: - # convert into easy object - p = packageItem(p) - if p.installed: - print(" -"+str(p)) - else: - print(" +"+str(p)) - #print(" ::{}: ({}{instal}) {desc}".format( p.caption, p.pkg, instal=p.getInstalledStr(), desc=p.desc)) - -print("\nset my page {}".format(datas.media['caption'])) -for p in datas.pages['media']['items']: - p = packageItem(p) - print(" - "+str(p)) - -""" - - - -""" - class packageItem use other function ... -""" -def check_if_app_is_installed(app_name): - # making code reusable - process = subprocess.run(['pacman', '-Q', f'{app_name}'], stdout=subprocess.PIPE, encoding='utf-8') - if app_name in process.stdout: - return True - else: - return False - - class MyWindow(Gtk.Window): @@ -153,7 +114,7 @@ class MyWindow(Gtk.Window): currentPage.pack_start(box, True, True, 0) icoimage = Gtk.Image() - icoimage.set_from_file(soft.getIconFile()) + icoimage.set_from_file(soft.iconFile) box.pack_start(icoimage, True, True, 0) box.pack_start(Gtk.Label(label=soft.desc), True, True, 0) -- GitLab From 38d4c18df37d6562aa7737fcac6ffa3cf52534dc Mon Sep 17 00:00:00 2001 From: papajoker Date: Sun, 19 Aug 2018 16:36:53 +0200 Subject: [PATCH 8/9] use pamac for install tested with las pamac git version --- manjaro-software-install-tool | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index af1d764..aef1643 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -230,11 +230,17 @@ class MyWindow(Gtk.Window): self.notebook.append_page(self.page3, Gtk.Label(label=datas.office['caption'])) def install(self, widget): - file = open('.packages.txt', 'w') - for i in self.packages: - file.write(i + " ") - file.close() - os.system('gksu-polkit installapps.sh') + """ + install with pamac pacage list + """ + if os.path.isfile("/usr/bin/pamac-installer"): + subprocess.run(['pamac-installer']+self.packages) + else: + file = open('/tmp/msi-packages.txt', 'w') + for application_pkg in self.packages: + file.write(f"{application_pkg} ") + file.close() + os.system('gksu-polkit installapps.sh') if len(sys.argv) > 1: -- GitLab From 8be5c5518b46501a0a56358b8d73761f2ca0c727 Mon Sep 17 00:00:00 2001 From: papajoker Date: Sun, 19 Aug 2018 22:32:49 +0200 Subject: [PATCH 9/9] refresh/reload pages after install --- manjaro-software-install-tool | 88 +++++++++++++++++------------------ 1 file changed, 42 insertions(+), 46 deletions(-) diff --git a/manjaro-software-install-tool b/manjaro-software-install-tool index aef1643..052fe42 100755 --- a/manjaro-software-install-tool +++ b/manjaro-software-install-tool @@ -81,7 +81,7 @@ class packageItem: return f"{self.caption}: ({self.pkg}{self.getInstalledStr()}) {self.desc} {self.icon}" -class PkgsList(object): +class PkgsList: def __init__(self, fileName: str ="softs.json"): try: @@ -132,7 +132,6 @@ class MyWindow(Gtk.Window): button.pkg = soft.pkg box.pack_end(button, False, False, 0) - def btnOnClick(self, widget): print("Btn: "+widget.pkg) if widget.pkg in self.packages: @@ -181,53 +180,32 @@ class MyWindow(Gtk.Window): self.buttonbox.pack_end(self.closebutton, False, False, 0) self.buttonbox.pack_end(self.installbutton, False, False, 0) self.main_box.pack_end(self.buttonbox, False, False, 0) - # Creating blank package list - self.packages = [] - # load package list from json file - datas = PkgsList('./config/softs.json') - - # Setting icon directory - #icon_path = '/usr/share/icons/Papirus/48x48/apps/' - #qicon_path = '/usr/share/icons/Papirus/48x48/apps/' - # Creating Page 1 - self.page1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - self.page1.set_border_width(10) - - #application entries - for p in datas.pages['internet']['items']: - # convert into easy object - p = packageItem(p) - self.addSoftware(self.page1,p) - - # adding page 1 - self.notebook.append_page(self.page1, Gtk.Label(label=datas.internet['caption'])) - - # Creating Page 2 - self.page2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - self.page2.set_border_width(10) - - #page 2 entries - for p in datas.pages['media']['items']: - # convert into easy object - p = packageItem(p) - self.addSoftware(self.page2,p) - - # adding page 2 - self.notebook.append_page(self.page2, Gtk.Label(label=datas.media['caption'])) - - # Creating Page 3 - self.page3 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - self.page2.set_border_width(10) + # load package list from json file + self.datas = PkgsList('./config/softs.json') + self.setApplications() - #page 3 entries - for p in datas.pages['office']['items']: - # convert into easy object - p = packageItem(p) - self.addSoftware(self.page3,p) + def setApplications(self): + """ + create Applications items + """ + self.pages = [] + self.btns = [] + # Creating blank package list + self.packages = [] - # adding page 3 - self.notebook.append_page(self.page3, Gtk.Label(label=datas.office['caption'])) + for p in self.datas.pages: + # create page + self.pages.append(Gtk.Box(orientation=Gtk.Orientation.VERTICAL)) + try: + i = len(self.pages)-1 + self.pages[i].set_border_width(10) + for item in self.datas.pages[p]['items']: + item = packageItem(item) + self.addSoftware(self.pages[i],item) + finally: + # adding page + self.notebook.append_page(self.pages[i], Gtk.Label(label=self.datas.pages[p]['caption'])) def install(self, widget): """ @@ -235,6 +213,9 @@ class MyWindow(Gtk.Window): """ if os.path.isfile("/usr/bin/pamac-installer"): subprocess.run(['pamac-installer']+self.packages) + # TODO: how to test if installed ? + self.refreshBtns() + self.packages = [] else: file = open('/tmp/msi-packages.txt', 'w') for application_pkg in self.packages: @@ -242,6 +223,21 @@ class MyWindow(Gtk.Window): file.close() os.system('gksu-polkit installapps.sh') + def refreshBtns(self) ->None: + """ + find packages in self.packages and test if installed + """ + #set application.cursor = wait + try: + #remove pages + for i in range(len(self.pages)-1,-1,-1): + Gtk.Container.remove(self.notebook, self.pages[i]) + self.setApplications() + self.show_all() + finally: + #set application.cursor = default + pass + if len(sys.argv) > 1: THEME_PATH = sys.argv[1] # for test other theme -- GitLab