• 0 Posts
  • 3 Comments
Joined 11 months ago
cake
Cake day: June 5th, 2025

help-circle
  • import time
    import os
    import platform
    import sys
    from datetime import datetime
    
    
    
    _old_settings = None
    _buffer = ""
    YELLOW = "\033[93m"
    GREEN = "\033[92m"
    RESET = "\033[0m"
    
    
    
    def clear_console():
    	if platform.system() == "Windows":
    		os.system("cls")
    	else:
    		os.system("clear")
    
    def enable_keyboard_input():
    	if sys.platform.startswith("win"):
    		pass
    	else:
    		global _old_settings
    		global _termios_imported
    		if termios is None:
    			import termios
    		if _old_settings is not None:
    			fd = sys.stdin.fileno()
    			termios.tcsetattr(fd, termios.TCSADRAIN, _old_settings)
    
    def disable_keyboard_input():
    	if sys.platform.startswith("win"):
    		pass
    	else:
    		global _old_settings
    		global _termios_imported
    		if termios is None:
    			import termios
    		fd = sys.stdin.fileno()
    		_old_settings = termios.tcgetattr(fd)
    		new = termios.tcgetattr(fd)
    		new[3] = new[3] & ~termios.ECHO & ~termios.ICANON
    		termios.tcsetattr(fd, termios.TCSADRAIN, new)
    
    
    
    def input_title(title):
    	# enable_keyboard_input()
    	in_value = input(title)
    	# disable_keyboard_input()
    	return in_value
    
    def input_uint(title):
    	while True:
    		# enable_keyboard_input()
    		in_value = input(title)
    		# disable_keyboard_input()
    		if in_value.isdigit():
    			return int(in_value)
    
    
    
    def print_buffer():
    	global _buffer
    	print(_buffer, end="")
    
    def print_in_buffer(printable):
    	global _buffer
    	_buffer += printable + "\n"
    
    
    
    def main():
    	title = input_title("Title: ")
    	work_time_minutes = input_uint("Work interval time in Minutes: ")
    	break_time_minutes = input_uint("Break interval time in Minutes: ")
    	work_time_seconds = work_time_minutes * 60
    	break_time_seconds = break_time_minutes * 60
    	intervals = input_uint("Intervals Count: ")
    	duration = intervals * (work_time_minutes + break_time_minutes)
    	clear_console()
    
    	txt_report = ""
    	json_report = dict()
    	pdf_report = None
    
    	print_in_buffer(F"MPomidoro")
    	print_in_buffer(F"{title}")
    	print_in_buffer(F"{intervals} x {work_time_minutes}min {break_time_minutes}min")
    	print_in_buffer(F"")
    
    
    
    	begin = datetime.now()
    
    	for interval_i in range(0, intervals):
    		for work_i in range(0, work_time_seconds):
    			time.sleep(1)
    			clear_console()
    			print_buffer()
    			ml = (work_time_seconds - work_i) // 60
    			ml = F"0{ml}" if ml < 10 else ml
    			ms = (work_time_seconds - work_i) % 60
    			ms = F"0{ms}" if ms < 10 else ms
    			print(f"{YELLOW}WORK #{interval_i+1} {ml}:{ms}{RESET}")
    		clear_console()
    		print_in_buffer(F"{GREEN}WORK #{interval_i+1} {work_time_minutes}min{RESET}")
    		print_buffer()
    		for break_i in range(0, break_time_seconds):
    			time.sleep(1)
    			clear_console()
    			print_buffer()
    			ml = (break_time_seconds - break_i) // 60
    			ml = F"0{ml}" if ml < 10 else ml
    			ms = (break_time_seconds - break_i) % 60
    			ms = F"0{ms}" if ms < 10 else ms
    			print(f"{YELLOW}BREAK #{interval_i+1} {ml}:{ms}{RESET}")
    		clear_console()
    		print_in_buffer(F"{GREEN}BREAK #{interval_i+1} {break_time_minutes}min{RESET}")
    		print_buffer()
    	clear_console()
    	print_in_buffer(F"")
    	print_buffer()
    
    	end = datetime.now()
    
    
    
    	begin_year = begin.strftime("%Y")
    	begin_month = begin.strftime("%m")
    	begin_day = begin.strftime("%d")
    	begin_hour = begin.strftime("%H")
    	begin_minute = begin.strftime("%M")
    
    	end_year = end.strftime("%Y")
    	end_month = end.strftime("%m")
    	end_day = end.strftime("%d")
    	end_hour = end.strftime("%H")
    	end_minute = end.strftime("%M")
    
    	conclusions = input_title("Conclusions: ")
    
    
    
    	txt_report += F"MPomidoro Report\n"
    	txt_report += F"Title: {title}\n"
    	txt_report += F"Date: {begin.strftime("%Y.%m.%d")}\n"
    	txt_report += F"Begin: {begin_hour}:{begin_minute}\n"
    	txt_report += F"End: {end_hour}:{end_minute}\n"
    	txt_report += F"Duration: {duration}min\n"
    	txt_report += F"Conclusions: {conclusions}\n"
    	txt_report += F"\n"
    	for i in range(0, intervals):
    		txt_report += F"✓ WORK #{i+1} {work_time_minutes}min\n"
    		txt_report += F"✓ BREAK #{i+1} {break_time_minutes}min\n"
    
    	filepath = F"./Reports/{begin_year}/{begin_month}/{begin_year}_{begin_month}_{begin_day}_{begin_hour}{begin_minute}_{title.replace(" ", "_")}.txt"
    
    	os.makedirs(os.path.dirname(filepath), exist_ok=True)
    	with open(filepath, "w", encoding="utf-8") as file:
    		file.write(txt_report)
    
    
    
    if __name__ == "__main__":
    	main()