mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-30 09:32:05 -04:00
Move system update flow to GO, with a CLI (convenient AIO tool) and server integration. All lifecycle, scheduling, execution occurs on backend side. Run some backends via pkexec, some via terminal like paru/yay. Incorporate flatpak as an option to update. Add terminal override setting in GUI, in addition to $TERMINAL env variable. fixes #2307 fixes #822 fixes #1102 fixes #1812 fixes #1087 fixes #1743
56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
package sysupdate
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/models"
|
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/server/params"
|
|
)
|
|
|
|
func HandleRequest(conn net.Conn, req models.Request, m *Manager) {
|
|
switch req.Method {
|
|
case "sysupdate.getState":
|
|
models.Respond(conn, req.ID, m.GetState())
|
|
case "sysupdate.refresh":
|
|
force := params.BoolOpt(req.Params, "force", false)
|
|
m.Refresh(RefreshOptions{Force: force})
|
|
models.Respond(conn, req.ID, m.GetState())
|
|
case "sysupdate.upgrade":
|
|
handleUpgrade(conn, req, m)
|
|
case "sysupdate.cancel":
|
|
m.Cancel()
|
|
models.Respond(conn, req.ID, m.GetState())
|
|
case "sysupdate.acquire":
|
|
m.Acquire()
|
|
models.Respond(conn, req.ID, models.SuccessResult{Success: true})
|
|
case "sysupdate.release":
|
|
m.Release()
|
|
models.Respond(conn, req.ID, models.SuccessResult{Success: true})
|
|
case "sysupdate.setInterval":
|
|
seconds, err := params.Int(req.Params, "seconds")
|
|
if err != nil {
|
|
models.RespondError(conn, req.ID, err.Error())
|
|
return
|
|
}
|
|
m.SetInterval(seconds)
|
|
models.Respond(conn, req.ID, m.GetState())
|
|
default:
|
|
models.RespondError(conn, req.ID, "unknown method: "+req.Method)
|
|
}
|
|
}
|
|
|
|
func handleUpgrade(conn net.Conn, req models.Request, m *Manager) {
|
|
opts := UpgradeOptions{
|
|
IncludeFlatpak: params.BoolOpt(req.Params, "includeFlatpak", true),
|
|
IncludeAUR: params.BoolOpt(req.Params, "includeAUR", true),
|
|
DryRun: params.BoolOpt(req.Params, "dry", false),
|
|
CustomCommand: params.StringOpt(req.Params, "customCommand", ""),
|
|
Terminal: params.StringOpt(req.Params, "terminal", ""),
|
|
}
|
|
if err := m.Upgrade(opts); err != nil {
|
|
models.RespondError(conn, req.ID, err.Error())
|
|
return
|
|
}
|
|
models.Respond(conn, req.ID, m.GetState())
|
|
}
|