Skip to content

Commit 903d407

Browse files
committed
Improvements to "interpret idle as break" slgobinath#551
1 parent 777d486 commit 903d407

File tree

6 files changed

+22
-35
lines changed

6 files changed

+22
-35
lines changed

safeeyes/config/safeeyes.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@
104104
"version": "0.0.3",
105105
"settings": {
106106
"idle_time": 5,
107-
"interpret_idle_as_break": false,
108107
"postpone_if_active": false
109108
}
110109
},

safeeyes/core.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def start(self, next_break_time=-1, reset_breaks=False):
9696
self.scheduled_next_break_timestamp = int(next_break_time)
9797
utility.start_thread(self.__scheduler_job)
9898

99-
def stop(self):
99+
def stop(self, is_resting=False):
100100
"""
101101
Stop Safe Eyes if it is running.
102102
"""
@@ -110,7 +110,7 @@ def stop(self):
110110
self.waiting_condition.acquire()
111111
self.running = False
112112
if self.context['state'] != State.QUIT:
113-
self.context['state'] = State.STOPPED
113+
self.context['state'] = State.RESTING if (is_resting) else State.STOPPED
114114
self.waiting_condition.notify_all()
115115
self.waiting_condition.release()
116116

@@ -174,7 +174,7 @@ def __take_break(self, break_type = None):
174174
self.running = False
175175
self.waiting_condition.notify_all()
176176
self.waiting_condition.release()
177-
time.sleep(1) # Wait for 1 sec to ensure the sceduler is dead
177+
time.sleep(1) # Wait for 1 sec to ensure the scheduler is dead
178178
self.running = True
179179

180180
if break_type is not None and self.break_queue.get_break().type != break_type:
@@ -188,7 +188,6 @@ def __scheduler_job(self):
188188
if not self.running:
189189
return
190190

191-
self.context['state'] = State.WAITING
192191
# Convert to seconds
193192
time_to_wait = self.break_queue.get_break().time * 60
194193
current_time = datetime.datetime.now()
@@ -200,20 +199,21 @@ def __scheduler_job(self):
200199
time_to_wait = self.postpone_duration
201200
self.context['postponed'] = False
202201

203-
elif self.paused_time > -1 and self.break_queue.is_long_break():
204-
# Safe Eyes was paused earlier and next break is long
202+
elif self.context['state'] == State.RESTING and self.paused_time > -1:
203+
# Safe Eyes was resting
205204
paused_duration = int(current_timestamp - self.paused_time)
206205
self.paused_time = -1
207-
if paused_duration > self.break_queue.get_break().duration:
208-
logging.info('Skip next long break due to the pause longer than break duration')
206+
if paused_duration > self.break_queue.get_break(BreakType.LONG_BREAK).duration:
207+
logging.info('Skip next long break due to the pause %ds longer than break duration', paused_duration)
209208
# Skip the next long break
210-
self.break_queue.next()
209+
self.break_queue.reset()
211210

212211
if current_timestamp < self.scheduled_next_break_timestamp:
213212
time_to_wait = round(self.scheduled_next_break_timestamp - current_timestamp)
214213
self.scheduled_next_break_timestamp = -1
215214

216215
self.scheduled_next_break_time = current_time + datetime.timedelta(seconds=time_to_wait)
216+
self.context['state'] = State.WAITING
217217
utility.execute_main_thread(self.__fire_on_update_next_break, self.scheduled_next_break_time)
218218

219219
# Wait for the pre break warning period

safeeyes/model.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,12 +258,13 @@ class State(Enum):
258258
"""
259259
Possible states of Safe Eyes.
260260
"""
261-
START = 0,
262-
WAITING = 1,
263-
PRE_BREAK = 2,
264-
BREAK = 3,
265-
STOPPED = 4,
266-
QUIT = 5
261+
START = 0, # Starting scheduler
262+
WAITING = 1, # User is working (waiting for next break)
263+
PRE_BREAK = 2, # Preparing for break
264+
BREAK = 3, # Break
265+
STOPPED = 4, # Disabled
266+
QUIT = 5, # Quitting
267+
RESTING = 6 # Resting (natural break)
267268

