mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
got screen:new and screen:del implemented
This commit is contained in:
@@ -21,6 +21,10 @@ type HasSimpleKey interface {
|
||||
GetSimpleKey() string
|
||||
}
|
||||
|
||||
type HasSimpleInt64Key interface {
|
||||
GetSimpleKey() int64
|
||||
}
|
||||
|
||||
type MapConverterPtr[T any] interface {
|
||||
MapConverter
|
||||
*T
|
||||
@@ -78,6 +82,14 @@ func MakeGenMap[T HasSimpleKey](arr []T) map[string]T {
|
||||
return rtn
|
||||
}
|
||||
|
||||
func MakeGenMapInt64[T HasSimpleInt64Key](arr []T) map[int64]T {
|
||||
rtn := make(map[int64]T)
|
||||
for _, val := range arr {
|
||||
rtn[val.GetSimpleKey()] = val
|
||||
}
|
||||
return rtn
|
||||
}
|
||||
|
||||
func isStructType(rt reflect.Type) bool {
|
||||
if rt.Kind() == reflect.Struct {
|
||||
return true
|
||||
|
||||
+14
-4
@@ -15,6 +15,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/scripthaus-dev/sh2-server/pkg/dbutil"
|
||||
"github.com/scripthaus-dev/sh2-server/pkg/rtnstate"
|
||||
"github.com/scripthaus-dev/sh2-server/pkg/scbase"
|
||||
"github.com/scripthaus-dev/sh2-server/pkg/sstore"
|
||||
@@ -328,6 +329,11 @@ func finalizeWebScreenUpdate(ctx context.Context, webUpdate *WebShareUpdateType)
|
||||
return nil
|
||||
}
|
||||
|
||||
type webShareResponseType struct {
|
||||
Success bool `json:"success"`
|
||||
Data []*WebShareUpdateResponseType `json:"data"`
|
||||
}
|
||||
|
||||
func DoWebScreenUpdates(authInfo AuthInfo, updateArr []*sstore.ScreenUpdateType) error {
|
||||
var webUpdates []*WebShareUpdateType
|
||||
for _, update := range updateArr {
|
||||
@@ -353,16 +359,23 @@ func DoWebScreenUpdates(authInfo AuthInfo, updateArr []*sstore.ScreenUpdateType)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot create auth-post-req for %s: %v", WebShareUpdateUrl, err)
|
||||
}
|
||||
_, err = doRequest(req, nil)
|
||||
var resp webShareResponseType
|
||||
_, err = doRequest(req, &resp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
respMap := dbutil.MakeGenMapInt64(resp.Data)
|
||||
for _, update := range webUpdates {
|
||||
err = finalizeWebScreenUpdate(context.Background(), update)
|
||||
if err != nil {
|
||||
// ignore this error (nothing to do)
|
||||
log.Printf("[pcloud] error finalizing web-update: %v\n", err)
|
||||
}
|
||||
resp := respMap[update.UpdateId]
|
||||
if resp == nil {
|
||||
resp = &WebShareUpdateResponseType{Success: false, Error: "resp not found"}
|
||||
}
|
||||
log.Printf("[pcloud] updateid:%d, type:%s %s/%s success:%v err:%v\n", update.UpdateId, update.UpdateType, update.ScreenId, update.LineId, resp.Success, resp.Error)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -390,9 +403,6 @@ func StartUpdateWriter() {
|
||||
}
|
||||
|
||||
func computeBackoff(numFailures int) time.Duration {
|
||||
// TODO remove once API implemented
|
||||
return time.Hour
|
||||
|
||||
switch numFailures {
|
||||
case 1:
|
||||
return 100 * time.Millisecond
|
||||
|
||||
@@ -25,7 +25,7 @@ type TelemetryInputType struct {
|
||||
type WebShareUpdateType struct {
|
||||
ScreenId string `json:"screenid"`
|
||||
LineId string `json:"lineid"`
|
||||
UpdateId int64 `json:"-"` // just for internal use
|
||||
UpdateId int64 `json:"updateid"`
|
||||
UpdateType string `json:"updatetype"`
|
||||
|
||||
Screen *WebShareScreenType `json:"screen,omitempty"`
|
||||
@@ -38,6 +38,16 @@ type WebShareUpdateType struct {
|
||||
TermOpts *sstore.TermOpts `json:"termopts,omitempty"`
|
||||
}
|
||||
|
||||
type WebShareUpdateResponseType struct {
|
||||
UpdateId int64 `json:"updateid"`
|
||||
Success bool `json:"success"`
|
||||
Error string `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
func (ur *WebShareUpdateResponseType) GetSimpleKey() int64 {
|
||||
return ur.UpdateId
|
||||
}
|
||||
|
||||
type WebShareRemotePtr struct {
|
||||
Alias string `json:"remotealias,omitempty"`
|
||||
CanonicalName string `json:"remotecanonicalname"`
|
||||
@@ -72,10 +82,13 @@ func webScreenFromScreen(s *sstore.ScreenType) (*WebShareScreenType, error) {
|
||||
if s.WebShareOpts.ViewKey == "" {
|
||||
return nil, fmt.Errorf("invalid screen, no ViewKey")
|
||||
}
|
||||
if s.WebShareOpts.ShareName == "" {
|
||||
return nil, fmt.Errorf("invalid screen, no ShareName")
|
||||
var shareName string
|
||||
if s.WebShareOpts.ShareName != "" {
|
||||
shareName = s.WebShareOpts.ShareName
|
||||
} else {
|
||||
shareName = s.Name
|
||||
}
|
||||
return &WebShareScreenType{ScreenId: s.ScreenId, ShareName: s.WebShareOpts.ShareName, ViewKey: s.WebShareOpts.ViewKey}, nil
|
||||
return &WebShareScreenType{ScreenId: s.ScreenId, ShareName: shareName, ViewKey: s.WebShareOpts.ViewKey}, nil
|
||||
}
|
||||
|
||||
type WebShareLineType struct {
|
||||
|
||||
Reference in New Issue
Block a user