mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 18:29:53 +08:00
116 lines
2.4 KiB
Go
116 lines
2.4 KiB
Go
package project
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
// Project holds the data related to a Wails project
|
|
type Project struct {
|
|
|
|
/*** Application Data ***/
|
|
Name string `json:"name"`
|
|
AssetDirectory string `json:"assetdir"`
|
|
|
|
BuildCommand string `json:"frontend:build"`
|
|
InstallCommand string `json:"frontend:install"`
|
|
DevCommand string `json:"frontend:dev"`
|
|
|
|
// Directory to generate the API Module
|
|
WailsJSDir string `json:"wailsjsdir"`
|
|
|
|
Version string `json:"version"`
|
|
|
|
/*** Internal Data ***/
|
|
|
|
// The path to the project directory
|
|
Path string
|
|
|
|
// Build directory
|
|
BuildDir string
|
|
|
|
// The output filename
|
|
OutputFilename string `json:"outputfilename"`
|
|
|
|
// The type of application. EG: Desktop, Server, etc
|
|
OutputType string
|
|
|
|
// The platform to target
|
|
Platform string
|
|
|
|
// The application author
|
|
Author Author
|
|
|
|
// Fully qualified filename
|
|
filename string
|
|
|
|
// The debounce time for hot-reload of the built-in dev server. Default 100
|
|
DebounceMS int `json:"debounceMS"`
|
|
|
|
// The url to use to server assets. Default "https://localhost:34115"
|
|
DevServerURL string `json:"devserverurl"`
|
|
}
|
|
|
|
func (p *Project) Save() error {
|
|
data, err := json.MarshalIndent(p, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(p.filename, data, 0755)
|
|
}
|
|
|
|
// Author stores details about the application author
|
|
type Author struct {
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
}
|
|
|
|
// Load the project from the current working directory
|
|
func Load(projectPath string) (*Project, error) {
|
|
|
|
// Attempt to load project.json
|
|
projectFile := filepath.Join(projectPath, "wails.json")
|
|
rawBytes, err := ioutil.ReadFile(projectFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Unmarshal JSON
|
|
var result Project
|
|
err = json.Unmarshal(rawBytes, &result)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Fix up our project paths
|
|
result.filename = projectFile
|
|
|
|
if result.Version == "" {
|
|
result.Version = "2"
|
|
}
|
|
|
|
// Create default name if not given
|
|
if result.Name == "" {
|
|
result.Name = "wailsapp"
|
|
}
|
|
|
|
// Fix up OutputFilename
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
if !strings.HasSuffix(result.OutputFilename, ".exe") {
|
|
result.OutputFilename += ".exe"
|
|
}
|
|
case "darwin", "linux":
|
|
if strings.HasSuffix(result.OutputFilename, ".exe") {
|
|
result.OutputFilename = strings.TrimSuffix(result.OutputFilename, ".exe")
|
|
}
|
|
}
|
|
|
|
// Return our project data
|
|
return &result, nil
|
|
}
|