5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-09 01:49:43 +08:00

Update system.Environment

This commit is contained in:
Lea Anthony 2024-03-19 20:36:52 +11:00
parent e92994d2e7
commit aba82cc527
9 changed files with 210 additions and 9 deletions

View File

@ -0,0 +1,19 @@
# Screen Example
This example will detect all attached screens and display their details.
## Running the example
To run the example, simply run the following command:
```bash
go run .
```
# Status
| Platform | Status |
|----------|---------|
| Mac | Working |
| Windows | Working |
| Linux | |

View File

@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Screens Demo</title>
<style>
body {
padding-top: 75px;
margin: 0 auto;
color: white;
text-align: -webkit-center;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif
}
article {
padding: 1em;
}
::-webkit-scrollbar-track {
background-color: #888;
}
.center {
text-align: -webkit-center;
}
th {
text-align: left;
}
tr {
border: 1px solid white;
}
th, td {
padding: 5px;
}
</style>
<script src="/wails/runtime.js"></script>
</head>
<body>
<script>
let environment = wails.System.Environment();
environment.then((result) => {
console.log({result})
let html = "";
html += "<h1 class='center'>Environment</h1><br><br>";
html += "<table>";
html += "<tr><td>Name</td><td>"+ result.OSInfo.Name +"</td></tr>";
html += "<tr><td>Branding</td><td>"+ result.OSInfo.Branding +"</td></tr>";
html += "<tr><td>Version</td><td>"+ result.OSInfo.Version +"</td></tr>";
html += "<tr><td>ID</td><td>"+ result.OSInfo.ID +"</td></tr>";
html += "<tr><td>GOOS</td><td>"+ result.OS +"</td></tr>";
html += "<tr><td>GOARCH</td><td>"+ result.Arch +"</td></tr>";
html += "<tr><td>Debug</td><td>"+ result.Debug +"</td></tr>";
if(result.PlatformInfo) {
for (let key in result.PlatformInfo) {
if (obj.hasOwnProperty(key)) {
html += "<tr><td>"+key+"</td><td>"+ result.PlatformInfo[key] +"</td></tr>";
}
}
}
html += "</table>";
document.body.innerHTML = html;
})
</script>
</body>
</html>

View File

@ -0,0 +1,43 @@
package main
import (
"embed"
_ "embed"
"log"
"github.com/wailsapp/wails/v3/pkg/application"
)
//go:embed assets/*
var assets embed.FS
func main() {
app := application.New(application.Options{
Name: "Environment Demo",
Description: "A demo of the Environment API",
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
Assets: application.AssetOptions{
Handler: application.BundledAssetFileServer(assets),
},
})
app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Title: "Environment Demo",
Width: 800,
Height: 600,
Mac: application.MacWindow{
Backdrop: application.MacBackdropTranslucent,
TitleBar: application.MacTitleBarHiddenInsetUnified,
InvisibleTitleBarHeight: 50,
},
})
err := app.Run()
if err != nil {
log.Fatal(err.Error())
}
}

View File

