import os from classes.User import User from classes.Transaction import Tx from helpers import BlockHelper as blockHelper from helpers import TaskHelper as taskHelper from helpers import UtilityHelper as utilityHelper class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKCYAN = '\033[96m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' class MenuHelper: def __init__(self, db): self.db = db self.user = None self.start_menu = {} self.user_main_menu = {} self.user_blockchain_menu = {} self.user_settings_menu = {} self.start_menu[0] = "Exit" self.start_menu[1] = "Explore the Blockchain" self.start_menu[2] = "Login" self.start_menu[3] = "Sign up" self.user_main_menu[0] = "Exit" self.user_main_menu[1] = "User Settings" self.user_main_menu[2] = "Blockchain" self.user_main_menu[3] = "Log out" self.user_blockchain_menu[0] = "Back" self.user_blockchain_menu[1] = "Explore the Blockchain" self.user_blockchain_menu[2] = "Transfer coins" self.user_blockchain_menu[3] = "Cancel transaction" self.user_blockchain_menu[4] = "Check balance" self.user_blockchain_menu[5] = "Check the pool" self.user_blockchain_menu[6] = "Mine a block" self.user_settings_menu[0] = "Back" self.user_settings_menu[1] = "View account info" self.user_settings_menu[2] = "Change username" self.user_settings_menu[3] = "Change password" self.user_settings_menu[4] = "DELETE ACCOUNT" self.opened_logs = False def printMenu(self, items): for key, value in items.items(): print(f'{key} -- {value}') def runStartMenu(self): while(True): choice = self.getMenuInput(self.start_menu) if choice == None: continue # check if choice is in menu match self.start_menu[choice]: case "Exit": print('Exiting system') exit() case "Explore the Blockchain": print("TODO") case "Login": self.user = User(self.db) logged_in = self.user.login() self.clearScreen() if logged_in: print(f'Welcome {self.user.username}') return print("Login failed") self.user = None case "Sign up": self.user = User(self.db) registered = self.user.register() if registered: print("Registration successful") return print("Registration failed") self.user = None case _: print("Wrong input, try again") def runUserMainMenu(self): while(self.user): choice = self.getMenuInput(self.user_main_menu) if choice == None: continue # check if choice is in menu match self.user_main_menu[choice]: case "Exit": print('Exiting system') exit() case "Log out": self.user.logout() self.user = None case "User Settings": self.runUserSettingsMenu() case "Blockchain": self.runUserBlockchainMenu() case _: print("Wrong input, try again") def runUserBlockchainMenu(self): while(self.user): choice = self.getMenuInput(self.user_blockchain_menu) if choice == None: continue # check if choice is in menu match self.user_blockchain_menu[choice]: case "Back": return case "Explore the Blockchain": print("TODO") block = blockHelper.loadBlock() i = 0 for data in block.data: print(f"---------------------------------- Block {str(i)} ----------------------------------") print(f"Block hash: {data.Inputs[0][1]}") print(f"----------------------------------------------------------------------------------") i += 1 case "Transfer coins": new_tx = taskHelper.transaction(self) if new_tx.is_valid(): # TODO: add to pool print("Transaction is valid") utilityHelper.saveFile("../data/transaction_pool.dat", new_tx) continue print("Transaction is invalid") case "Cancel transaction": print("TODO") case "Check balance": print("TODO") case "Check the pool": print("TODO") case "Mine a block": print("TODO") case _: print("Wrong input, try again") def runUserSettingsMenu(self): while(self.user): choice = self.getMenuInput(self.user_settings_menu) if choice == None: continue # check if choice is in menu match self.user_settings_menu[choice]: case "Back": return case "View account info": self.user.printAccountInfo() case "Change username": self.user.updateAccount() case "Change password": self.user.updatePassword() case "DELETE ACCOUNT": if self.user.deleteAccount(): self.user = None case _: print("Wrong input, try again") def getMenuInput(self, menu): self.printMenu(menu) # make input an interger try: choice = int(input()) except: self.clearScreen() print("Wrong input, try again") return None self.clearScreen() return choice def clearScreen(self): os.system('cls' if os.name == 'nt' else 'clear')