stickers and terminal serialization (#57)

This commit is contained in:
Mike Sawka
2024-06-17 22:38:48 -07:00
committed by GitHub
parent b6c85e38f6
commit 4ded6d94b6
20 changed files with 670 additions and 147 deletions
+24
View File
@@ -4,13 +4,16 @@
package blockservice
import (
"context"
"fmt"
"strings"
"time"
"github.com/wavetermdev/thenextwave/pkg/blockcontroller"
"github.com/wavetermdev/thenextwave/pkg/filestore"
"github.com/wavetermdev/thenextwave/pkg/tsgen/tsgenmeta"
"github.com/wavetermdev/thenextwave/pkg/wshutil"
"github.com/wavetermdev/thenextwave/pkg/wstore"
)
type BlockService struct{}
@@ -38,3 +41,24 @@ func (bs *BlockService) SendCommand(blockId string, cmd wshutil.BlockCommand) er
}
return nil
}
func (bs *BlockService) SaveTerminalState(ctx context.Context, blockId string, state string, stateType string, ptyOffset int64) error {
_, err := wstore.DBMustGet[*wstore.Block](ctx, blockId)
if err != nil {
return err
}
if stateType != "full" && stateType != "preview" {
return fmt.Errorf("invalid state type: %q", stateType)
}
// ignore MakeFile error (already exists is ok)
filestore.WFS.MakeFile(ctx, blockId, "cache:term:"+stateType, nil, filestore.FileOptsType{})
err = filestore.WFS.WriteFile(ctx, blockId, "cache:term:"+stateType, []byte(state))
if err != nil {
return fmt.Errorf("cannot save terminal state: %w", err)
}
err = filestore.WFS.WriteMeta(ctx, blockId, "cache:term:"+stateType, filestore.FileMeta{"ptyoffset": ptyOffset}, true)
if err != nil {
return fmt.Errorf("cannot save terminal state meta: %w", err)
}
return nil
}