From 76abef7a94230d07f9972333c3b78703409851d4 Mon Sep 17 00:00:00 2001 From: Cheney Date: Tue, 20 Aug 2024 14:19:23 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=90=AF=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aardiowin/config.json | 11 ++++ aardiowin/default.aproj | 18 +++--- aardiowin/lib/init.aardio | 106 ++++++++++++++++++++++++++++++ aardiowin/lib/log.aardio | 40 ++++++++++++ aardiowin/main.aardio | 133 ++++++++++++++------------------------ aardiowin/web/index.html | 47 ++++++++++---- 6 files changed, 246 insertions(+), 109 deletions(-) create mode 100644 aardiowin/config.json create mode 100644 aardiowin/lib/init.aardio create mode 100644 aardiowin/lib/log.aardio diff --git a/aardiowin/config.json b/aardiowin/config.json new file mode 100644 index 0000000..5a4bce6 --- /dev/null +++ b/aardiowin/config.json @@ -0,0 +1,11 @@ +{ + "app" : "awin", + "title" : "awin", + "icon" : "", + "backend" : "", + "frontend" : "", + "window" : { + "width" : 500, + "height" : 500 + } +} \ No newline at end of file diff --git a/aardiowin/default.aproj b/aardiowin/default.aproj index b111c24..162eca4 100644 --- a/aardiowin/default.aproj +++ b/aardiowin/default.aproj @@ -1,10 +1,8 @@ - - - - - - - - - - + + + + + + + + diff --git a/aardiowin/lib/init.aardio b/aardiowin/lib/init.aardio new file mode 100644 index 0000000..04665bb --- /dev/null +++ b/aardiowin/lib/init.aardio @@ -0,0 +1,106 @@ +// init 初始化 +import log + + + +// 临时日志 +var gLog = log( "awin" ); +var gDebug = false; + +namespace init{ + import fsys + import string + import web.json + + // 日志对象 + getDebug = function(){ + return gDebug; + } + + // 日志对象 + getLog = function(){ + return gLog; + } + + // 配置载入函数 + loadConfigs = function() { + + + gLog.print("dir"); + var configs = {}; + var currentPath = fsys.getCurDir(); + gLog.print("currentPath", currentPath); + var appDataPath = string.getenv("APPDATA"); + gLog.print("appDataPath", appDataPath); + + // 读取当前路径下的 config.json + var currentConfigPath = currentPath ++ "/config.json"; + if (io.exist(currentConfigPath)) { + var currentConfigContent = string.load(currentConfigPath); + configs = web.json.parse(currentConfigContent); + } + + // 从当前路径下的 config.json 中读取 app 值 + var appValue = configs.app; + if (!appValue) { + error("'app' value not found in the config file."); + } + gLog.print("app", appValue); + + // 构建 %APPDATA%/%app% 路径 + var appDir = appDataPath ++ "/" ++ appValue; + if (! io.exist( appDir )) { + fsys.createDir( appDir ) + } + var appDataConfigPath = appDataPath ++ "/" ++ appValue ++ "/config.json"; + + // 读取 %APPDATA%/%app% 路径下的 config.json + if (io.exist(appDataConfigPath)) { + var appDataConfigContent = string.load(appDataConfigPath); + var appDataConfig = web.json.parse(appDataConfigContent); + + // 合并配置,后读取的覆盖先读取的 + object.merge(configs, appDataConfig, true); + } + + return configs; + }; + + checkConfig = function (config){ + if( ! config.window ){ + config.window = {} + } + if( ! config.window.width ) { + config.window.width = 500 + } + if( ! config.window.height ) { + config.window.height = 500 + } + return config; + } + + /* + + 载入配置,配置文件读取顺序,后读的可以覆盖先读的值。 + 1. 读取当前路径下的 config.json + 2. 读取 %APPDATA%/%app% 路径下的 config.json。其中 %APPDATA% 为操作系统提供的当前用户软件目录。 + %app% 为当前路径下的 config.json 中配置的 app + + */ + init = function(){ + gLog.print("init") + gConfig = {} + // 使用示例 + try { + gLog.print("loadConfigs") + io.print("") + gConfig = loadConfigs() + io.print("2") + gConfig = checkConfig( gConfig ) + gLog.print(configs); + } catch (e) { + io.print("错误会中断try语句块" ++ e) + gLog.print(e); + } + } +} diff --git a/aardiowin/lib/log.aardio b/aardiowin/lib/log.aardio new file mode 100644 index 0000000..05d6cea --- /dev/null +++ b/aardiowin/lib/log.aardio @@ -0,0 +1,40 @@ +// log 日志 +import fsys +import fsys.log +import time + +var getToday = function(){ + var $now = time.now() //当前时间 + return "" ++ $now.year ++ $now.month ++ $now.day +} + +var todayLogFile = function( name ) { + + var appDataPath = string.getenv("APPDATA"); + var appPath = appDataPath ++ "/" ++ name; + if (! io.exist( appPath )) { + fsys.createDir( appPath ) + } + return appPath ++ "/" ++ name ++ "." ++ getToday() ++ ".log" +} + + +class log { + ctor( name ){ + + path = todayLogFile(name); + + this = ..fsys.log(path) //调用基类构造对象原型 + this.basePrint = this.print; + }; + + print = function(...){ + var t = ..time.now() + t.format="%Y%m%d-%H%M%S "; + + var args = {...} + ..table.insert(args, tostring(t)) // 通常时间非重要信息,以...作视觉区分方便查看 + + this.basePrint( ..table.unpack(args) ) + }; +} \ No newline at end of file diff --git a/aardiowin/main.aardio b/aardiowin/main.aardio index 41efce4..d99e48b 100644 --- a/aardiowin/main.aardio +++ b/aardiowin/main.aardio @@ -1,85 +1,48 @@ -import win.ui; - -/* - -载入配置,配置文件读取顺序,后读的可以覆盖先读的值。 -1. 读取当前路径下的 config.json -2. 读取 %APPDATA%/%app% 路径下的 config.json。其中 %APPDATA% 为操作系统提供的当前用户软件目录。 - %app% 为当前路径下的 config.json 中配置的 app - -*/ -gConfig = {} -// 使用示例 -try { - gConfig = loadConfigs() - console.log(configs); -} catch (e) { - console.error(e.message); -} - -/*DSG{{*/ -mainForm = win.form(text="awin";right=759;bottom=469) -mainForm.add() -/*}}*/ - -import web.view; -var theView = web.view(mainForm); - -//导出为 JavaScript 中的 aardio 对象 -theView.external = { - onCounterUpdate = function(name,value){ - if(name!==null && value!==null){ - return "aardio 返回的值:网页中 React 状态值改变了:value:"+value; - } - }; -} - -import wsock.tcp.simpleHttpServer; -/* -如果导入 simpleHttpServer,则单个斜杠开头的路径会转换为嵌入式 HTTP 地址, -如果同时文件名为 index.html ,则上级目录自动设为根目录,前端应用发布根目录使用默认的 "/" 即可,不需要改动。 - -去掉下面的前端项目调试端口号 37151 或发布 EXE 后运行才会打开 "\web\index.html"。 -否则打开 http://localhost:37151 -*/ -theView.go("\web\index.html",37151); - -mainForm.show(); -win.loopMessage(); - - -// 配置载入函数 -function loadConfigs() { - var configs = {}; - var currentPath = file.dir(); - var appDataPath = env.get("APPDATA"); - - // 读取当前路径下的 config.json - var currentConfigPath = file.path(currentPath, "config.json"); - if (file.exists(currentConfigPath)) { - var currentConfigContent = file.read(currentConfigPath); - configs = json.parse(currentConfigContent); - } - - // 从当前路径下的 config.json 中读取 app 值 - var appValue = configs.app; - if (!appValue) { - error("'app' value not found in the config file."); - } - - // 构建 %APPDATA%/%app% 路径 - var appDataConfigPath = file.path(appDataPath, appValue, "config.json"); - - // 读取 %APPDATA%/%app% 路径下的 config.json - if (file.exists(appDataConfigPath)) { - var appDataConfigContent = file.read(appDataConfigPath); - var appDataConfig = json.parse(appDataConfigContent); - - // 合并配置,后读取的覆盖先读取的 - object.merge(configs, appDataConfig, true); - } - - return configs; -} - - +import win.ui; +import init; + + +// 初始化 +init.init(); +var gConfig = init.loadConfigs(); +var gDebug = init.getDebug(); + +/*DSG{{*/ +mainForm = win.form(text="awin";right=gConfig.window.width;bottom=gConfig.window.height;border="thin";max=false;min=false) +mainForm.add() +/*}}*/ + + +// 启动界面 +var gLog = init.getLog(); +gLog.print("web view") +import web.view; +var theView = web.view(mainForm); + +//导出为 JavaScript 中的 aardio 对象 +theView.external = { + onCounterUpdate = function(name,value){ + if(name!==null && value!==null){ + return "aardio 返回的值:网页中 React 状态值改变了:value:"+value; + } + }; +} + +import wsock.tcp.simpleHttpServer; +/* +如果导入 simpleHttpServer,则单个斜杠开头的路径会转换为嵌入式 HTTP 地址, +如果同时文件名为 index.html ,则上级目录自动设为根目录,前端应用发布根目录使用默认的 "/" 即可,不需要改动。 + +去掉下面的前端项目调试端口号 37151 或发布 EXE 后运行才会打开 "\web\index.html"。 +否则打开 http://localhost:37151 +*/ +if( gDebug ){ + theView.go("\web\index.html",37151); +} else { + theView.go("\web\index.html"); +} + + +mainForm.show(); +win.loopMessage(); + diff --git a/aardiowin/web/index.html b/aardiowin/web/index.html index 5ee197e..e425ad8 100644 --- a/aardiowin/web/index.html +++ b/aardiowin/web/index.html @@ -1,15 +1,34 @@ - - - - - - -请在工程中右键点击「网页源码」目录, -然后在弹出菜单中点击「用外部编辑器」打开。 - -在 VSCode 中打开以后,运行 npm install 安装依赖, -然后再运行 npm run build 编译网页代码。 - -最后在 aardio 中点击发布生成 EXE 文件。 - + + + + + + + + +
+

AWin 已经启动,但是 AWin 只是一个没有灵魂的外壳,这里需要被正确替换成真正的应用~

+ \ No newline at end of file