Skip to content

Commit 19d1600

Browse files
authored
Resume last activity using Ctl-Space. (#678)
This allows toggling the tracking of an activity on and off with Ctl-Space. This fixes #595.
1 parent b3dc385 commit 19d1600

File tree

5 files changed

+27
-5
lines changed

5 files changed

+27
-5
lines changed

help/C/keys.page

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ than one page.</p>
3434
All details of the selected activity, except start/end, are copied to the new activity.</p>
3535

3636
<p><key>Ctrl</key>+<key>+</key>: Same as the <key>+</key> button.
37-
Create a new activity.
38-
If an existing activity is selected,
39-
it will be resumed (same as <key>Ctrl</key>+<key>R</key>),
37+
Create a new activity.
38+
If an existing activity is selected,
39+
it will be resumed (same as <key>Ctrl</key>+<key>R</key>),
4040
otherwise, new from stratch (same as <key>Ctrl</key>+<key>N</key>).</p>
4141

4242

4343

4444
<p><key>Ctrl</key>+<key>Space</key>: Stop tracking the ongoing activity, if
45-
any. Same as the stop button in the action bar.</p>
45+
any. Otherwise restart tracking the last activity. Useful for toggling tracking on and off.</p>
4646

4747
<p><key>Return</key>: Edit/update the selected activity if any. Same as double
4848
click.</p>

src/hamster-service.py

100644100755
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,12 @@ def StopTracking(self, end_time):
282282
return self.stop_tracking(end_time)
283283

284284

285+
@dbus.service.method("org.gnome.Hamster")
286+
def StopOrRestartTracking(self):
287+
"""Stops or restarts tracking the last activity"""
288+
return self.stop_or_restart_tracking()
289+
290+
285291
@dbus.service.method("org.gnome.Hamster", in_signature='i')
286292
def RemoveFact(self, fact_id):
287293
"""Remove fact from storage by it's ID"""

src/hamster/client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,10 @@ def stop_tracking(self, end_time = None):
227227
end_time = timegm((end_time or dt.datetime.now()).timetuple())
228228
return self.conn.StopTracking(end_time)
229229

230+
def stop_or_restart_tracking(self):
231+
"""Stop or restart tracking last activity."""
232+
return self.conn.StopOrRestartTracking(0)
233+
230234
def remove_fact(self, fact_id):
231235
"delete fact from database"
232236
self.conn.RemoveFact(fact_id)

src/hamster/overview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ def on_key_press(self, window, event):
515515
# Resume/run; clear separation between Ctrl-R and Ctrl-N
516516
self.start_new_fact(clone_selected=True, fallback=False)
517517
elif event.keyval == gdk.KEY_space:
518-
self.storage.stop_tracking()
518+
self.storage.stop_or_restart_tracking()
519519
elif event.keyval in (gdk.KEY_KP_Add, gdk.KEY_plus):
520520
# same as pressing the + icon
521521
self.start_new_fact(clone_selected=True, fallback=True)

src/hamster/storage/storage.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,18 @@ def stop_tracking(self, end_time):
146146
self.facts_changed()
147147

148148

149+
def stop_or_restart_tracking(self):
150+
"""Stops or restarts tracking the last activity"""
151+
facts = self.__get_todays_facts()
152+
if facts:
153+
if facts[-1].end_time:
154+
self.add_fact(facts[-1].copy(start_time=dt.datetime.now(),
155+
end_time = None))
156+
else:
157+
self.__touch_fact(facts[-1], end_time=dt.datetime.now())
158+
self.facts_changed()
159+
160+
149161
def remove_fact(self, fact_id):
150162
"""Remove fact from storage by it's ID"""
151163
self.start_transaction()

0 commit comments

Comments
 (0)