UI enhancements

This commit is contained in:
Romain Bignon 2011-04-07 15:57:18 +02:00
commit c4c0377b23

View file

@ -55,6 +55,12 @@ class Member(object):
self.hardware = u'' self.hardware = u''
self.is_me = False self.is_me = False
def shortname(self):
name = self.name
if len(name) > 20:
name = '%s..' % name[:18]
return name
class Event(object): class Event(object):
def __init__(self, name, backend): def __init__(self, name, backend):
self.my_id = backend.browser.get_userid() self.my_id = backend.browser.get_userid()
@ -118,7 +124,6 @@ class Event(object):
elif line.startswith('* '): elif line.startswith('* '):
m = re.match('\* \*(\w+)\*: (.*)', line) m = re.match('\* \*(\w+)\*: (.*)', line)
if not m: if not m:
print 'Unknown line "%s"' % line
continue continue
key, value = m.group(1), m.group(2) key, value = m.group(1), m.group(2)
if member is None: if member is None:
@ -325,7 +330,7 @@ class Boobathon(ReplApplication):
""" """
self.event.load() self.event.load()
for member in self.event.members.itervalues(): for member in self.event.members.itervalues():
s = u' %s %20s %s|' % ('->' if member.is_me else ' ', member.name, self.BOLD) s = u' %s %20s %s|' % ('->' if member.is_me else ' ', member.shortname(), self.BOLD)
for task in member.tasks: for task in member.tasks:
if task.status == task.STATUS_DONE: if task.status == task.STATUS_DONE:
s += '##' s += '##'
@ -336,6 +341,34 @@ class Boobathon(ReplApplication):
s += '|%s' % self.NC s += '|%s' % self.NC
print s print s
print ''
now = datetime.now()
if self.event.begin > now:
d = self.event.begin - now
msg = 'The event will start in %d days, %02d:%02d:%02d'
elif self.event.end < now:
d = now - self.event.end
msg = 'The event is finished since %d days, %02d:%02d:%02d'
else:
tot = (self.event.end - self.event.begin).seconds
cur = (datetime.now() - self.event.begin).seconds
pct = cur*20/tot
progress = ''
for i in xrange(20):
if i < pct:
progress += '='
elif i == pct:
progress += '>'
else:
progress += ' '
print 'Event started: %s |%s| %s' % (self.event.begin.strftime('%H:%M'),
progress,
self.event.end.strftime('%H:%M'))
d = self.event.end - now
msg = 'The event will be finished in %d days, %02d:%02d:%02d'
print msg % (d.days, d.seconds/3600%24, d.seconds%3600/60, d.seconds%60)
def do_tasks(self, line): def do_tasks(self, line):
""" """
tasks tasks
@ -343,38 +376,46 @@ class Boobathon(ReplApplication):
Display all tasks of members. Display all tasks of members.
""" """
self.event.load() self.event.load()
tasks = []
members = []
for member in self.event.members.itervalues():
members.append(member.name)
for i, task in enumerate(member.tasks):
while len(tasks) <= i*2+1:
tasks.append([])
if task.status == task.STATUS_DONE:
st1 = st2 = '%s#%s' % (self.BOLD, self.NC)
elif task.status == task.STATUS_PROGRESS:
st1 = '|'
st2 = '·'
else:
st1 = st2 = ' '
tasks[i*2].append('%s %s' % (st1, task.backend))
tasks[i*2+1].append('%s `-%s' % (st2, task.capability[3:]))
sys.stdout.write(' ') stop = False
for name in members: i = -2
sys.stdout.write(' %s%-20s%s' % (self.BOLD, name, self.NC)) while not stop:
sys.stdout.write('\n ') if i >= 0 and not i%2:
for name in members:
sys.stdout.write(' %s%-20s%s' % (self.BOLD, '-' * len(name), self.NC))
sys.stdout.write('\n')
for i, line in enumerate(tasks):
if not i%2:
sys.stdout.write(' #%-2d' % (i/2)) sys.stdout.write(' #%-2d' % (i/2))
else: else:
sys.stdout.write(' ') sys.stdout.write(' ')
for task in line: if i >= 0 and i%2:
sys.stdout.write(' %-20s' % task) # second line of task, see if we'll stop
stop = True
for mem in self.event.members.itervalues():
if len(mem.tasks) > (i/2+1):
# there are more tasks, don't stop now
stop = False
if i == -2:
sys.stdout.write(' %s%-20s%s' % (self.BOLD, mem.shortname(), self.NC))
elif i == -1:
sys.stdout.write(' %s%-20s%s' % (self.BOLD, '-' * len(mem.shortname()), self.NC))
elif len(mem.tasks) <= (i/2):
sys.stdout.write(' ' * (20+2))
else:
task = mem.tasks[i/2]
if task.status == task.STATUS_DONE:
status = '%s#%s' % (self.BOLD, self.NC)
elif task.status == task.STATUS_PROGRESS:
if not i%2:
status = '|' #1st line
else:
status = '·' #2nd line
else:
status = ' '
if not i%2: #1st line
line = '%s %s' % (status, task.backend)
else: #2nd line
line = '%s `-%s' % (status, task.capability[3:])
sys.stdout.write(' %-20s ' % line)
sys.stdout.write('\n') sys.stdout.write('\n')
i += 1
def do_edit(self, line): def do_edit(self, line):
""" """