Roughly working first try for show/take long break
This commit is contained in:
parent
736f15e907
commit
c8a874611d
|
@ -77,6 +77,7 @@
|
|||
"version": "0.0.3",
|
||||
"settings": {
|
||||
"show_time_in_tray": false,
|
||||
"show_long_break_time": false,
|
||||
"allow_disabling": true,
|
||||
"disable_options": [{
|
||||
"time": 30,
|
||||
|
|
|
@ -131,7 +131,20 @@ class SafeEyesCore:
|
|||
logging.debug("Postpone the break for %d seconds", self.postpone_duration)
|
||||
self.context['postponed'] = True
|
||||
|
||||
def take_break(self):
|
||||
def get_break_time(self, long_break=False):
|
||||
"""
|
||||
Returns the next break time
|
||||
"""
|
||||
time = self.scheduled_next_break_time;
|
||||
if (long_break):
|
||||
break_obj = self.break_queue.get_break(long_break)
|
||||
if not break_obj:
|
||||
return False
|
||||
time += datetime.timedelta(minutes=break_obj.time)
|
||||
|
||||
return time
|
||||
|
||||
def take_break(self, long_break=False):
|
||||
"""
|
||||
Calling this method stops the scheduler and show the next break screen
|
||||
"""
|
||||
|
@ -139,15 +152,15 @@ class SafeEyesCore:
|
|||
return
|
||||
if not self.context['state'] == State.WAITING:
|
||||
return
|
||||
utility.start_thread(self.__take_break)
|
||||
utility.start_thread(self.__take_break, long_break=long_break)
|
||||
|
||||
def has_breaks(self):
|
||||
def has_breaks(self, long_break=False):
|
||||
"""
|
||||
Check whether Safe Eyes has breaks or not.
|
||||
"""
|
||||
return not self.break_queue.is_empty()
|
||||
return not self.break_queue.is_empty(long_break)
|
||||
|
||||
def __take_break(self):
|
||||
def __take_break(self, long_break=False):
|
||||
"""
|
||||
Show the next break screen
|
||||
"""
|
||||
|
@ -167,7 +180,7 @@ class SafeEyesCore:
|
|||
time.sleep(1) # Wait for 1 sec to ensure the sceduler is dead
|
||||
self.running = True
|
||||
|
||||
utility.execute_main_thread(self.__fire_start_break)
|
||||
utility.execute_main_thread(self.__fire_start_break, long_break)
|
||||
|
||||
def __scheduler_job(self):
|
||||
"""
|
||||
|
@ -243,9 +256,9 @@ class SafeEyesCore:
|
|||
self.__wait_for(self.postpone_duration)
|
||||
utility.execute_main_thread(self.__fire_start_break)
|
||||
|
||||
def __fire_start_break(self):
|
||||
def __fire_start_break(self, long_break=False):
|
||||
# Show the break screen
|
||||
if not self.on_start_break.fire(self.break_queue.get_break()):
|
||||
if not self.on_start_break.fire(self.break_queue.get_break(long_break)):
|
||||
# Plugins want to ignore this break
|
||||
self.__start_next_break()
|
||||
return
|
||||
|
@ -258,15 +271,15 @@ class SafeEyesCore:
|
|||
# Wait in user thread
|
||||
utility.start_thread(self.__postpone_break)
|
||||
else:
|
||||
self.start_break.fire(self.break_queue.get_break())
|
||||
utility.start_thread(self.__start_break)
|
||||
self.start_break.fire(self.break_queue.get_break(long_break))
|
||||
utility.start_thread(self.__start_break, long_break=long_break)
|
||||
|
||||
def __start_break(self):
|
||||
def __start_break(self, long_break=False):
|
||||
"""
|
||||
Start the break screen.
|
||||
"""
|
||||
self.context['state'] = State.BREAK
|
||||
break_obj = self.break_queue.get_break()
|
||||
break_obj = self.break_queue.get_break(long_break)
|
||||
countdown = break_obj.duration
|
||||
total_break_time = countdown
|
||||
|
||||
|
|
|
@ -113,10 +113,13 @@ class BreakQueue:
|
|||
while brk != current_break and brk.name != last_break:
|
||||
brk = self.next()
|
||||
|
||||
def get_break(self):
|
||||
def get_break(self, long_break=False):
|
||||
if self.__current_break is None:
|
||||
self.__current_break = self.next()
|
||||
return self.__current_break
|
||||
if long_break:
|
||||
return self.__next_long()
|
||||
else:
|
||||
return self.__current_break
|
||||
|
||||
def is_long_break(self):
|
||||
return self.__current_break is not None and self.__current_break.type == BreakType.LONG_BREAK
|
||||
|
@ -162,12 +165,12 @@ class BreakQueue:
|
|||
def reset(self):
|
||||
for break_object in self.__short_queue:
|
||||
break_object.time = self.__short_break_time
|
||||
|
||||
|
||||
for break_object in self.__long_queue:
|
||||
break_object.time = self.__long_break_time
|
||||
|
||||
def is_empty(self):
|
||||
return self.__short_queue is None and self.__long_queue is None
|
||||
def is_empty(self, long_break=False):
|
||||
return (long_break or self.__short_queue is None) and self.__long_queue is None
|
||||
|
||||
def __next_short(self):
|
||||
longs = self.__long_queue
|
||||
|
|
|
@ -18,6 +18,12 @@
|
|||
"type": "BOOL",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"id": "show_long_break_time",
|
||||
"label": "Show long break times",
|
||||
"type": "BOOL",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"id": "allow_disabling",
|
||||
"label": "Allow disabling Safe Eyes",
|
||||
|
|
|
@ -51,6 +51,7 @@ class TrayIcon:
|
|||
self.on_disable = context['api']['disable_safeeyes']
|
||||
self.take_break = context['api']['take_break']
|
||||
self.has_breaks = context['api']['has_breaks']
|
||||
self.get_break_time = context['api']['get_break_time']
|
||||
self.plugin_config = plugin_config
|
||||
self.date_time = None
|
||||
self.active = True
|
||||
|
@ -122,10 +123,14 @@ class TrayIcon:
|
|||
# Add the sub menu to the enable/disable menu
|
||||
self.item_disable.set_submenu(self.sub_menu_disable)
|
||||
|
||||
# Settings menu item
|
||||
# Manual break menu item
|
||||
self.item_manual_break = Gtk.MenuItem()
|
||||
self.item_manual_break.connect('activate', self.on_manual_break_clicked)
|
||||
|
||||
# Manual long break menu item
|
||||
self.item_manual_long_break = Gtk.MenuItem()
|
||||
self.item_manual_long_break.connect('activate', self.on_manual_long_break_clicked)
|
||||
|
||||
# Settings menu item
|
||||
self.item_settings = Gtk.MenuItem()
|
||||
self.item_settings.connect('activate', self.show_settings)
|
||||
|
@ -149,6 +154,7 @@ class TrayIcon:
|
|||
self.menu.append(self.item_enable)
|
||||
self.menu.append(self.item_disable)
|
||||
self.menu.append(self.item_manual_break)
|
||||
self.menu.append(self.item_manual_long_break)
|
||||
self.menu.append(self.item_settings)
|
||||
self.menu.append(self.item_about)
|
||||
self.menu.append(self.item_quit)
|
||||
|
@ -186,6 +192,7 @@ class TrayIcon:
|
|||
self.item_disable.set_label(_('Disable Safe Eyes'))
|
||||
|
||||
breaks_found = self.has_breaks()
|
||||
long_breaks_found = self.has_breaks(long_break = True)
|
||||
if breaks_found:
|
||||
if self.active:
|
||||
if self.date_time:
|
||||
|
@ -206,8 +213,10 @@ class TrayIcon:
|
|||
self.item_enable.set_sensitive(breaks_found and not self.active)
|
||||
self.item_disable.set_sensitive(breaks_found and self.active)
|
||||
self.item_manual_break.set_sensitive(breaks_found and self.active)
|
||||
self.item_manual_long_break.set_sensitive(long_breaks_found and self.active)
|
||||
|
||||
self.item_manual_break.set_label(_('Take a break now'))
|
||||
self.item_manual_long_break.set_label(_('Take a long break now'))
|
||||
self.item_settings.set_label(_('Settings'))
|
||||
self.item_about.set_label(_('About'))
|
||||
self.item_quit.set_label(_('Quit'))
|
||||
|
@ -263,8 +272,10 @@ class TrayIcon:
|
|||
"""
|
||||
A private method to be called within this class to update the next break information using self.dateTime.
|
||||
"""
|
||||
formatted_time = utility.format_time(self.date_time)
|
||||
show_long = self.plugin_config.get('show_long_break_time', False)
|
||||
formatted_time = utility.format_time(self.get_break_time(show_long))
|
||||
message = _('Next break at %s') % (formatted_time)
|
||||
|
||||
# Update the menu item label
|
||||
utility.execute_main_thread(self.item_info.set_label, message)
|
||||
# Update the tray icon label
|
||||
|
@ -279,6 +290,12 @@ class TrayIcon:
|
|||
"""
|
||||
self.take_break()
|
||||
|
||||
def on_manual_long_break_clicked(self, *args):
|
||||
"""
|
||||
Trigger a break manually.
|
||||
"""
|
||||
self.take_break(long_break = True)
|
||||
|
||||
def on_enable_clicked(self, *args):
|
||||
"""
|
||||
Handle 'Enable Safe Eyes' menu action.
|
||||
|
|
|
@ -93,10 +93,10 @@ class SafeEyes:
|
|||
self.safe_eyes_core.on_stop_break += self.stop_break
|
||||
self.safe_eyes_core.on_update_next_break += self.update_next_break
|
||||
self.safe_eyes_core.initialize(self.config)
|
||||
self.context['api']['take_break'] = lambda: utility.execute_main_thread(
|
||||
self.safe_eyes_core.take_break)
|
||||
self.context['api']['take_break'] = self.safe_eyes_core.take_break
|
||||
self.context['api']['has_breaks'] = self.safe_eyes_core.has_breaks
|
||||
self.context['api']['postpone'] = self.safe_eyes_core.postpone
|
||||
self.context['api']['get_break_time'] = self.safe_eyes_core.get_break_time
|
||||
self.plugins_manager.init(self.context, self.config)
|
||||
atexit.register(self.persist_session)
|
||||
|
||||
|
@ -295,11 +295,11 @@ class SafeEyes:
|
|||
self.plugins_manager.stop_break()
|
||||
return True
|
||||
|
||||
def take_break(self):
|
||||
def take_break(self, long_break=False):
|
||||
"""
|
||||
Take a break now.
|
||||
"""
|
||||
self.safe_eyes_core.take_break()
|
||||
self.safe_eyes_core.take_break(long_break)
|
||||
|
||||
def status(self):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue