123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package updates
- import (
- "encoding/json"
- "fmt"
- "net/http"
- "time"
- "github.com/gorilla/websocket"
- "imuslab.com/arozos/mod/common"
- )
- func HandleUpdateCheckSize(w http.ResponseWriter, r *http.Request) {
- webpack, err := common.Mv(r, "webpack", true)
- if err != nil {
- common.SendErrorResponse(w, "Invalid or empty webpack download URL")
- return
- }
- binary, err := common.Mv(r, "binary", true)
- if err != nil {
- common.SendErrorResponse(w, "Invalid or empty binary download URL")
- return
- }
- bsize, wsize, err := GetUpdateSizes(binary, webpack)
- if err != nil {
- common.SendErrorResponse(w, "Failed to get update size: "+err.Error())
- return
- }
- js, _ := json.Marshal([]int{bsize, wsize})
- common.SendJSONResponse(w, string(js))
- }
- func HandleUpdateDownloadRequest(w http.ResponseWriter, r *http.Request) {
- webpack, err := common.Mv(r, "webpack", false)
- if err != nil {
- common.SendErrorResponse(w, "Invalid or empty webpack download URL")
- return
- }
- binary, err := common.Mv(r, "binary", false)
- if err != nil {
- common.SendErrorResponse(w, "Invalid or empty binary download URL")
- return
- }
- //Update the connection to websocket
- requireWebsocket, _ := common.Mv(r, "ws", false)
- if requireWebsocket == "true" {
- //Upgrade to websocket
- var upgrader = websocket.Upgrader{}
- upgrader.CheckOrigin = func(r *http.Request) bool { return true }
- c, err := upgrader.Upgrade(w, r, nil)
- if err != nil {
- common.SendErrorResponse(w, "Upgrade websocket failed: "+err.Error())
- return
- }
- type Progress struct {
- Stage int
- Progress float64
- StatusText string
- }
- err = DownloadUpdatesFromURL(binary, webpack, func(stage int, progress float64, statusText string) {
- thisProgress := Progress{
- Stage: stage,
- Progress: progress,
- StatusText: statusText,
- }
- js, _ := json.Marshal(thisProgress)
- c.WriteMessage(1, js)
- })
- if err != nil {
- //Finish with error
- c.WriteMessage(1, []byte("{\"error\":\""+err.Error()+"\""))
- } else {
- //Done without error
- c.WriteMessage(1, []byte("OK"))
- }
- //Close WebSocket connection after finished
- c.WriteControl(8, []byte{}, time.Now().Add(time.Second))
- c.Close()
- } else {
- //Just download and return ok after finish
- err = DownloadUpdatesFromURL(binary, webpack, func(stage int, progress float64, statusText string) {
- fmt.Println("Downloading Update, Stage: ", stage, " Progress: ", progress, " Status: ", statusText)
- })
- if err != nil {
- common.SendErrorResponse(w, err.Error())
- } else {
- common.SendOK(w)
- }
- }
- }
- /*
- func HandleLauncherRestart(w http.ResponseWriter, r *http.Request) {
- //Check if there is a launcher listening to port 25576
- resp, err := http.Get("http://127.0.0.1:25576/chk")
- if err != nil {
- common.SendErrorResponse(w, "No launcher found. Unable to restart")
- return
- }
- content, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- common.SendErrorResponse(w, "Read launcher response failed")
- return
- }
- execute, _ := common.Mv(r, "exec", true)
- if execute == "true" && r.Method == http.MethodPost {
- //Do the update
- log.Println("REQUESTING LAUNCHER FOR UPDATE RESTART")
- common.SendOK(w)
- } else if execute == "true" {
- w.WriteHeader(http.StatusMethodNotAllowed)
- w.Write([]byte("405 - Method Not Allowed"))
- } else {
- //Return the launcher message
- common.SendTextResponse(w, string(content))
- }
- }
- */
|