update peptools

This commit is contained in:
manuel 2024-02-02 18:40:47 -01:00
parent 4625eace6b
commit 18086e87c8
4 changed files with 185 additions and 44 deletions

Binary file not shown.

View File

@ -7,4 +7,5 @@
* just change the name to the prefered theme to be used for the * just change the name to the prefered theme to be used for the
* system * system
""" """
import ttkbootstrap as ttk
bbstyle = ttk.Window(themename="darkly") bbstyle = ttk.Window(themename="darkly")

View File

@ -7,8 +7,12 @@
""" """
import os import os
import re
from urllib.parse import urljoin
from tkinter import filedialog
import sqlite3 import sqlite3
import tkinter as tk import tkinter as tk
import requests
import ttkbootstrap as ttk import ttkbootstrap as ttk
import bsconf import bsconf
@ -16,15 +20,17 @@ import bsconf
# setup the window # setup the window
pwin = bsconf.bbstyle pwin = bsconf.bbstyle
pwin.resizable(False, False) pwin.resizable(False, False)
WINDOW_HEIGHT = 300 WINDOW_HEIGHT = 380
WINDOW_WIDTH = 640 WINDOW_WIDTH = 640
pwin.title('Peppermint Kumo (SSB Manager)') pwin.title('Peppermint Kumo (SSB Manager)')
# Set the user path # Set the user paths used
gusr = os.getlogin() gusr = os.getlogin()
spath = "/home/" + gusr + "/.local/share/pmostools/peptools" spath = "/home/" + gusr + "/.local/share/pmostools/peptools"
# Set the icon dpath = "/home/" + gusr + "/.local/share/applications/"
ipath = "/home/" + gusr + "/Pictures/"
# Set the window icon
pwin.tk.call('wm', 'iconphoto', pwin, pwin.tk.call('wm', 'iconphoto', pwin,
tk.PhotoImage( tk.PhotoImage(
file=spath + '/images/kumosm.png')) file=spath + '/images/kumosm.png'))
@ -37,6 +43,55 @@ pcur.execute(""" CREATE TABLE IF NOT EXISTS kumoapp (id integer PRIMARY
KEY AUTOINCREMENT, ssbname text, lnk text);""" KEY AUTOINCREMENT, ssbname text, lnk text);"""
) )
def download_favicon(url, output_folder=ipath, request_timeout=3):
"""
This function will try a regex to find and locate the favicon
of a website.Depending on the website it may not find the favicon.
the goals is to try and stay within the python stndard library
"""
# Send a GET request to the website
response = requests.get(url, timeout=request_timeout)
response.raise_for_status() # Raise an error for bad responses
# Use a regular expression to find the favicon URL in the HTML
match = re.search(
r'<link[^>]*?rel=["\']?icon["\']?[^>]*?href=["\'](.*?)["\']',
response.text,
re.IGNORECASE
)
if match:
favicon_url = match.group(1)
favicon_url = urljoin(url, favicon_url)
# Download the favicon
response = requests.get(favicon_url,timeout=request_timeout, stream=True)
response.raise_for_status()
if not os.path.exists(output_folder):
os.makedirs(output_folder)
filename = os.path.join(output_folder,
os.path.basename(favicon_url)
)
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
return filename
return None
def delete_ssb():
""" Delete the ssb that is selected """
get_name = cmbo.get()
link_address = """ DELETE FROM kumoapp WHERE ssbname = ? """
pcur.execute(link_address, (get_name,))
dcon.commit()
runaddr_value.delete('1.0', tk.END)
for dfile in os.listdir(dpath):
if dfile.startswith(get_name) and dfile.endswith('.desktop'):
del_path = os.path.join(dpath, dfile)
os.remove(del_path)
pwin.destroy()
os.system('python3 refresh.py')
def center_screen(): def center_screen():
""" gets the coordinates of the center of the screen """ """ gets the coordinates of the center of the screen """
@ -52,8 +107,34 @@ def center_screen():
) )
def make_desktop_file():
""" this will make the ssb and store in the Home folder"""
get_name = ssb_value.get("1.0", 'end-1c')
get_url = urladdr_value.get("1.0", 'end-1c')
get_local = cmbomenu.get()
get_icon = icon_value.get("1.0", 'end-1c')
write_path = dpath + get_name + '.desktop'
selected_category_key = categories_reverse[get_local]
app_content = f"""
[Desktop Entry]
Name={get_name}
Exec= luakit -U {get_url}
Icon={get_icon}
Categories={selected_category_key}
Type=Application
"""
# Make sure path exists first
folder = os.path.dirname(write_path)
if not os.path.exists(folder):
os.makedirs(folder)
# Then write the file
with open(write_path, 'w') as app:
app.write(app_content)
def add_new_ssb(): def add_new_ssb():
""" Add new ssb """ """ Add new ssb """
make_desktop_file()
ssb_name = ssb_value.get("1.0", 'end-1c') ssb_name = ssb_value.get("1.0", 'end-1c')
ssb_address = urladdr_value.get("1.0", 'end-1c') ssb_address = urladdr_value.get("1.0", 'end-1c')
sql_insert = """ INSERT INTO kumoapp(ssbname,lnk) VALUES(?,?);""" sql_insert = """ INSERT INTO kumoapp(ssbname,lnk) VALUES(?,?);"""
@ -63,15 +144,6 @@ def add_new_ssb():
urladdr_value.delete('1.0', tk.END) urladdr_value.delete('1.0', tk.END)
pwin.destroy() pwin.destroy()
os.system('python3 ' + spath + '/refresh.py') os.system('python3 ' + spath + '/refresh.py')
def delete_ssb():
""" Delete the ssb that is selected """
get_name = cmbo.get()
link_address = """ DELETE FROM kumoapp WHERE ssbname = ? """
pcur.execute(link_address, (get_name,))
dcon.commit()
runaddr_value.delete('1.0', tk.END)
pwin.destroy() pwin.destroy()
os.system('python3 refresh.py') os.system('python3 refresh.py')
@ -93,68 +165,107 @@ def fill_url_address():
use_address = pcur.fetchone() use_address = pcur.fetchone()
runaddr_value.delete('1.0', tk.END) runaddr_value.delete('1.0', tk.END)
runaddr_value.insert("end-1c", use_address) runaddr_value.insert("end-1c", use_address)
def run_url_address():
""" Run the ssb with the run button"""
run_addrs = runaddr_value.get("1.0", 'end-1c') run_addrs = runaddr_value.get("1.0", 'end-1c')
os.system('luakit -U ' + run_addrs + ' &') os.system('luakit -U ' + run_addrs + ' &')
### Create SSB side def select_icon():
"""
Select the icon to be used for the SSB in the system
The starting folder is the home pictures folder
"""
ssb_address = urladdr_value.get("1.0", 'end-1c')
output_filename = download_favicon(ssb_address)
initial_dir = ipath
file_path = filedialog.askopenfilename(
title="Select Icon",
initialdir=initial_dir,
filetypes=[("Icon files", "*.ico"), ("Icon files", "*.png"),
("Icon files", "*.gif"), ("Icon files", "*.ppm"),
("Icon files", "*.pgm")]
)
if file_path:
icon_value.delete(1.0, tk.END)
icon_value.insert(tk.END, file_path)
### Create SSB side objects used
### Title
new_label = ttk.Label(pwin, text="Create new SSBs", new_label = ttk.Label(pwin, text="Create new SSBs",
bootstyle="danger", bootstyle="danger",
font=("Helvetica", 14) font=("Helvetica", 14)
) )
new_label.place(x=10, y=20) new_label.place(x=10, y=20)
ssb_label = ttk.Label(pwin, text="Give the ssb a name:") ssb_label = ttk.Label(pwin, text="Give the ssb a name:")
ssb_label.place(x=10, y=50) ssb_label.place(x=10, y=55)
ssb_value = tk.Text(pwin, height=1, width=25) ssb_value = tk.Text(pwin, height=1, width=25)
ssb_value.place(x=10, y=75) ssb_value.place(x=10, y=80)
lblcmbomenu = ttk.Label(pwin, text="Menu Location:")
separator = ttk.Separator(pwin, orient='vertical') lblcmbomenu.place(x=10, y=113)
separator.place(relx=.495, rely=0, relheight=1) categories = { 'AudioVideo' : 'AudioVideo', 'Audio':'Audio', 'Video':'Video',
'Development':'Development', 'Education':'Education',
'Game':'Game', 'Graphics':'Graphics', 'Network':'Internet',
'Office':'Office', 'Settings':'Settings','System':'System',
'Utility':'Utility'
}
categories_reverse = {value: key for key, value in categories.items()}
cmbomenu = ttk.Combobox(pwin)
cmbomenu.place(x=10, y=135)
cmbomenu['values'] = list(categories.values())
icon_default_text = 'Set the icon with the "Icon" button'
icon_value = tk.Text(pwin, height=1, width=32)
icon_value.insert(tk.END, icon_default_text)
icon_value.place(x=10, y=280)
icon_button = ttk.Button(pwin, text="Icon", width=7, cursor="hand2",
bootstyle="light-outline", command=select_icon
)
icon_button.place(x=90, y=324)
url_default_text = "example: https://www.example.com"
urladdr_label = ttk.Label(pwin, text="Enter the Url:") urladdr_label = ttk.Label(pwin, text="Enter the Url:")
urladdr_label.place(x=10, y=125) urladdr_label.place(x=10, y=172)
urladdr_value = tk.Text(pwin, height=4, width=30) urladdr_value = tk.Text(pwin, height=3, width=32)
urladdr_value.place(x=10, y=150) urladdr_value.insert(tk.END, url_default_text)
urladdr_value.place(x=10, y=200)
btnsv = ttk.Button( btnsv = ttk.Button(
pwin, pwin,
text="save", text="Save",
cursor="hand2", cursor="hand2",
bootstyle="light-outline", bootstyle="light-outline",
width=5, width=5,
command=add_new_ssb command=add_new_ssb
) )
btnsv.place(x=10, y=250) btnsv.place(x=10, y=324)
### The Separator for the window
separator = ttk.Separator(pwin, orient='vertical')
separator.place(relx=.495, rely=0, relheight=1)
### Manage SSBs side) ### Manage SSBs side)
manage_label = ttk.Label(pwin, text="Manage SSBs", manage_label = ttk.Label(pwin, text="Manage SSBs",
bootstyle="danger", bootstyle="danger",
font=("Helvetica", 14) font=("Helvetica", 14)
) )
manage_label.place(x=340, y=20) manage_label.place(x=330, y=20)
lblcmbo = ttk.Label(pwin, text="Select SSB to Manage:") lblcmbo = ttk.Label(pwin, text="Select SSB to Manage:")
lblcmbo.place(x=340, y=50) lblcmbo.place(x=330, y=55)
cmbo = ttk.Combobox(pwin) cmbo = ttk.Combobox(pwin)
cmbo.place(x=340, y=70) cmbo.place(x=330, y=80)
cmbo['values'] = (fill_dropdown()) cmbo['values'] = fill_dropdown()
runaddr_label = ttk.Label(pwin, text="Url Address:") runaddr_label = ttk.Label(pwin, text="Url Address:")
runaddr_label.place(x=340, y=125) runaddr_label.place(x=330, y=125)
runaddr_value = tk.Text(pwin, height=4, width=30) runaddr_value = tk.Text(pwin, height=4, width=32)
runaddr_value.place(x=340, y=150) runaddr_value.place(x=330, y=150)
btnrun = ttk.Button( btnrun = ttk.Button(
pwin, pwin,
text="Run", text="Run",
cursor="hand2", cursor="hand2",
bootstyle="light-outline", bootstyle="light-outline",
width=7, width=7,
command=fill_url_address command=run_url_address
) )
btnrun.place(x=340, y=250) btnrun.place(x=330, y=324)
btndelete = ttk.Button( btndelete = ttk.Button(
pwin, pwin,
text="Delete", text="Delete",
@ -163,7 +274,26 @@ btndelete = ttk.Button(
width=7, width=7,
command=delete_ssb command=delete_ssb
) )
btndelete.place(x=430, y=250)
btndelete.place(x=430, y=324)
def set_state(event):
"""
Function that managse the state of the buttons and the Url address
for the Manage SSBs section, this is an event function
"""
selected_value = cmbo.get()
if selected_value == "":
btndelete["state"] = "disabled"
btnrun["state"] = "disabled"
else:
btndelete["state"] = "normal"
btnrun["state"] = "normal"
fill_url_address()
cmbo.bind("<<ComboboxSelected>>", set_state)
set_state(None)
center_screen() center_screen()
pwin.mainloop() pwin.mainloop()

View File

@ -13,8 +13,19 @@ import ttkbootstrap as ttk
pwin = ttk.Window(themename="darkly") pwin = ttk.Window(themename="darkly")
pwin.title("Suggested Packages") pwin.title("Suggested Packages")
pwin.resizable(False, False) pwin.resizable(False, False)
pwin.geometry('470x470') WINDOW_HEIGHT = 470
WINDOW_WIDTH = 470
def center_screen():
""" gets the coordinates of the center of the screen """
screen_width = pwin.winfo_screenwidth()
screen_height = pwin.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))
pwin.geometry("{}x{}+{}+{}".format(WINDOW_WIDTH,
WINDOW_HEIGHT, x_cordinate, y_cordinate))
def check_packages(): def check_packages():
""" Check if software is installed""" """ Check if software is installed"""
@ -32,8 +43,6 @@ def check_packages():
backup_tool['state'] = tk.DISABLED backup_tool['state'] = tk.DISABLED
if os.path.exists('/usr/bin/gnome-software'): if os.path.exists('/usr/bin/gnome-software'):
store['state'] = tk.DISABLED store['state'] = tk.DISABLED
if os.path.exists('/usr/bin/keepassxc'):
store['state'] = tk.DISABLED
def check_web_browsers(): def check_web_browsers():
@ -329,4 +338,5 @@ lblpmtitle = ttk.Label(pwin, style="F62817.TLabel",
check_base_snaps() check_base_snaps()
check_packages() check_packages()
check_web_browsers() check_web_browsers()
center_screen()
pwin.mainloop() pwin.mainloop()