mirror of
https://codeberg.org/PLG-Development/PLG-MuDiCS
synced 2026-07-05 16:37:09 +00:00
chore: more error handling
This commit is contained in:
+17
-6
@@ -42,8 +42,12 @@ func (b *BrowserType) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BrowserType) OpenPage(url string) {
|
||||
chromedp.Run(b.Ctx, chromedp.Navigate(url))
|
||||
func (b *BrowserType) OpenPage(url string) error {
|
||||
err := chromedp.Run(b.Ctx, chromedp.Navigate(url))
|
||||
if err != nil {
|
||||
return fmt.Errorf("navigate to URL: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Yes, we need that trick with creating a temp file and not directly sending html since
|
||||
@@ -55,18 +59,25 @@ func (b *BrowserType) OpenHTML(html string) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not create tempfile: %w", err)
|
||||
}
|
||||
defer tempFile.Close()
|
||||
defer func() { _ = tempFile.Close() }()
|
||||
|
||||
_, err = tempFile.WriteString(html)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not write to tempfile: %w", err)
|
||||
}
|
||||
|
||||
chromedp.Run(b.Ctx, chromedp.Navigate("file://"+tempFile.Name()))
|
||||
err = chromedp.Run(b.Ctx, chromedp.Navigate("file://"+tempFile.Name()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("navigate to URL: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BrowserType) OpenPDF(path string) {
|
||||
b.OpenPage("file://" + path + "#toolbar=0&view=Fit")
|
||||
func (b *BrowserType) OpenPDF(path string) error {
|
||||
err := b.OpenPage("file://" + path + "#toolbar=0&view=Fit")
|
||||
if err != nil {
|
||||
return fmt.Errorf("open PDF: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
+10
-3
@@ -17,7 +17,6 @@ func main() {
|
||||
if err != nil {
|
||||
slog.Error("Failed to get storage path", "error", err)
|
||||
os.Exit(1)
|
||||
return
|
||||
}
|
||||
port := "1323"
|
||||
|
||||
@@ -25,8 +24,16 @@ func main() {
|
||||
// and since its the last action in the main go func all other goroutines (e.g. the webserver) are killed
|
||||
go web.StartWebServer(port)
|
||||
|
||||
browser.Browser.Init()
|
||||
pkg.OpenStartScreen()
|
||||
err = browser.Browser.Init()
|
||||
if err != nil {
|
||||
slog.Error("Initialize browser", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
err = pkg.OpenStartScreen()
|
||||
if err != nil {
|
||||
slog.Error("Open start screen", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer browser.Browser.Cancel()
|
||||
<-browser.Browser.Ctx.Done()
|
||||
}
|
||||
|
||||
+1
-1
@@ -83,7 +83,7 @@ func ShowHTML(html string) error {
|
||||
ResetView()
|
||||
|
||||
var templateBuffer bytes.Buffer
|
||||
htmlTemplate(html).Render(context.Background(), &templateBuffer)
|
||||
_ = htmlTemplate(html).Render(context.Background(), &templateBuffer)
|
||||
err := browser.Browser.OpenHTML(templateBuffer.String())
|
||||
|
||||
return err
|
||||
|
||||
@@ -27,26 +27,30 @@ func OpenFile(path string) error {
|
||||
|
||||
mType, err := mimetype.DetectFile(path)
|
||||
if err != nil {
|
||||
slog.Error("Failed to detect mime type", "file", path, "error", err)
|
||||
return fmt.Errorf("detect mime type of file %q: %w", path, err)
|
||||
}
|
||||
|
||||
switch mType.String() {
|
||||
case "video/mp4":
|
||||
var templateBuffer bytes.Buffer
|
||||
videoTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
browser.Browser.OpenHTML(templateBuffer.String())
|
||||
_ = videoTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
err = browser.Browser.OpenHTML(templateBuffer.String())
|
||||
case "image/jpeg", "image/png", "image/gif":
|
||||
var templateBuffer bytes.Buffer
|
||||
imageTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
browser.Browser.OpenHTML(templateBuffer.String())
|
||||
_ = imageTemplate(path).Render(context.Background(), &templateBuffer)
|
||||
err = browser.Browser.OpenHTML(templateBuffer.String())
|
||||
case "application/pdf":
|
||||
browser.Browser.OpenPDF(path)
|
||||
err = browser.Browser.OpenPDF(path)
|
||||
case "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.oasis.opendocument.presentation":
|
||||
err = fileHandler.openFileWithApp(path)
|
||||
default:
|
||||
return fmt.Errorf("unsupported file type: %s", mType.String())
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to open file: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"image/color"
|
||||
"log/slog"
|
||||
"net"
|
||||
"os"
|
||||
"plg-mudics/shared"
|
||||
@@ -16,7 +15,7 @@ import (
|
||||
"github.com/skip2/go-qrcode"
|
||||
)
|
||||
|
||||
func OpenStartScreen() {
|
||||
func OpenStartScreen() error {
|
||||
var err error
|
||||
|
||||
raw := shared.RawSplashScreenTemplate
|
||||
@@ -24,11 +23,11 @@ func OpenStartScreen() {
|
||||
|
||||
ip, err := getDeviceIp()
|
||||
if err != nil {
|
||||
slog.Error("Failed to get device IP", "error", err)
|
||||
return fmt.Errorf("get device IP: %w", err)
|
||||
}
|
||||
mac, err := getDeviceMac()
|
||||
if err != nil {
|
||||
slog.Error("Failed to get device MAC address", "error", err)
|
||||
return fmt.Errorf("get device MAC address: %w", err)
|
||||
}
|
||||
|
||||
port := 8080
|
||||
@@ -37,13 +36,17 @@ func OpenStartScreen() {
|
||||
if showQrCode {
|
||||
qrCodePath, err = generateQRCode(fmt.Sprintf("http://%s:%d", ip, port))
|
||||
if err != nil {
|
||||
slog.Error("could not generate qr code", "error", err)
|
||||
return fmt.Errorf("generate QR code: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
var templateBuffer bytes.Buffer
|
||||
startScreenTemplate(html, ip, mac, qrCodePath).Render(context.Background(), &templateBuffer)
|
||||
browser.Browser.OpenHTML(templateBuffer.String())
|
||||
_ = startScreenTemplate(html, ip, mac, qrCodePath).Render(context.Background(), &templateBuffer)
|
||||
err = browser.Browser.OpenHTML(templateBuffer.String())
|
||||
if err != nil {
|
||||
return fmt.Errorf("open start screen in browser: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getDeviceIp() (string, error) {
|
||||
@@ -106,7 +109,7 @@ func generateQRCode(data string) (string, error) {
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("could not save qr code: %w", err)
|
||||
}
|
||||
defer file.Close()
|
||||
defer func() { _ = file.Close() }()
|
||||
|
||||
_, err = file.Write(png)
|
||||
if err != nil {
|
||||
|
||||
+11
-2
@@ -162,7 +162,10 @@ func uploadFileRoute(ctx echo.Context) error {
|
||||
slog.Error("Failed to close file", "file", fullPath, "error", fileCloseErr)
|
||||
}
|
||||
if err != nil {
|
||||
os.Remove(fullPath)
|
||||
err = os.Remove(fullPath)
|
||||
if err != nil {
|
||||
slog.Warn("could not remove broken file", "file", fullPath, "error", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -280,6 +283,8 @@ func previewRoute(ctx echo.Context) error {
|
||||
}
|
||||
|
||||
func openWebsiteRoute(ctx echo.Context) error {
|
||||
var err error
|
||||
|
||||
var request struct {
|
||||
URL string `json:"url"`
|
||||
}
|
||||
@@ -290,7 +295,11 @@ func openWebsiteRoute(ctx echo.Context) error {
|
||||
|
||||
slog.Info("Opening url")
|
||||
|
||||
browser.Browser.OpenPage(request.URL)
|
||||
err = browser.Browser.OpenPage(request.URL)
|
||||
if err != nil {
|
||||
slog.Error("Failed to open website", "url", request.URL, "error", err)
|
||||
return ctx.JSON(http.StatusInternalServerError, shared.ErrorResponse{Description: "Failed to open website"})
|
||||
}
|
||||
|
||||
return ctx.JSON(http.StatusOK, struct{}{})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user