diff --git a/pkg/cmdrunner/cmdrunner.go b/pkg/cmdrunner/cmdrunner.go index e2728cff..1b97fd2c 100644 --- a/pkg/cmdrunner/cmdrunner.go +++ b/pkg/cmdrunner/cmdrunner.go @@ -620,6 +620,16 @@ func ScreenSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (ss varsUpdated = append(varsUpdated, "name") setNonAnchor = true } + if pk.Kwargs["sharename"] != "" { + shareName := pk.Kwargs["sharename"] + err = validateShareName(shareName) + if err != nil { + return nil, err + } + updateMap[sstore.ScreenField_ShareName] = shareName + varsUpdated = append(varsUpdated, "sharename") + setNonAnchor = true + } if pk.Kwargs["tabcolor"] != "" { color := pk.Kwargs["tabcolor"] err = validateColor(color, "screen tabcolor") @@ -679,7 +689,7 @@ func ScreenSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (ss } } if len(varsUpdated) == 0 { - return nil, fmt.Errorf("/screen:set no updates, can set %s", formatStrs([]string{"name", "pos", "tabcolor", "focus", "anchor", "line"}, "or", false)) + return nil, fmt.Errorf("/screen:set no updates, can set %s", formatStrs([]string{"name", "pos", "tabcolor", "focus", "anchor", "line", "sharename"}, "or", false)) } screen, err := sstore.UpdateScreen(ctx, ids.ScreenId, updateMap) if err != nil { diff --git a/pkg/sstore/dbops.go b/pkg/sstore/dbops.go index 8397b9a3..517a9462 100644 --- a/pkg/sstore/dbops.go +++ b/pkg/sstore/dbops.go @@ -1707,6 +1707,7 @@ const ( ScreenField_TabColor = "tabcolor" // string ScreenField_PTerm = "pterm" // string ScreenField_Name = "name" // string + ScreenField_ShareName = "sharename" // string ) func UpdateScreen(ctx context.Context, screenId string, editMap map[string]interface{}) (*ScreenType, error) { @@ -1746,6 +1747,14 @@ func UpdateScreen(ctx context.Context, screenId string, editMap map[string]inter query = `UPDATE screen SET name = ? WHERE screenid = ?` tx.Exec(query, name, screenId) } + if shareName, found := editMap[ScreenField_ShareName]; found { + if !isWebShare(tx, screenId) { + return fmt.Errorf("cannot set sharename, screen is not web-shared") + } + query = `UPDATE screen SET webshareopts = json_set(webshareopts, '$.sharename', ?) WHERE screenid = ?` + tx.Exec(query, shareName, screenId) + insertScreenUpdate(tx, screenId, UpdateType_ScreenName) + } return nil }) if txErr != nil { diff --git a/pkg/sstore/sstore.go b/pkg/sstore/sstore.go index 6b706c14..825ccc15 100644 --- a/pkg/sstore/sstore.go +++ b/pkg/sstore/sstore.go @@ -386,9 +386,8 @@ type ScreenLinesType struct { func (ScreenLinesType) UseDBMap() {} type ScreenWebShareOpts struct { - ShareName string `json:"sharename"` - ViewKey string `json:"viewkey"` - SharedRemotes []string `json:"sharedremotes"` + ShareName string `json:"sharename"` + ViewKey string `json:"viewkey"` } type ScreenType struct {