From 92aa8f9495f7633813befcee0e9d33ad9bb87140 Mon Sep 17 00:00:00 2001 From: cheng zhen Date: Thu, 9 Jan 2025 20:28:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=20sys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.py | 69 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 26 deletions(-) diff --git a/build.py b/build.py index f4473d5d..aa3b2737 100644 --- a/build.py +++ b/build.py @@ -2,7 +2,6 @@ import os import platform import subprocess -import sys import time import threading @@ -18,6 +17,7 @@ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ """ + class LoadingAnimation: def __init__(self): self.is_running = False @@ -42,42 +42,50 @@ def _animate(self, message): idx += 1 time.sleep(0.1) + def print_logo(): print("\033[96m" + CURSOR_LOGO + "\033[0m") print("\033[93m" + "Building Cursor Keep Alive...".center(56) + "\033[0m\n") -def progress_bar(progress, total, prefix='', length=50): + +def progress_bar(progress, total, prefix="", length=50): filled = int(length * progress // total) - bar = '█' * filled + '░' * (length - filled) + bar = "█" * filled + "░" * (length - filled) percent = f"{100 * progress / total:.1f}" - print(f'\r{prefix} |{bar}| {percent}% Complete', end='', flush=True) + print(f"\r{prefix} |{bar}| {percent}% Complete", end="", flush=True) if progress == total: print() + def simulate_progress(message, duration=1.0, steps=20): print(f"\033[94m{message}\033[0m") for i in range(steps + 1): time.sleep(duration / steps) - progress_bar(i, steps, prefix='Progress:', length=40) + progress_bar(i, steps, prefix="Progress:", length=40) + def filter_output(output): """ImportantMessage""" if not output: return "" important_lines = [] - for line in output.split('\n'): + for line in output.split("\n"): # Only keep lines containing specific keywords - if any(keyword in line.lower() for keyword in ['error:', 'failed:', 'completed', 'directory:']): + if any( + keyword in line.lower() + for keyword in ["error:", "failed:", "completed", "directory:"] + ): important_lines.append(line) - return '\n'.join(important_lines) + return "\n".join(important_lines) + def build(): # Clear screen - os.system('cls' if platform.system().lower() == "windows" else 'clear') - + os.system("cls" if platform.system().lower() == "windows" else "clear") + # Print logo print_logo() - + system = platform.system().lower() spec_file = os.path.join("CursorKeepAlive.spec") @@ -99,7 +107,7 @@ def build(): output_dir, "--workpath", f"build/{system}", - "--noconfirm" + "--noconfirm", ] loading = LoadingAnimation() @@ -107,21 +115,23 @@ def build(): simulate_progress("Running PyInstaller...", 2.0) loading.start("Building in progress") result = subprocess.run( - pyinstaller_command, - check=True, - capture_output=True, - text=True + pyinstaller_command, check=True, capture_output=True, text=True ) loading.stop() - + if result.stderr: - filtered_errors = [line for line in result.stderr.split('\n') - if any(keyword in line.lower() - for keyword in ['error:', 'failed:', 'completed', 'directory:'])] + filtered_errors = [ + line + for line in result.stderr.split("\n") + if any( + keyword in line.lower() + for keyword in ["error:", "failed:", "completed", "directory:"] + ) + ] if filtered_errors: print("\033[93mBuild Warnings/Errors:\033[0m") - print('\n'.join(filtered_errors)) - + print("\n".join(filtered_errors)) + except subprocess.CalledProcessError as e: loading.stop() print(f"\033[91mBuild failed with error code {e.returncode}\033[0m") @@ -131,7 +141,9 @@ def build(): return except FileNotFoundError: loading.stop() - print("\033[91mError: Please ensure PyInstaller is installed (pip install pyinstaller)\033[0m") + print( + "\033[91mError: Please ensure PyInstaller is installed (pip install pyinstaller)\033[0m" + ) return except KeyboardInterrupt: loading.stop() @@ -144,11 +156,16 @@ def build(): if os.path.exists("config.ini.example"): simulate_progress("Copying configuration file...", 0.5) if system == "windows": - subprocess.run(["copy", "config.ini.example", f"{output_dir}\\config.ini"], shell=True) + subprocess.run( + ["copy", "config.ini.example", f"{output_dir}\\config.ini"], shell=True + ) else: subprocess.run(["cp", "config.ini.example", f"{output_dir}/config.ini"]) - print(f"\n\033[92mBuild completed successfully! Output directory: {output_dir}\033[0m") + print( + f"\n\033[92mBuild completed successfully! Output directory: {output_dir}\033[0m" + ) + if __name__ == "__main__": - build() \ No newline at end of file + build()