mirror of
https://github.com/taigrr/wails.git
synced 2026-04-02 05:08:54 -07:00
Release v0.19.0 (#285)
* feat: attempt to support Zorin * chore: bump version * Add support for Gentoo * docs: update contributors * feat: test support for Fedora * chore: version bump * Update README.md * feat: major refactor * fix: config errors * fix: capitalisation and binding fix * fix: lint * fix: linting * config: eslint * fix: more lint fixes * fix: linting for hound * Even more fixes * chore: bump version * fix: eslintrc config * fix: renamed global logger * fix: Print stdout on error :rolleyes: * fix: add promises polyfill for the windows target * style: replace double quotes with single quotes * Update contributors * feat: significant overhaul of runtime * chore: Version Bump * Fix Masterminds/semver reference import path (case-sensitivity) * drop lsb_release Signed-off-by: Chronophylos <nikolai@chronophylos.com> * change DistributionID to NAME= Signed-off-by: Chronophylos <nikolai@chronophylos.com> * show distro id when creating a issue Signed-off-by: Chronophylos <nikolai@chronophylos.com> * fix assumption Signed-off-by: Chronophylos <nikolai@chronophylos.com> * docs: updated contributors * fix: add support back for ubuntu, redhat * chore: version bump * fix(linux): fedora & centos support * feat: gcc,npm,node versions on issues * linux working * darwin working * feat: show gcc, node, npm version on issue report * Delete npm-debug.log * fix: crashing typo * trim gcc string * chore: version bump * fix: gitbash fixes * chore: hotfix * fix: issue report * fix: typo * chore: hotfix version bump * 179 parrot distributionsupport (#181) * feat: parrot support && git push * feat: parrot support * feat: parrot support * fix: arch support * fix: gentoos support * Update README.md * Update README.md * chore: bump version * Linux db (#182) * feat: refactor linux distro detection * linux db updates * feat: add gccversioncommand + windows support * fix: build-essential * chore: linter fixes (#185) * 182 linux bd (#183) * fix: linuxdb.yaml entries * fix: typo * fix: yaml syntax error * 188 support distribution linux mint (#189) * chore: update linux db * chore: bump version * chore: merge webview back in * chore: rename webview for clarity * chore: add stale issue bot config * chore: add inprogress label * Azure Pipelines (#192) * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * test: azure pipeline * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * feat: azure pipelines * chore: remove unused mewn file * chore: deduplicate library verificaation code * Update contributors * fix: undefined: webview during build * feat: VoidLinux support * Yaml bug (#207) * test: azure pipeline * fix: azure pipeline yaml * feat: elementary support * feat: opensuse support * fix: 0_setup.go line 27 * fix: 0_setup.go line 27 * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: opensuse yaml * fix: yaml * fix: yaml * fix: yaml * fix: opensuse yaml * fix: opensuse * fix: opensuse * fix: opensuse * fix: opensuse * fix: string trim os osRelease field NAME * fix: 0_setup.go if err typo * test * test * fix: typo in linux.go * test: remove quotes from opensuse case * test: revert * test: "" * test: "" * test: "" * test: "" * fix: replace trim with replace * fix: drop 0_setup.go and run checks by system.go * fix: elementary os yaml name * fix: open suse yaml entry * fix: commented out result.Release = version * fix: commented out result.Release = version * fix: revert Replace to Trim * fix: Linux Mint yaml entry * fix: capitalize distros entries * fix: capitalize distros entries * fix: capitalize distros entries * test * test * fix: open suse yaml entry * fix: yaml entris * test * test * test * test * test * test * branch changing * fix: bug in setup process * debugging * debugging * debugging * debugging * fix: yaml entries & err == nil bug * Update prerequisites.go * fix: bug * fix: 0_setup.go * fix: yaml bug * fix: yaml bug * chore: bump version * Elementary support + readme update (#210) * test: azure pipeline * fix: azure pipeline yaml * feat: elementary support+readme udpate * fix: upgrade eslint * 215 support distribution kali (#219) * test: azure pipeline * fix: azure pipeline yaml * feat: kali linux support * feat: kali linux support * fix: allow 0 return types * duplicate code spotted (#221) * fix: duplicate code * chore: release v0.17.14-pre * chore: remove debug output * (FIX) 215 support distribution kali (#224) * fix: kali support * docs: add Mattn * feat: KDE neon support (#234) * chore: version bump * chore: remove some debug output * fix: binding more than one struct method (#245) * feat: add runtime typings * fix: multiple runtime fixes * manjaro (#248) * manjaro * Update go.mod * chore: version bump * fix: update runtime * chore: version bump * cmd/wails: report error status code to OS (#252) Fixes #251. * Update CONTRIBUTORS.md * chore: version bump * fix: importing runtime (#254) * chore: supress warnings * Patch for file dialog on OSX (#258) * Patch for file dialog on OSX * Update CONTRIBUTORS.md * 262 add wails shutdown method (#264) * feat: support close in bridge mode * feat: WailsShutdown callback Now handles proper shutdown through: * runtime.Window.Close() * Killing the main window * Ctrl-C * chore: version bump * fix: force install when node_modules missing (#268) * fix: detect encoding on windows (#266) * fix: linting * chore: bump version * Migrate tool (#270) Experimental migration tool for projects < v1.0.0 * chore: version bump * fix: add flag to fix windows builds (#272) * Bump version to v0.18.9-pre * 261 korean fonts (#273) * fix: linting * chore: bump version * fix: unicode text for Windows * release v0.18.10-pre * 274 support spaces in windows paths (#275) * fix: escape windows commands * fix: allow spaces in path to windres * Update go.mod * release v0.18.11-pre * 261 korean fonts (#276) * fix: linting * chore: bump version * fix: unicode text for Windows * fix: re-add webview_set_title * release v0.18.12-pre * hotfix: build issue for windows * fix: npm/node version reporting * fix: debug build should use terminal * fix: make binary name more os specific * Backport (#283) * Develop (#265) * Patch for file dialog on OSX * Update CONTRIBUTORS.md * 262 add wails shutdown method (#264) * feat: support close in bridge mode * feat: WailsShutdown callback Now handles proper shutdown through: * runtime.Window.Close() * Killing the main window * Ctrl-C * chore: version bump * chore: version bump * feat: adjust binary name for OS * fix: allow spaces in gcc path * feat: migrate command * fix: npm/node versions * fix: allow IE for serve * feat: go build script * fix: make runtime ES2015 compliant * fix: remove invoke patch * fix: allow any line endings * chore: remove legacy bridge files * chore: latest assets * v0.18.15-pre * fix: remove unicode flag * chore: bump version * release v0.19.0
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -7,6 +7,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/leaanthony/mewn"
|
"github.com/leaanthony/mewn"
|
||||||
@@ -87,6 +88,17 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
|||||||
buildCommand.Add("build")
|
buildCommand.Add("build")
|
||||||
|
|
||||||
if binaryName != "" {
|
if binaryName != "" {
|
||||||
|
// Alter binary name based on OS
|
||||||
|
switch runtime.GOOS {
|
||||||
|
case "windows":
|
||||||
|
if !strings.HasSuffix(binaryName, ".exe") {
|
||||||
|
binaryName += ".exe"
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if strings.HasSuffix(binaryName, ".exe") {
|
||||||
|
binaryName = strings.TrimSuffix(binaryName, ".exe")
|
||||||
|
}
|
||||||
|
}
|
||||||
buildCommand.Add("-o")
|
buildCommand.Add("-o")
|
||||||
buildCommand.Add(binaryName)
|
buildCommand.Add(binaryName)
|
||||||
}
|
}
|
||||||
@@ -103,7 +115,7 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add windows flags
|
// Add windows flags
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" && buildMode == BuildModeProd {
|
||||||
ldflags += "-H windowsgui "
|
ldflags += "-H windowsgui "
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,6 +231,15 @@ 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
|
||||||
|
|||||||
@@ -191,8 +191,15 @@ func (b *PackageHelper) PackageWindows(po *ProjectOptions, cleanUp bool) error {
|
|||||||
|
|
||||||
// Build syso
|
// Build syso
|
||||||
sysofile := filepath.Join(b.fs.Cwd(), basename+"-res.syso")
|
sysofile := filepath.Join(b.fs.Cwd(), basename+"-res.syso")
|
||||||
windresCommand := []string{"windres", "-o", sysofile, tgtRCFile}
|
|
||||||
err := NewProgramHelper().RunCommandArray(windresCommand)
|
batfile, err := fs.LocalDir(".")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
windresBatFile := filepath.Join(batfile.fullPath, "windres.bat")
|
||||||
|
windresCommand := []string{windresBatFile, sysofile, tgtRCFile}
|
||||||
|
err = NewProgramHelper().RunCommandArray(windresCommand)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,6 +100,19 @@ 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, " ")
|
||||||
@@ -115,6 +128,7 @@ func (p *ProgramHelper) RunCommandArray(args []string, dir ...string) error {
|
|||||||
fmt.Printf("ERROR: Looks like '%s' isn't installed. Please install and try again.", program)
|
fmt.Printf("ERROR: Looks like '%s' isn't installed. Please install and try again.", program)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
args = args[1:]
|
args = args[1:]
|
||||||
var stderr string
|
var stderr string
|
||||||
var stdout string
|
var stdout string
|
||||||
|
|||||||
@@ -13,6 +13,18 @@ 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"`
|
||||||
@@ -153,6 +165,23 @@ 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,17 +0,0 @@
|
|||||||
/*
|
|
||||||
Wails Bridge (c) 2019-present Lea Anthony
|
|
||||||
|
|
||||||
This prod version is to get around having to rewrite your code
|
|
||||||
for production. When doing a release build, this file will be used
|
|
||||||
instead of the full version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// The main function
|
|
||||||
// Passes the main Wails object to the callback if given.
|
|
||||||
Start: function(callback) {
|
|
||||||
if (callback) {
|
|
||||||
window.wails.events.on("wails:ready", callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
/*
|
|
||||||
Wails Bridge (c) 2019-present Lea Anthony
|
|
||||||
|
|
||||||
This prod version is to get around having to rewrite your code
|
|
||||||
for production. When doing a release build, this file will be used
|
|
||||||
instead of the full version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// The main function
|
|
||||||
// Passes the main Wails object to the callback if given.
|
|
||||||
Start: function (callback) {
|
|
||||||
if (callback) {
|
|
||||||
window.wails.Events.On("wails:ready", callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
// Version - Wails version
|
// Version - Wails version
|
||||||
const Version = "v0.18.5"
|
const Version = "v0.19.0"
|
||||||
|
|||||||
408
cmd/wails/15_migrate.go
Normal file
408
cmd/wails/15_migrate.go
Normal file
@@ -0,0 +1,408 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
@@ -80,15 +80,16 @@ To help you in this process, we will ask for some information, add Go/Wails deta
|
|||||||
npm := program.FindProgram("npm")
|
npm := program.FindProgram("npm")
|
||||||
if npm != nil {
|
if npm != nil {
|
||||||
stdout, _, _, _ := npm.Run("--version")
|
stdout, _, _, _ := npm.Run("--version")
|
||||||
nodeVersion = stdout
|
npmVersion = stdout
|
||||||
nodeVersion = nodeVersion[:len(nodeVersion)-1]
|
npmVersion = npmVersion[:len(npmVersion)-1]
|
||||||
|
npmVersion = strings.TrimSpace(npmVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
node := program.FindProgram("node")
|
node := program.FindProgram("node")
|
||||||
if node != nil {
|
if node != nil {
|
||||||
stdout, _, _, _ := node.Run("--version")
|
stdout, _, _, _ := node.Run("--version")
|
||||||
npmVersion = stdout
|
nodeVersion = stdout
|
||||||
npmVersion = npmVersion[:len(npmVersion)-1]
|
nodeVersion = nodeVersion[:len(nodeVersion)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
str.WriteString("\n| Name | Value |\n| ----- | ----- |\n")
|
str.WriteString("\n| Name | Value |\n| ----- | ----- |\n")
|
||||||
|
|||||||
1
cmd/windres.bat
Normal file
1
cmd/windres.bat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
windres.exe -o %1 %2
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
package wails
|
package wails
|
||||||
|
|
||||||
import "github.com/leaanthony/mewn"
|
import (
|
||||||
|
"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 {
|
||||||
@@ -65,7 +68,7 @@ func (a *AppConfig) merge(in *AppConfig) error {
|
|||||||
a.CSS = in.CSS
|
a.CSS = in.CSS
|
||||||
}
|
}
|
||||||
if in.Title != "" {
|
if in.Title != "" {
|
||||||
a.Title = in.Title
|
a.Title = runtime.ProcessEncoding(in.Title)
|
||||||
}
|
}
|
||||||
|
|
||||||
if in.Colour != "" {
|
if in.Colour != "" {
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -2,6 +2,7 @@ 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
|
||||||
@@ -26,6 +27,7 @@ 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,6 +2,8 @@ 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=
|
||||||
@@ -85,6 +87,7 @@ 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=
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,5 @@
|
|||||||
// Package wails implements Go bindings to https://github.com/zserge/webview C library.
|
// Package webview 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.
|
||||||
@@ -14,7 +13,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
|
#cgo windows CFLAGS: -DWEBVIEW_WINAPI=1 -std=c99
|
||||||
#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
|
||||||
|
|||||||
@@ -1038,7 +1038,7 @@ struct webview_priv
|
|||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TCHAR *classname = "WebView";
|
static const TCHAR *classname = TEXT("WebView");
|
||||||
static const SAFEARRAYBOUND ArrayBound = {1, 0};
|
static const SAFEARRAYBOUND ArrayBound = {1, 0};
|
||||||
|
|
||||||
static IOleClientSiteVtbl MyIOleClientSiteTable = {
|
static IOleClientSiteVtbl MyIOleClientSiteTable = {
|
||||||
@@ -1227,7 +1227,7 @@ struct webview_priv
|
|||||||
}
|
}
|
||||||
VariantInit(&myURL);
|
VariantInit(&myURL);
|
||||||
myURL.vt = VT_BSTR;
|
myURL.vt = VT_BSTR;
|
||||||
#ifndef UNICODE
|
// #ifndef UNICODE
|
||||||
{
|
{
|
||||||
wchar_t *buffer = webview_to_utf16(webPageName);
|
wchar_t *buffer = webview_to_utf16(webPageName);
|
||||||
if (buffer == NULL)
|
if (buffer == NULL)
|
||||||
@@ -1237,9 +1237,9 @@ struct webview_priv
|
|||||||
myURL.bstrVal = SysAllocString(buffer);
|
myURL.bstrVal = SysAllocString(buffer);
|
||||||
GlobalFree(buffer);
|
GlobalFree(buffer);
|
||||||
}
|
}
|
||||||
#else
|
// #else
|
||||||
myURL.bstrVal = SysAllocString(webPageName);
|
// myURL.bstrVal = SysAllocString(webPageName);
|
||||||
#endif
|
// #endif
|
||||||
if (!myURL.bstrVal)
|
if (!myURL.bstrVal)
|
||||||
{
|
{
|
||||||
badalloc:
|
badalloc:
|
||||||
@@ -1277,7 +1277,7 @@ struct webview_priv
|
|||||||
if (!SafeArrayAccessData(sfArray, (void **)&pVar))
|
if (!SafeArrayAccessData(sfArray, (void **)&pVar))
|
||||||
{
|
{
|
||||||
pVar->vt = VT_BSTR;
|
pVar->vt = VT_BSTR;
|
||||||
#ifndef UNICODE
|
// #ifndef UNICODE
|
||||||
{
|
{
|
||||||
wchar_t *buffer = webview_to_utf16(url);
|
wchar_t *buffer = webview_to_utf16(url);
|
||||||
if (buffer == NULL)
|
if (buffer == NULL)
|
||||||
@@ -1287,9 +1287,9 @@ struct webview_priv
|
|||||||
bstr = SysAllocString(buffer);
|
bstr = SysAllocString(buffer);
|
||||||
GlobalFree(buffer);
|
GlobalFree(buffer);
|
||||||
}
|
}
|
||||||
#else
|
// #else
|
||||||
bstr = SysAllocString(string);
|
// bstr = SysAllocString(url);
|
||||||
#endif
|
// #endif
|
||||||
if ((pVar->bstrVal = bstr))
|
if ((pVar->bstrVal = bstr))
|
||||||
{
|
{
|
||||||
htmlDoc2->lpVtbl->write(htmlDoc2, sfArray);
|
htmlDoc2->lpVtbl->write(htmlDoc2, sfArray);
|
||||||
@@ -1404,6 +1404,7 @@ struct webview_priv
|
|||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ZeroMemory(&wc, sizeof(WNDCLASSEX));
|
ZeroMemory(&wc, sizeof(WNDCLASSEX));
|
||||||
wc.cbSize = sizeof(WNDCLASSEX);
|
wc.cbSize = sizeof(WNDCLASSEX);
|
||||||
wc.hInstance = hInstance;
|
wc.hInstance = hInstance;
|
||||||
@@ -1431,10 +1432,24 @@ struct webview_priv
|
|||||||
rect.bottom = rect.bottom - rect.top + top;
|
rect.bottom = rect.bottom - rect.top + top;
|
||||||
rect.top = top;
|
rect.top = top;
|
||||||
|
|
||||||
|
#ifdef UNICODE
|
||||||
|
wchar_t *u16title = webview_to_utf16(w->title);
|
||||||
|
if (u16title == NULL)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
w->priv.hwnd =
|
w->priv.hwnd =
|
||||||
|
CreateWindowEx(0, classname, u16title, style, rect.left, rect.top,
|
||||||
|
rect.right - rect.left, rect.bottom - rect.top,
|
||||||
|
HWND_DESKTOP, NULL, hInstance, (void *)w);
|
||||||
|
#else
|
||||||
|
w->priv.hwnd =
|
||||||
CreateWindowEx(0, classname, w->title, style, rect.left, rect.top,
|
CreateWindowEx(0, classname, w->title, style, rect.left, rect.top,
|
||||||
rect.right - rect.left, rect.bottom - rect.top,
|
rect.right - rect.left, rect.bottom - rect.top,
|
||||||
HWND_DESKTOP, NULL, hInstance, (void *)w);
|
HWND_DESKTOP, NULL, hInstance, (void *)w);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (w->priv.hwnd == 0)
|
if (w->priv.hwnd == 0)
|
||||||
{
|
{
|
||||||
OleUninitialize();
|
OleUninitialize();
|
||||||
@@ -1445,7 +1460,14 @@ struct webview_priv
|
|||||||
|
|
||||||
DisplayHTMLPage(w);
|
DisplayHTMLPage(w);
|
||||||
|
|
||||||
|
#ifdef UNICODE
|
||||||
|
SetWindowText(w->priv.hwnd, u16title);
|
||||||
|
GlobalFree(u16title);
|
||||||
|
#else
|
||||||
SetWindowText(w->priv.hwnd, w->title);
|
SetWindowText(w->priv.hwnd, w->title);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
ShowWindow(w->priv.hwnd, SW_SHOWDEFAULT);
|
ShowWindow(w->priv.hwnd, SW_SHOWDEFAULT);
|
||||||
UpdateWindow(w->priv.hwnd);
|
UpdateWindow(w->priv.hwnd);
|
||||||
SetFocus(w->priv.hwnd);
|
SetFocus(w->priv.hwnd);
|
||||||
@@ -1581,9 +1603,20 @@ struct webview_priv
|
|||||||
|
|
||||||
WEBVIEW_API void webview_set_title(struct webview *w, const char *title)
|
WEBVIEW_API void webview_set_title(struct webview *w, const char *title)
|
||||||
{
|
{
|
||||||
|
#ifdef UNICODE
|
||||||
|
wchar_t *u16title = webview_to_utf16(title);
|
||||||
|
if (u16title == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SetWindowText(w->priv.hwnd, u16title);
|
||||||
|
GlobalFree(u16title);
|
||||||
|
#else
|
||||||
SetWindowText(w->priv.hwnd, title);
|
SetWindowText(w->priv.hwnd, title);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen)
|
WEBVIEW_API void webview_set_fullscreen(struct webview *w, int fullscreen)
|
||||||
{
|
{
|
||||||
if (w->priv.is_fullscreen == !!fullscreen)
|
if (w->priv.is_fullscreen == !!fullscreen)
|
||||||
|
|||||||
@@ -95,13 +95,6 @@ function startBridge() {
|
|||||||
window.wailsbridge.reconnectOverlay.style.display = 'none';
|
window.wailsbridge.reconnectOverlay.style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bridge external.invoke
|
|
||||||
window.external = {
|
|
||||||
invoke: function (msg) {
|
|
||||||
window.wailsbridge.websocket.send(msg);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Adds a script to the Dom.
|
// Adds a script to the Dom.
|
||||||
// Removes it if second parameter is true.
|
// Removes it if second parameter is true.
|
||||||
function addScript(script, remove) {
|
function addScript(script, remove) {
|
||||||
@@ -214,4 +207,4 @@ function Init(callback) {
|
|||||||
start(callback);
|
start(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Init;
|
module.exports = Init;
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
!function(n){var t={};function e(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return n[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=n,e.c=t,e.d=function(n,t,r){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:r})},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)e.d(r,o,function(t){return n[t]}.bind(null,o));return r},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="",e(e.s=0)}([function(n,t,e){"use strict";e.r(t);var r={};e.r(r),e.d(r,"Debug",function(){return c}),e.d(r,"Info",function(){return u}),e.d(r,"Warning",function(){return l}),e.d(r,"Error",function(){return f}),e.d(r,"Fatal",function(){return d});var o={};function i(n,t,e){var r={type:n,callbackID:e,payload:t};!function(n){window.external.invoke(n)}(JSON.stringify(r))}function a(n,t){i("log",{level:n,message:t})}function c(n){a("debug",n)}function u(n){a("info",n)}function l(n){a("warning",n)}function f(n){a("error",n)}function d(n){a("fatal",n)}e.r(o),e.d(o,"OpenURL",function(){return y}),e.d(o,"OpenFile",function(){return g});var s,p={};function v(n,t,e){return null!=e&&null!=e||(e=0),new Promise(function(r,o){var a;do{a=n+"-"+s()}while(p[a]);if(e>0)var c=setTimeout(function(){o(Error("Call to "+n+" timed out. Request ID: "+a))},e);p[a]={timeoutHandle:c,reject:o,resolve:r};try{i("call",{bindingName:n,data:JSON.stringify(t)},a)}catch(n){console.error(n)}})}function w(n,t){return v(".wails."+n,t)}function y(n){return w("Browser.OpenURL",n)}function g(n){return w("Browser.OpenFile",n)}s=window.crypto?function(){var n=new Uint32Array(1);return window.crypto.getRandomValues(n)[0]}:function(){return 9007199254740991*Math.random()};var m=function n(t,e){!function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),e=e||-1,this.Callback=function(n){return t.apply(null,n),-1!==e&&0===(e-=1)}},b={};function h(n,t,e){b[n]=b[n]||[];var r=new m(t,e);b[n].push(r)}function O(n){i("event",{name:n,data:JSON.stringify([].slice.apply(arguments).slice(1))})}var S={};function j(n){try{return new Function("var "+n),!0}catch(n){return!1}}function k(){return(k=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r])}return n}).apply(this,arguments)}window.backend={},e.d(t,"Init",function(){return N}),window.wails=window.wails||{},window.backend={};var E={NewBinding:function(n){var t=[].concat(n.split(".").splice(1)),e=window.backend;if(t.length>1)for(var r=0;r<t.length-1;r+=1){var o=t[r];if(!j(o))return new Error("".concat(o," is not a valid javascript identifier."));e[o]||(e[o]={}),e=e[o]}var i=t.pop();if(!j(i))return new Error("".concat(i," is not a valid javascript identifier."));e[i]=function(){var t=0;function e(){var e=[].slice.call(arguments);return v(n,e,t)}return e.setTimeout=function(n){t=n},e.getTimeout=function(){return t},e}()},Callback:function(n){var t;n=decodeURIComponent(n.replace(/\s+/g,"").replace(/[0-9a-f]{2}/g,"%$&"));try{t=JSON.parse(n)}catch(t){var e="Invalid JSON passed to callback: ".concat(t.message,". Message: ").concat(n);throw c(e),new Error(e)}var r=t.callbackid,o=p[r];if(!o){var i="Callback '".concat(r,"' not registed!!!");throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete p[r],t.error?o.reject(t.error):o.resolve(t.data)},Notify:function(n,t){if(b[n]){for(var e=b[n].slice(),r=0;r<b[n].length;r+=1){var o=b[n][r],i=[];if(t)try{i=JSON.parse(t)}catch(t){f("Invalid JSON data sent to notify. Event name = "+n)}o.Callback(i)&&e.splice(r,1)}b[n]=e}},AddScript:function(n,t){var e=document.createElement("script");e.text=n,document.body.appendChild(e),t&&O(t)},InjectCSS:function(n){var t=document.createElement("style");t.setAttribute("type","text/css"),t.styleSheet?t.styleSheet.cssText=n:t.appendChild(document.createTextNode(n)),(document.head||document.getElementsByTagName("head")[0]).appendChild(t)},Init:N},C={Log:r,Browser:o,Events:{On:function(n,t){h(n,t)},OnMultiple:h,Emit:O,Heartbeat:function(n,t,e){var r=null;S[n]=function(){clearInterval(r),e()},r=setInterval(function(){O(n)},t)},Acknowledge:function(n){if(!S[n])throw new f("Cannot acknowledge unknown heartbeat '".concat(n,"'"));S[n]()}},_:E};function N(n){n()}k(window.wails,C),O("wails:loaded")}]);
|
!function(n){var e={};function t(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return n[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:r})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(r,o,function(e){return n[e]}.bind(null,o));return r},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){"use strict";t.r(e);var r={};t.r(r),t.d(r,"Debug",function(){return c}),t.d(r,"Info",function(){return u}),t.d(r,"Warning",function(){return l}),t.d(r,"Error",function(){return f}),t.d(r,"Fatal",function(){return d});var o={};function i(n,e,t){var r={type:n,callbackID:t,payload:e};!function(n){window.wailsbridge?window.wailsbridge.websocket.send(n):window.external.invoke(n)}(JSON.stringify(r))}function a(n,e){i("log",{level:n,message:e})}function c(n){a("debug",n)}function u(n){a("info",n)}function l(n){a("warning",n)}function f(n){a("error",n)}function d(n){a("fatal",n)}t.r(o),t.d(o,"OpenURL",function(){return y}),t.d(o,"OpenFile",function(){return g});var s,p={};function w(n,e,t){return null!=t&&null!=t||(t=0),new Promise(function(r,o){var a;do{a=n+"-"+s()}while(p[a]);if(t>0)var c=setTimeout(function(){o(Error("Call to "+n+" timed out. Request ID: "+a))},t);p[a]={timeoutHandle:c,reject:o,resolve:r};try{i("call",{bindingName:n,data:JSON.stringify(e)},a)}catch(n){console.error(n)}})}function v(n,e){return w(".wails."+n,e)}function y(n){return v("Browser.OpenURL",n)}function g(n){return v("Browser.OpenFile",n)}s=window.crypto?function(){var n=new Uint32Array(1);return window.crypto.getRandomValues(n)[0]}:function(){return 9007199254740991*Math.random()};var b=function n(e,t){!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),t=t||-1,this.Callback=function(n){return e.apply(null,n),-1!==t&&0===(t-=1)}},m={};function h(n,e,t){m[n]=m[n]||[];var r=new b(e,t);m[n].push(r)}function O(n){i("event",{name:n,data:JSON.stringify([].slice.apply(arguments).slice(1))})}var S={};function k(n){try{return new Function("var "+n),!0}catch(n){return!1}}function j(){return(j=Object.assign||function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n}).apply(this,arguments)}window.backend={},t.d(e,"Init",function(){return N}),window.wails=window.wails||{},window.backend={};var E={NewBinding:function(n){var e=[].concat(n.split(".").splice(1)),t=window.backend;if(e.length>1)for(var r=0;r<e.length-1;r+=1){var o=e[r];if(!k(o))return new Error("".concat(o," is not a valid javascript identifier."));t[o]||(t[o]={}),t=t[o]}var i=e.pop();if(!k(i))return new Error("".concat(i," is not a valid javascript identifier."));t[i]=function(){var e=0;function t(){var t=[].slice.call(arguments);return w(n,t,e)}return t.setTimeout=function(n){e=n},t.getTimeout=function(){return e},t}()},Callback:function(n){var e;n=decodeURIComponent(n.replace(/\s+/g,"").replace(/[0-9a-f]{2}/g,"%$&"));try{e=JSON.parse(n)}catch(e){var t="Invalid JSON passed to callback: ".concat(e.message,". Message: ").concat(n);throw c(t),new Error(t)}var r=e.callbackid,o=p[r];if(!o){var i="Callback '".concat(r,"' not registed!!!");throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete p[r],e.error?o.reject(e.error):o.resolve(e.data)},Notify:function(n,e){if(m[n]){for(var t=m[n].slice(),r=0;r<m[n].length;r+=1){var o=m[n][r],i=[];if(e)try{i=JSON.parse(e)}catch(e){f("Invalid JSON data sent to notify. Event name = "+n)}o.Callback(i)&&t.splice(r,1)}m[n]=t}},AddScript:function(n,e){var t=document.createElement("script");t.text=n,document.body.appendChild(t),e&&O(e)},InjectCSS:function(n){var e=document.createElement("style");e.setAttribute("type","text/css"),e.styleSheet?e.styleSheet.cssText=n:e.appendChild(document.createTextNode(n)),(document.head||document.getElementsByTagName("head")[0]).appendChild(e)},Init:N},C={Log:r,Browser:o,Events:{On:function(n,e){h(n,e)},OnMultiple:h,Emit:O,Heartbeat:function(n,e,t){var r=null;S[n]=function(){clearInterval(r),t()},r=setInterval(function(){O(n)},e)},Acknowledge:function(n){if(!S[n])throw new f("Cannot acknowledge unknown heartbeat '".concat(n,"'"));S[n]()}},_:E};function N(n){n()}j(window.wails,C),O("wails:loaded")}]);
|
||||||
@@ -15,10 +15,7 @@
|
|||||||
"error",
|
"error",
|
||||||
"tab"
|
"tab"
|
||||||
],
|
],
|
||||||
"linebreak-style": [
|
"linebreak-style": 0,
|
||||||
"error",
|
|
||||||
"unix"
|
|
||||||
],
|
|
||||||
"quotes": [
|
"quotes": [
|
||||||
"error",
|
"error",
|
||||||
"single"
|
"single"
|
||||||
@@ -28,4 +25,4 @@
|
|||||||
"always"
|
"always"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,11 @@ The lightweight framework for web-like apps
|
|||||||
* @param {string} message
|
* @param {string} message
|
||||||
*/
|
*/
|
||||||
function Invoke(message) {
|
function Invoke(message) {
|
||||||
window.external.invoke(message);
|
if ( window.wailsbridge ) {
|
||||||
|
window.wailsbridge.websocket.send(message);
|
||||||
|
} else {
|
||||||
|
window.external.invoke(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ function OpenFile(filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
OpenURL,
|
OpenURL: OpenURL,
|
||||||
OpenFile
|
OpenFile: OpenFile
|
||||||
};
|
};
|
||||||
@@ -80,10 +80,10 @@ function Acknowledge(eventName) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
OnMultiple,
|
OnMultiple: OnMultiple,
|
||||||
On,
|
On: On,
|
||||||
Once,
|
Once: Once,
|
||||||
Emit,
|
Emit: Emit,
|
||||||
Heartbeat,
|
Heartbeat: Heartbeat,
|
||||||
Acknowledge
|
Acknowledge: Acknowledge
|
||||||
};
|
};
|
||||||
@@ -62,9 +62,9 @@ function Fatal(message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
Debug,
|
Debug: Debug,
|
||||||
Info,
|
Info: Info,
|
||||||
Warning,
|
Warning: Warning,
|
||||||
Error,
|
Error: Error,
|
||||||
Fatal
|
Fatal: Fatal
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ const Events = require('./events');
|
|||||||
const Init = require('./init');
|
const Init = require('./init');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
Log,
|
Log: Log,
|
||||||
Browser,
|
Browser: Browser,
|
||||||
Events,
|
Events: Events,
|
||||||
Init
|
Init: Init
|
||||||
};
|
};
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@wailsapp/runtime",
|
"name": "@wailsapp/runtime",
|
||||||
"version": "1.0.6",
|
"version": "1.0.9",
|
||||||
"description": "Wails Javascript runtime library",
|
"description": "Wails Javascript runtime library",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"types": "runtime.d.ts",
|
"types": "runtime.d.ts",
|
||||||
|
|||||||
@@ -1,6 +1,54 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import "github.com/wailsapp/wails/lib/interfaces"
|
import (
|
||||||
|
"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 {
|
||||||
@@ -31,6 +79,7 @@ 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
83
scripts/build.go
Normal file
83
scripts/build.go
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Default target to run when none is specified
|
||||||
|
// If not set, running mage will list available targets
|
||||||
|
// var Default = Build
|
||||||
|
|
||||||
|
/*
|
||||||
|
# Build runtime
|
||||||
|
echo "**** Building Runtime ****"
|
||||||
|
cd runtime/js
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
echo "**** Packing Assets ****"
|
||||||
|
cd cmd
|
||||||
|
mewn
|
||||||
|
cd ..
|
||||||
|
cd lib/renderer
|
||||||
|
mewn
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
echo "**** Installing Wails locally ****"
|
||||||
|
cd cmd/wails
|
||||||
|
go install
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
echo "**** Tidying the mods! ****"
|
||||||
|
go mod tidy
|
||||||
|
|
||||||
|
echo "**** WE ARE DONE! ****"
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
func runCommand(command string, args ...string) {
|
||||||
|
cmd := exec.Command(command, args...)
|
||||||
|
output, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
cmd.Run()
|
||||||
|
fmt.Println(string(output))
|
||||||
|
}
|
||||||
|
|
||||||
|
// A build step that requires additional params, or platform specific steps for example
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
dir, _ := os.Getwd()
|
||||||
|
|
||||||
|
// Build Runtime
|
||||||
|
fmt.Println("**** Building Runtime ****")
|
||||||
|
runtimeDir, _ := filepath.Abs(filepath.Join(dir, "..", "runtime", "js"))
|
||||||
|
os.Chdir(runtimeDir)
|
||||||
|
runCommand("npm", "install")
|
||||||
|
runCommand("npm", "run", "build")
|
||||||
|
|
||||||
|
// Pack assets
|
||||||
|
fmt.Println("**** Packing Assets ****")
|
||||||
|
rendererDir, _ := filepath.Abs(filepath.Join(dir, "..", "lib", "renderer"))
|
||||||
|
os.Chdir(rendererDir)
|
||||||
|
runCommand("mewn")
|
||||||
|
cmdDir, _ := filepath.Abs(filepath.Join(dir, "..", "cmd"))
|
||||||
|
os.Chdir(cmdDir)
|
||||||
|
runCommand("mewn")
|
||||||
|
|
||||||
|
// Install Wails
|
||||||
|
fmt.Println("**** Installing Wails locally ****")
|
||||||
|
execDir, _ := filepath.Abs(filepath.Join(dir, "..", "cmd", "wails"))
|
||||||
|
os.Chdir(execDir)
|
||||||
|
runCommand("go", "install")
|
||||||
|
|
||||||
|
baseDir, _ := filepath.Abs(filepath.Join(dir, ".."))
|
||||||
|
os.Chdir(baseDir)
|
||||||
|
runCommand("go", "mod", "tidy")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user