scripts/todo/todo_format.py
2023-06-05 23:04:30 +08:00

137 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import time
import re
def utf8_length(text):
if text is None:
return 0
len_text = len(text)
len_text_utf8 = len(text.encode('utf-8'))
# utf-8一个汉字占3个字符减去原计数就是多出来的2/3再除以2就是增量。再加回去即可
size = int((len_text_utf8 - len_text) / 2 + len_text)
return size
def tidy_done():
with open('/opt/logs/TODO/done.txt', 'r') as donetxt, open('/tmp/tmp_done.txt', 'w') as tmpdone:
lines = donetxt.readlines()
for line in lines:
tmpdone.write(line.strip() + '\n')
os.system('mv /tmp/tmp_done.txt /opt/logs/TODO/done.txt')
def format_col_1(item):
global number_of_days
global item_no
global auto_weekend
end_time_date = item.strip()[-10:]
try:
end_time_stamp = time.strptime(end_time_date, "%Y-%m-%d")
except Exception as Err:
print('Error Encounted: ', end='')
print(str(Err))
print(f"Please modify /opt/logs/TODO/todo.txt @ line {item_no} manually, and then run it again.\n")
os._exit(1)
end_time_stamp = time.mktime(end_time_stamp)
now_time_stamp = int(time.time())
number_of_days = round((end_time_stamp - now_time_stamp) / 3600 / 24 + 0.75, 2)
# print('number_of_days-1:', number_of_days)
if auto_weekend and number_of_days < 0:
end_time_stamp += 604800
end_time_date = time.strftime('%Y-%m-%d', time.localtime(end_time_stamp))
item = item.strip()[:-10] + end_time_date
number_of_days += 7
item_format = re.sub(' +', ' ', item.strip())
done.write(item_format)
for i in range(16 - len(item_format)):
done.write(' ')
done.write('|')
def format_col_2(item):
done.write(' ')
done.write(item.strip())
for i in range(12 - 1 - len(item.strip())):
done.write(' ')
done.write('|')
def format_col_3(item):
global number_of_days
# print('number_of_days-3:', number_of_days)
item = 'T:' + str(number_of_days)
done.write(' ')
done.write(item.strip())
for i in range(10 - 1 - len(item.strip())):
done.write(' ')
done.write('|')
def format_col_4(item):
done.write(' ')
try:
with open('/tmp/col.log', 'r') as obj_col:
width = int(obj_col.readline().strip())
except:
width = 125
item_format = re.sub(' +', ' ', item.strip())
len_of_task = utf8_length(item_format)
# get the width of current terminal
left_white = width - 11 - 12 - 10 - 5 - len_of_task - 8
done.write(item_format + ' ' * left_white + '\n')
if __name__ == "__main__":
number_of_days = 0
item_no = 1
# 0 signifies that task without priority, and 1 vice versa
with open('/opt/logs/TODO/todo.txt', 'r') as todo, open('/tmp/tmp.txt', 'w') as done:
for line in todo.readlines():
col = 1
auto_weekend = 0
if line.strip() == '':
continue
elif 'Happy weekend~' in line:
auto_weekend = 1
else:
pass
for item in line.strip().split('|'):
if col == 1:
format_col_1(item)
elif col == 2:
format_col_2(item)
elif col == 3:
format_col_3(item)
elif col == 4:
format_col_4(item)
else:
break
col += 1
item_no += 1
os.system('mv /tmp/tmp.txt /opt/logs/TODO/todo.txt')
tidy_done()