aboutsummaryrefslogblamecommitdiff
path: root/timebomb.py
blob: 695f11a607ea31dcd8b387fe3fa360160f395b8e (plain) (tree)
1
2
3
4
5
6
7
8
9





                  
                      

                              
                                   

               
             
              

           
                                                   




                                             


                                                                 






                                                                          
 







                                                         
                                                      




























                                         
                                
                                 
                 


                                   
                             

                                           
                                   





                                                                
 
                                  






                                                          




                                          

                           
                                                                    

                              



                          
#!/bin/env python3

# Egg timer
# 2020-02-08
# OM

from tkinter import Tk
from tkinter import messagebox
from tkinter import Canvas
#from tkinter import font as tkFont
import argparse
import time
import shutil
import notify2

root = Tk()
root.option_add('*Dialog.msg.font', 'Helvetica 12')

def message(m, s):
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()

    msg = 'ALARM, Timer ran ' + str(m) + 'm and ' + str(s) + ' s'

    notify_msg = notify2.Notification('ALARM', msg)
    try:
        notify_msg.show()
    except:
        # ignore
        # dbus.exceptions.DBusException: org.freedesktop.Notifications.Max
        # NotificationsExceeded: Exceeded maximum number of notifications
        pass

    if screen_width <= 0:
        screen_width = 1024
    if screen_height <= 0:
        screen_height = 768

    c = Canvas(root, bg = "darkred", \
            width = screen_width, height = screen_height)
    c.pack()
    messagebox.showwarning(title='ALARM', message=msg)
    #root.mainloop()

def main():
    argparser = argparse.ArgumentParser()
    argparser.add_argument(
        '-s',
        help='seconds',
        type=int,
        nargs=1
    )
    argparser.add_argument(
        '-m',
        help='minutes',
        type=int,
        nargs=1
    )

    args = argparser.parse_args()
    if not args.s and not args.m:
        argparser.print_help()

    time_s = 0
    time_m = 0
    if args.s:
        time_s = abs(args.s[0])
    if args.m:
        time_m = abs(args.m[0])

    if args.s or args.m:
        notify2.init('timebomb')
        sleep(m=time_m, s=time_s)
        print('')
        message(m=time_m, s=time_s)

def sleep(m, s):
    time_sum_s = (m * 60) + s
    time_m, time_s = divmod(time_sum_s, 60)

    print('Start: ' + time.ctime())
    print('Sleeping for: ' + str(time_m) \
            + ' mins and ' + str(time_s) + ' seconds')

    for x in range(time_sum_s):
        # because dynamic resizing this needs to be here
        cols, rows = shutil.get_terminal_size(fallback=(80, 24))

        pr_m, pr_s = divmod(x, 60)
        left = '  {:02d}:{:02d}  '.format(pr_m, pr_s)
        right = '  {:02d}:{:02d}  '.format(time_m, time_s)
 
        pbar_len = cols - len(left) - len(right)
        if pbar_len < 20:
            pbar_len = 20

        n = time_sum_s-1
        if n == 0:
            progress = pbar_len
        else:
            progress = int(x/n * pbar_len)
 
        print(left, end='')
        print('#' * progress + '_' * int(pbar_len-progress), end='')
        print(right, end='\r')

        time.sleep(1)
    
if __name__ == '__main__':
    main()
in each repos: see "about"-tab (if existing) for more details / README.
mailto contact at omeckman dot net
all timestamps in UTC (German winter time: UTC+01:00, summer time: UTC+02:00)
dark theme is a modded version of: https://gist.github.com/Yoplitein/f4b671a2ec70c9e743fa