修复更新代码库的bug
This commit is contained in:
parent
563ede007c
commit
d3aabce4f5
@ -743,7 +743,7 @@ class bsp_gpio(QWidget):
|
|||||||
self.project_path = project_path
|
self.project_path = project_path
|
||||||
self.available_list = self._get_all_gpio_list()
|
self.available_list = self._get_all_gpio_list()
|
||||||
# 加载描述
|
# 加载描述
|
||||||
describe_path = os.path.join(os.path.dirname(__file__), "../../assets/User_code/bsp/describe.csv")
|
describe_path = os.path.join(CodeGenerator.get_assets_dir("User_code/bsp"), "describe.csv")
|
||||||
self.descriptions = load_descriptions(describe_path)
|
self.descriptions = load_descriptions(describe_path)
|
||||||
self._init_ui()
|
self._init_ui()
|
||||||
self._load_config()
|
self._load_config()
|
||||||
@ -982,7 +982,7 @@ class bsp_pwm(QWidget):
|
|||||||
self.project_path = project_path
|
self.project_path = project_path
|
||||||
self.available_list = self._get_pwm_channels()
|
self.available_list = self._get_pwm_channels()
|
||||||
# 加载描述
|
# 加载描述
|
||||||
describe_path = os.path.join(os.path.dirname(__file__), "../../assets/User_code/bsp/describe.csv")
|
describe_path = os.path.join(CodeGenerator.get_assets_dir("User_code/bsp"), "describe.csv")
|
||||||
self.descriptions = load_descriptions(describe_path)
|
self.descriptions = load_descriptions(describe_path)
|
||||||
self._init_ui()
|
self._init_ui()
|
||||||
self._load_config()
|
self._load_config()
|
||||||
@ -1236,7 +1236,7 @@ class bsp(QWidget):
|
|||||||
def generate_bsp(project_path, pages):
|
def generate_bsp(project_path, pages):
|
||||||
"""生成所有BSP代码"""
|
"""生成所有BSP代码"""
|
||||||
# 自动添加 bsp.h
|
# 自动添加 bsp.h
|
||||||
src_bsp_h = os.path.join(os.path.dirname(__file__), "../../assets/User_code/bsp/bsp.h")
|
src_bsp_h = os.path.join(CodeGenerator.get_assets_dir("User_code/bsp"), "bsp.h")
|
||||||
dst_bsp_h = os.path.join(project_path, "User/bsp/bsp.h")
|
dst_bsp_h = os.path.join(project_path, "User/bsp/bsp.h")
|
||||||
os.makedirs(os.path.dirname(dst_bsp_h), exist_ok=True)
|
os.makedirs(os.path.dirname(dst_bsp_h), exist_ok=True)
|
||||||
if os.path.exists(src_bsp_h):
|
if os.path.exists(src_bsp_h):
|
||||||
|
|||||||
@ -318,7 +318,8 @@ class component(QWidget):
|
|||||||
components_to_generate.add(dep_name)
|
components_to_generate.add(dep_name)
|
||||||
|
|
||||||
# 为没有对应页面但需要生成的依赖组件创建临时页面
|
# 为没有对应页面但需要生成的依赖组件创建临时页面
|
||||||
user_code_dir = os.path.join(os.path.dirname(__file__), "../../assets/User_code")
|
from ..tools.code_generator import CodeGenerator
|
||||||
|
user_code_dir = CodeGenerator.get_assets_dir("User_code")
|
||||||
for comp_name in components_to_generate:
|
for comp_name in components_to_generate:
|
||||||
if comp_name not in component_pages:
|
if comp_name not in component_pages:
|
||||||
# 创建临时组件页面
|
# 创建临时组件页面
|
||||||
|
|||||||
@ -262,43 +262,31 @@ class DataInterface(QWidget):
|
|||||||
self.stacked_layout.setCurrentWidget(self.home_page)
|
self.stacked_layout.setCurrentWidget(self.home_page)
|
||||||
|
|
||||||
def update_user_template(self):
|
def update_user_template(self):
|
||||||
url = "http://gitea.qutrobot.top/robofish/MRobot/archive/User_code.zip"
|
from app.tools.update_code import update_code
|
||||||
local_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../assets/User_code")
|
|
||||||
try:
|
def info_callback(parent):
|
||||||
resp = requests.get(url, timeout=30)
|
|
||||||
resp.raise_for_status()
|
|
||||||
z = zipfile.ZipFile(io.BytesIO(resp.content))
|
|
||||||
if os.path.exists(local_dir):
|
|
||||||
shutil.rmtree(local_dir)
|
|
||||||
for member in z.namelist():
|
|
||||||
rel_path = os.path.relpath(member, z.namelist()[0])
|
|
||||||
if rel_path == ".":
|
|
||||||
continue
|
|
||||||
target_path = os.path.join(local_dir, rel_path)
|
|
||||||
if member.endswith('/'):
|
|
||||||
os.makedirs(target_path, exist_ok=True)
|
|
||||||
else:
|
|
||||||
os.makedirs(os.path.dirname(target_path), exist_ok=True)
|
|
||||||
with open(target_path, "wb") as f:
|
|
||||||
f.write(z.read(member))
|
|
||||||
InfoBar.success(
|
InfoBar.success(
|
||||||
title="更新成功",
|
title="更新成功",
|
||||||
content="用户模板已更新到最新版本!",
|
content="用户模板已更新到最新版本!",
|
||||||
parent=self,
|
parent=parent,
|
||||||
duration=2000
|
duration=2000
|
||||||
)
|
)
|
||||||
except Exception as e:
|
|
||||||
|
def error_callback(parent, msg):
|
||||||
InfoBar.error(
|
InfoBar.error(
|
||||||
title="更新失败",
|
title="更新失败",
|
||||||
content=f"用户模板更新失败: {e}",
|
content=f"用户模板更新失败: {msg}",
|
||||||
parent=self,
|
parent=parent,
|
||||||
duration=3000
|
duration=3000
|
||||||
)
|
)
|
||||||
|
|
||||||
|
update_code(parent=self, info_callback=info_callback, error_callback=error_callback)
|
||||||
|
|
||||||
def show_user_code_files(self):
|
def show_user_code_files(self):
|
||||||
|
from app.tools.code_generator import CodeGenerator
|
||||||
file_tree = self.codegen_page.file_tree
|
file_tree = self.codegen_page.file_tree
|
||||||
file_tree.clear()
|
file_tree.clear()
|
||||||
base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../assets/User_code")
|
base_dir = CodeGenerator.get_assets_dir("User_code")
|
||||||
user_dir = os.path.join(self.project_path, "User")
|
user_dir = os.path.join(self.project_path, "User")
|
||||||
sub_dirs = ["bsp", "component", "device", "module"]
|
sub_dirs = ["bsp", "component", "device", "module"]
|
||||||
|
|
||||||
@ -412,7 +400,8 @@ class DataInterface(QWidget):
|
|||||||
|
|
||||||
def generate_code(self):
|
def generate_code(self):
|
||||||
import shutil
|
import shutil
|
||||||
base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../assets/User_code")
|
from app.tools.code_generator import CodeGenerator
|
||||||
|
base_dir = CodeGenerator.get_assets_dir("User_code")
|
||||||
user_dir = os.path.join(self.project_path, "User")
|
user_dir = os.path.join(self.project_path, "User")
|
||||||
copied = []
|
copied = []
|
||||||
files = self.get_checked_files()
|
files = self.get_checked_files()
|
||||||
@ -563,8 +552,8 @@ class DataInterface(QWidget):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def generate_task_code(self, task_list):
|
def generate_task_code(self, task_list):
|
||||||
base_dir = os.path.dirname(os.path.abspath(__file__))
|
from app.tools.code_generator import CodeGenerator
|
||||||
template_dir = os.path.join(base_dir, "../assets/User_code/task")
|
template_dir = CodeGenerator.get_assets_dir("User_code/task")
|
||||||
output_dir = os.path.join(self.project_path, "User", "task")
|
output_dir = os.path.join(self.project_path, "User", "task")
|
||||||
os.makedirs(output_dir, exist_ok=True)
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
|
||||||
|
|||||||
@ -63,16 +63,8 @@ class CodeGenerator:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def get_template_dir():
|
def get_template_dir():
|
||||||
"""获取模板目录路径,兼容打包环境"""
|
"""获取模板目录路径,兼容打包环境"""
|
||||||
if getattr(sys, 'frozen', False):
|
# 使用统一的get_assets_dir方法来获取路径
|
||||||
# 打包后的环境
|
template_dir = CodeGenerator.get_assets_dir("User_code/bsp")
|
||||||
base_path = sys._MEIPASS
|
|
||||||
template_dir = os.path.join(base_path, "assets", "User_code", "bsp")
|
|
||||||
else:
|
|
||||||
# 开发环境
|
|
||||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
while os.path.basename(current_dir) != 'MRobot' and current_dir != '/':
|
|
||||||
current_dir = os.path.dirname(current_dir)
|
|
||||||
template_dir = os.path.join(current_dir, "assets", "User_code", "bsp")
|
|
||||||
|
|
||||||
print(f"模板目录路径: {template_dir}")
|
print(f"模板目录路径: {template_dir}")
|
||||||
if not os.path.exists(template_dir):
|
if not os.path.exists(template_dir):
|
||||||
@ -89,15 +81,23 @@ class CodeGenerator:
|
|||||||
str: 完整的assets路径
|
str: 完整的assets路径
|
||||||
"""
|
"""
|
||||||
if getattr(sys, 'frozen', False):
|
if getattr(sys, 'frozen', False):
|
||||||
# 打包后的环境
|
# 打包后的环境 - 使用可执行文件所在目录而不是临时目录
|
||||||
base_path = sys._MEIPASS
|
exe_dir = os.path.dirname(sys.executable)
|
||||||
assets_dir = os.path.join(base_path, "assets")
|
assets_dir = os.path.join(exe_dir, "assets")
|
||||||
|
print(f"打包环境:尝试使用路径: {assets_dir}")
|
||||||
|
|
||||||
|
# 如果exe_dir/assets不存在,尝试使用sys._MEIPASS作为后备
|
||||||
|
if not os.path.exists(assets_dir) and hasattr(sys, '_MEIPASS'):
|
||||||
|
base_path = getattr(sys, '_MEIPASS')
|
||||||
|
assets_dir = os.path.join(base_path, "assets")
|
||||||
|
print(f"后备路径: {assets_dir}")
|
||||||
else:
|
else:
|
||||||
# 开发环境
|
# 开发环境
|
||||||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
while os.path.basename(current_dir) != 'MRobot' and current_dir != '/':
|
while os.path.basename(current_dir) != 'MRobot' and current_dir != '/':
|
||||||
current_dir = os.path.dirname(current_dir)
|
current_dir = os.path.dirname(current_dir)
|
||||||
assets_dir = os.path.join(current_dir, "assets")
|
assets_dir = os.path.join(current_dir, "assets")
|
||||||
|
print(f"开发环境:使用路径: {assets_dir}")
|
||||||
|
|
||||||
if sub_path:
|
if sub_path:
|
||||||
full_path = os.path.join(assets_dir, sub_path)
|
full_path = os.path.join(assets_dir, sub_path)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import requests
|
import requests
|
||||||
import zipfile
|
import zipfile
|
||||||
import io
|
import io
|
||||||
@ -8,7 +9,25 @@ import time
|
|||||||
|
|
||||||
def update_code(parent=None, info_callback=None, error_callback=None):
|
def update_code(parent=None, info_callback=None, error_callback=None):
|
||||||
url = "http://gitea.qutrobot.top/robofish/MRobot/archive/User_code.zip"
|
url = "http://gitea.qutrobot.top/robofish/MRobot/archive/User_code.zip"
|
||||||
local_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../assets/User_code")
|
|
||||||
|
# 使用与CodeGenerator.get_assets_dir相同的逻辑确定assets目录
|
||||||
|
if getattr(sys, 'frozen', False):
|
||||||
|
# 打包后的环境 - 使用可执行文件所在目录
|
||||||
|
exe_dir = os.path.dirname(sys.executable)
|
||||||
|
assets_dir = os.path.join(exe_dir, "assets")
|
||||||
|
print(f"更新代码:打包环境,使用路径: {assets_dir}")
|
||||||
|
|
||||||
|
# 如果exe_dir/assets不存在,尝试使用相对路径作为后备
|
||||||
|
if not os.path.exists(assets_dir):
|
||||||
|
assets_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../assets")
|
||||||
|
print(f"更新代码:后备路径: {assets_dir}")
|
||||||
|
else:
|
||||||
|
# 开发环境
|
||||||
|
assets_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../assets")
|
||||||
|
print(f"更新代码:开发环境,使用路径: {assets_dir}")
|
||||||
|
|
||||||
|
local_dir = os.path.join(assets_dir, "User_code")
|
||||||
|
print(f"更新代码:最终目标目录: {local_dir}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 下载远程代码库
|
# 下载远程代码库
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user