mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-22 21:42:49 +01:00
add line staring to schema and to cmdrunner
This commit is contained in:
parent
81554e8fd2
commit
8624e9c844
@ -97,6 +97,7 @@ CREATE TABLE line (
|
|||||||
cmdid varchar(36) NOT NULL,
|
cmdid varchar(36) NOT NULL,
|
||||||
ephemeral boolean NOT NULL,
|
ephemeral boolean NOT NULL,
|
||||||
contentheight int NOT NULL,
|
contentheight int NOT NULL,
|
||||||
|
star int NOT NULL,
|
||||||
PRIMARY KEY (sessionid, windowid, lineid)
|
PRIMARY KEY (sessionid, windowid, lineid)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -91,6 +91,7 @@ CREATE TABLE line (
|
|||||||
cmdid varchar(36) NOT NULL,
|
cmdid varchar(36) NOT NULL,
|
||||||
ephemeral boolean NOT NULL,
|
ephemeral boolean NOT NULL,
|
||||||
contentheight int NOT NULL,
|
contentheight int NOT NULL,
|
||||||
|
star int NOT NULL,
|
||||||
PRIMARY KEY (sessionid, windowid, lineid)
|
PRIMARY KEY (sessionid, windowid, lineid)
|
||||||
);
|
);
|
||||||
CREATE TABLE remote (
|
CREATE TABLE remote (
|
||||||
@ -118,14 +119,18 @@ CREATE TABLE cmd (
|
|||||||
remoteid varchar(36) NOT NULL,
|
remoteid varchar(36) NOT NULL,
|
||||||
remotename varchar(50) NOT NULL,
|
remotename varchar(50) NOT NULL,
|
||||||
cmdstr text NOT NULL,
|
cmdstr text NOT NULL,
|
||||||
remotestate json NOT NULL,
|
festate json NOT NULL,
|
||||||
|
statebasehash varchar(36) NOT NULL,
|
||||||
|
statediffhasharr json NOT NULL,
|
||||||
termopts json NOT NULL,
|
termopts json NOT NULL,
|
||||||
origtermopts json NOT NULL,
|
origtermopts json NOT NULL,
|
||||||
status varchar(10) NOT NULL,
|
status varchar(10) NOT NULL,
|
||||||
startpk json NOT NULL,
|
startpk json NOT NULL,
|
||||||
donepk json NOT NULL,
|
doneinfo json NOT NULL,
|
||||||
runout json NOT NULL,
|
runout json NOT NULL,
|
||||||
rtnstate bool NOT NULL,
|
rtnstate bool NOT NULL,
|
||||||
|
rtnbasehash varchar(36) NOT NULL,
|
||||||
|
rtndiffhasharr json NOT NULL,
|
||||||
PRIMARY KEY (sessionid, cmdid)
|
PRIMARY KEY (sessionid, cmdid)
|
||||||
);
|
);
|
||||||
CREATE TABLE history (
|
CREATE TABLE history (
|
||||||
|
@ -141,6 +141,7 @@ func init() {
|
|||||||
|
|
||||||
registerCmdFn("line", LineCommand)
|
registerCmdFn("line", LineCommand)
|
||||||
registerCmdFn("line:show", LineShowCommand)
|
registerCmdFn("line:show", LineShowCommand)
|
||||||
|
registerCmdFn("line:star", LineStarCommand)
|
||||||
|
|
||||||
registerCmdFn("history", HistoryCommand)
|
registerCmdFn("history", HistoryCommand)
|
||||||
|
|
||||||
@ -1520,6 +1521,47 @@ func LineCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.
|
|||||||
return nil, fmt.Errorf("/line requires a subcommand: %s", formatStrs([]string{"show"}, "or", false))
|
return nil, fmt.Errorf("/line requires a subcommand: %s", formatStrs([]string{"show"}, "or", false))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func LineStarCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) {
|
||||||
|
ids, err := resolveUiIds(ctx, pk, R_Session|R_Screen|R_Window)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(pk.Args) == 0 {
|
||||||
|
return nil, fmt.Errorf("/line:star requires an argument (line number or id)")
|
||||||
|
}
|
||||||
|
if len(pk.Args) > 2 {
|
||||||
|
return nil, fmt.Errorf("/line:star only takes up to 2 arguments (line-number and star-value)")
|
||||||
|
}
|
||||||
|
lineArg := pk.Args[0]
|
||||||
|
lineId, err := sstore.FindLineIdByArg(ctx, ids.SessionId, ids.WindowId, lineArg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error looking up lineid: %v", err)
|
||||||
|
}
|
||||||
|
if lineId == "" {
|
||||||
|
return nil, fmt.Errorf("line %q not found", lineArg)
|
||||||
|
}
|
||||||
|
starVal, err := resolveNonNegInt(pk.Args[1], 1)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("/line:star invalid star-value (not integer): %v", err)
|
||||||
|
}
|
||||||
|
if starVal > 5 {
|
||||||
|
return nil, fmt.Errorf("/line:star invalid star-value must be in the range of 0-5")
|
||||||
|
}
|
||||||
|
err = sstore.UpdateLineStar(ctx, lineId, starVal)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("/line:star error updating star value: %v", err)
|
||||||
|
}
|
||||||
|
lineObj, err := sstore.GetLineById(ctx, lineId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("/line:star error getting line: %v", err)
|
||||||
|
}
|
||||||
|
if lineObj == nil {
|
||||||
|
// no line (which is strange given we checked for it above). just return a nop.
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return sstore.ModelUpdate{Line: lineObj}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func LineShowCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) {
|
func LineShowCommand(ctx context.Context, pk *scpacket.FeCommandPacketType) (sstore.UpdatePacket, error) {
|
||||||
ids, err := resolveUiIds(ctx, pk, R_Session|R_Screen|R_Window)
|
ids, err := resolveUiIds(ctx, pk, R_Session|R_Screen|R_Window)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -569,7 +569,7 @@ func FindLineIdByArg(ctx context.Context, sessionId string, windowId string, lin
|
|||||||
lineId = tx.GetString(query, sessionId, windowId, lineArg)
|
lineId = tx.GetString(query, sessionId, windowId, lineArg)
|
||||||
} else {
|
} else {
|
||||||
// id match
|
// id match
|
||||||
query := `SELECT * FROM line WHERE sessionid = ? AND windowid = ? AND lineid = ?`
|
query := `SELECT lineid FROM line WHERE sessionid = ? AND windowid = ? AND lineid = ?`
|
||||||
lineId = tx.GetString(query, sessionId, windowId, lineArg)
|
lineId = tx.GetString(query, sessionId, windowId, lineArg)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -652,8 +652,8 @@ func InsertLine(ctx context.Context, line *LineType, cmd *CmdType) error {
|
|||||||
query = `SELECT nextlinenum FROM window WHERE sessionid = ? AND windowid = ?`
|
query = `SELECT nextlinenum FROM window WHERE sessionid = ? AND windowid = ?`
|
||||||
nextLineNum := tx.GetInt(query, line.SessionId, line.WindowId)
|
nextLineNum := tx.GetInt(query, line.SessionId, line.WindowId)
|
||||||
line.LineNum = int64(nextLineNum)
|
line.LineNum = int64(nextLineNum)
|
||||||
query = `INSERT INTO line ( sessionid, windowid, userid, lineid, ts, linenum, linenumtemp, linelocal, linetype, text, cmdid, ephemeral, contentheight)
|
query = `INSERT INTO line ( sessionid, windowid, userid, lineid, ts, linenum, linenumtemp, linelocal, linetype, text, cmdid, ephemeral, contentheight, star)
|
||||||
VALUES (:sessionid,:windowid,:userid,:lineid,:ts,:linenum,:linenumtemp,:linelocal,:linetype,:text,:cmdid,:ephemeral,:contentheight)`
|
VALUES (:sessionid,:windowid,:userid,:lineid,:ts,:linenum,:linenumtemp,:linelocal,:linetype,:text,:cmdid,:ephemeral,:contentheight,:star)`
|
||||||
tx.NamedExecWrap(query, line)
|
tx.NamedExecWrap(query, line)
|
||||||
query = `UPDATE window SET nextlinenum = ? WHERE sessionid = ? AND windowid = ?`
|
query = `UPDATE window SET nextlinenum = ? WHERE sessionid = ? AND windowid = ?`
|
||||||
tx.ExecWrap(query, nextLineNum+1, line.SessionId, line.WindowId)
|
tx.ExecWrap(query, nextLineNum+1, line.SessionId, line.WindowId)
|
||||||
@ -1445,3 +1445,33 @@ func GetFullState(ctx context.Context, ssPtr ShellStatePtr) (*packet.ShellState,
|
|||||||
}
|
}
|
||||||
return state, nil
|
return state, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UpdateLineStar(ctx context.Context, lineId string, starVal int) error {
|
||||||
|
txErr := WithTx(ctx, func(tx *TxWrap) error {
|
||||||
|
query := `UPDATE line SET star = ? WHERE lineid = ?`
|
||||||
|
tx.ExecWrap(query, starVal, lineId)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if txErr != nil {
|
||||||
|
return txErr
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// can return nil, nil if line is not found
|
||||||
|
func GetLineById(ctx context.Context, lineId string) (*LineType, error) {
|
||||||
|
var rtn *LineType
|
||||||
|
txErr := WithTx(ctx, func(tx *TxWrap) error {
|
||||||
|
var line LineType
|
||||||
|
query := `SELECT * FROM line WHERE lineid = ?`
|
||||||
|
found := tx.GetWrap(&line, query, lineId)
|
||||||
|
if found {
|
||||||
|
rtn = &line
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if txErr != nil {
|
||||||
|
return nil, txErr
|
||||||
|
}
|
||||||
|
return rtn, nil
|
||||||
|
}
|
||||||
|
@ -579,6 +579,7 @@ type LineType struct {
|
|||||||
Text string `json:"text,omitempty"`
|
Text string `json:"text,omitempty"`
|
||||||
CmdId string `json:"cmdid,omitempty"`
|
CmdId string `json:"cmdid,omitempty"`
|
||||||
Ephemeral bool `json:"ephemeral,omitempty"`
|
Ephemeral bool `json:"ephemeral,omitempty"`
|
||||||
|
Star bool `json:"star,omitempty"`
|
||||||
Remove bool `json:"remove,omitempty"`
|
Remove bool `json:"remove,omitempty"`
|
||||||
ContentHeight int64 `json:"contentheight,omitempty"`
|
ContentHeight int64 `json:"contentheight,omitempty"`
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user