aboutsummaryrefslogblamecommitdiffstats
path: root/mongoclock.py
blob: 55c087436ea804d072a31ce86b64d3c6cb016a14 (plain) (tree)
1
2
3
4
5
6
7
8
9
                     







                                                                      



                                  
 

                                                                                                        
 

                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              
 
                              









                              
                              


                    











































                                             

                             





















                                                                                   


                          




















                                                                                            
 
#!/usr/bin/env python
# 
# Copyright © 2013  Mattias Andrée  (maandree@member.fsf.org)
# 
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.  This file is offered as-is,
# without any warranty.  [GNU All Permissive License]

import os
import time
import sys
from subprocess import Popen, PIPE

def awesome(list):
    return [elem.replace('X', ' ').replace('[', '\033[07m ').replace(']', '\033[00m ') for elem in list]


MONGO_0 = ['    [XXXX]      ',
           '  [XX]  [XX]    ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]  []  [XX]  ',
           '[XX]  []  [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '  [XX]  [XX]    ',
           '    [XXXX]      ']

MONGO_1 = ['      [XX]      ',
           '    [XXXX]      ',
           '  [XXXXXX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '      [XX]      ',
           '  [XXXXXXXXXX]  ']

MONGO_2 = ['  [XXXXXXXX]    ',
           '[XX]      [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '        [XX]    ',
           '      [XX]      ',
           '    [XX]        ',
           '  [XX]          ',
           '[XX]            ',
           '[XX]      [XX]  ',
           '[XXXXXXXXXXXX]  ']

MONGO_3 = ['  [XXXXXXXX]    ',
           '[XX]      [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '    [XXXXXX]    ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '[XX]      [XX]  ',
           '  [XXXXXXXX]    ']

MONGO_4 = ['        [XX]    ',
           '      [XXXX]    ',
           '    [XXXXXX]    ',
           '  [XX]  [XX]    ',
           '[XX]    [XX]    ',
           '[XXXXXXXXXXXX]  ',
           '        [XX]    ',
           '        [XX]    ',
           '        [XX]    ',
           '        [XX]    ',
           '        [XX]    ',
           '      [XXXXXX]  ']

MONGO_5 = ['[XXXXXXXXXXXX]  ',
           '[XX]            ',
           '[XX]            ',
           '[XX]            ',
           '[XX]            ',
           '[XXXXXXXXXX]    ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '[XX]      [XX]  ',
           '  [XXXXXXXX]    ']

MONGO_6 = ['      [XXXX]    ',
           '    [XX]        ',
           '  [XX]          ',
           '[XX]            ',
           '[XX]            ',
           '[XXXXXXXXXX]    ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '  [XXXXXXXX]    ']

MONGO_7 = ['[XXXXXXXXXXXX]  ',
           '[XX]      [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '        [XX]    ',
           '      [XX]      ',
           '    [XX]        ',
           '    [XX]        ',
           '    [XX]        ',
           '    [XX]        ',
           '    [XX]        ',
           '    [XX]        ']

MONGO_8 = ['  [XXXXXXXX]    ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '  [XXXXXXXX]    ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '  [XXXXXXXX]    ']

MONGO_9 = ['  [XXXXXXXX]    ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '[XX]      [XX]  ',
           '  [XXXXXXXXXX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '          [XX]  ',
           '        [XX]    ',
           '      [XX]      ',
           '  [XXXX]        ']

MONGO__ = ['                ',
           '                ',
           '      [XX]      ',
           '      [XX]      ',
           '                ',
           '                ',
           '                ',
           '                ',
           '      [XX]      ',
           '      [XX]      ',
           '                ',
           '                ']


DX = len(MONGO_0[0])
DC = len(MONGO__[0])


MONGO_0 = awesome(MONGO_0)
MONGO_1 = awesome(MONGO_1)
MONGO_2 = awesome(MONGO_2)
MONGO_3 = awesome(MONGO_3)
MONGO_4 = awesome(MONGO_4)
MONGO_5 = awesome(MONGO_5)
MONGO_6 = awesome(MONGO_6)
MONGO_7 = awesome(MONGO_7)
MONGO_8 = awesome(MONGO_8)
MONGO_9 = awesome(MONGO_9)
MONGO__ = awesome(MONGO__)


def print_digit(digit, x, y):
    d = MONGO__
    if   digit == 0:  d = MONGO_0
    elif digit == 1:  d = MONGO_1
    elif digit == 2:  d = MONGO_2
    elif digit == 3:  d = MONGO_3
    elif digit == 4:  d = MONGO_4
    elif digit == 5:  d = MONGO_5
    elif digit == 6:  d = MONGO_6
    elif digit == 7:  d = MONGO_7
    elif digit == 8:  d = MONGO_8
    elif digit == 9:  d = MONGO_9
    x += 1
    for i in range(len(d)):
        y += 1
        print("\033[%i;%iH%s" % (y, x, d[i]))

def print_number(number, x, y):
    print_digit(number // 10, x, y)
    print_digit(number % 10, x + DX, y)

def print_time(h, m, s, x, y):
    print_number(h, x, y)
    x += DX << 1
    print_digit(-1, x, y)
    x += DC
    print_number(m, x, y)
    if s is not None:
        x += DX << 1
        print_digit(-1, x, y)
        x += DC
        print_number(s, x, y)

def get_print_width(has_seconds):
    return DC + 4 * DX + ((DC + 2 * DX) if has_seconds else 0)

def get_print_height():
    return len(MONGO_0)

def get_print_offset(has_seconds):
    (h, w) = get_dimensions()
    return ((w - get_print_width(has_seconds)) // 2, (h - get_print_height()) // 2)

def fits(has_seconds):
    (h, w) = get_dimensions()
    return (get_print_width(has_seconds) <= w) and (get_print_height() <= h)

def get_dimensions():
    rc = Popen(['stty', 'size'], stdout = PIPE).communicate()[0]
    rc = rc.decode('utf-8')
    rc = rc.replace('\n', '').split(' ')
    return [int(x) for x in rc]


if __name__ == '__main__':
    val = None
    if fits(True):
        val = True
    elif fits(False):
        val = False
    else:
        print('Screen is too small')
        exit(1)
    (x, y) = get_print_offset(val)
    last = (-1, -1, -1)
    while True:
        (h, m, s) = [int(x) for x in time.strftime('%H %M %S', time.localtime()).split(' ')]
        if not val:
            s = None
        if h != last[0] or m != last[1] or s != last[2]:
            print('\033[H\033[2J', end='')
            print_time(h, m, s, x, y)
            print('\033[1;1H', end='')
            sys.stdout.flush()
            last = (h, m, s)
        time.sleep(0.1)