mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-22 16:48:23 +01:00
c5501a5335
Moves the wlayout package contents to wcore to prevent import cycles. Moves the layout calls to other wcore functions instead of being handled by the services. Removes redundant CreateTab in EnsureInitialData and adds a isInitialLaunch flag to the CreateTab and CreateWorkspace functions to ensure that the initial tab is pinned and does not have the initial tab layout (since the starter layout gets applied later)
100 lines
3.0 KiB
Go
100 lines
3.0 KiB
Go
// Copyright 2024, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package clientservice
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/wavetermdev/waveterm/pkg/remote/conncontroller"
|
|
"github.com/wavetermdev/waveterm/pkg/waveobj"
|
|
"github.com/wavetermdev/waveterm/pkg/wcloud"
|
|
"github.com/wavetermdev/waveterm/pkg/wconfig"
|
|
"github.com/wavetermdev/waveterm/pkg/wcore"
|
|
"github.com/wavetermdev/waveterm/pkg/wshrpc"
|
|
"github.com/wavetermdev/waveterm/pkg/wsl"
|
|
"github.com/wavetermdev/waveterm/pkg/wstore"
|
|
)
|
|
|
|
type ClientService struct{}
|
|
|
|
const DefaultTimeout = 2 * time.Second
|
|
|
|
func (cs *ClientService) GetClientData() (*waveobj.Client, error) {
|
|
log.Println("GetClientData")
|
|
ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
|
|
defer cancelFn()
|
|
return wcore.GetClientData(ctx)
|
|
}
|
|
|
|
func (cs *ClientService) GetTab(tabId string) (*waveobj.Tab, error) {
|
|
ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
|
|
defer cancelFn()
|
|
tab, err := wstore.DBGet[*waveobj.Tab](ctx, tabId)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error getting tab: %w", err)
|
|
}
|
|
return tab, nil
|
|
}
|
|
|
|
func (cs *ClientService) GetAllConnStatus(ctx context.Context) ([]wshrpc.ConnStatus, error) {
|
|
sshStatuses := conncontroller.GetAllConnStatus()
|
|
wslStatuses := wsl.GetAllConnStatus()
|
|
return append(sshStatuses, wslStatuses...), nil
|
|
}
|
|
|
|
// moves the window to the front of the windowId stack
|
|
func (cs *ClientService) FocusWindow(ctx context.Context, windowId string) error {
|
|
return wcore.FocusWindow(ctx, windowId)
|
|
}
|
|
|
|
func (cs *ClientService) AgreeTos(ctx context.Context) (waveobj.UpdatesRtnType, error) {
|
|
ctx = waveobj.ContextWithUpdates(ctx)
|
|
clientData, err := wstore.DBGetSingleton[*waveobj.Client](ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error getting client data: %w", err)
|
|
}
|
|
timestamp := time.Now().UnixMilli()
|
|
clientData.TosAgreed = timestamp
|
|
err = wstore.DBUpdate(ctx, clientData)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error updating client data: %w", err)
|
|
}
|
|
wcore.BootstrapStarterLayout(ctx)
|
|
return waveobj.ContextGetUpdatesRtn(ctx), nil
|
|
}
|
|
|
|
func sendNoTelemetryUpdate(telemetryEnabled bool) {
|
|
ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancelFn()
|
|
clientData, err := wstore.DBGetSingleton[*waveobj.Client](ctx)
|
|
if err != nil {
|
|
log.Printf("telemetry update: error getting client data: %v\n", err)
|
|
return
|
|
}
|
|
if clientData == nil {
|
|
log.Printf("telemetry update: client data is nil\n")
|
|
return
|
|
}
|
|
err = wcloud.SendNoTelemetryUpdate(ctx, clientData.OID, !telemetryEnabled)
|
|
if err != nil {
|
|
log.Printf("[error] sending no-telemetry update: %v\n", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func (cs *ClientService) TelemetryUpdate(ctx context.Context, telemetryEnabled bool) error {
|
|
meta := waveobj.MetaMapType{
|
|
wconfig.ConfigKey_TelemetryEnabled: telemetryEnabled,
|
|
}
|
|
err := wconfig.SetBaseConfigValue(meta)
|
|
if err != nil {
|
|
return fmt.Errorf("error setting telemetry value: %w", err)
|
|
}
|
|
go sendNoTelemetryUpdate(telemetryEnabled)
|
|
return nil
|
|
}
|