# HG changeset patch # User Eugen Sawin # Date 1285968206 -7200 # Node ID 42c4c96e3ecda678ccfbf879833518fa653665cf # Parent 878956edb936c654fd74bdf232e4b154c42c0cb9 Added pause and resume. diff -r 878956edb936 -r 42c4c96e3ecd cronrec.py --- a/cronrec.py Fri Oct 01 22:02:28 2010 +0200 +++ b/cronrec.py Fri Oct 01 23:23:26 2010 +0200 @@ -86,8 +86,9 @@ project, activity = label.split(":") else: project = label - db.begin(db_file(), project, activity, datetime.now()) - print "begins %s:%s" % (project, activity) + time = datetime.now() + db.resume(db_file(), None, None, time) + db.begin(db_file(), project, activity, time) def end(args): project = None @@ -97,17 +98,23 @@ project, activity = label.split(":") else: project = label - db.end(db_file(), project, activity, datetime.now()) - print "ends %s:%s" % (project, activity) + time = datetime.now() + db.resume(db_file(), None, None, time) + db.end(db_file(), project, activity, time) + +def pause(args): + db.pause(db_file(), None, None, datetime.now()) + +def resume(args): + db.resume(db_file(), None, None, datetime.now()) def status(args): - result = db.find_active_tasks(db_file()) - if result: - print "Currently active tasks:" - for r in result: - print "Project: %s Activity: %s" % r + task = db.status(db_file()) + if task: + print "Currently active task" + print "Project: %s Activity: %s" % task else: - print "There are no active tasks." + print "There is no active task." def main(): global config @@ -126,6 +133,14 @@ sub_end.add_argument("label", type=str, nargs="?", default="all:all") sub_end.set_defaults(func=end) + sub_end = subs.add_parser("pause") + sub_end.add_argument("-m", type=str) + sub_end.set_defaults(func=pause) + + sub_end = subs.add_parser("resume") + sub_end.add_argument("-m", type=str) + sub_end.set_defaults(func=resume) + sub_end = subs.add_parser("status") sub_end.set_defaults(func=status) diff -r 878956edb936 -r 42c4c96e3ecd db.py --- a/db.py Fri Oct 01 22:02:28 2010 +0200 +++ b/db.py Fri Oct 01 23:23:26 2010 +0200 @@ -46,8 +46,16 @@ constraint activity_fk foreign key(activity) references activities(rowid) on delete cascade)""" +BREAKS_TABLE = """breaks( +begin datetime, +end datetime, +task int, +log text, +constraint task_fk foreign key(task) references tasks(rowid) on delete +cascade)""" + TABLES = (ACTIVITIES_TABLE, COMPANIES_TABLE, PROJECTS_TABLE, RATES_TABLE, -TASKS_TABLE) +TASKS_TABLE, BREAKS_TABLE) DEF_PROJECT = "default" DEF_ACTIVITY = "default" @@ -70,6 +78,10 @@ print "\ntasks" for c in cur: print c + cur.execute("select * from breaks") + print "\nbreaks" + for c in cur: + print c con.commit() cur.close() @@ -117,17 +129,15 @@ cur.close() return activity -def find_active_tasks(db_file): +def find_active_task(db_file): con, cur = session(db_file) sql = "select project, activity from tasks where end is null" cur.execute(sql) - results = [] - if cur: - for id in cur: - results.append((id_name(db_file, "projects", id[0]), - id_name(db_file, "activities", id[1]))) + task = cur.fetchone() + if task: + task = task[0] cur.close() - return results + return task def id_name(db_file, table, id): con, cur = session(db_file) @@ -198,3 +208,54 @@ con.commit() cur.close() test(db_file) + +def is_paused(db_file, time): + con, cur = session(db_file) + sql = "select rowid from breaks where end is null" + cur.execute(sql) + paused = cur.fetchone() + cur.close() + return paused + +def pause(db_file, project, activity, time): + print "pausing" + if not is_paused(db_file, time): + project = find_last_project(db_file, time) + activity = find_last_activity(db_file, time) + con, cur = session(db_file) + values = (time, None, project_id(db_file, project), + activity_id(db_file, activity), None) + sql = "insert into breaks values(?, ?, ?, ?, ?)" + cur.execute(sql, values) + con.commit() + cur.close() + test(db_file) + +def resume(db_file, project, activity, time): + print "resuming" + if is_paused(db_file, time): + task = find_active_task(db_file) + activity = find_last_activity(db_file, time) + project = find_last_project(db_file, time) + con, cur = session(db_file) + values = (time, project_id(db_file, project), activity_id(db_file, activity)) + sql = "update breaks set end=? where project=? and activity=?" + cur.execute(sql, values) + con.commit() + cur.close() + test(db_file) + +def status(db_file): + task = find_active_task(db_file) + con, cur = session(db_file) + result = None + if task: + values = (task,) + sql = "select project, activity from tasks where rowid=?" + cur.execute(sql, values) + result = cur.fetchone() + if result: + result = (id_name(db_file, "projects", result[0]), + id_name(db_file, "activities", result[1])) + return result +