diff --git a/assets/session.log b/assets/session.log index f59800d..4dba26e 100644 --- a/assets/session.log +++ b/assets/session.log @@ -54,3 +54,14 @@ Session end: 2025-01-08 00:11:34 Session start: 2025-01-08 00:14:22 XP and level updated: 5 XP, Level 2 Session end: 2025-01-08 00:14:36 +Session start: 2025-01-08 19:45:55 +Session start: 2025-01-08 19:45:56 +Session start: 2025-01-08 19:45:56 +Session start: 2025-01-08 19:45:56 +Session start: 2025-01-08 19:45:57 +Session start: 2025-01-08 19:51:08 +XP and level updated: 15 XP, Level 2 +Session end: 2025-01-08 20:11:28 +Session start: 2025-01-08 20:55:07 +XP and level updated: 25 XP, Level 2 +Session end: 2025-01-08 20:55:36 diff --git a/assets/xp.txt b/assets/xp.txt index 7813681..410b14d 100644 --- a/assets/xp.txt +++ b/assets/xp.txt @@ -1 +1 @@ -5 \ No newline at end of file +25 \ No newline at end of file diff --git a/main.py b/main.py index a78234a..c544eac 100644 --- a/main.py +++ b/main.py @@ -145,8 +145,12 @@ def show_timer(minutes, questions_file, session_log, total_time, xp, level): def open_firefox(url): print(f"Attempting to open Firefox with URL: {url}") if 'DISPLAY' in os.environ: - subprocess.Popen(['firefox', '--new-window', url], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) - print("Firefox opened successfully.") + try: + subprocess.Popen(['firefox', '--new-window', url], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) + print("Firefox opened successfully.") + except subprocess.CalledProcessError: + print("Firefox is already running. Reusing the existing instance.") + subprocess.Popen(['firefox', '--new-tab', url], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT) else: print("No graphical environment detected. Skipping browser opening.") diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..64a2bd9 --- /dev/null +++ b/src/main.py @@ -0,0 +1,105 @@ +import os +import time +import psutil + +# Utility functions +def initialize_assets(assets_dir, xp_file, level_file, session_log, total_time_file, questions_file): + if not os.path.exists(assets_dir): + os.makedirs(assets_dir) + if not os.path.exists(xp_file): + with open(xp_file, 'w') as f: + f.write('0') + if not os.path.exists(level_file): + with open(level_file, 'w') as f: + f.write('1') + if not os.path.exists(session_log): + open(session_log, 'w').close() + if not os.path.exists(total_time_file): + with open(total_time_file, 'w') as f: + f.write('0') + if not os.path.exists(questions_file): + raise FileNotFoundError(f"Questions file not found: {questions_file}") + +def log_session(session_log, status): + with open(session_log, 'a') as f: + f.write(f"Session {status}: {time.strftime('%Y-%m-%d %H:%M:%S')}\n") + +def display_summary(total_time_file, xp_file, level_file): + with open(total_time_file, 'r') as f: + total_time = int(f.read().strip()) + with open(xp_file, 'r') as f: + xp = int(f.read().strip()) + with open(level_file, 'r') as f: + level = int(f.read().strip()) + hours, minutes = divmod(total_time, 60) + print(f"Welcome to the RHEL Learning Script!") + print(f"Total session time: {hours} hours and {minutes} minutes.") + print(f"Current Level: {level}") + print(f"Current XP: {xp}") + print() + +def kill_steam(): + for proc in psutil.process_iter(): + if proc.name() == "steam.exe": + proc.kill() + +def show_timer(minutes, questions_file, session_log): + print(f"The session will last {minutes} minutes.") + # Simulate timer and questions + time.sleep(minutes * 60) + with open(session_log, 'a') as f: + f.write(f"Session duration: {minutes} minutes\n") + +def add_xp(xp_file, level_file, session_log): + with open(xp_file, 'r') as f: + xp = int(f.read().strip()) + with open(level_file, 'r') as f: + level = int(f.read().strip()) + new_xp = xp + 10 + if new_xp >= level * 100: + level += 1 + new_xp -= (level - 1) * 100 + print(f"LEVEL UP! You are now Level {level}!") + with open(xp_file, 'w') as f: + f.write(str(new_xp)) + with open(level_file, 'w') as f: + f.write(str(level)) + with open(session_log, 'a') as f: + f.write(f"XP and level updated: {new_xp} XP, Level {level}\n") + +# Constants +SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) +ASSETS_DIR = os.path.join(SCRIPT_DIR, 'assets') +XP_FILE = os.path.join(ASSETS_DIR, 'xp.txt') +LEVEL_FILE = os.path.join(ASSETS_DIR, 'level.txt') +SESSION_LOG = os.path.join(ASSETS_DIR, 'session.log') +QUESTIONS_FILE = os.path.join(ASSETS_DIR, 'questions.txt') +TOTAL_TIME_FILE = os.path.join(ASSETS_DIR, 'total_time.txt') +URL = "https://rol.redhat.com" +TIMER_MINUTES = 20 + +def main(): + # Initialize assets + initialize_assets(ASSETS_DIR, XP_FILE, LEVEL_FILE, SESSION_LOG, TOTAL_TIME_FILE, QUESTIONS_FILE) + + # Log session start + log_session(SESSION_LOG, "start") + + # Display session summary + display_summary(TOTAL_TIME_FILE, XP_FILE, LEVEL_FILE) + + # Start killing Steam processes in the background + kill_steam() + + # Start session + print("Starting RHEL Learning Session...") + show_timer(TIMER_MINUTES, QUESTIONS_FILE, SESSION_LOG) + + # Add XP + add_xp(XP_FILE, LEVEL_FILE, SESSION_LOG) + + # Log session end + log_session(SESSION_LOG, "end") + +if __name__ == "__main__": + main()