update --

This commit is contained in:
Eshan Roy (Eshanized)
2024-02-23 13:36:48 +05:30
parent 9f99b9eb37
commit 28200e6e73

View File

@@ -1,5 +1,6 @@
# Author : ArcoLinux & Team # Author : ArcoLinux & Team
# Adopted for Snigdha OS Installation # Adopted for Snigdha OS Installation
#!/usr/bin/env python3 #!/usr/bin/env python3
import gi import gi
import os import os
@@ -10,13 +11,9 @@ import shutil
import socket import socket
from time import sleep from time import sleep
from queue import Queue from queue import Queue
import ui.GUI as GUI import ui.GUI as GUI
from ui.MessageDialog import MessageDialogBootloader from ui.MessageDialog import MessageDialogBootloader
# from ui.MessageDialog import MessageDialog
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
# gi.require_version("Wnck", "3.0")
from gi.repository import Gtk, GdkPixbuf, GLib, Gdk from gi.repository import Gtk, GdkPixbuf, GLib, Gdk
base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__))) base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__)))
@@ -73,48 +70,32 @@ class Main(Gtk.Window):
super(Main, self).__init__(title="Snigdha OS Welcome - Arctic") super(Main, self).__init__(title="Snigdha OS Welcome - Arctic")
self.set_border_width(10) self.set_border_width(10)
self.set_default_size(860, 450) self.set_default_size(860, 450)
self.set_icon_from_file(os.path.join(base_dir, "images/snigdhaos-icon.png")) self.set_icon_from_file(os.path.join(base_dir, "images/snigdhaos-welcome-small.png"))
self.set_position(Gtk.WindowPosition.CENTER) self.set_position(Gtk.WindowPosition.CENTER)
self.results = "" self.results = ""
if not os.path.exists(GUI.home + "/.config/snigdhaos-welcome/"): if not os.path.exists(GUI.home + "/.config/snigdhaos-welcome/"):
os.mkdir(GUI.home + "/.config/snigdhaos-welcome/") os.mkdir(GUI.home + "/.config/snigdhaos-welcome/")
with open(GUI.Settings, "w") as f: with open(GUI.Settings, "w") as f:
f.write("autostart=True") f.write("autostart=True")
f.close() f.close()
self.style_provider = Gtk.CssProvider() self.style_provider = Gtk.CssProvider()
self.style_provider.load_from_data(css, len(css)) self.style_provider.load_from_data(css, len(css))
Gtk.StyleContext.add_provider_for_screen( Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(), Gdk.Screen.get_default(),
self.style_provider, self.style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
) )
# a queue to store package install progress
self.pkg_queue = Queue() self.pkg_queue = Queue()
# default pacman lockfile
self.pacman_lockfile = "/var/lib/pacman/db.lck" self.pacman_lockfile = "/var/lib/pacman/db.lck"
# get the username of the user running the welcome app
self.sudo_username = os.getlogin() self.sudo_username = os.getlogin()
self.calamares_polkit = "/usr/bin/calamares_polkit" self.calamares_polkit = "/usr/bin/calamares_polkit"
self.session = None self.session = None
self.get_session() self.get_session()
GUI.GUI(self, Gtk, GdkPixbuf) GUI.GUI(self, Gtk, GdkPixbuf)
if GUI.username == GUI.user: if GUI.username == GUI.user:
threading.Thread( threading.Thread(
target=self.internet_notifier, args=(), daemon=True target=self.internet_notifier, args=(), daemon=True
).start() ).start()
# returns the login session
def get_session(self): def get_session(self):
try: try:
self.session = os.environ.get("XDG_SESSION_TYPE") self.session = os.environ.get("XDG_SESSION_TYPE")
@@ -130,13 +111,9 @@ class Main(Gtk.Window):
else: else:
self.popover.show_all() self.popover.show_all()
# check if path exists
# used to check if /sys/firmware/efi/fw_platform_size exists
# if yes then display systemd-boot bootloader install option
def file_check(self, path): def file_check(self, path):
if os.path.isfile(path): if os.path.isfile(path):
return True return True
return False return False
def on_mirror_clicked(self, widget): def on_mirror_clicked(self, widget):
@@ -151,31 +128,24 @@ class Main(Gtk.Window):
blue = int(rgba_color.blue * 255) blue = int(rgba_color.blue * 255)
return "#{r:02x}{g:02x}{b:02x}".format(r=red, g=green, b=blue) return "#{r:02x}{g:02x}{b:02x}".format(r=red, g=green, b=blue)
# offline install option
def on_easy_install_clicked(self, widget): def on_easy_install_clicked(self, widget):
if not os.path.exists(self.pacman_lockfile): if not os.path.exists(self.pacman_lockfile):
widget.set_name("button_easy_install_enabled") widget.set_name("button_easy_install_enabled")
widget.get_child().set_markup( widget.get_child().set_markup(
"<span size='large'>Offline Installation</span>" "<span size='large'>Offline Installation</span>"
) )
# DEPRECATED NOTICE: get_style_context deprecated in gtk 4.10 and will be removed in gtk 5.0
selected_bg_color = widget.get_style_context().lookup_color( selected_bg_color = widget.get_style_context().lookup_color(
"theme_selected_bg_color" "theme_selected_bg_color"
) )
if selected_bg_color[0] is True: if selected_bg_color[0] is True:
theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1]) theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1])
custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color) custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color)
self.style_provider.load_from_data(custom_css, len(custom_css)) self.style_provider.load_from_data(custom_css, len(custom_css))
self.button_adv_install.set_name("button_adv_install") self.button_adv_install.set_name("button_adv_install")
settings_beginner_file = "/etc/calamares/settings-beginner.conf" settings_beginner_file = "/etc/calamares/settings-beginner.conf"
packages_no_sys_update_file = ( packages_no_sys_update_file = (
"/etc/calamares/modules/packages-no-system-update.conf" "/etc/calamares/modules/packages-no-system-update.conf"
) )
app_cmd = [ app_cmd = [
"sudo", "sudo",
"cp", "cp",
@@ -183,18 +153,14 @@ class Main(Gtk.Window):
"/etc/calamares/settings.conf", "/etc/calamares/settings.conf",
] ]
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start() threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
app_cmd = [ app_cmd = [
"sudo", "sudo",
"cp", "cp",
packages_no_sys_update_file, packages_no_sys_update_file,
"/etc/calamares/modules/packages.conf", "/etc/calamares/modules/packages.conf",
] ]
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start() threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size") efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size")
if efi_file_check is True: if efi_file_check is True:
md = MessageDialogBootloader( md = MessageDialogBootloader(
title="Choose Bootloader", title="Choose Bootloader",
@@ -204,7 +170,6 @@ class Main(Gtk.Window):
calamares_polkit=self.calamares_polkit, calamares_polkit=self.calamares_polkit,
) )
md.show_all() md.show_all()
else: else:
subprocess.Popen([self.calamares_polkit, "-d"], shell=False) subprocess.Popen([self.calamares_polkit, "-d"], shell=False)
else: else:
@@ -224,30 +189,22 @@ class Main(Gtk.Window):
md.run() md.run()
md.destroy() md.destroy()
# online install option
def on_adv_install_clicked(self, widget): def on_adv_install_clicked(self, widget):
if not os.path.exists(self.pacman_lockfile): if not os.path.exists(self.pacman_lockfile):
widget.set_name("button_adv_install_enabled") widget.set_name("button_adv_install_enabled")
widget.get_child().set_markup( widget.get_child().set_markup(
"<span size='large'>Online Installation</span>" "<span size='large'>Online Installation</span>"
) )
# DEPRECATED NOTICE: get_style_context deprecated in gtk 4.10 and will be removed in gtk 5.0
selected_bg_color = widget.get_style_context().lookup_color( selected_bg_color = widget.get_style_context().lookup_color(
"theme_selected_bg_color" "theme_selected_bg_color"
) )
if selected_bg_color[0] is True: if selected_bg_color[0] is True:
theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1]) theme_bg_hex_color = self.convert_to_hex(selected_bg_color[1])
custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color) custom_css = css.replace("@theme_base_color_button", theme_bg_hex_color)
self.style_provider.load_from_data(custom_css, len(custom_css)) self.style_provider.load_from_data(custom_css, len(custom_css))
self.button_easy_install.set_name("button_easy_install") self.button_easy_install.set_name("button_easy_install")
settings_adv_file = "/etc/calamares/settings-advanced.conf" settings_adv_file = "/etc/calamares/settings-advanced.conf"
system_update_file = "/etc/calamares/modules/packages-system-update.conf" system_update_file = "/etc/calamares/modules/packages-system-update.conf"
app_cmd = [ app_cmd = [
"sudo", "sudo",
"cp", "cp",
@@ -255,18 +212,14 @@ class Main(Gtk.Window):
"/etc/calamares/settings.conf", "/etc/calamares/settings.conf",
] ]
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start() threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
app_cmd = [ app_cmd = [
"sudo", "sudo",
"cp", "cp",
system_update_file, system_update_file,
"/etc/calamares/modules/packages.conf", "/etc/calamares/modules/packages.conf",
] ]
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start() threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size") efi_file_check = self.file_check("/sys/firmware/efi/fw_platform_size")
if efi_file_check is True: if efi_file_check is True:
md = MessageDialogBootloader( md = MessageDialogBootloader(
title="Choose Bootloader", title="Choose Bootloader",
@@ -276,10 +229,8 @@ class Main(Gtk.Window):
calamares_polkit=self.calamares_polkit, calamares_polkit=self.calamares_polkit,
) )
md.show_all() md.show_all()
else: else:
subprocess.Popen([self.calamares_polkit, "-d"], shell=False) subprocess.Popen([self.calamares_polkit, "-d"], shell=False)
else: else:
print( print(
"[ERROR]: Pacman lockfile found %s, is another pacman process running ?" "[ERROR]: Pacman lockfile found %s, is another pacman process running ?"
@@ -296,7 +247,6 @@ class Main(Gtk.Window):
) )
md.run() md.run()
md.destroy() md.destroy()
def on_gp_clicked(self, widget): def on_gp_clicked(self, widget):
app_cmd = ["/usr/bin/gparted"] app_cmd = ["/usr/bin/gparted"]
pacman_cmd = [ pacman_cmd = [
@@ -322,7 +272,6 @@ class Main(Gtk.Window):
md.format_secondary_markup("Let Snigdha OS - Welcome install it ?") md.format_secondary_markup("Let Snigdha OS - Welcome install it ?")
response = md.run() response = md.run()
md.destroy() md.destroy()
if response == 1: if response == 1:
threading.Thread( threading.Thread(
target=self.check_package_queue, daemon=True target=self.check_package_queue, daemon=True
@@ -365,7 +314,6 @@ class Main(Gtk.Window):
"--noconfirm", "--noconfirm",
"--needed", "--needed",
] ]
if not self.check_package_installed("arandr"): if not self.check_package_installed("arandr"):
if not os.path.exists(self.pacman_lockfile): if not os.path.exists(self.pacman_lockfile):
md = Gtk.MessageDialog( md = Gtk.MessageDialog(
@@ -381,7 +329,6 @@ class Main(Gtk.Window):
md.format_secondary_markup("Let Snigdha OS - Welcome install it ?") md.format_secondary_markup("Let Snigdha OS - Welcome install it ?")
response = md.run() response = md.run()
md.destroy() md.destroy()
if response == 1: if response == 1:
threading.Thread( threading.Thread(
target=self.check_package_queue, daemon=True target=self.check_package_queue, daemon=True
@@ -411,10 +358,8 @@ class Main(Gtk.Window):
) )
md.run() md.run()
md.destroy() md.destroy()
else: else:
threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start() threading.Thread(target=self.run_app, args=(app_cmd,), daemon=True).start()
def remove_dev_package(self, pacman_cmd, package): def remove_dev_package(self, pacman_cmd, package):
try: try:
self.label_notify.set_name("label_style") self.label_notify.set_name("label_style")
@@ -429,7 +374,6 @@ class Main(Gtk.Window):
GLib.idle_add( GLib.idle_add(
self.label_notify.hide, self.label_notify.hide,
) )
with subprocess.Popen( with subprocess.Popen(
pacman_cmd, pacman_cmd,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@@ -469,7 +413,6 @@ class Main(Gtk.Window):
"<span foreground='red'><b>Failed to remove dev package %s</b></span>" "<span foreground='red'><b>Failed to remove dev package %s</b></span>"
% package, % package,
) )
except Exception as e: except Exception as e:
print("[ERROR]: Exception in remove_dev_package(): %s" % e) print("[ERROR]: Exception in remove_dev_package(): %s" % e)
self.label_notify.set_name("label_style") self.label_notify.set_name("label_style")
@@ -481,16 +424,13 @@ class Main(Gtk.Window):
"<span foreground='red'><b>Failed to remove dev package %s</b></span>" "<span foreground='red'><b>Failed to remove dev package %s</b></span>"
% package, % package,
) )
def install_package(self, app_cmd, pacman_cmd, package): def install_package(self, app_cmd, pacman_cmd, package):
try: try:
self.label_notify.set_name("label_style") self.label_notify.set_name("label_style")
GLib.idle_add( GLib.idle_add(
self.label_notify.set_markup, self.label_notify.set_markup,
"<span foreground='cyan'><b>Installing %s</b></span>" % package, "<span foreground='cyan'><b>Installing %s</b></span>" % package,
) )
with subprocess.Popen( with subprocess.Popen(
pacman_cmd, pacman_cmd,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@@ -501,10 +441,8 @@ class Main(Gtk.Window):
while True: while True:
if process.poll() is not None: if process.poll() is not None:
break break
for line in process.stdout: for line in process.stdout:
print(line.strip()) print(line.strip())
if self.check_package_installed(package): if self.check_package_installed(package):
self.pkg_queue.put((0, app_cmd, package)) self.pkg_queue.put((0, app_cmd, package))
print("[INFO]: Pacman package install completed") print("[INFO]: Pacman package install completed")
@@ -532,7 +470,6 @@ class Main(Gtk.Window):
"<span foreground='orange'><b>Package %s install failed</b></span>" "<span foreground='orange'><b>Package %s install failed</b></span>"
% package, % package,
) )
except Exception as e: except Exception as e:
print("[ERROR]: Exception in install_package(): %s" % e) print("[ERROR]: Exception in install_package(): %s" % e)
self.label_notify.set_name("label_style") self.label_notify.set_name("label_style")
@@ -670,21 +607,14 @@ class Main(Gtk.Window):
subprocess.run( subprocess.run(
[ [
"pkexec", "pkexec",
"/usr/bin/reflector", "/usr/bin/rate-mirrors",
"--age", "--concurrency",
"6", "40",
"--latest", "--disable-comments",
"21", "--allow-root",
"--fastest",
"21",
"--threads",
"21",
"--sort",
"rate",
"--protocol",
"https",
"--save", "--save",
"/etc/pacman.d/mirrorlist", "/etc/pacman.d/mirrorlist",
"arch",
], ],
shell=False, shell=False,
) )
@@ -704,7 +634,7 @@ class Main(Gtk.Window):
"--disable-comments", "--disable-comments",
"--allow-root", "--allow-root",
"--save", "--save",
"/etc/pacman.d/mirrorlist", "/etc/pacman.d/chaotic-mirrorlist",
"chaotic-aur", "chaotic-aur",
], ],
shell=False, shell=False,
@@ -713,7 +643,6 @@ class Main(Gtk.Window):
GLib.idle_add(self.label_notify.set_markup, "<b>Mirrorlist updated</b>") GLib.idle_add(self.label_notify.set_markup, "<b>Mirrorlist updated</b>")
GLib.idle_add(self.button_mirrors.set_sensitive, True) GLib.idle_add(self.button_mirrors.set_sensitive, True)
def MessageBox(self, title, message): def MessageBox(self, title, message):
md = Gtk.MessageDialog( md = Gtk.MessageDialog(
parent=self, parent=self,