Make even more amazing
This commit is contained in:
parent
69260388ef
commit
34d8e2516c
1 changed files with 93 additions and 27 deletions
108
src/main.py
108
src/main.py
|
@ -1,5 +1,5 @@
|
|||
import flet as ft
|
||||
import tempfile, subprocess, os, re, uuid
|
||||
import tempfile, subprocess, os, re, uuid, threading
|
||||
import PyInstaller.__main__
|
||||
|
||||
|
||||
|
@ -12,18 +12,31 @@ def main(page: ft.Page):
|
|||
base_temp_dir = os.path.join(os.getcwd(), "temp")
|
||||
temp_dir = os.path.join(base_temp_dir, f"clone-{ruuid}")
|
||||
|
||||
versionprompt = ft.TextField(label="Version", expand=True)
|
||||
repoprompt = ft.TextField(label="Fuji Repository", expand=True, value="https://git.marceeli.ovh/Fuji/Fuji")
|
||||
log_output = ft.TextField(
|
||||
value="",
|
||||
multiline=True,
|
||||
read_only=True,
|
||||
expand=True,
|
||||
min_lines=10,
|
||||
max_lines=20,
|
||||
border=ft.InputBorder.NONE,
|
||||
text_style=ft.TextStyle(size=12),
|
||||
)
|
||||
|
||||
progress_bar = ft.ProgressBar(width=500, value=None, visible=False)
|
||||
|
||||
def clone_and_set_version(version: str, repo_url: str):
|
||||
if not (version and repo_url):
|
||||
return
|
||||
|
||||
# Create a temp directory inside the current project directory
|
||||
os.makedirs(base_temp_dir, exist_ok=True)
|
||||
|
||||
os.makedirs(temp_dir)
|
||||
|
||||
subprocess.run(["git", "clone", repo_url, temp_dir], check=True)
|
||||
version_file = os.path.join(temp_dir, "src", "version.py")
|
||||
|
||||
version_file = os.path.join(temp_dir, "src", "version.py")
|
||||
with open(version_file, "r", encoding="utf-8") as f:
|
||||
contents = f.read()
|
||||
|
||||
|
@ -37,39 +50,92 @@ def main(page: ft.Page):
|
|||
with open(version_file, "w", encoding="utf-8") as f:
|
||||
f.write(new_contents)
|
||||
|
||||
print(f"Updated {version_file} to version = \"{version}\"")
|
||||
print(f"Cloned project located at: {temp_dir}")
|
||||
log_output.value += f"✔ Updated version.py to version = \"{version}\"\n"
|
||||
log_output.value += f"✔ Cloned repo to: {temp_dir}\n"
|
||||
page.update()
|
||||
|
||||
versionprompt = ft.TextField(label="Version", expand=True)
|
||||
repoprompt = ft.TextField(label="Fuji Repository", expand=True, value="https://git.marceeli.ovh/Fuji/Fuji")
|
||||
|
||||
def build(e):
|
||||
clone_and_set_version(versionprompt.value.strip(), repoprompt.value.strip())
|
||||
requirements_path = os.path.join(temp_dir, "requirements.txt")
|
||||
if os.path.isfile(requirements_path):
|
||||
try:
|
||||
log_output.value += "📦 Installing requirements...\n"
|
||||
page.update()
|
||||
subprocess.run(
|
||||
["pip", "install", "-r", requirements_path],
|
||||
check=True
|
||||
)
|
||||
log_output.value += "✔ Requirements installed successfully.\n"
|
||||
except subprocess.CalledProcessError as e:
|
||||
log_output.value += f"❌ Failed to install requirements: {e}\n"
|
||||
else:
|
||||
log_output.value += "⚠ No requirements.txt file found.\n"
|
||||
page.update()
|
||||
|
||||
def run_pyinstaller():
|
||||
main_file = os.path.join(temp_dir, "src", "main.py")
|
||||
locales_dir = os.path.join(temp_dir, "src", "locales")
|
||||
assets_dir = os.path.join(temp_dir, "src", "assets")
|
||||
|
||||
PyInstaller.__main__.run([
|
||||
command = [
|
||||
"pyinstaller",
|
||||
main_file,
|
||||
'--clean',
|
||||
'--noconfirm',
|
||||
f"--add-data={locales_dir}:locales",
|
||||
f"--add-data={assets_dir}:assets"
|
||||
])
|
||||
"--clean",
|
||||
"--noconfirm",
|
||||
f"--add-data={locales_dir}{os.pathsep}locales",
|
||||
f"--add-data={assets_dir}{os.pathsep}assets"
|
||||
]
|
||||
|
||||
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
|
||||
|
||||
progress_bar.visible = True
|
||||
page.update()
|
||||
|
||||
for line in iter(process.stdout.readline, ''):
|
||||
log_output.value += line
|
||||
page.update()
|
||||
|
||||
button = ft.ElevatedButton(text="Build", on_click=build, height=40, expand=True, bgcolor=ft.Colors.with_opacity(0.4, ft.Colors.BLUE))
|
||||
process.stdout.close()
|
||||
process.wait()
|
||||
|
||||
log_output.value += "🏁 PyInstaller build finished.\n"
|
||||
progress_bar.visible = False
|
||||
page.update()
|
||||
|
||||
def build(e):
|
||||
def task():
|
||||
log_output.value = "" # Clear previous logs
|
||||
page.update()
|
||||
try:
|
||||
clone_and_set_version(versionprompt.value.strip(), repoprompt.value.strip())
|
||||
run_pyinstaller()
|
||||
except Exception as ex:
|
||||
log_output.value += f"❌ Build failed: {ex}\n"
|
||||
progress_bar.visible = False
|
||||
page.update()
|
||||
|
||||
threading.Thread(target=task).start()
|
||||
|
||||
button = ft.ElevatedButton(
|
||||
text="Build",
|
||||
on_click=build,
|
||||
height=40,
|
||||
expand=True,
|
||||
bgcolor=ft.Colors.with_opacity(0.4, ft.Colors.BLUE)
|
||||
)
|
||||
|
||||
card = ft.Card(
|
||||
content=ft.Container(
|
||||
content=ft.Column(
|
||||
controls=[versionprompt, repoprompt, button],
|
||||
spacing=10, expand=True,
|
||||
controls=[
|
||||
versionprompt,
|
||||
repoprompt,
|
||||
button,
|
||||
progress_bar,
|
||||
log_output
|
||||
],
|
||||
spacing=10,
|
||||
expand=True,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.STRETCH
|
||||
),
|
||||
),
|
||||
alignment=ft.alignment.center,
|
||||
border_radius=20,
|
||||
padding=25,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue