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:show", ClientShowCommand)
registerCmdFn("client:set", ClientSetCommand)
registerCmdFn("client:notifyupdatewriter", ClientNotifyUpdateWriterCommand)
registerCmdFn("telemetry", TelemetryCommand)
registerCmdFn("telemetry:on", TelemetryOnCommand)
@ -1691,11 +1692,26 @@ func ScreenWebShareCommand(ctx context.Context, pk *scpacket.FeCommandPacketType
}
infoWebShareLink = true
} 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)
if err != nil {
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)
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))
}
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 {
if v {
return trueStr

View File

@ -202,6 +202,16 @@ func MakeScreenNewUpdate(screen *sstore.ScreenType, webShareOpts sstore.ScreenWe
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) {
rtn := &WebShareUpdateType{
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 = ?`
tx.Exec(query, ShareModeLocal, "null", screenId)
insertScreenDelUpdate(tx, screenId)
handleScreenDelUpdate(tx, screenId)
return nil
})
}
@ -2494,12 +2494,18 @@ func insertScreenNewUpdate(tx *TxWrap, screenId string) {
NotifyUpdateWriter()
}
func insertScreenDelUpdate(tx *TxWrap, screenId string) {
func handleScreenDelUpdate(tx *TxWrap, screenId string) {
query := `DELETE FROM screenupdate WHERE screenid = ?`
tx.Exec(query, screenId)
query = `DELETE FROM webptypos WHERE 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)
// don't insert UpdateType_ScreenDel (we already processed it in cmdrunner)
}
func insertScreenLineUpdate(tx *TxWrap, screenId string, lineId string, updateType string) {