Added pause and resume.
authorEugen Sawin <sawine@me73.com>
Fri, 01 Oct 2010 23:23:26 +0200
changeset 842c4c96e3ecd
parent 7 878956edb936
child 9 fab8e1981155
Added pause and resume.
cronrec.py
db.py
     1.1 --- a/cronrec.py	Fri Oct 01 22:02:28 2010 +0200
     1.2 +++ b/cronrec.py	Fri Oct 01 23:23:26 2010 +0200
     1.3 @@ -86,8 +86,9 @@
     1.4  		project, activity = label.split(":")
     1.5  	else:
     1.6  		project = label
     1.7 -	db.begin(db_file(), project, activity, datetime.now())	
     1.8 -	print "begins %s:%s" % (project, activity)
     1.9 +	time = datetime.now()
    1.10 +	db.resume(db_file(), None, None, time)
    1.11 +	db.begin(db_file(), project, activity, time)	
    1.12      
    1.13  def end(args):
    1.14  	project = None
    1.15 @@ -97,17 +98,23 @@
    1.16  		project, activity = label.split(":")
    1.17  	else:
    1.18  		project = label
    1.19 -	db.end(db_file(), project, activity, datetime.now())	
    1.20 -	print "ends %s:%s" % (project, activity)
    1.21 +	time = datetime.now()
    1.22 +	db.resume(db_file(), None, None, time)
    1.23 +	db.end(db_file(), project, activity, time)	
    1.24 +
    1.25 +def pause(args):
    1.26 +	db.pause(db_file(), None, None, datetime.now())	 
    1.27 +
    1.28 +def resume(args):
    1.29 +	db.resume(db_file(), None, None, datetime.now())	
    1.30  
    1.31  def status(args):
    1.32 -	result = db.find_active_tasks(db_file())
    1.33 -	if result:
    1.34 -		print "Currently active tasks:"
    1.35 -		for r in result:
    1.36 -			print "Project: %s Activity: %s" % r
    1.37 +	task = db.status(db_file())
    1.38 +	if task:
    1.39 +		print "Currently active task"
    1.40 +		print "Project: %s Activity: %s" % task
    1.41  	else:
    1.42 -		print "There are no active tasks."
    1.43 +		print "There is no active task."
    1.44  
    1.45  def main():
    1.46  	global config
    1.47 @@ -126,6 +133,14 @@
    1.48  	sub_end.add_argument("label", type=str, nargs="?", default="all:all")
    1.49  	sub_end.set_defaults(func=end)
    1.50  
    1.51 +	sub_end = subs.add_parser("pause")
    1.52 +	sub_end.add_argument("-m", type=str)
    1.53 +	sub_end.set_defaults(func=pause)
    1.54 +
    1.55 +	sub_end = subs.add_parser("resume")
    1.56 +	sub_end.add_argument("-m", type=str)
    1.57 +	sub_end.set_defaults(func=resume)
    1.58 +
    1.59  	sub_end = subs.add_parser("status")
    1.60  	sub_end.set_defaults(func=status)
    1.61  
     2.1 --- a/db.py	Fri Oct 01 22:02:28 2010 +0200
     2.2 +++ b/db.py	Fri Oct 01 23:23:26 2010 +0200
     2.3 @@ -46,8 +46,16 @@
     2.4  constraint activity_fk foreign key(activity) references activities(rowid) on delete
     2.5  cascade)"""
     2.6  
     2.7 +BREAKS_TABLE = """breaks(
     2.8 +begin datetime,
     2.9 +end datetime,
    2.10 +task int,
    2.11 +log text,
    2.12 +constraint task_fk foreign key(task) references tasks(rowid) on delete
    2.13 +cascade)"""
    2.14 +
    2.15  TABLES = (ACTIVITIES_TABLE, COMPANIES_TABLE, PROJECTS_TABLE, RATES_TABLE,
    2.16 -TASKS_TABLE)
    2.17 +TASKS_TABLE, BREAKS_TABLE)
    2.18  
    2.19  DEF_PROJECT = "default"
    2.20  DEF_ACTIVITY = "default"
    2.21 @@ -70,6 +78,10 @@
    2.22  	print "\ntasks"
    2.23  	for c in cur:
    2.24  		print c
    2.25 +	cur.execute("select * from breaks")
    2.26 +	print "\nbreaks"
    2.27 +	for c in cur:
    2.28 +		print c
    2.29  	con.commit()
    2.30  	cur.close()
    2.31  
    2.32 @@ -117,17 +129,15 @@
    2.33  	cur.close()
    2.34  	return activity
    2.35  
    2.36 -def find_active_tasks(db_file):
    2.37 +def find_active_task(db_file):
    2.38  	con, cur = session(db_file)
    2.39  	sql = "select project, activity from tasks where end is null"
    2.40  	cur.execute(sql)	
    2.41 -	results = []
    2.42 -	if cur:
    2.43 -		for id in cur:
    2.44 -			results.append((id_name(db_file, "projects", id[0]), 
    2.45 -							id_name(db_file, "activities", id[1])))
    2.46 +	task = cur.fetchone()
    2.47 +	if task:
    2.48 +		task = task[0]	
    2.49  	cur.close()
    2.50 -	return results			
    2.51 +	return task			
    2.52  
    2.53  def id_name(db_file, table, id):
    2.54  	con, cur = session(db_file)
    2.55 @@ -198,3 +208,54 @@
    2.56  		con.commit()
    2.57  		cur.close()
    2.58  	test(db_file)
    2.59 +
    2.60 +def is_paused(db_file, time):
    2.61 +	con, cur = session(db_file)
    2.62 +	sql = "select rowid from breaks where end is null"
    2.63 +	cur.execute(sql)
    2.64 +	paused = cur.fetchone()
    2.65 +	cur.close()
    2.66 +	return paused
    2.67 +
    2.68 +def pause(db_file, project, activity, time):
    2.69 +	print "pausing" 
    2.70 +	if not is_paused(db_file, time):
    2.71 +		project = find_last_project(db_file, time) 
    2.72 +		activity = find_last_activity(db_file, time)
    2.73 +		con, cur = session(db_file)
    2.74 +		values = (time, None, project_id(db_file, project), 
    2.75 +					activity_id(db_file, activity), None)
    2.76 +		sql = "insert into breaks values(?, ?, ?, ?, ?)"
    2.77 +		cur.execute(sql, values)
    2.78 +		con.commit()
    2.79 +		cur.close()
    2.80 +	test(db_file)
    2.81 +
    2.82 +def resume(db_file, project, activity, time):
    2.83 +	print "resuming"
    2.84 +	if is_paused(db_file, time):
    2.85 +		task = find_active_task(db_file)
    2.86 +		activity = find_last_activity(db_file, time)
    2.87 +		project = find_last_project(db_file, time) 			
    2.88 +		con, cur = session(db_file)
    2.89 +		values = (time, project_id(db_file, project), activity_id(db_file, activity))
    2.90 +		sql = "update breaks set end=? where project=? and activity=?"
    2.91 +		cur.execute(sql, values)
    2.92 +		con.commit()
    2.93 +		cur.close()
    2.94 +	test(db_file)
    2.95 +
    2.96 +def status(db_file):
    2.97 +	task = find_active_task(db_file)
    2.98 +	con, cur = session(db_file)
    2.99 +	result = None
   2.100 +	if task:
   2.101 +		values = (task,)
   2.102 +		sql = "select project, activity from tasks where rowid=?"
   2.103 +		cur.execute(sql, values)
   2.104 +		result = cur.fetchone()
   2.105 +		if result:
   2.106 +			result = (id_name(db_file, "projects", result[0]),
   2.107 +						id_name(db_file, "activities", result[1]))
   2.108 +	return result
   2.109 +