118 lines
3.2 KiB
Go
118 lines
3.2 KiB
Go
// OSGOS helper
|
|
// =======================================================================================================
|
|
// Author: LLC Texnico <main@texnico.ru>
|
|
// All rights reserved
|
|
// Russia, Chelyabinsk, 2022-2024
|
|
|
|
package main
|
|
|
|
/*
|
|
#cgo linux openbsd freebsd pkg-config: gtk+-3.0 webkit2gtk-4.0
|
|
#include <gtk/gtk.h>
|
|
*/
|
|
import "C"
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"github.com/phillvancejr/webview"
|
|
log "github.com/sirupsen/logrus"
|
|
"io"
|
|
"math/rand"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
port *int
|
|
)
|
|
|
|
func init() {
|
|
log.SetFormatter(&log.TextFormatter{
|
|
DisableQuote: true,
|
|
})
|
|
log.SetLevel(log.InfoLevel)
|
|
log.SetOutput(os.Stdout)
|
|
}
|
|
|
|
//# Если в Windows 10 появляется белый экран при загрузке каких-либо окон, то нужно установить WebView 2
|
|
//https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution
|
|
|
|
//# Если в Windows 10 не открывается loopback, то под администратором надо выполнить:
|
|
//CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.Win32WebViewHost_cw5n1h2txyewy"
|
|
|
|
//# Linux build command
|
|
//$ go build -o helper
|
|
|
|
//# Windows requires special linker flags for GUI apps.
|
|
//# It's also recommended to use TDM-GCC-64 compiler for CGo.
|
|
//# http://tdm-gcc.tdragon.net/download
|
|
//$ go build -ldflags="-H windowsgui" -o helper.exe
|
|
|
|
func main() {
|
|
interrupt := make(chan os.Signal, 1)
|
|
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
|
|
|
|
section := flag.String("section", "help", "целевая папка")
|
|
folder := flag.String("folder", "/usr/share/doc/osgos", "путь до ресурсов")
|
|
maximized := flag.Bool("max", false, "запустить максимального размера")
|
|
minimized := flag.Bool("min", false, "запустить минимального размера")
|
|
fixed := flag.Bool("fixed", false, "размер не изменяем")
|
|
debug := flag.Bool("debug", false, "уровень логов для отладки")
|
|
width := flag.Int("width", 800, "ширина окна")
|
|
height := flag.Int("height", 700, "высотка окна")
|
|
top := flag.Bool("topmost", false, "поверх всех окон")
|
|
port = flag.Int("port", 0, "порт")
|
|
flag.Parse()
|
|
|
|
if *port == 0 {
|
|
rand.Seed(time.Now().UnixNano())
|
|
*port = int(rand.Int31n(1024)) + 10000
|
|
}
|
|
|
|
if *debug {
|
|
log.SetLevel(log.DebugLevel)
|
|
log.SetOutput(nil)
|
|
logFile, _ := os.OpenFile("log.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
|
|
log.SetOutput(io.MultiWriter(logFile, os.Stdout))
|
|
log.Infof("truncate log file")
|
|
}
|
|
|
|
log.Infof("started with log level: %v", log.GetLevel().String())
|
|
|
|
go webThread(*folder, *section)
|
|
|
|
w := webview.New(false)
|
|
if w == nil {
|
|
os.Exit(1)
|
|
}
|
|
|
|
var t webview.Hint
|
|
if *maximized {
|
|
t = webview.HintNone
|
|
C.gtk_window_fullscreen((*C.GtkWindow)(w.Window()))
|
|
} else if *minimized {
|
|
t = webview.HintMin
|
|
} else if *fixed {
|
|
t = webview.HintFixed
|
|
} else {
|
|
t = webview.HintNone
|
|
}
|
|
|
|
if *top {
|
|
w.Topmost(true)
|
|
}
|
|
|
|
defer w.Destroy()
|
|
w.SetTitle("ОСГОС")
|
|
w.SetSize(*width, *height, t)
|
|
w.Center() // Center the window
|
|
w.NoCtx() // remove the right click context menu
|
|
w.Navigate(fmt.Sprintf("http://127.0.0.1:%d/%s/index.html", *port, *section))
|
|
w.Run()
|
|
|
|
log.Infof("finished")
|
|
}
|