mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 22:50:59 +08:00
Feature/1175 default index page (#1229)
* Initial commit * Retry index.html every 500ms for 5s before defaulting to the default index page. * Load all files using the same technique * Remove reload script
This commit is contained in:
parent
ba0b173e02
commit
ae6da05e9d
@ -3,14 +3,19 @@ package assetserver
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
_ "embed"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/wailsapp/wails/v2/internal/frontend/runtime"
|
"github.com/wailsapp/wails/v2/internal/frontend/runtime"
|
||||||
"github.com/wailsapp/wails/v2/internal/logger"
|
"github.com/wailsapp/wails/v2/internal/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed defaultindex.html
|
||||||
|
var defaultHTML []byte
|
||||||
|
|
||||||
type DesktopAssetServer struct {
|
type DesktopAssetServer struct {
|
||||||
assets fs.FS
|
assets fs.FS
|
||||||
runtimeJS []byte
|
runtimeJS []byte
|
||||||
@ -45,10 +50,24 @@ func (d *DesktopAssetServer) LogDebug(message string, args ...interface{}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *DesktopAssetServer) processIndexHTML() ([]byte, error) {
|
// loadFile will try to load the file from disk. If there is an error
|
||||||
indexHTML, err := fs.ReadFile(a.assets, "index.html")
|
// it will retry until eventually it will give up and error.
|
||||||
|
func (d *DesktopAssetServer) loadFile(filename string) ([]byte, error) {
|
||||||
|
var result []byte
|
||||||
|
var err error
|
||||||
|
for tries := 0; tries < 50; tries++ {
|
||||||
|
result, err = fs.ReadFile(d.assets, filename)
|
||||||
|
if err != nil {
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DesktopAssetServer) processIndexHTML() ([]byte, error) {
|
||||||
|
indexHTML, err := d.loadFile("index.html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
indexHTML = defaultHTML
|
||||||
}
|
}
|
||||||
wailsOptions, err := extractOptions(indexHTML)
|
wailsOptions, err := extractOptions(indexHTML)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -71,20 +90,20 @@ func (a *DesktopAssetServer) processIndexHTML() ([]byte, error) {
|
|||||||
return indexHTML, nil
|
return indexHTML, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *DesktopAssetServer) Load(filename string) ([]byte, string, error) {
|
func (d *DesktopAssetServer) Load(filename string) ([]byte, string, error) {
|
||||||
var content []byte
|
var content []byte
|
||||||
var err error
|
var err error
|
||||||
switch filename {
|
switch filename {
|
||||||
case "/":
|
case "/":
|
||||||
content, err = a.processIndexHTML()
|
content, err = d.processIndexHTML()
|
||||||
case "/wails/runtime.js":
|
case "/wails/runtime.js":
|
||||||
content = a.runtimeJS
|
content = d.runtimeJS
|
||||||
case "/wails/ipc.js":
|
case "/wails/ipc.js":
|
||||||
content = runtime.DesktopIPC
|
content = runtime.DesktopIPC
|
||||||
default:
|
default:
|
||||||
filename = strings.TrimPrefix(filename, "/")
|
filename = strings.TrimPrefix(filename, "/")
|
||||||
a.LogDebug("Loading file: %s", filename)
|
d.LogDebug("Loading file: %s", filename)
|
||||||
content, err = fs.ReadFile(a.assets, filename)
|
content, err = d.loadFile(filename)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
|
39
v2/internal/frontend/assetserver/defaultindex.html
Normal file
39
v2/internal/frontend/assetserver/defaultindex.html
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user