From cc9e758d749e6720f19b9e0762c53d68bc3a7844 Mon Sep 17 00:00:00 2001 From: debianpepper Date: Fri, 24 May 2024 16:37:30 +0900 Subject: [PATCH] Updated Signed-off-by: debianpepper --- iso_configs/database/welval.db | Bin 12288 -> 0 bytes iso_configs/pmostools/peptools/kumo.py | 225 ++++++++++++++++++----- iso_configs/pmostools/peptools/welval.db | Bin 28672 -> 28672 bytes python_modules/infra.py | 10 +- 4 files changed, 182 insertions(+), 53 deletions(-) delete mode 100644 iso_configs/database/welval.db mode change 100644 => 100755 iso_configs/pmostools/peptools/kumo.py diff --git a/iso_configs/database/welval.db b/iso_configs/database/welval.db deleted file mode 100644 index 743b99975bd977e84e60b8328ba42c4877fe0c1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&y-ve06oz3tsX!f2*s6%-jICO+a03LCq3RDMgdr1zVjv<-)g}m5E`b~1F4=L2 zI?#og>iuL}wq<*Gwj=rKa-3C09+vAxTFHqzR9dT35v5eicGvbzw4Ky@o7C&S(o)Bx zj{|$k@y5#gv;#o^0R#|0009ILKmY**5J2Fc3(TCoPQR~{D!t21xyo%}eN&p%iz(*Y zOZPkqgE*8pI2(tub+%ii3p21cd$)SOgK#FB)j8x{W>eaQmE&2%p2q1s}0tg_000IagfB*sr p?65#x|7-6{*+vjR009ILKmY**5I_I{1Q0-Amjv3{_1n##fp3$UNGSjS diff --git a/iso_configs/pmostools/peptools/kumo.py b/iso_configs/pmostools/peptools/kumo.py old mode 100644 new mode 100755 index 71fa7844..e06c0f2a --- a/iso_configs/pmostools/peptools/kumo.py +++ b/iso_configs/pmostools/peptools/kumo.py @@ -7,8 +7,12 @@ """ import os +import re +from urllib.parse import urljoin +from tkinter import filedialog import sqlite3 import tkinter as tk +import requests import ttkbootstrap as ttk import bsconf @@ -16,16 +20,17 @@ import bsconf # setup the window pwin = bsconf.bbstyle pwin.resizable(False, False) -WINDOW_HEIGHT = 300 +WINDOW_HEIGHT = 380 WINDOW_WIDTH = 640 pwin.title('Peppermint Kumo (SSB Manager)') -GLOBAL_FONT = "Helvetica 14" -# Set the user path +# Set the user paths used gusr = os.getlogin() 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, tk.PhotoImage( file=spath + '/images/kumosm.png')) @@ -38,6 +43,55 @@ pcur.execute(""" CREATE TABLE IF NOT EXISTS kumoapp (id integer PRIMARY 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']*?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(): """ gets the coordinates of the center of the screen """ @@ -53,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= min -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(): """ Add new ssb """ + make_desktop_file() ssb_name = ssb_value.get("1.0", 'end-1c') ssb_address = urladdr_value.get("1.0", 'end-1c') sql_insert = """ INSERT INTO kumoapp(ssbname,lnk) VALUES(?,?);""" @@ -64,15 +144,6 @@ def add_new_ssb(): urladdr_value.delete('1.0', tk.END) pwin.destroy() 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() os.system('python3 refresh.py') @@ -94,72 +165,107 @@ def fill_url_address(): use_address = pcur.fetchone() runaddr_value.delete('1.0', tk.END) 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') os.system('min -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", bootstyle="dark", - font=GLOBAL_FONT + font=("Helvetica", 14) ) - new_label.place(x=10, y=20) - -ssb_label = ttk.Label(pwin, text="Give the ssb a name:", -bootstyle="dark") -ssb_label.place(x=10, y=50) +ssb_label = ttk.Label(pwin, text="Give the ssb a name:") +ssb_label.place(x=10, y=55) ssb_value = tk.Text(pwin, height=1, width=25) -ssb_value.place(x=10, y=75) - -separator = ttk.Separator(pwin, orient='vertical') -separator.place(relx=.495, rely=0, relheight=1) - -urladdr_label = ttk.Label(pwin, text="Enter the Url:", bootstyle="dark") -urladdr_label.place(x=10, y=125) -urladdr_value = tk.Text(pwin, height=4, width=30) -urladdr_value.place(x=10, y=150) +ssb_value.place(x=10, y=80) +lblcmbomenu = ttk.Label(pwin, text="Menu Location:") +lblcmbomenu.place(x=10, y=113) +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="danger", 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.place(x=10, y=172) +urladdr_value = tk.Text(pwin, height=3, width=32) +urladdr_value.insert(tk.END, url_default_text) +urladdr_value.place(x=10, y=200) btnsv = ttk.Button( pwin, - text="save", + text="Save", cursor="hand2", bootstyle="danger", width=5, 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_label = ttk.Label(pwin, text="Manage SSBs", bootstyle="dark", - font=GLOBAL_FONT + font=("Helvetica", 14) ) -manage_label.place(x=340, y=20) - -lblcmbo = ttk.Label(pwin, text="Select SSB to Manage:", - bootstyle="dark") -lblcmbo.place(x=340, y=50) +manage_label.place(x=330, y=20) +lblcmbo = ttk.Label(pwin, text="Select SSB to Manage:") +lblcmbo.place(x=330, y=55) cmbo = ttk.Combobox(pwin) -cmbo.place(x=340, y=70) -cmbo['values'] = (fill_dropdown()) - -runaddr_label = ttk.Label(pwin, text="Url Address:", bootstyle="dark") -runaddr_label.place(x=340, y=125) -runaddr_value = tk.Text(pwin, height=4, width=30) -runaddr_value.place(x=340, y=150) - +cmbo.place(x=330, y=80) +cmbo['values'] = fill_dropdown() +runaddr_label = ttk.Label(pwin, text="Url Address:") +runaddr_label.place(x=330, y=125) +runaddr_value = tk.Text(pwin, height=4, width=32) +runaddr_value.place(x=330, y=150) btnrun = ttk.Button( pwin, text="Run", cursor="hand2", bootstyle="danger", 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( pwin, text="Delete", @@ -168,7 +274,26 @@ btndelete = ttk.Button( width=7, 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("<>", set_state) +set_state(None) center_screen() pwin.mainloop() diff --git a/iso_configs/pmostools/peptools/welval.db b/iso_configs/pmostools/peptools/welval.db index ff26539836aaa4de2274f5b5748c9f60866642d7..4e87b2681a0b2ec328d8733c3bf4222ad184784b 100644 GIT binary patch delta 32 ocmZp8z}WDBae_3X-b5K^M!k&*OZYdl82sU%B*3znMd6P>0K9e!IsgCw delta 69 zcmZp8z}WDBae_3X?nD`9M%|4GOZeFs`R_6C-`gxGaD`t