103 lines
2.6 KiB
Python
103 lines
2.6 KiB
Python
from common import format_timestamp
|
|
import json
|
|
|
|
def generate_godword(value):
|
|
return f"{' '.join(value[:10])}\n{' '.join(value[10:])}"
|
|
|
|
def generate_habits(value):
|
|
return '\n'.join(f'[{"x" if v else "-"}] {k}' for k,v in value.items())
|
|
|
|
def generate_notifications(value):
|
|
return '\n'.join(f'[[{n["source"]}]] {n["message"]}' for n in value)
|
|
|
|
def generate_tasks(value):
|
|
return '\n'.join(f'[{"x" if v else "-"}] {k}' for k,v in value.items())
|
|
|
|
header_modules = {
|
|
'godword': generate_godword,
|
|
'habits': generate_habits,
|
|
'notifications': generate_notifications,
|
|
'tasks': generate_tasks,
|
|
}
|
|
|
|
def generate_diet(block):
|
|
_, amount, food = block.values()
|
|
return f'@diet {amount}g {food}'
|
|
|
|
def generate_exercise(block):
|
|
if block['kind'] == 'walk':
|
|
return f'@exercise {block["minutes"]}min {block["distance"]}km {block["steps"]}steps'
|
|
|
|
def generate_default(block):
|
|
return f'@{block["type"]} {block["value"]}'
|
|
|
|
def generate_timer(block):
|
|
parts = [f'@{block["type"]}']
|
|
|
|
if ts := block.get('timestamp'):
|
|
parts.append(format_timestamp(ts))
|
|
|
|
return ' '.join(parts)
|
|
|
|
def generate_info(block):
|
|
return f'@info {block["value"]}'
|
|
|
|
def generate_notes(block):
|
|
parts = ['@notes']
|
|
|
|
if source := block.get('source'):
|
|
parts.append(source)
|
|
if title := block.get('title'):
|
|
parts.append(title)
|
|
|
|
return '\n'.join(parts)
|
|
|
|
def generate_notify(block):
|
|
return f'@notify {block["day"]} {block["message"]}'
|
|
|
|
entry_modules = {
|
|
'diet': generate_diet,
|
|
'exercise': generate_exercise,
|
|
'hide': lambda _: '@hide',
|
|
'post': generate_timer,
|
|
'info': generate_default,
|
|
'notes': generate_notes,
|
|
'behavior': generate_default,
|
|
'task': generate_default,
|
|
'start': generate_timer,
|
|
'stop': generate_timer,
|
|
'done': generate_timer,
|
|
'notify': generate_notify,
|
|
}
|
|
|
|
journal = json.load(open('journal.json'))
|
|
|
|
for curr_day in journal:
|
|
header, entries = journal[curr_day].values()
|
|
|
|
result = f'# {curr_day}\n'
|
|
|
|
for name, value in header.items():
|
|
result += f'\n{name.title()}:\n'
|
|
result += header_modules[name](value)
|
|
result += '\n'
|
|
|
|
def format_block(block):
|
|
if isinstance(block, str):
|
|
return block
|
|
else:
|
|
return entry_modules[block['type']](block)
|
|
|
|
for entry in entries:
|
|
result += f'\n{format_timestamp(entry["timestamp"])} '
|
|
if len(entry['blocks']) == 1:
|
|
result += f'{format_block(entry["blocks"][0])}\n'
|
|
else:
|
|
result += '\n'
|
|
for block in entry['blocks']:
|
|
result += f'\n{format_block(block)}\n'
|
|
|
|
print(result)
|
|
|
|
|