MRTestRepo/PepProTools/pepu.py

754 lines
24 KiB
Python
Raw Normal View History

"""
* Author: "PepDebian(peppermintosteam@proton.me)
*
* License: SPDX-License-Identifier: GPL-3.0-or-later
*
* This script is used as an update gui manager
"""
2022-07-19 18:52:03 +00:00
import tkinter as tk
import subprocess
2022-07-19 18:52:03 +00:00
import os
import shutil
import sqlite3
import filecmp
from tkinter import Frame
from threading import Thread
import ttkbootstrap as ttk
2022-07-19 18:52:03 +00:00
from crontab import CronTab
from git import Repo
from ttkbootstrap.scrolled import ScrolledText
from ttkbootstrap.constants import HORIZONTAL
import bsconf
2022-07-19 18:52:03 +00:00
# setup the window
pwin = bsconf.bbstyle
2022-07-19 18:52:03 +00:00
pwin.title('Peppermint Update Manager')
pwin.tk.call('wm', 'iconphoto', pwin._w,
tk.PhotoImage(
file='/usr/share/pixmaps/peppermint-old.png'))
pwin['bg'] = '#000000'
WINDOW_HEIGHT = 630
WINDOW_WIDTH = 750
2022-07-19 18:52:03 +00:00
# set the database connection string
2022-07-19 18:52:03 +00:00
dcon = sqlite3.connect('/opt/pypep/dbpep/welval.db')
pcur = dcon.cursor()
# Create the update table
pcur.execute(""" CREATE TABLE IF NOT EXISTS upsched (id integer PRIMARY
KEY AUTOINCREMENT, dname text, cronnum int, hr int,
min int);""")
2022-07-19 18:52:03 +00:00
# The Functions
2022-07-19 18:52:03 +00:00
def center_screen():
""" gets the coordinates of the center of the screen """
2022-07-19 18:52:03 +00:00
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))
2022-07-19 18:52:03 +00:00
def drepo():
"""Delete the temp repo files."""
fld = '/opt/tmprpo/'
for filename in os.listdir(fld):
fp = os.path.join(fld, filename)
try:
if os.path.isfile(fp) or os.path.islink(fp):
os.unlink(fp)
elif os.path.isdir(fp):
shutil.rmtree(fld)
except Exception as e:
print('Failed to delete %s. Reason: %s' % (fp, e))
2022-07-19 18:52:03 +00:00
def cbclone():
"""Clones the Production Tools Repo locally"""
repo_url = 'https://codeberg.org/Peppermint_OS/PepProTools.git'
repo_path = '/opt/tmprpo/'
if os.path.exists(repo_path):
shutil.rmtree(repo_path)
2022-07-19 18:52:03 +00:00
else:
os.makedirs(repo_path)
Repo.clone_from(repo_url, repo_path)
2022-07-19 18:52:03 +00:00
def checkfiles():
"""Compare the repo files downloaded with what is in opt and
detemrine if an update is needed
"""
b = '/opt/pypep/'
a = '/opt/tmprpo/'
comp = filecmp.dircmp(a, b)
common = sorted(comp.common)
left = sorted(comp.left_list)
right = sorted(comp.right_list)
if left != common or right != common:
file_names = os.listdir(a)
for file_name in file_names:
if file_name.endswith(".git"):
2022-07-19 18:52:03 +00:00
pass
else:
shutil.copy(os.path.join(a, file_name), b)
else:
pass
2022-07-19 18:52:03 +00:00
def updtpeptools():
"""brings all the update tool functions together"""
terminalstuff.delete(1.0)
2022-07-19 18:52:03 +00:00
pwin.update()
msg1 = '''
2022-07-19 18:52:03 +00:00
Checking Codeberg for updates'''
terminalstuff.insert('end', msg1)
pwin.update()
cbclone()
msg2 = '''
2022-07-19 18:52:03 +00:00
Applying updates'''
terminalstuff.insert('end', msg2)
pwin.update()
checkfiles()
msg3 = '''
2022-07-19 18:52:03 +00:00
Cleaning up....'''
terminalstuff.insert('end', msg3)
pwin.update()
drepo()
message = '''
PepTools updated! Check out PepScope to review the changes'''
2022-07-19 18:52:03 +00:00
terminalstuff.insert('end', message)
pwin.update()
2022-07-19 18:52:03 +00:00
def pu(cmd, terminal):
"""set up the pipe process."""
# set thecompleted message
2022-07-19 18:52:03 +00:00
pepipe = subprocess.Popen(cmd, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
bufsize=1,
universal_newlines=True,
shell=True)
pepipe.poll()
while True:
line = pepipe.stdout.readline()
terminal.insert(tk.END, line)
terminal.see(tk.END)
if not line and pepipe.poll is not None:
break
commsg = '''Completed!'''
2022-07-19 18:52:03 +00:00
terminalstuff.insert('end', commsg)
2022-07-19 18:52:03 +00:00
def peppersys():
""" This will apt command and send the results to the terminal textbox """
sysu = "apt update && apt upgrade -y"
pepper = Thread(target=lambda: pu(sysu, terminalstuff))
pepper.start()
terminalstuff.delete(1.0, END)
2022-07-19 18:52:03 +00:00
def ldsettings():
"""Preset the update options based on what is stored in the database"""
# set the connector
2022-07-19 18:52:03 +00:00
dbst = sqlite3.connect('/opt/pypep/dbpep/welval.db')
mvar = "Mon"
tuvar = "Tue"
wvar = "Wed"
tvar = "Thu"
fvar = "Fri"
savar = "Sat"
suvar = "Sun"
# set the queries
cbval = """ SELECT COUNT(*) FROM upsched WHERE dname = ?;"""
hval = """ SELECT hr FROM upsched WHERE hr IS NOT NULL;"""
hcval = """ SELECT COUNT(*) FROM upsched WHERE hr IS NOT NULL;"""
mval = """ SELECT min FROM upsched WHERE min IS NOT NULL;"""
mcval = """ SELECT COUNT(*) FROM upsched WHERE min IS NOT NULL;"""
# set the cursor to be used for execution
2022-07-19 18:52:03 +00:00
dcur = dbst.cursor()
# Start the hr call
2022-07-19 18:52:03 +00:00
dcur.execute(hcval)
hrc = dcur.fetchone()
if int(hrc[0]) > 0:
# If there is a hour value in the databes set the texbox
# widget to that value.
2022-07-19 18:52:03 +00:00
dcur.execute(hval)
hsel = dcur.fetchone()
txtopthour.insert(0, hsel)
2022-07-19 18:52:03 +00:00
else:
# if there is no value print this message and pass.
print('No hour value is there')
# Start the minute call
2022-07-19 18:52:03 +00:00
dcur.execute(mcval)
minc = dcur.fetchone()
if int(minc[0]) > 0:
# If there is a minute value in the databes set the texbox
# widget to that value.
2022-07-19 18:52:03 +00:00
dcur.execute(mval)
msel = dcur.fetchone()
txtoptmin.insert(0, msel)
2022-07-19 18:52:03 +00:00
else:
# if there is no value print this message and pass.
print('No minute value is there')
2022-07-19 18:52:03 +00:00
##Start text box settings...##
# Monday
dcur.execute(cbval, (mvar,))
2022-07-19 18:52:03 +00:00
mr = dcur.fetchone()
if int(mr[0]) > 0:
# if the cbval is in the DB then print and set the checkbutton
# value
2022-07-19 18:52:03 +00:00
cbm_v.set(1)
print("Mon is there")
2022-07-19 18:52:03 +00:00
else:
# If the cbval is 0 then print this message
print('Nothing There')
#Tue##
dcur.execute(cbval, (tuvar,))
tur = dcur.fetchone()
2022-07-19 18:52:03 +00:00
if int(tur[0]) > 0:
cbtu_v.set(1)
print("Tue is there")
2022-07-19 18:52:03 +00:00
else:
print('Nothing There')
2022-07-19 18:52:03 +00:00
##Wed##
dcur.execute(cbval, (wvar,))
wr = dcur.fetchone()
2022-07-19 18:52:03 +00:00
if int(wr[0]) > 0:
cbw_v.set(1)
print("Wed is there")
2022-07-19 18:52:03 +00:00
else:
print('Nothing There')
2022-07-19 18:52:03 +00:00
##Thu##
dcur.execute(cbval, (tvar,))
2022-07-19 18:52:03 +00:00
tr = dcur.fetchone()
if int(tr[0]) > 0:
cbt_v.set(1)
print("Thu is there")
2022-07-19 18:52:03 +00:00
else:
print('Nothing There')
2022-07-19 18:52:03 +00:00
##Fri##
dcur.execute(cbval, (fvar,))
2022-07-19 18:52:03 +00:00
fr = dcur.fetchone()
if int(fr[0]) > 0:
cbf_v.set(1)
print("Fri is there")
2022-07-19 18:52:03 +00:00
else:
print('Nothing There')
2022-07-19 18:52:03 +00:00
##Sat##
dcur.execute(cbval, (savar,))
2022-07-19 18:52:03 +00:00
sar = dcur.fetchone()
if int(sar[0]) > 0:
cbsa_v.set(1)
print("Sat is there")
2022-07-19 18:52:03 +00:00
else:
print('Nothing There')
2022-07-19 18:52:03 +00:00
##Sun##
dcur.execute(cbval, (suvar,))
sur = dcur.fetchone()
2022-07-19 18:52:03 +00:00
if int(sur[0]) > 0:
cbsu_v.set(1)
print("Sun is there")
2022-07-19 18:52:03 +00:00
else:
print('Nothing There')
2022-07-19 18:52:03 +00:00
def pcron():
"""This will set ccron table schedule to run updates"""
cron = CronTab(user='root')
# get the value that is entered in the hour text box
# it must be with 0 to 24 other wise it is out of range
# then see if the hour is already in the DB if it is
# delete it and add in the new value from the text box
# else its a new record and you just need to add it
# set the connector
db = sqlite3.connect('/opt/pypep/dbpep/welval.db')
# set the cursor
dbcur = db.cursor()
# This section will save the hour values entered in the database
hrtx = txtopthour.get()
if len(hrtx) == 0:
# If nothing was entered then print the message and pass the if
print('nothing entered')
else:
# if there is a value then delete it first then add the record
# other wise just add the record.
hra = int(hrtx)
if 0 <= hra <= 24:
hval = """ SELECT COUNT(*) FROM upsched WHERE hr IS NOT NULL; """
hdel = """ DELETE FROM upsched WHERE hr IS NOT NULL; """
hrinsrt = """ INSERT INTO upsched (hr) VALUES (?); """
harg = hra
dbcur.execute(hval)
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
dbcur.execute(hdel)
db.commit()
dbcur.execute(hrinsrt, (harg,))
db.commit()
print(hra)
else:
dbcur.execute(hrinsrt, (harg,))
db.commit()
else:
print('out of range')
# Same process for the Minute its a repeate as above but for the
# Minute text widget
mitx = txtoptmin.get()
if len(mitx) == 0:
print('nothing entered')
else:
mia = int(mitx)
if 0 <= mia <= 24:
mval = """ SELECT COUNT(*) FROM upsched WHERE min IS NOT NULL; """
mdel = """ DELETE FROM upsched WHERE min IS NOT NULL; """
miinsrt = """ INSERT INTO upsched (min) VALUES (?); """
marg = mia
dbcur.execute(mval)
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
dbcur.execute(mdel)
db.commit()
dbcur.execute(miinsrt, (marg,))
db.commit()
print(mia)
else:
dbcur.execute(miinsrt, (marg,))
db.commit()
else:
print('out of range')
# these are the days of the week checkbuttons if they are on or
# off do something
# var the message to print in terminal
alrdy = "There is already a value for that day,"
# set the variables used for the SQL queries
mvar = "Mon"
tuvar = "Tue"
wvar = "Wed"
tvar = "Thu"
fvar = "Fri"
savar = "Sat"
suvar = "Sun"
# set the queries
cval = """ SELECT COUNT(*) FROM upsched WHERE dname = ?;"""
dinsrt = """ INSERT INTO upsched(dname) VALUES (?);"""
drmv = """ DELETE FROM upsched WHERE dname = ?;"""
if cbm_v.get() == 1:
# run the query withthe variable
dbcur.execute(cval, (mvar,))
# get the result
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
# if the value is in the DB then print
print(alrdy, "Mon")
else:
# if it is not in the DB then add it
dbcur.execute(dinsrt, (mvar,))
db.commit()
print('Mon Added to Database')
# Create the new job
jobm = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Monday')
# Set the value to what is in the hour textbox
jobm.hour.on(hra)
# Set the value to what is in the minute textbox
jobm.minute.on(mia)
# set the day of the week
jobm.dow.on('1')
# Write the job to the crontab
cron.write()
# Show the job was witten
print('wrote cron')
# list the jobs in the terminal
for jobm in cron:
print(jobm)
# this is the finish monday function
print('mon is on')
else:
# If unchecked Remove the current day value
if cbm_v.get() == 0:
dbcur.execute(cval, (mvar,))
mdelresult = dbcur.fetchone()
if int(mdelresult[0]) > 0:
# run the delete query
dbcur.execute(drmv, (mvar,))
# commit the change to the database
db.commit()
# set what job to find in the crontab
jobm = cron.find_comment('Monday')
# Clear and write the contab
cron.remove(jobm)
cron.write()
# print that the cron job was deleted
print('Mon Cron Deleted')
# print the Record was deleted from the Databaes
print('Mon was deleted from db becuase the cb is off')
else:
# Print nothing deleted if nothing was found
print('nothing to delete')
# pring that that the check box is off.
print('mon is off')
if cbtu_v.get() == 1:
dbcur.execute(cval, (tuvar,))
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
print(alrdy, "Tue")
else:
dbcur.execute(dinsrt, (tuvar,))
db.commit()
print('Tue Added to Database')
jobtu = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Tuesday')
jobtu.hour.on(hra)
jobtu.minute.on(mia)
jobtu.dow.on(2)
cron.write()
for jobtu in cron:
print(jobtu)
print('wrote cron')
print('tue is on')
else:
if cbtu_v.get() == 0:
dbcur.execute(cval, (tuvar,))
tudelresult = dbcur.fetchone()
if int(tudelresult[0]) > 0:
dbcur.execute(drmv, (tuvar,))
db.commit()
jobtu = cron.find_comment('Tuesday')
cron.remove(jobtu)
cron.write()
print('Tue Cron Deleted')
print('Tue was deleted from db becuase the cb is off')
else:
print('nothing to delete')
print('tue is off')
if cbw_v.get() == 1:
dbcur.execute(cval, (wvar,))
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
print(alrdy, "Wed")
else:
dbcur.execute(dinsrt, (wvar,))
db.commit()
print('Wed Added to Database')
jobw = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Wednesday')
jobw.hour.on(hra)
jobw.minute.on(mia)
jobw.dow.on(3)
cron.write()
print('wrote cron')
print('wed is on')
else:
if cbw_v.get() == 0:
dbcur.execute(cval, (wvar,))
wdelresult = dbcur.fetchone()
if int(wdelresult[0]) > 0:
dbcur.execute(drmv, (wvar,))
db.commit()
jobw = cron.find_comment('Wednesday')
cron.remove(jobw)
cron.write()
print('Wed Cron Deleted')
print('Wed was deleted from db becuase the cb is off')
else:
print('nothing to delete')
print('wed is off')
if cbt_v.get() == 1:
dbcur.execute(cval, (tvar,))
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
print(alrdy, "Thu")
else:
dbcur.execute(dinsrt, (tvar,))
db.commit()
print('Thu Added to Database')
jobt = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Thursday')
jobt.hour.on(hra)
jobt.minute.on(mia)
jobt.dow.on(4)
cron.write()
print('wrote cron')
print('thu is on')
else:
if cbt_v.get() == 0:
dbcur.execute(cval, (tvar,))
tdelresult = dbcur.fetchone()
if int(tdelresult[0]) > 0:
dbcur.execute(drmv, (tvar,))
db.commit()
jobt = cron.find_comment('Thursday')
cron.remove(jobt)
cron.write()
print('Thu Cron Deleted')
print('Thu was deleted from db becuase the cb is off')
else:
print('nothing to delete')
print('thu is off')
if cbf_v.get() == 1:
dbcur.execute(cval, (fvar,))
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
print(alrdy, "Fri")
else:
dbcur.execute(dinsrt, (fvar,))
db.commit()
print('Fri Added to Database')
jobf = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Friday')
jobf.hour.on(hra)
jobf.minute.on(mia)
jobf.dow.on(5)
cron.write()
print('wrote cron')
print('fri is on')
else:
if cbf_v.get() == 0:
dbcur.execute(cval, (fvar,))
fdelresult = dbcur.fetchone()
if int(fdelresult[0]) > 0:
dbcur.execute(drmv, (fvar,))
db.commit()
jobf = cron.find_comment('Friday')
cron.remove(jobf)
cron.write()
print('Fri Cron Deleted')
print('Fri was deleted from db becuase the cb is off')
else:
print('nothing to delete')
print('fri is off')
if cbsa_v.get() == 1:
dbcur.execute(cval, (savar,))
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
print(alrdy, "Sat")
else:
dbcur.execute(dinsrt, (savar,))
db.commit()
print('Sat Added to Database')
jobsa = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Saturday')
jobsa.hour.on(hra)
jobsa.minute.on(mia)
jobsa.dow.on(6)
cron.write()
print('wrote cron')
print('sat is on')
else:
if cbsa_v.get() == 0:
dbcur.execute(cval, (savar,))
sadelresult = dbcur.fetchone()
if int(sadelresult[0]) > 0:
dbcur.execute(drmv, (savar,))
db.commit()
jobsa = cron.find_comment('Saturday')
cron.remove(jobsa)
cron.write()
print('Sat Cron Deleted')
print('Sat was deleted from db becuase the cb is off')
else:
print('nothing to delete')
print('sat is off')
if cbsu_v.get() == 1:
dbcur.execute(cval, (suvar,))
crresult = dbcur.fetchone()
if int(crresult[0]) > 0:
print(alrdy, "Sun")
else:
dbcur.execute(dinsrt, (suvar,))
db.commit()
print('Sun Added to Database')
jobsu = cron.new(
command='/bin/sh opt/pypep/pepwork.sh',
comment='Sunday')
jobsu.hour.on(hra)
jobsu.minute.on(mia)
jobsu.dow.on(0)
cron.write()
for job in cron:
print(job)
print('wrote cron')
print('sun is on')
else:
if cbsu_v.get() == 0:
dbcur.execute(cval, (suvar,))
sudelresult = dbcur.fetchone()
if int(sudelresult[0]) > 0:
dbcur.execute(drmv, (suvar,))
db.commit()
jobsu = cron.find_comment('Sunday')
cron.remove(jobsu)
cron.write()
print('Sun Cron Deleted')
print('Sun was deleted from db because the cb is off')
else:
print('nothing to delete')
print('sun is off')
pwin.destroy()
# notebook stuff
2022-07-19 18:52:03 +00:00
pnb = ttk.Notebook(pwin, bootstyle="danger")
pnb.pack(pady=10, expand=True)
fnb1 = ttk.Frame(pnb, width=400, height=400)
fnb2 = ttk.Frame(pnb, width=400, height=400)
2022-07-19 18:52:03 +00:00
fnb1.pack(fill='both', expand=True)
fnb2.pack(fill='both', expand=True)
pnb.add(fnb1, text='Update Manager')
pnb.add(fnb2, text='Options')
# frames to use separate parts of the window
fbset0 = Frame(fnb1)
2022-07-19 18:52:03 +00:00
fbset0.pack(side="top")
fbset1 = Frame(fnb1)
2022-07-19 18:52:03 +00:00
fbset1.pack(side="top")
fbset3 = Frame(fnb1)
2022-07-19 18:52:03 +00:00
fbset3.pack(side="top")
fbset2 = Frame(fnb1)
2022-07-19 18:52:03 +00:00
fbset2.pack(side="top")
fbset4 = Frame(fnb1)
2022-07-19 18:52:03 +00:00
fbset4.pack(side="top")
fterm = Frame(fnb1)
fterm.pack(side="top", fill="both", expand=True)
# These lables provide space in betweenthe buttons
# Using pack on the Update manager tab
2022-07-19 18:52:03 +00:00
lbltitle = ttk.Label(fbset0)
lbltitle.pack()
lbltitle = ttk.Label(fbset3)
lbltitle.pack()
lbltitle = ttk.Label(fbset4)
lbltitle.pack()
# Holds the terminal output
terminalstuff = ScrolledText(fterm, padding=5, bootstyle="dark")
terminalstuff.pack(fill="both", expand=True)
# The things that are used on the Update Manager Tab
sysupdtbtn = ttk.Button(
fbset1,
text="System Updates",
width=20,
cursor="hand2",
bootstyle="light-outline",
command=peppersys)
sysupdtbtn.pack(side="left")
ptupdtbtn = ttk.Button(
fbset1,
text="Update Pep Tools",
width=20,
cursor="hand2",
bootstyle="light-outline",
command=updtpeptools)
ptupdtbtn.pack(side="left")
lblumsg = ttk.Label(
fbset2,
text="Use the buttons to update your tools or system",
bootstyle="inverse-light")
2022-07-19 18:52:03 +00:00
lblumsg.pack()
# the things that are used on the Options tab
# The title of the Peppermint Tools Section
lblopttitle = ttk.Label(
fnb2,
text="Set a schedule for Peppermint tools",
bootstyle="inverse-light")
2022-07-19 18:52:03 +00:00
lblopttitle.place(x=10, y=15)
# First one below the Peppermint tools title
2022-07-19 18:52:03 +00:00
sepoptlt = ttk.Separator(fnb2, bootstyle="danger", orient=HORIZONTAL)
sepoptlt.place(x=10, y=40, relwidth=1)
# Second one below the System Updates
2022-07-19 18:52:03 +00:00
sepopbtm = ttk.Separator(fnb2, bootstyle="danger", orient=HORIZONTAL)
sepopbtm.place(x=10, y=140, relwidth=1)
# The last one right above the information
2022-07-19 18:52:03 +00:00
sepopend = ttk.Separator(fnb2, bootstyle="danger", orient=HORIZONTAL)
sepopend.place(x=10, y=240, relwidth=1)
cbm_v = tk.IntVar()
cbm = ttk.Checkbutton(fnb2, text="Mon", variable=cbm_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbm.place(x=10, y=180)
cbtu_v = tk.IntVar()
cbtu = ttk.Checkbutton(
fnb2,
text="Tue",
variable=cbtu_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbtu.place(x=80, y=180)
cbw_v = tk.IntVar()
cbw = ttk.Checkbutton(fnb2, text="Wed", variable=cbw_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbw.place(x=160, y=180)
cbt_v = tk.IntVar()
cbt = ttk.Checkbutton(fnb2, text="Thu", variable=cbt_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbt.place(x=240, y=180)
cbf_v = tk.IntVar()
cbf = ttk.Checkbutton(fnb2, text="Fri", variable=cbf_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbf.place(x=10, y=210)
cbsa_v = tk.IntVar()
cbsa = ttk.Checkbutton(
fnb2,
text="Sat",
variable=cbsa_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbsa.place(x=80, y=210)
cbsu_v = tk.IntVar()
cbsu = ttk.Checkbutton(
fnb2,
text="Sun",
variable=cbsu_v,
bootstyle="success-round-toggle")
2022-07-19 18:52:03 +00:00
cbsu.place(x=160, y=210)
# lets the user know the schedule will start from the selected date
2022-07-19 18:52:03 +00:00
lbloptdys = ttk.Label(fnb2, text="Select the days you want")
lbloptdys.place(x=10, y=150)
lblopttime = ttk.Label(fnb2, text="Select the time you want")
lblopttime.place(x=10, y=50)
lblopttimehr = ttk.Label(fnb2, text="hr")
lblopttimehr.place(x=17, y=80)
lblopttimemin = ttk.Label(fnb2, text="min")
lblopttimemin.place(x=66, y=80)
txtopthour = ttk.Entry(fnb2, bootstyle="danger", width=2)
txtopthour.place(x=10, y=100)
lblopttimecl = ttk.Label(fnb2, text=":")
lblopttimecl.place(x=50, y=105)
txtoptmin = ttk.Entry(fnb2, bootstyle="danger", width=2)
txtoptmin.place(x=66, y=100)
# this is the information section explaining what this application does.
# The frame that holds the message
2022-07-19 18:52:03 +00:00
instfr = ttk.Labelframe(fnb2, bootstyle="danger", text='Information')
instfr.place(x=10, y=270)
# The message
lblinstpt = ttk.Label(
instfr,
text="When you set a schedule for the Peppermint tools, the updater"
" will check the git repos for any new updates that may be"
" available and install them. Addtionally System Updates"
" will check the Debian or Devuan repos depending on what spin"
" of Peppermint you are running ",
wraplength=600)
2022-07-19 18:52:03 +00:00
lblinstpt.pack(side="top", pady=5, padx=5)
btnpt = ttk.Button(
fnb2,
text="Save & Exit",
cursor="hand2",
bootstyle="light-outline",
command=pcron)
2022-07-19 18:52:03 +00:00
btnpt.place(x=500, y=500)
# call Center screen
center_screen()
ldsettings()
pwin.mainloop()