@ -44,9 +44,20 @@ export function Capabilities() {
}
/**
* @typedef {object} EnvironmentInfo
* @property {string} OS - The operating system in use.
* @typedef {Object} OSInfo
* @property {string} Branding - The branding of the OS.
* @property {string} ID - The ID of the OS.
* @property {string} Name - The name of the OS.
* @property {string} Version - The version of the OS.
*/
/**
* @typedef {Object} EnvironmentInfo
* @property {string} Arch - The architecture of the system.
* @property {boolean} Debug - True if the application is running in debug mode, otherwise false.
* @property {string} OS - The operating system in use.
* @property {OSInfo} OSInfo - Details of the operating system.
* @property {Object} PlatformInfo - Additional platform information.
*/
/**

View File

@ -3,6 +3,7 @@ package application
import (
"embed"
"encoding/json"
"github.com/wailsapp/wails/v3/internal/operatingsystem"
"io"
"log"
"log/slog"
@ -891,11 +892,15 @@ func (a *App) BrowserOpenFile(path string) error {
}
func (a *App) Environment() EnvironmentInfo {
return EnvironmentInfo{
OS: runtime.GOOS,
Arch: runtime.GOARCH,
Debug: a.isDebugMode,
info, _ := operatingsystem.Info()
result := EnvironmentInfo{
OS: runtime.GOOS,
Arch: runtime.GOARCH,
Debug: a.isDebugMode,
OSInfo: info,
}
result.PlatformInfo = a.platformEnvironment()
return result
}
func (a *App) shouldQuit() bool {

View File

@ -355,3 +355,7 @@ func (a *App) logPlatformInfo() {
a.info("Platform Info:", info.AsLogSlice()...)
}
func (a *App) platformEnvironment() map[string]any {
return map[string]any{}
}

View File

@ -2,6 +2,16 @@
package application
/*
#include "gtk/gtk.h"
#include "webkit2/webkit2.h"
static guint get_compiled_gtk_major_version() { return GTK_MAJOR_VERSION; }
static guint get_compiled_gtk_minor_version() { return GTK_MINOR_VERSION; }
static guint get_compiled_gtk_micro_version() { return GTK_MICRO_VERSION; }
static guint get_compiled_webkit_major_version() { return WEBKIT_MAJOR_VERSION; }
static guint get_compiled_webkit_minor_version() { return WEBKIT_MINOR_VERSION; }
static guint get_compiled_webkit_micro_version() { return WEBKIT_MICRO_VERSION; }
*/
import "C"
import (
"fmt"
@ -216,3 +226,33 @@ func processWindowEvent(windowID C.uint, eventID C.uint) {
EventID: uint(eventID),
}
}
func buildVersionString(major, minor, micro C.uint) string {
return fmt.Sprintf("%d.%d.%d", uint(major), uint(minor), uint(micro))
}
func (a *App) platformEnvironment() map[string]any {
result := map[string]any{}
result["gtk3-compiled"] = buildVersionString(
C.get_compiled_gtk_major_version(),
C.get_compiled_gtk_minor_version(),
C.get_compiled_gtk_micro_version(),
)
result["gtk3-runtime"] = buildVersionString(
C.gtk_get_major_version(),
C.gtk_get_minor_version(),
C.gtk_get_micro_version(),
)
result["webkit2gtk-compiled"] = buildVersionString(
C.get_compiled_webkit_major_version(),
C.get_compiled_webkit_minor_version(),
C.get_compiled_webkit_micro_version(),
)
result["webkit2gtk-runtime"] = buildVersionString(
C.webkit_get_major_version(),
C.webkit_get_minor_version(),
C.webkit_get_micro_version(),
)
return result
}

View File

@ -350,3 +350,11 @@ func (a *App) logPlatformInfo() {
a.info("Platform Info:", args...)
}
func (a *App) platformEnvironment() map[string]any {
result := map[string]any{}
webviewVersion, _ := webviewloader.GetAvailableCoreWebView2BrowserVersionString(a.options.Windows.WebviewBrowserPath)
result["Go-WebView2Loader"] = webviewloader.UsingGoWebview2Loader
result["WebView2"] = webviewVersion
return result
}

View File

@ -1,13 +1,18 @@
package application
import "github.com/wailsapp/wails/v3/internal/operatingsystem"
// EnvironmentInfo represents information about the current environment.
//
// Fields:
// - OS: the operating system that the program is running on.
// - Arch: the architecture of the operating system.
// - Debug: indicates whether debug mode is enabled.
// - OSInfo: information about the operating system.
type EnvironmentInfo struct {
OS string
Arch string
Debug bool
OS string
Arch string
Debug bool
OSInfo *operatingsystem.OS
PlatformInfo map[string]any
}