mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
implement screen:set name
This commit is contained in:
@@ -56,6 +56,7 @@ func init() {
|
||||
registerCmdFn("screen:close", ScreenCloseCommand)
|
||||
registerCmdFn("screen:open", ScreenOpenCommand)
|
||||
registerCmdAlias("screen:new", ScreenOpenCommand)
|
||||
registerCmdFn("screen:set", ScreenSetCommand)
|
||||
|
||||
registerCmdAlias("remote", RemoteCommand)
|
||||
registerCmdFn("remote:show", RemoteShowCommand)
|
||||
@@ -232,6 +233,40 @@ func ScreenOpenCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (s
|
||||
return update, nil
|
||||
}
|
||||
|
||||
func ScreenSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) {
|
||||
ids, err := resolveIds(ctx, pk, R_Session|R_Screen)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var varsUpdated []string
|
||||
if pk.Kwargs["name"] != "" {
|
||||
newName := pk.Kwargs["name"]
|
||||
err = validateName(newName, "screen")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = sstore.SetScreenName(ctx, ids.SessionId, ids.ScreenId, newName)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("setting screen name: %v", err)
|
||||
}
|
||||
varsUpdated = append(varsUpdated, "name")
|
||||
}
|
||||
if len(varsUpdated) == 0 {
|
||||
return nil, fmt.Errorf("/screen:set no updates, can set %s", formatStrs([]string{"name", "pos"}, "or", false))
|
||||
}
|
||||
screenObj, err := sstore.GetScreenById(ctx, ids.SessionId, ids.ScreenId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
update, session := sstore.MakeSingleSessionUpdate(ids.SessionId)
|
||||
session.Screens = append(session.Screens, screenObj)
|
||||
update.Info = &sstore.InfoMsgType{
|
||||
InfoMsg: fmt.Sprintf("screen updated %s", formatStrs(varsUpdated, "and", false)),
|
||||
TimeoutMs: 2000,
|
||||
}
|
||||
return update, nil
|
||||
}
|
||||
|
||||
func ScreenCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) {
|
||||
ids, err := resolveIds(ctx, pk, R_Session)
|
||||
if err != nil {
|
||||
@@ -765,13 +800,6 @@ func SessionSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (s
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
bareSession, err := sstore.GetBareSessionById(ctx, ids.SessionId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if bareSession == nil {
|
||||
return nil, fmt.Errorf("session '%s' not found", ids.SessionId)
|
||||
}
|
||||
var varsUpdated []string
|
||||
if pk.Kwargs["name"] != "" {
|
||||
newName := pk.Kwargs["name"]
|
||||
@@ -791,11 +819,11 @@ func SessionSetCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (s
|
||||
if len(varsUpdated) == 0 {
|
||||
return nil, fmt.Errorf("/session:set no updates, can set %s", formatStrs([]string{"name", "pos"}, "or", false))
|
||||
}
|
||||
bareSession, err = sstore.GetBareSessionById(ctx, ids.SessionId)
|
||||
bareSession, err := sstore.GetBareSessionById(ctx, ids.SessionId)
|
||||
update := sstore.ModelUpdate{
|
||||
Sessions: []*sstore.SessionType{bareSession},
|
||||
Info: &sstore.InfoMsgType{
|
||||
InfoMsg: fmt.Sprintf("[%s]: session updated %s", bareSession.Name, formatStrs(varsUpdated, "and", false)),
|
||||
InfoMsg: fmt.Sprintf("session updated %s", formatStrs(varsUpdated, "and", false)),
|
||||
TimeoutMs: 2000,
|
||||
},
|
||||
}
|
||||
|
||||
+22
-1
@@ -726,7 +726,7 @@ func SetSessionName(ctx context.Context, sessionId string, name string) error {
|
||||
if dupSessionId == sessionId {
|
||||
return nil
|
||||
}
|
||||
if tx.Exists(query, name) {
|
||||
if dupSessionId != "" {
|
||||
return fmt.Errorf("invalid duplicate session name '%s'", name)
|
||||
}
|
||||
query = `UPDATE session SET name = ? WHERE sessionid = ?`
|
||||
@@ -735,3 +735,24 @@ func SetSessionName(ctx context.Context, sessionId string, name string) error {
|
||||
})
|
||||
return txErr
|
||||
}
|
||||
|
||||
func SetScreenName(ctx context.Context, sessionId string, screenId string, name string) error {
|
||||
txErr := WithTx(ctx, func(tx *TxWrap) error {
|
||||
query := `SELECT screenid FROM screen WHERE sessionid = ? AND screenid = ?`
|
||||
if !tx.Exists(query, sessionId, screenId) {
|
||||
return fmt.Errorf("screen does not exist")
|
||||
}
|
||||
query = `SELECT screenid FROM screen WHERE sessionid = ? AND name = ?`
|
||||
dupScreenId := tx.GetString(query, sessionId, name)
|
||||
if dupScreenId == screenId {
|
||||
return nil
|
||||
}
|
||||
if dupScreenId != "" {
|
||||
return fmt.Errorf("invalid duplicate screen name '%s'", name)
|
||||
}
|
||||
query = `UPDATE screen SET name = ? WHERE sessionid = ? AND screenid = ?`
|
||||
tx.ExecWrap(query, name, sessionId, screenId)
|
||||
return nil
|
||||
})
|
||||
return txErr
|
||||
}
|
||||
|
||||
@@ -224,7 +224,7 @@ type ScreenType struct {
|
||||
ScreenIdx int64 `json:"screenidx"`
|
||||
Name string `json:"name"`
|
||||
ActiveWindowId string `json:"activewindowid"`
|
||||
ScreenOpts ScreenOptsType `json:"screenopts"`
|
||||
ScreenOpts *ScreenOptsType `json:"screenopts"`
|
||||
OwnerId string `json:"ownerid"`
|
||||
ShareMode string `json:"sharemode"`
|
||||
Windows []*ScreenWindowType `json:"windows"`
|
||||
|
||||
Reference in New Issue
Block a user