Skip to content

Commit f54317d

Browse files
committed
BreakQueue: skip upcoming long break right away
1 parent e0eb988 commit f54317d

File tree

3 files changed

+59
-23
lines changed

3 files changed

+59
-23
lines changed

safeeyes/model.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,22 @@ def __set_next_break(self, break_type: typing.Optional[BreakType] = None) -> Non
250250
self.context["session"]["break"] = self.__current_break.name
251251

252252
def skip_long_break(self) -> None:
253-
if self.__short_queue:
254-
for break_object in self.__short_queue:
255-
break_object.time = self.__short_break_time
256-
257-
if self.__long_queue:
258-
for break_object in self.__long_queue:
259-
break_object.time = self.__long_break_time
253+
if not (self.__short_queue and self.__long_queue):
254+
return
255+
256+
for break_object in self.__short_queue:
257+
break_object.time = self.__short_break_time
258+
259+
for break_object in self.__long_queue:
260+
break_object.time = self.__long_break_time
261+
262+
if self.__current_break.type == BreakType.LONG_BREAK:
263+
# Note: this skips the long break, meaning the following long break
264+
# won't be the current one, but the next one after
265+
# we could decrement the __current_long counter, but then we'd need to
266+
# handle wraparound and possibly randomizing, which seems complicated
267+
self.__current_break = self.__next_short()
268+
self.context["session"]["break"] = self.__current_break.name
260269

261270
def is_empty(self, break_type: BreakType) -> bool:
262271
"""Check if the given break type is empty or not."""

safeeyes/tests/test_core.py

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -874,8 +874,7 @@ def test_idle_skip_long_before_long(
874874
"""Test idling for longer than long break time, right before the next long
875875
break.
876876
877-
FIXME: this test is broken, it should not work this way. Instead of just
878-
skipping the long break, it skips all the short breaks too.
877+
This used to skip all the short breaks too.
879878
"""
880879
context: dict[str, typing.Any] = {
881880
"session": {},
@@ -986,29 +985,58 @@ def test_idle_skip_long_before_long(
986985
sequential_threading_handle,
987986
safe_eyes_core,
988987
context,
989-
long_break_duration,
990-
"translated!: long break 1",
988+
short_break_duration,
989+
"translated!: break 1",
991990
)
992991

993-
# Time passed: 16min 10s
994-
# 15min short_break_interval (from previous, as long_break_interval must be
995-
# multiple)
996-
# 10 seconds pre_break_warning_time, 1 minute long_break_duration
997-
self.assert_datetime("2024-08-25T15:18:55")
992+
self.assert_datetime("2024-08-25T14:18:10")
998993

999994
self.run_next_break(
1000995
sequential_threading_handle,
1001996
time_machine,
1002997
safe_eyes_core,
1003998
context,
1004999
short_break_duration,
1005-
"translated!: break 1",
1000+
"translated!: break 2",
10061001
)
10071002

1008-
# Time passed: 15min 25s
1009-
# 15min short_break_interval, 10 seconds pre_break_warning_time,
1010-
# 15 seconds short_break_duration
1011-
self.assert_datetime("2024-08-25T15:34:20")
1003+
self.assert_datetime("2024-08-25T14:33:35")
1004+
1005+
self.run_next_break(
1006+
sequential_threading_handle,
1007+
time_machine,
1008+
safe_eyes_core,
1009+
context,
1010+
short_break_duration,
1011+
"translated!: break 3",
1012+
)
1013+
1014+
self.assert_datetime("2024-08-25T14:49:00")
1015+
1016+
self.run_next_break(
1017+
sequential_threading_handle,
1018+
time_machine,
1019+
safe_eyes_core,
1020+
context,
1021+
short_break_duration,
1022+
"translated!: break 4",
1023+
)
1024+
1025+
self.assert_datetime("2024-08-25T15:04:25")
1026+
1027+
# note that long break 1 was skipped, and we went directly to long break 2
1028+
# there's a note in BreakQueue.skip_long_break, we could fix it if needed, but
1029+
# it seems too much effort to be worth it right now
1030+
self.run_next_break(
1031+
sequential_threading_handle,
1032+
time_machine,
1033+
safe_eyes_core,
1034+
context,
1035+
long_break_duration,
1036+
"translated!: long break 2",
1037+
)
1038+
1039+
self.assert_datetime("2024-08-25T15:20:35")
10121040

10131041
safe_eyes_core.stop()
10141042

safeeyes/tests/test_model.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,9 +437,8 @@ def test_skip_long_break_before_long_break(
437437

438438
bq.skip_long_break()
439439

440-
assert bq.get_break().name == "translated!: long break 2"
440+
assert bq.get_break().name == "translated!: break 1"
441441

442-
assert bq.next().name == "translated!: break 1"
443442
assert bq.next().name == "translated!: break 2"
444443
assert bq.next().name == "translated!: break 3"
445444
assert bq.next().name == "translated!: break 4"

0 commit comments

Comments
 (0)