do synchronous webscreen delete

This commit is contained in:
sawka 2023-03-31 13:25:57 -07:00
parent a7faf2040f
commit 5e5a6aa53f
3 changed files with 45 additions and 3 deletions

View File

@ -176,6 +176,7 @@ func init() {
registerCmdFn("client", ClientCommand) registerCmdFn("client", ClientCommand)
registerCmdFn("client:show", ClientShowCommand) registerCmdFn("client:show", ClientShowCommand)
registerCmdFn("client:set", ClientSetCommand) registerCmdFn("client:set", ClientSetCommand)
registerCmdFn("client:notifyupdatewriter", ClientNotifyUpdateWriterCommand)
registerCmdFn("telemetry", TelemetryCommand) registerCmdFn("telemetry", TelemetryCommand)
registerCmdFn("telemetry:on", TelemetryOnCommand) registerCmdFn("telemetry:on", TelemetryOnCommand)
@ -1691,11 +1692,26 @@ func ScreenWebShareCommand(ctx context.Context, pk *scpacket.FeCommandPacketType
} }
infoWebShareLink = true infoWebShareLink = true
} else { } else {
screen, err := sstore.GetScreenById(ctx, ids.ScreenId)
if err != nil {
return nil, fmt.Errorf("cannot get screen: %v", err)
}
if screen == nil {
return nil, fmt.Errorf("screen not found")
}
if screen.ShareMode != sstore.ShareModeWeb {
return nil, fmt.Errorf("screen is not currently shared")
}
webUpdate := pcloud.MakeScreenDelUpdate(screen, ids.ScreenId)
err = pcloud.DoSyncWebUpdate(webUpdate)
if err != nil {
return nil, fmt.Errorf("error stopping webshare, error contacting prompt cloud server: %v", err)
}
err = sstore.ScreenWebShareStop(ctx, ids.ScreenId) err = sstore.ScreenWebShareStop(ctx, ids.ScreenId)
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot stop web-sharing screen: %v", err) return nil, fmt.Errorf("cannot stop web-sharing screen: %v", err)
} }
infoMsg = fmt.Sprintf("screen is no longer web shared") infoMsg = fmt.Sprintf("screen websharing stopped")
} }
screen, err := sstore.GetScreenById(ctx, ids.ScreenId) screen, err := sstore.GetScreenById(ctx, ids.ScreenId)
if err != nil { if err != nil {
@ -2749,6 +2765,16 @@ func ClientCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstor
return nil, fmt.Errorf("/client requires a subcommand: %s", formatStrs([]string{"show", "set"}, "or", false)) return nil, fmt.Errorf("/client requires a subcommand: %s", formatStrs([]string{"show", "set"}, "or", false))
} }
func ClientNotifyUpdateWriterCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) {
sstore.NotifyUpdateWriter()
update := sstore.ModelUpdate{
Info: &sstore.InfoMsgType{
InfoMsg: fmt.Sprintf("notified update writer"),
},
}
return update, nil
}
func boolToStr(v bool, trueStr string, falseStr string) string { func boolToStr(v bool, trueStr string, falseStr string) string {
if v { if v {
return trueStr return trueStr

View File

@ -202,6 +202,16 @@ func MakeScreenNewUpdate(screen *sstore.ScreenType, webShareOpts sstore.ScreenWe
return rtn return rtn
} }
func MakeScreenDelUpdate(screen *sstore.ScreenType, screenId string) *WebShareUpdateType {
rtn := &WebShareUpdateType{
ScreenId: screenId,
UpdateId: -1,
UpdateType: sstore.UpdateType_ScreenDel,
UpdateTs: time.Now().UnixMilli(),
}
return rtn
}
func makeWebShareUpdate(ctx context.Context, update *sstore.ScreenUpdateType) (*WebShareUpdateType, error) { func makeWebShareUpdate(ctx context.Context, update *sstore.ScreenUpdateType) (*WebShareUpdateType, error) {
rtn := &WebShareUpdateType{ rtn := &WebShareUpdateType{
ScreenId: update.ScreenId, ScreenId: update.ScreenId,

View File

@ -2463,7 +2463,7 @@ func ScreenWebShareStop(ctx context.Context, screenId string) error {
} }
query = `UPDATE screen SET sharemode = ?, webshareopts = ? WHERE screenid = ?` query = `UPDATE screen SET sharemode = ?, webshareopts = ? WHERE screenid = ?`
tx.Exec(query, ShareModeLocal, "null", screenId) tx.Exec(query, ShareModeLocal, "null", screenId)
insertScreenDelUpdate(tx, screenId) handleScreenDelUpdate(tx, screenId)
return nil return nil
}) })
} }
@ -2494,12 +2494,18 @@ func insertScreenNewUpdate(tx *TxWrap, screenId string) {
NotifyUpdateWriter() NotifyUpdateWriter()
} }
func insertScreenDelUpdate(tx *TxWrap, screenId string) { func handleScreenDelUpdate(tx *TxWrap, screenId string) {
query := `DELETE FROM screenupdate WHERE screenid = ?` query := `DELETE FROM screenupdate WHERE screenid = ?`
tx.Exec(query, screenId) tx.Exec(query, screenId)
query = `DELETE FROM webptypos WHERE screenid = ?` query = `DELETE FROM webptypos WHERE screenid = ?`
tx.Exec(query, screenId) tx.Exec(query, screenId)
// don't insert UpdateType_ScreenDel (we already processed it in cmdrunner)
}
func insertScreenDelUpdate(tx *TxWrap, screenId string) {
handleScreenDelUpdate(tx, screenId)
insertScreenUpdate(tx, screenId, UpdateType_ScreenDel) insertScreenUpdate(tx, screenId, UpdateType_ScreenDel)
// don't insert UpdateType_ScreenDel (we already processed it in cmdrunner)
} }
func insertScreenLineUpdate(tx *TxWrap, screenId string, lineId string, updateType string) { func insertScreenLineUpdate(tx *TxWrap, screenId string, lineId string, updateType string) {