diff --git a/eyestrainreminder/EyeStrainReminder.py b/eyestrainreminder/EyeStrainReminder.py index 8f5414c..3d1e928 100755 --- a/eyestrainreminder/EyeStrainReminder.py +++ b/eyestrainreminder/EyeStrainReminder.py @@ -18,63 +18,76 @@ MILLISECOND = 1000 MINUTE = 60 DIR = os.path.dirname(os.path.abspath(__file__)) -icon = mute = disable_notifs = invert_icons = notify_thread = sound = None +icon = mute = disable_notifs = invert_icons = notify_thread = start_sound = end_sound = None + def init(): print("Initializing EyeStrainReminder...") notify2.init(NAME) + def create_tray_icon(): global icon image = get_image() icon = pystray.Icon(NAME, image, NAME, generate_menu_items()) icon.run() + def update_icon(): global icon image = get_image() icon.icon = image + def get_image(): theme = [[DIR + "/files/eye_light.png", DIR + "/files/eye_dark.png"], - [DIR + "/files/eye_dark.png", DIR + "/files/eye_light.png"]] + [DIR + "/files/eye_dark.png", DIR + "/files/eye_light.png"]] return Image.open(theme[invert_icons][disable_notifs]) -def generate_menu_items(): + +def generate_menu_items(): menu_items = [] menu_items.append(item('Mute' if not mute else 'Unmute', toggle_mute)) - menu_items.append(item('Do Not Disturb' if not disable_notifs else 'Enable Notifications', toggle_notifications)) + menu_items.append(item( + 'Do Not Disturb' if not disable_notifs else 'Enable Notifications', toggle_notifications)) menu_items.append(menu.SEPARATOR) menu_items.append(item('Exit', exit)) return menu_items + def toggle_mute(): global mute mute = not mute update_menu() + def toggle_notifications(): global disable_notifs disable_notifs = not disable_notifs update_menu() update_icon() + def exit(): global icon icon.stop() os._exit(0) + def update_menu(): global icon icon.menu = generate_menu_items() icon.update_menu() + def uninit(): notify2.uninit() + def wait(): sleep(TIMEOUT*MINUTE) + def send_notification(): if not disable_notifs: notify(MESSAGE) @@ -84,30 +97,41 @@ def send_notification(): sleep(10) notify(MESSAGE_MISSED) + def notify(message): print(message) - notification = notify2.Notification(NAME, message, "notification-device-eject") + notification = notify2.Notification( + NAME, message, "notification-device-eject") notification.set_timeout(TIMEOUT * MILLISECOND) notification.set_urgency(notify2.URGENCY_LOW) notification.show() - play_sound() + play_sound(start_sound) sleep(TIMEOUT) notification.close() - play_sound() + play_sound(end_sound) -def play_sound(): + +def play_sound(sound): if not mute: playsound(sound) + def parse_args(): parser = argparse.ArgumentParser() - parser.add_argument("-i", "--invert_icons", action="store_true", default=False, help="Default to the dark icon for light themes") - parser.add_argument("-m", "--mute", action="store_true", default=False, help="Mute notification sounds by default") - parser.add_argument("-n", "--disable_notifs", action="store_true", default=False, help="Disable notifications by default") - parser.add_argument("-s", "--sound", action="store", default=DIR + "/files/default.wav", help="Custom notification sound") + parser.add_argument("-i", "--invert_icons", action="store_true", + default=False, help="Default to the dark icon for light themes") + parser.add_argument("-m", "--mute", action="store_true", + default=False, help="Mute notification sounds by default") + parser.add_argument("-n", "--disable_notifs", action="store_true", + default=False, help="Disable notifications by default") + parser.add_argument("-ss", "--start_sound", action="store", default=DIR + + "/files/ptt-s.wav", help="Custom start notification sound") + parser.add_argument("-es", "--end_sound", action="store", default=DIR + + "/files/ptt-e.wav", help="Custom end notification sound") args = parser.parse_args() globals().update(args.__dict__) + def notification_loop(): init() while 1: @@ -115,12 +139,15 @@ def notification_loop(): send_notification() uninit() + def main(): parse_args() - notify_thread = threading.Thread(target=notification_loop, name="Notify Thread") + notify_thread = threading.Thread( + target=notification_loop, name="Notify Thread") notify_thread.start() create_tray_icon() notify_thread.join() + if __name__ == '__main__': main() diff --git a/eyestrainreminder/files/ptt-e.wav b/eyestrainreminder/files/ptt-e.wav new file mode 100644 index 0000000..2e2815c Binary files /dev/null and b/eyestrainreminder/files/ptt-e.wav differ diff --git a/eyestrainreminder/files/ptt-s.wav b/eyestrainreminder/files/ptt-s.wav new file mode 100644 index 0000000..a2407eb Binary files /dev/null and b/eyestrainreminder/files/ptt-s.wav differ