Added add break command.
authorEugen Sawin <sawine@me73.com>
Tue, 05 Oct 2010 15:38:38 +0200
changeset 118a99ccb99361
parent 10 37ab6d0ddb30
child 12 28c80ae695dc
Added add break command.
cronrec.py
db.py
     1.1 --- a/cronrec.py	Tue Oct 05 15:19:14 2010 +0200
     1.2 +++ b/cronrec.py	Tue Oct 05 15:38:38 2010 +0200
     1.3 @@ -102,10 +102,10 @@
     1.4  	db.end(db_file(), project, activity, time, log)	
     1.5  
     1.6  def pause(args):
     1.7 -	db.pause(db_file(), None, None, datetime.now())	 
     1.8 +	db.pause(db_file(), datetime.now())	 
     1.9  
    1.10  def resume(args):
    1.11 -	db.resume(db_file(), None, None, datetime.now(), args.m)	
    1.12 +	db.resume(db_file(), None, datetime.now(), args.m)	
    1.13  
    1.14  def add_task(args):
    1.15  	project, activity = parse_label(args.label)
    1.16 @@ -115,6 +115,13 @@
    1.17  	db.begin(db_file(), project, activity, begin)
    1.18  	db.end(db_file(), project, activity, end, log)
    1.19  
    1.20 +def add_break(args):
    1.21 +	log = args.m
    1.22 +	begin = datetime.strptime(args.begin, DATETIME_FORMAT)
    1.23 +	end = datetime.strptime(args.end, DATETIME_FORMAT)
    1.24 +	db.pause(db_file(), begin)
    1.25 +	db.resume(db_file(), db.find_active_task(db_file(), begin), end, log)
    1.26 +
    1.27  def status(args):
    1.28  	task = db.status(db_file())
    1.29  	if task:
    1.30 @@ -151,12 +158,19 @@
    1.31  
    1.32  	sub_add = subs.add_parser("add")
    1.33  	sub_add_subs = sub_add.add_subparsers()
    1.34 +
    1.35  	sub_add_task = sub_add_subs.add_parser("task")
    1.36  	sub_add_task.add_argument("label", type=str)
    1.37  	sub_add_task.add_argument("begin", type=str)
    1.38  	sub_add_task.add_argument("end", type=str)
    1.39  	sub_add_task.add_argument("-m", type=str)
    1.40  	sub_add_task.set_defaults(func=add_task)
    1.41 +	
    1.42 +	sub_add_break = sub_add_subs.add_parser("break")
    1.43 +	sub_add_break.add_argument("begin", type=str)
    1.44 +	sub_add_break.add_argument("end", type=str)
    1.45 +	sub_add_break.add_argument("-m", type=str)
    1.46 +	sub_add_break.set_defaults(func=add_break)
    1.47  
    1.48  	sub_status = subs.add_parser("status")
    1.49  	sub_status.set_defaults(func=status)
     2.1 --- a/db.py	Tue Oct 05 15:19:14 2010 +0200
     2.2 +++ b/db.py	Tue Oct 05 15:38:38 2010 +0200
     2.3 @@ -129,10 +129,16 @@
     2.4  	cur.close()
     2.5  	return activity
     2.6  
     2.7 -def find_active_task(db_file):
     2.8 +def find_active_task(db_file, time=None):
     2.9  	con, cur = session(db_file)
    2.10 -	sql = "select project, activity from tasks where end is null"
    2.11 -	cur.execute(sql)	
    2.12 +	if time:
    2.13 +		values = (time, time)
    2.14 +		sql = "select project, activity from tasks where begin < ? and \
    2.15 +(end is null or end > ?)"
    2.16 +	else:
    2.17 +		values = ()
    2.18 +		sql = "select project, activity from tasks where end is null"
    2.19 +	cur.execute(sql, values)	
    2.20  	task = cur.fetchone()
    2.21  	if task:
    2.22  		task = task[0]	
    2.23 @@ -212,16 +218,17 @@
    2.24  
    2.25  def is_paused(db_file, time):
    2.26  	con, cur = session(db_file)
    2.27 -	sql = "select rowid from breaks where end is null"
    2.28 -	cur.execute(sql)
    2.29 +	values = (time,)
    2.30 +	sql = "select rowid from breaks where begin < ? and end is null"
    2.31 +	cur.execute(sql, values)
    2.32  	paused = cur.fetchone()
    2.33  	cur.close()
    2.34  	return paused
    2.35  
    2.36 -def pause(db_file, project, activity, time):
    2.37 +def pause(db_file, time):
    2.38  	print "pausing" 
    2.39  	if not is_paused(db_file, time):
    2.40 -		task = find_active_task(db_file)
    2.41 +		task = find_active_task(db_file, time)
    2.42  		con, cur = session(db_file)
    2.43  		values = (time, None, task, None)
    2.44  		sql = "insert into breaks values(?, ?, ?, ?)"
    2.45 @@ -232,10 +239,12 @@
    2.46  
    2.47  def resume(db_file, task, time, log):
    2.48  	print "resuming"
    2.49 -	if is_paused(db_file, time):		
    2.50 +	if is_paused(db_file, time):	
    2.51 +		if not task:
    2.52 +			task = find_active_task(db_file, time)	
    2.53  		con, cur = session(db_file)
    2.54  		values = (time, log, task)
    2.55 -		sql = "update breaks set end=?, log=? where task=?"
    2.56 +		sql = "update breaks set end=?, log=? where task=? and end is null"
    2.57  		cur.execute(sql, values)
    2.58  		con.commit()
    2.59  		cur.close()