mirror of
https://github.com/taigrr/wails.git
synced 2026-04-14 10:50:53 -07:00
Compare commits
2 Commits
v0.18.9-pr
...
262-Add-Wa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
86d850ac12 | ||
|
|
b75aee1128 |
@@ -219,15 +219,6 @@ func InstallFrontendDeps(projectDir string, projectOptions *ProjectOptions, forc
|
|||||||
|
|
||||||
const md5sumFile = "package.json.md5"
|
const md5sumFile = "package.json.md5"
|
||||||
|
|
||||||
// If node_modules does not exist, force a rebuild.
|
|
||||||
nodeModulesPath, err := filepath.Abs(filepath.Join(".", "node_modules"))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !fs.DirExists(nodeModulesPath) {
|
|
||||||
forceRebuild = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we aren't forcing the install and the md5sum file exists
|
// If we aren't forcing the install and the md5sum file exists
|
||||||
if !forceRebuild && fs.FileExists(md5sumFile) {
|
if !forceRebuild && fs.FileExists(md5sumFile) {
|
||||||
// Yes - read contents
|
// Yes - read contents
|
||||||
|
|||||||
@@ -100,19 +100,6 @@ func (p *ProgramHelper) InstallGoPackage(packageName string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstallNPMPackage installs the given npm package
|
|
||||||
func (p *ProgramHelper) InstallNPMPackage(packageName string, save bool) error {
|
|
||||||
args := strings.Split("install "+packageName, " ")
|
|
||||||
if save {
|
|
||||||
args = append(args, "--save")
|
|
||||||
}
|
|
||||||
_, stderr, err := p.shell.Run("npm", args...)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(stderr)
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunCommand runs the given command
|
// RunCommand runs the given command
|
||||||
func (p *ProgramHelper) RunCommand(command string) error {
|
func (p *ProgramHelper) RunCommand(command string) error {
|
||||||
args := strings.Split(command, " ")
|
args := strings.Split(command, " ")
|
||||||
|
|||||||
@@ -13,18 +13,6 @@ import (
|
|||||||
"github.com/leaanthony/slicer"
|
"github.com/leaanthony/slicer"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PackageManager indicates different package managers
|
|
||||||
type PackageManager int
|
|
||||||
|
|
||||||
const (
|
|
||||||
// UNKNOWN package manager
|
|
||||||
UNKNOWN PackageManager = iota
|
|
||||||
// NPM package manager
|
|
||||||
NPM
|
|
||||||
// YARN package manager
|
|
||||||
YARN
|
|
||||||
)
|
|
||||||
|
|
||||||
type author struct {
|
type author struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
@@ -165,23 +153,6 @@ func (po *ProjectOptions) Defaults() {
|
|||||||
po.WailsVersion = Version
|
po.WailsVersion = Version
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNPMBinaryName returns the type of package manager used by the project
|
|
||||||
func (po *ProjectOptions) GetNPMBinaryName() (PackageManager, error) {
|
|
||||||
if po.FrontEnd == nil {
|
|
||||||
return UNKNOWN, fmt.Errorf("No frontend specified in project options")
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.Index(po.FrontEnd.Install, "npm") > -1 {
|
|
||||||
return NPM, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.Index(po.FrontEnd.Install, "yarn") > -1 {
|
|
||||||
return YARN, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return UNKNOWN, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// PromptForInputs asks the user to input project details
|
// PromptForInputs asks the user to input project details
|
||||||
func (po *ProjectOptions) PromptForInputs() error {
|
func (po *ProjectOptions) PromptForInputs() error {
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
// Version - Wails version
|
// Version - Wails version
|
||||||
const Version = "v0.18.9-pre"
|
const Version = "v0.18.3"
|
||||||
|
|||||||
@@ -1,408 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/Masterminds/semver"
|
|
||||||
"github.com/leaanthony/spinner"
|
|
||||||
"github.com/wailsapp/wails/cmd"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Constants
|
|
||||||
var checkSpinner = spinner.NewSpinner()
|
|
||||||
var migrateProjectOptions = &cmd.ProjectOptions{}
|
|
||||||
var migrateFS = cmd.NewFSHelper()
|
|
||||||
var migrateGithub = cmd.NewGitHubHelper()
|
|
||||||
var programHelper = cmd.NewProgramHelper()
|
|
||||||
var lessThanV1 *semver.Constraints
|
|
||||||
|
|
||||||
// The user's go.mod
|
|
||||||
var goMod string
|
|
||||||
var goModFile string
|
|
||||||
|
|
||||||
// The user's main.js
|
|
||||||
var mainJSFile string
|
|
||||||
var mainJSContents string
|
|
||||||
|
|
||||||
// Frontend directory
|
|
||||||
var frontEndDir string
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
|
|
||||||
var dryrun bool
|
|
||||||
var err error
|
|
||||||
|
|
||||||
lessThanV1, err = semver.NewConstraint("< v1.0.0")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// var forceRebuild = false
|
|
||||||
checkSpinner.SetSpinSpeed(50)
|
|
||||||
|
|
||||||
commandDescription := `EXPERIMENTAL - This command attempts to migrate projects to the latest Wails version.`
|
|
||||||
updateCmd := app.Command("migrate", "Migrate projects to latest Wails release").
|
|
||||||
LongDescription(commandDescription).
|
|
||||||
BoolFlag("dryrun", "Only display what would be done", &dryrun)
|
|
||||||
|
|
||||||
updateCmd.Action(func() error {
|
|
||||||
|
|
||||||
message := "Migrate Project"
|
|
||||||
logger.PrintSmallBanner(message)
|
|
||||||
logger.Red("WARNING: This is an experimental command. Ensure you have backups of your project!")
|
|
||||||
logger.Red("It currently only supports npm based projects.")
|
|
||||||
fmt.Println()
|
|
||||||
|
|
||||||
// Check project directory
|
|
||||||
err := checkProjectDirectory()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find Wails version from go.mod
|
|
||||||
wailsVersion, err := getWailsVersion()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get latest stable version
|
|
||||||
var latestVersion *semver.Version
|
|
||||||
latestVersion, err = getLatestWailsVersion()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
var canMigrate bool
|
|
||||||
canMigrate, err = canMigrateVersion(wailsVersion, latestVersion)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !canMigrate {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for wailsbridge
|
|
||||||
wailsBridge, err := checkWailsBridge()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is main.js using bridge.Init()
|
|
||||||
canUpdateMainJS, err := checkMainJS()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Check if we are using legacy js runtime
|
|
||||||
|
|
||||||
// Operations
|
|
||||||
logger.Yellow("Operations to perform:")
|
|
||||||
|
|
||||||
logger.Yellowf(" - Update to Wails v%s\n", latestVersion)
|
|
||||||
|
|
||||||
if len(wailsBridge) > 0 {
|
|
||||||
logger.Yellow(" - Delete wailsbridge.js")
|
|
||||||
}
|
|
||||||
|
|
||||||
if canUpdateMainJS {
|
|
||||||
logger.Yellow(" - Patch main.js")
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Yellow(" - Ensure '@wailsapp/runtime` module is installed")
|
|
||||||
|
|
||||||
if dryrun {
|
|
||||||
logger.White("Exiting: Dry Run")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Red("*WARNING* About to modify your project!")
|
|
||||||
logger.Red("Type 'YES' to continue: ")
|
|
||||||
scanner := bufio.NewScanner(os.Stdin)
|
|
||||||
scanner.Scan()
|
|
||||||
input := scanner.Text()
|
|
||||||
if input != "YES" {
|
|
||||||
logger.Red("ABORTED!")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Yellow("Let's do this!")
|
|
||||||
|
|
||||||
err = updateWailsVersion(wailsVersion, latestVersion)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(wailsBridge) > 0 {
|
|
||||||
err = deleteWailsBridge(wailsBridge)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if canUpdateMainJS {
|
|
||||||
err = patchMainJS()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Install runtime
|
|
||||||
err = installWailsRuntime()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println()
|
|
||||||
logger.Yellow("Migration complete! Check project by running `wails build`.")
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkProjectDirectory() error {
|
|
||||||
// Get versions
|
|
||||||
checkSpinner.Start("Check Project Directory")
|
|
||||||
|
|
||||||
// Check we are in project directory
|
|
||||||
err := migrateProjectOptions.LoadConfig(migrateFS.Cwd())
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return fmt.Errorf("Unable to find 'project.json'. Please check you are in a Wails project directory")
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Success()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getWailsVersion() (*semver.Version, error) {
|
|
||||||
checkSpinner.Start("Get Wails Version")
|
|
||||||
var result *semver.Version
|
|
||||||
|
|
||||||
// Load file
|
|
||||||
var err error
|
|
||||||
goModFile, err = filepath.Abs(filepath.Join(".", "go.mod"))
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return nil, fmt.Errorf("Unable to load go.mod at %s", goModFile)
|
|
||||||
}
|
|
||||||
goMod, err = migrateFS.LoadAsString(goModFile)
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return nil, fmt.Errorf("Unable to load go.mod")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find wails version
|
|
||||||
versionRegexp := regexp.MustCompile(`.*github.com/wailsapp/wails.*(v\d+.\d+.\d+)`)
|
|
||||||
versions := versionRegexp.FindStringSubmatch(goMod)
|
|
||||||
|
|
||||||
if len(versions) != 2 {
|
|
||||||
return nil, fmt.Errorf("Unable to determine Wails version")
|
|
||||||
}
|
|
||||||
|
|
||||||
version := versions[1]
|
|
||||||
result, err = semver.NewVersion(version)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Unable to parse Wails version: %s", version)
|
|
||||||
}
|
|
||||||
checkSpinner.Success("Found Wails Version: " + version)
|
|
||||||
return result, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func canMigrateVersion(wailsVersion *semver.Version, latestVersion *semver.Version) (bool, error) {
|
|
||||||
checkSpinner.Start("Checking ability to Migrate")
|
|
||||||
|
|
||||||
// Check if we are at the latest version!!!!
|
|
||||||
if wailsVersion.Equal(latestVersion) || wailsVersion.GreaterThan(latestVersion) {
|
|
||||||
checkSpinner.Errorf("Checking ability to Migrate: No! (v%s >= v%s)", wailsVersion, latestVersion)
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for < v1.0.0
|
|
||||||
if lessThanV1.Check(wailsVersion) {
|
|
||||||
checkSpinner.Successf("Checking ability to Migrate: Yes! (v%s < v1.0.0)", wailsVersion)
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
checkSpinner.Error("Unable to migrate")
|
|
||||||
return false, fmt.Errorf("No migration rules for version %s", wailsVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkWailsBridge() (string, error) {
|
|
||||||
checkSpinner.Start("Checking if legacy Wails Bridge present")
|
|
||||||
|
|
||||||
// Check frontend dir is available
|
|
||||||
if migrateProjectOptions.FrontEnd == nil ||
|
|
||||||
len(migrateProjectOptions.FrontEnd.Dir) == 0 ||
|
|
||||||
!migrateFS.DirExists(migrateProjectOptions.FrontEnd.Dir) {
|
|
||||||
checkSpinner.Error("Unable to determine frontend directory")
|
|
||||||
return "", fmt.Errorf("Unable to determine frontend directory")
|
|
||||||
}
|
|
||||||
|
|
||||||
frontEndDir = migrateProjectOptions.FrontEnd.Dir
|
|
||||||
|
|
||||||
wailsBridgePath, err := filepath.Abs(filepath.Join(".", frontEndDir, "src", "wailsbridge.js"))
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error(err.Error())
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it doesn't exist, return blank string
|
|
||||||
if !migrateFS.FileExists(wailsBridgePath) {
|
|
||||||
checkSpinner.Success("Checking if legacy Wails Bridge present: No")
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Success("Checking if legacy Wails Bridge present: Yes")
|
|
||||||
return wailsBridgePath, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// This function determines if the main.js file using wailsbridge can be auto-updated
|
|
||||||
func checkMainJS() (bool, error) {
|
|
||||||
|
|
||||||
checkSpinner.Start("Checking if main.js can be migrated")
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// Check main.js is there
|
|
||||||
if migrateProjectOptions.FrontEnd == nil ||
|
|
||||||
len(migrateProjectOptions.FrontEnd.Dir) == 0 ||
|
|
||||||
!migrateFS.DirExists(migrateProjectOptions.FrontEnd.Dir) {
|
|
||||||
checkSpinner.Error("Unable to determine frontend directory")
|
|
||||||
return false, fmt.Errorf("Unable to determine frontend directory")
|
|
||||||
}
|
|
||||||
|
|
||||||
frontEndDir = migrateProjectOptions.FrontEnd.Dir
|
|
||||||
|
|
||||||
mainJSFile, err = filepath.Abs(filepath.Join(".", frontEndDir, "src", "main.js"))
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error("Unable to find main.js")
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
mainJSContents, err = migrateFS.LoadAsString(mainJSFile)
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error("Unable to load main.js")
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check we have a line like: import Bridge from "./wailsbridge";
|
|
||||||
if strings.Index(mainJSContents, `import Bridge from "./wailsbridge";`) == -1 {
|
|
||||||
checkSpinner.Success("Checking if main.js can be migrated: No - Cannot find `import Bridge`")
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check we have a line like: Bridge.Start(() => {
|
|
||||||
if strings.Index(mainJSContents, `Bridge.Start(`) == -1 {
|
|
||||||
checkSpinner.Success("Checking if main.js can be migrated: No - Cannot find `Bridge.Start`")
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
checkSpinner.Success("Checking if main.js can be migrated: Yes")
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getLatestWailsVersion() (*semver.Version, error) {
|
|
||||||
checkSpinner.Start("Checking GitHub for latest Wails version")
|
|
||||||
version, err := migrateGithub.GetLatestStableRelease()
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error("Checking GitHub for latest Wails version: Failed")
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Successf("Checking GitHub for latest Wails version: v%s", version)
|
|
||||||
return version.Version, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateWailsVersion(currentVersion, latestVersion *semver.Version) error {
|
|
||||||
// Patch go.mod
|
|
||||||
checkSpinner.Start("Patching go.mod")
|
|
||||||
|
|
||||||
wailsModule := "github.com/wailsapp/wails"
|
|
||||||
old := fmt.Sprintf("%s v%s", wailsModule, currentVersion)
|
|
||||||
new := fmt.Sprintf("%s v%s", wailsModule, latestVersion)
|
|
||||||
|
|
||||||
goMod = strings.Replace(goMod, old, new, -1)
|
|
||||||
err := ioutil.WriteFile(goModFile, []byte(goMod), 0600)
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Success()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func deleteWailsBridge(bridgeFilename string) error {
|
|
||||||
// Patch go.mod
|
|
||||||
checkSpinner.Start("Delete legacy wailsbridge.js")
|
|
||||||
|
|
||||||
err := migrateFS.RemoveFile(bridgeFilename)
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Success()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func patchMainJS() error {
|
|
||||||
// Patch main.js
|
|
||||||
checkSpinner.Start("Patching main.js")
|
|
||||||
|
|
||||||
// Patch import line
|
|
||||||
oldImportLine := `import Bridge from "./wailsbridge";`
|
|
||||||
newImportLine := `import * as Wails from "@wailsapp/runtime";`
|
|
||||||
mainJSContents = strings.Replace(mainJSContents, oldImportLine, newImportLine, -1)
|
|
||||||
|
|
||||||
// Patch Start line
|
|
||||||
oldStartLine := `Bridge.Start`
|
|
||||||
newStartLine := `Wails.Init`
|
|
||||||
mainJSContents = strings.Replace(mainJSContents, oldStartLine, newStartLine, -1)
|
|
||||||
|
|
||||||
err := ioutil.WriteFile(mainJSFile, []byte(mainJSContents), 0600)
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Success()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func installWailsRuntime() error {
|
|
||||||
|
|
||||||
checkSpinner.Start("Installing @wailsapp/runtime module")
|
|
||||||
|
|
||||||
// Change to the frontend directory
|
|
||||||
err := os.Chdir(frontEndDir)
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine package manager
|
|
||||||
packageManager, err := migrateProjectOptions.GetNPMBinaryName()
|
|
||||||
if err != nil {
|
|
||||||
checkSpinner.Error()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
switch packageManager {
|
|
||||||
case cmd.NPM:
|
|
||||||
// npm install --save @wailsapp/runtime
|
|
||||||
programHelper.InstallNPMPackage("@wailsapp/runtime", true)
|
|
||||||
default:
|
|
||||||
checkSpinner.Error()
|
|
||||||
return fmt.Errorf("Unknown package manager")
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSpinner.Success()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
package wails
|
package wails
|
||||||
|
|
||||||
import (
|
import "github.com/leaanthony/mewn"
|
||||||
"github.com/leaanthony/mewn"
|
|
||||||
"github.com/wailsapp/wails/runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// AppConfig is the configuration structure used when creating a Wails App object
|
// AppConfig is the configuration structure used when creating a Wails App object
|
||||||
type AppConfig struct {
|
type AppConfig struct {
|
||||||
@@ -68,7 +65,7 @@ func (a *AppConfig) merge(in *AppConfig) error {
|
|||||||
a.CSS = in.CSS
|
a.CSS = in.CSS
|
||||||
}
|
}
|
||||||
if in.Title != "" {
|
if in.Title != "" {
|
||||||
a.Title = runtime.ProcessEncoding(in.Title)
|
a.Title = in.Title
|
||||||
}
|
}
|
||||||
|
|
||||||
if in.Colour != "" {
|
if in.Colour != "" {
|
||||||
|
|||||||
4
go.mod
4
go.mod
@@ -2,7 +2,6 @@ module github.com/wailsapp/wails
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Masterminds/semver v1.4.2
|
github.com/Masterminds/semver v1.4.2
|
||||||
github.com/abadojack/whatlanggo v1.0.1
|
|
||||||
github.com/dchest/cssmin v0.0.0-20151210170030-fb8d9b44afdc // indirect
|
github.com/dchest/cssmin v0.0.0-20151210170030-fb8d9b44afdc // indirect
|
||||||
github.com/dchest/htmlmin v0.0.0-20150526090704-e254725e81ac
|
github.com/dchest/htmlmin v0.0.0-20150526090704-e254725e81ac
|
||||||
github.com/dchest/jsmin v0.0.0-20160823214000-faeced883947 // indirect
|
github.com/dchest/jsmin v0.0.0-20160823214000-faeced883947 // indirect
|
||||||
@@ -27,7 +26,6 @@ require (
|
|||||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 // indirect
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 // indirect
|
||||||
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 // indirect
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 // indirect
|
||||||
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862
|
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862
|
||||||
golang.org/x/text v0.3.0
|
|
||||||
gopkg.in/AlecAivazis/survey.v1 v1.8.4
|
gopkg.in/AlecAivazis/survey.v1 v1.8.4
|
||||||
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
|
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
|
||||||
)
|
)
|
||||||
|
|||||||
3
go.sum
3
go.sum
@@ -2,8 +2,6 @@ github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITg
|
|||||||
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||||
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw=
|
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw=
|
||||||
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
|
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
|
||||||
github.com/abadojack/whatlanggo v1.0.1 h1:19N6YogDnf71CTHm3Mp2qhYfkRdyvbgwWdd2EPxJRG4=
|
|
||||||
github.com/abadojack/whatlanggo v1.0.1/go.mod h1:66WiQbSbJBIlOZMsvbKe5m6pzQovxCH9B/K8tQB2uoc=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@@ -87,7 +85,6 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 h1:rM0ROo5vb9AdYJi1110yjWGMej9ITfKddS89P3Fkhug=
|
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 h1:rM0ROo5vb9AdYJi1110yjWGMej9ITfKddS89P3Fkhug=
|
||||||
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
gopkg.in/AlecAivazis/survey.v1 v1.8.4 h1:10xXXN3wgIhPheb5NI58zFgZv32Ana7P3Tl4shW+0Qc=
|
gopkg.in/AlecAivazis/survey.v1 v1.8.4 h1:10xXXN3wgIhPheb5NI58zFgZv32Ana7P3Tl4shW+0Qc=
|
||||||
gopkg.in/AlecAivazis/survey.v1 v1.8.4/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA=
|
gopkg.in/AlecAivazis/survey.v1 v1.8.4/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA=
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// Package webview implements Go bindings to https://github.com/zserge/webview C library.
|
// Package wails implements Go bindings to https://github.com/zserge/webview C library.
|
||||||
// It is a modified version of webview.go from that repository
|
// It is a modified version of webview.go from that repository
|
||||||
|
|
||||||
// Bindings closely repeat the C APIs and include both, a simplified
|
// Bindings closely repeat the C APIs and include both, a simplified
|
||||||
// single-function API to just open a full-screen webview window, and a more
|
// single-function API to just open a full-screen webview window, and a more
|
||||||
// advanced and featureful set of APIs, including Go-to-JavaScript bindings.
|
// advanced and featureful set of APIs, including Go-to-JavaScript bindings.
|
||||||
@@ -13,7 +14,7 @@ package webview
|
|||||||
#cgo linux openbsd freebsd CFLAGS: -DWEBVIEW_GTK=1 -Wno-deprecated-declarations
|
#cgo linux openbsd freebsd CFLAGS: -DWEBVIEW_GTK=1 -Wno-deprecated-declarations
|
||||||
#cgo linux openbsd freebsd pkg-config: gtk+-3.0 webkit2gtk-4.0
|
#cgo linux openbsd freebsd pkg-config: gtk+-3.0 webkit2gtk-4.0
|
||||||
|
|
||||||
#cgo windows CFLAGS: -DWEBVIEW_WINAPI=1 -std=c99
|
#cgo windows CFLAGS: -DWEBVIEW_WINAPI=1
|
||||||
#cgo windows LDFLAGS: -lole32 -lcomctl32 -loleaut32 -luuid -lgdi32
|
#cgo windows LDFLAGS: -lole32 -lcomctl32 -loleaut32 -luuid -lgdi32
|
||||||
|
|
||||||
#cgo darwin CFLAGS: -DWEBVIEW_COCOA=1 -x objective-c
|
#cgo darwin CFLAGS: -DWEBVIEW_COCOA=1 -x objective-c
|
||||||
|
|||||||
@@ -1,54 +1,6 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import (
|
import "github.com/wailsapp/wails/lib/interfaces"
|
||||||
"bytes"
|
|
||||||
"runtime"
|
|
||||||
|
|
||||||
"github.com/abadojack/whatlanggo"
|
|
||||||
"github.com/wailsapp/wails/lib/interfaces"
|
|
||||||
"golang.org/x/text/encoding"
|
|
||||||
"golang.org/x/text/encoding/japanese"
|
|
||||||
"golang.org/x/text/encoding/korean"
|
|
||||||
"golang.org/x/text/encoding/simplifiedchinese"
|
|
||||||
"golang.org/x/text/transform"
|
|
||||||
)
|
|
||||||
|
|
||||||
func detectEncoding(text string) (encoding.Encoding, string) {
|
|
||||||
// korean
|
|
||||||
var enc encoding.Encoding
|
|
||||||
info := whatlanggo.Detect(text)
|
|
||||||
//fmt.Println("Language:", info.Lang.String(), " Script:", whatlanggo.Scripts[info.Script], " Confidence: ", info.Confidence)
|
|
||||||
switch info.Lang.String() {
|
|
||||||
case "Korean":
|
|
||||||
enc = korean.EUCKR
|
|
||||||
case "Mandarin":
|
|
||||||
enc = simplifiedchinese.GBK
|
|
||||||
case "Japanese":
|
|
||||||
enc = japanese.EUCJP
|
|
||||||
}
|
|
||||||
return enc, info.Lang.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ProcessEncoding attempts to convert CKJ strings to UTF-8
|
|
||||||
func ProcessEncoding(text string) string {
|
|
||||||
if runtime.GOOS != "windows" {
|
|
||||||
return text
|
|
||||||
}
|
|
||||||
|
|
||||||
encoding, _ := detectEncoding(text)
|
|
||||||
if encoding != nil {
|
|
||||||
var bufs bytes.Buffer
|
|
||||||
wr := transform.NewWriter(&bufs, encoding.NewEncoder())
|
|
||||||
_, err := wr.Write([]byte(text))
|
|
||||||
defer wr.Close()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return bufs.String()
|
|
||||||
}
|
|
||||||
return text
|
|
||||||
}
|
|
||||||
|
|
||||||
// Window exposes an interface for manipulating the window
|
// Window exposes an interface for manipulating the window
|
||||||
type Window struct {
|
type Window struct {
|
||||||
@@ -79,7 +31,6 @@ func (r *Window) UnFullscreen() {
|
|||||||
|
|
||||||
// SetTitle sets the the window title
|
// SetTitle sets the the window title
|
||||||
func (r *Window) SetTitle(title string) {
|
func (r *Window) SetTitle(title string) {
|
||||||
title = ProcessEncoding(title)
|
|
||||||
r.renderer.SetTitle(title)
|
r.renderer.SetTitle(title)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user