diff --git a/iso_configs/pmostools/peptools/bsconf.py b/iso_configs/pmostools/peptools/bsconf.py index 0089b4f9..c043fe2f 100644 --- a/iso_configs/pmostools/peptools/bsconf.py +++ b/iso_configs/pmostools/peptools/bsconf.py @@ -1,11 +1,5 @@ -""" -* Author: "PeppermintOS Team(peppermintosteam@proton.me) -* -* License: SPDX-License-Identifier: GPL-3.0-or-later -* -* This module will set the style to be used for bootstrap -* just change the name to the prefered theme to be used for the -* system -""" import ttkbootstrap as ttk -bbstyle = ttk.Window(themename="darkly") +#This will set the style to used for boostrap +#just change the name to what is needed for the +#the system +bbstyle = ttk.Window(themename="peppermint") diff --git a/iso_configs/pmostools/peptools/kumo.py b/iso_configs/pmostools/peptools/kumo.py index beaf7989..71fa7844 100644 --- a/iso_configs/pmostools/peptools/kumo.py +++ b/iso_configs/pmostools/peptools/kumo.py @@ -7,12 +7,8 @@ """ 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 @@ -20,17 +16,16 @@ import bsconf # setup the window pwin = bsconf.bbstyle pwin.resizable(False, False) -WINDOW_HEIGHT = 380 +WINDOW_HEIGHT = 300 WINDOW_WIDTH = 640 pwin.title('Peppermint Kumo (SSB Manager)') +GLOBAL_FONT = "Helvetica 14" -# Set the user paths used +# Set the user path gusr = os.getlogin() spath = "/home/" + gusr + "/.local/share/pmostools/peptools" -dpath = "/home/" + gusr + "/.local/share/applications/" -ipath = "/home/" + gusr + "/Pictures/" -# Set the window icon +# Set the icon pwin.tk.call('wm', 'iconphoto', pwin, tk.PhotoImage( file=spath + '/images/kumosm.png')) @@ -43,55 +38,6 @@ 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 """ @@ -107,34 +53,8 @@ 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(): """ 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(?,?);""" @@ -144,6 +64,15 @@ 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') @@ -158,142 +87,88 @@ def fill_dropdown(): def fill_url_address(): - """ get the url of the ssb and run the it in lua""" + """ get the url of the ssb and run the it in min""" get_name = cmbo.get() link_address = """ SELECT lnk FROM kumoapp WHERE ssbname = ? """ pcur.execute(link_address, (get_name,)) 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('luakit -U ' + run_addrs + ' &') + os.system('min -U ' + run_addrs + ' &') -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 -### Create SSB side objects used -### Title new_label = ttk.Label(pwin, text="Create new SSBs", - bootstyle="danger", - font=("Helvetica", 14) + bootstyle="dark", + font=GLOBAL_FONT ) + new_label.place(x=10, y=20) -ssb_label = ttk.Label(pwin, text="Give the ssb a name:") -ssb_label.place(x=10, y=55) + +ssb_label = ttk.Label(pwin, text="Give the ssb a name:", +bootstyle="dark") +ssb_label.place(x=10, y=50) ssb_value = tk.Text(pwin, height=1, width=25) -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="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.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) +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) btnsv = ttk.Button( pwin, - text="Save", + text="save", cursor="hand2", - bootstyle="light-outline", + bootstyle="danger", width=5, command=add_new_ssb ) -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) +btnsv.place(x=10, y=250) + ### Manage SSBs side) manage_label = ttk.Label(pwin, text="Manage SSBs", - bootstyle="danger", - font=("Helvetica", 14) + bootstyle="dark", + font=GLOBAL_FONT ) -manage_label.place(x=330, y=20) -lblcmbo = ttk.Label(pwin, text="Select SSB to Manage:") -lblcmbo.place(x=330, y=55) +manage_label.place(x=340, y=20) + +lblcmbo = ttk.Label(pwin, text="Select SSB to Manage:", + bootstyle="dark") +lblcmbo.place(x=340, y=50) cmbo = ttk.Combobox(pwin) -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) +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) + btnrun = ttk.Button( pwin, text="Run", cursor="hand2", - bootstyle="light-outline", + bootstyle="danger", width=7, - command=run_url_address + command=fill_url_address ) -btnrun.place(x=330, y=324) +btnrun.place(x=340, y=250) + btndelete = ttk.Button( pwin, text="Delete", cursor="hand2", - bootstyle="light-outline", + bootstyle="danger", 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()