268269

269270
class EventHook:

safeeyes/plugins/smartpause/config.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@
2020
"max": 3600,
2121
"min": 5
2222
},
23-
{
24-
"id": "interpret_idle_as_break",
25-
"label": "Interpret idle time equivalent to upcoming break duration as a break",
26-
"type": "BOOL",
27-
"default": false
28-
},
2923
{
3024
"id": "postpone_if_active",
3125
"label": "Postpone the next break until the system becomes idle",

safeeyes/plugins/smartpause/plugin.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
next_break_duration = 0
4444
short_break_interval = 0
4545
waiting_time = 2
46-
interpret_idle_as_break = False
4746
is_wayland_and_gnome = False
4847

4948
use_swayidle = False
@@ -157,7 +156,6 @@ def init(ctx, safeeyes_config, plugin_config):
157156
global short_break_interval
158157
global long_break_duration
159158
global waiting_time
160-
global interpret_idle_as_break
161159
global postpone_if_active
162160
global is_wayland_and_gnome
163161
global use_swayidle
@@ -167,7 +165,6 @@ def init(ctx, safeeyes_config, plugin_config):
167165
disable_safeeyes = context['api']['disable_safeeyes']
168166
postpone = context['api']['postpone']
169167
idle_time = plugin_config['idle_time']
170-
interpret_idle_as_break = plugin_config['interpret_idle_as_break']
171168
postpone_if_active = plugin_config['postpone_if_active']
172169
short_break_interval = safeeyes_config.get(
173170
'short_break_interval') * 60 # Convert to seconds
@@ -197,18 +194,14 @@ def __start_idle_monitor():
197194
smart_pause_activated = True
198195
idle_start_time = datetime.datetime.now() - datetime.timedelta(seconds=system_idle_time)
199196
logging.info('Pause Safe Eyes due to system idle')
200-
disable_safeeyes(None)
201-
elif system_idle_time < idle_time and context['state'] == State.STOPPED and idle_start_time is not None:
197+
disable_safeeyes(None, True)
198+
elif system_idle_time < idle_time and context['state'] == State.RESTING and idle_start_time is not None:
202199
logging.info('Resume Safe Eyes due to user activity')
203200
smart_pause_activated = False
204201
idle_period = (datetime.datetime.now() - idle_start_time)
205202
idle_seconds = idle_period.total_seconds()
206203
context['idle_period'] = idle_seconds
207-
if interpret_idle_as_break and idle_seconds >= next_break_duration:
208-
# User is idle for break duration and wants to consider it as a break
209-
logging.debug("Idle for %d seconds, long break %d", idle_seconds, long_break_duration)
210-
enable_safe_eyes(-1, idle_seconds >= long_break_duration)
211-
elif idle_seconds < short_break_interval:
204+
if idle_seconds < short_break_interval:
212205
# Credit back the idle time
213206
if next_break_time is not None:
214207
# This method runs in a thread since the start.

safeeyes/safeeyes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def handle_suspend_callback(self, sleeping):
158158
if self.active:
159159
logging.info("Stop Safe Eyes due to system suspend")
160160
self.plugins_manager.stop()
161-
self.safe_eyes_core.stop()
161+
self.safe_eyes_core.stop(True)
162162
else:
163163
# Resume from sleep
164164
if self.active and self.safe_eyes_core.has_breaks():
@@ -239,14 +239,14 @@ def enable_safeeyes(self, scheduled_next_break_time=-1, reset_breaks=False):
239239
self.safe_eyes_core.start(scheduled_next_break_time, reset_breaks)
240240
self.plugins_manager.start()
241241

242-
def disable_safeeyes(self, status=None):
242+
def disable_safeeyes(self, status=None, is_resting = False):
243243
"""
244244
Listen to tray icon disable action and send the signal to core.
245245
"""
246246
if self.active:
247247
self.active = False
248248
self.plugins_manager.stop()
249-
self.safe_eyes_core.stop()
249+
self.safe_eyes_core.stop(is_resting)
250250
if status is None:
251251
status = _('Disabled until restart')
252252
self._status = status

0 commit comments

Comments
 (0)