PepMiniiso/pmostools/peptools/upgrade.py

177 lines
4.8 KiB
Python

"""
* Author: "PepDebian(peppermintosteam@proton.me)
*
* License: SPDX-License-Identifier: GPL-3.0-or-later
*
* Beta upgrade tool.
"""
import os
import re
import subprocess
import shutil
import tkinter as tk
import ttkbootstrap as ttk
import upgradeconf
# setting up window
pepupdate = upgradeconf.bbstyle
pepupdate.resizable(False, False)
WINDOW_HEIGHT = 230
WINDOW_WIDTH = 370
# This will get the logged in user
gusr = os.getlogin()
spath = "/home/" + gusr
# Source things
fpath = "/etc/apt/sources.list"
text = "bullseye"
settext = "bookworm"
def setsource(fpath, text, settext, flags=0):
""" Replace the source code names """
with open(fpath,"r+") as file:
file_contents = file.read()
txt_pattern = re.compile(re.escape(text), flags)
file_contents = txt_pattern.sub(settext, file_contents)
file.seek(0)
file.truncate()
file.write(file_contents)
def movepins():
""" Check if the Pins exists if they do move them
to backup folder
"""
pin_path = "/etc/apt/preferences.d/99pin-unstable"
bkup_path= spath + '/pin_backup'
if os.path.exists(pin_path):
os.mkdir(bkup_path)
print('Pin backup folder made')
shutil.copy(pin_path, bkup_path)
print('Pin file copied')
os.remove(pin_path)
print('Pin file deleted')
else:
pass
def upgrade_cmd():
# Put the commands together
set_terminal = 'xfce4-terminal -T \"Upgrade Peppermint" '
call_bash = '-e \"bash -c '
sudo_var = 'sudo apt '
update_cmd = sudo_var + 'update'
upgrade_cmd = sudo_var + 'upgrade'
full_cmd = sudo_var + 'full-upgrade'
clean_cmd = sudo_var + 'clean'
remove_cmd = sudo_var + 'autoremove'
reboot_cmd = sudo_var + 'shutdown -r now'
installer_remove = sudo_var + 'remove calamares'
installer_settings = sudo_var + 'remove calamares-settings-debian'
xDaily = 'sudo xDaily'
# Commands to run
prep_go = (set_terminal +
call_bash + "'" +
update_cmd + ' && ' +
upgrade_cmd + ' && ' +
full_cmd + "'" + '"'
)
final_go = (set_terminal +
call_bash + "'" +
clean_cmd + ' && ' +
update_cmd + ' && ' +
upgrade_cmd + ' && ' +
full_cmd + ' && ' +
remove_cmd + ' && ' +
#reboot_cmd + ' && ' +
installer_remove + ' && ' +
installer_settings + ' && ' +
xDaily + "'" + '"'
)
# Run the Commands in order
subprocess.Popen(prep_go, shell=True)
setsource(fpath, text, settext)
movepins()
subprocess.Popen(final_go, shell=True)
def center_screen():
""" gets the coordinates of the center of the screen """
screen_width = pepupdate.winfo_screenwidth()
screen_height = pepupdate.winfo_screenheight()
# Coordinates of the upper left corner of the window to make the window
# appear in the center
x_cordinate = int((screen_width / 2) - (WINDOW_WIDTH / 2))
y_cordinate = int((screen_height / 2) - (WINDOW_HEIGHT / 2))
pepupdate.geometry("{}x{}+{}+{}".format(WINDOW_WIDTH,
WINDOW_HEIGHT, x_cordinate, y_cordinate))
def ubase():
"""Check to see what base is being loaded"""
if os.path.exists("/etc/devuan_version"):
pepupdate.title(welconf.DEVUAN_TITLE)
lpath = upgradeconf.devcandy
l_g = tk.Label(pepupdate, image=lpath, width=128, height=128, borderwidth=0)
l_g.grid(
columnspan=2,
row=0,
column=0,
ipadx=5,
ipady=5,
padx=5,
pady=5)
elif os.path.exists("/etc/debian_version"):
pepupdate.title(upgradeconf.DEBIAN_TITLE)
# Set the window icon
pepupdate.tk.call('wm', 'iconphoto', pepupdate._w, tk.PhotoImage(
file='/usr/share/pixmaps/peppermint-old.png'))
codename_label = ttk.Label(pepupdate, text="Enter the Codename to upgrade to:")
codename_label.place(x=10, y=20)
examples_label = ttk.Label(pepupdate, text='** For example: bookworm, bullseye,'
' stretch **', bootstyle="danger")
examples_label.place(x=10, y=80)
warning_label = ttk.Label(pepupdate, text='Make sure to backup your data!',
bootstyle="warning")
warning_label.place(x=10, y=170)
code_value = tk.Text(pepupdate, height=1, width=25)
code_value.place(x=10, y=45)
btnsv = ttk.Button(
pepupdate,
text="Upgrade",
cursor="hand2",
bootstyle="light-outline",
width=8,
command=upgrade_cmd
)
btnsv.place(x=10, y=110)
btncl = ttk.Button(
pepupdate,
text="Cancel",
cursor="hand2",
bootstyle="light-outline",
width=8
)
btncl.place(x=120, y=110)
ubase()
# call Center screen
center_screen()
# run the application
pepupdate.mainloop()