mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-27 20:09:39 -08:00
refactor: move cache out of shell
This commit is contained in:
parent
6500282575
commit
414581cf68
|
@ -2,15 +2,46 @@ package platform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Cache interface {
|
||||||
|
Init(home string)
|
||||||
|
Close()
|
||||||
|
// Gets the value for a given key.
|
||||||
|
// Returns the value and a boolean indicating if the key was found.
|
||||||
|
// In case the ttl expired, the function returns false.
|
||||||
|
Get(key string) (string, bool)
|
||||||
|
// Sets a value for a given key.
|
||||||
|
// The ttl indicates how many minutes to cache the value.
|
||||||
|
Set(key, value string, ttl int)
|
||||||
|
// Deletes a key from the cache.
|
||||||
|
Delete(key string)
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CacheFile = "/omp.cache"
|
CacheFile = "/omp.cache"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func pid() string {
|
||||||
|
pid := os.Getenv("POSH_PID")
|
||||||
|
if len(pid) == 0 {
|
||||||
|
pid = strconv.Itoa(os.Getppid())
|
||||||
|
}
|
||||||
|
return pid
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
TEMPLATECACHE = fmt.Sprintf("template_cache_%s", pid())
|
||||||
|
TOGGLECACHE = fmt.Sprintf("toggle_cache_%s", pid())
|
||||||
|
PROMPTCOUNTCACHE = fmt.Sprintf("prompt_count_cache_%s", pid())
|
||||||
|
)
|
||||||
|
|
||||||
type cacheObject struct {
|
type cacheObject struct {
|
||||||
Value string `json:"value"`
|
Value string `json:"value"`
|
||||||
Timestamp int64 `json:"timestamp"`
|
Timestamp int64 `json:"timestamp"`
|
||||||
|
@ -91,3 +122,50 @@ func (fc *fileCache) Delete(key string) {
|
||||||
fc.cache.Delete(key)
|
fc.cache.Delete(key)
|
||||||
fc.dirty = true
|
fc.dirty = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type commandCache struct {
|
||||||
|
commands *ConcurrentMap
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *commandCache) set(command, path string) {
|
||||||
|
c.commands.Set(command, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *commandCache) get(command string) (string, bool) {
|
||||||
|
cacheCommand, found := c.commands.Get(command)
|
||||||
|
if !found {
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
command, ok := cacheCommand.(string)
|
||||||
|
return command, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
type TemplateCache struct {
|
||||||
|
Root bool
|
||||||
|
PWD string
|
||||||
|
Folder string
|
||||||
|
Shell string
|
||||||
|
ShellVersion string
|
||||||
|
UserName string
|
||||||
|
HostName string
|
||||||
|
Code int
|
||||||
|
Env map[string]string
|
||||||
|
Var SimpleMap
|
||||||
|
OS string
|
||||||
|
WSL bool
|
||||||
|
PromptCount int
|
||||||
|
SHLVL int
|
||||||
|
Segments *ConcurrentMap
|
||||||
|
SegmentsCache SimpleMap
|
||||||
|
|
||||||
|
initialized bool
|
||||||
|
sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TemplateCache) AddSegmentData(key string, value any) {
|
||||||
|
t.Segments.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TemplateCache) RemoveSegmentData(key string) {
|
||||||
|
t.Segments.Delete(key)
|
||||||
|
}
|
||||||
|
|
|
@ -37,20 +37,6 @@ const (
|
||||||
CMD = "cmd"
|
CMD = "cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
func pid() string {
|
|
||||||
pid := os.Getenv("POSH_PID")
|
|
||||||
if len(pid) == 0 {
|
|
||||||
pid = strconv.Itoa(os.Getppid())
|
|
||||||
}
|
|
||||||
return pid
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
TEMPLATECACHE = fmt.Sprintf("template_cache_%s", pid())
|
|
||||||
TOGGLECACHE = fmt.Sprintf("toggle_cache_%s", pid())
|
|
||||||
PROMPTCOUNTCACHE = fmt.Sprintf("prompt_count_cache_%s", pid())
|
|
||||||
)
|
|
||||||
|
|
||||||
type Flags struct {
|
type Flags struct {
|
||||||
ErrorCode int
|
ErrorCode int
|
||||||
PipeStatus string
|
PipeStatus string
|
||||||
|
@ -92,20 +78,6 @@ type FileInfo struct {
|
||||||
IsDir bool
|
IsDir bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Cache interface {
|
|
||||||
Init(home string)
|
|
||||||
Close()
|
|
||||||
// Gets the value for a given key.
|
|
||||||
// Returns the value and a boolean indicating if the key was found.
|
|
||||||
// In case the ttl expired, the function returns false.
|
|
||||||
Get(key string) (string, bool)
|
|
||||||
// Sets a value for a given key.
|
|
||||||
// The ttl indicates how many minutes to cache the value.
|
|
||||||
Set(key, value string, ttl int)
|
|
||||||
// Deletes a key from the cache.
|
|
||||||
Delete(key string)
|
|
||||||
}
|
|
||||||
|
|
||||||
type HTTPRequestModifier func(request *http.Request)
|
type HTTPRequestModifier func(request *http.Request)
|
||||||
|
|
||||||
type WindowsRegistryValueType string
|
type WindowsRegistryValueType string
|
||||||
|
@ -168,36 +140,6 @@ type SystemInfo struct {
|
||||||
Disks map[string]disk.IOCountersStat
|
Disks map[string]disk.IOCountersStat
|
||||||
}
|
}
|
||||||
|
|
||||||
type TemplateCache struct {
|
|
||||||
Root bool
|
|
||||||
PWD string
|
|
||||||
Folder string
|
|
||||||
Shell string
|
|
||||||
ShellVersion string
|
|
||||||
UserName string
|
|
||||||
HostName string
|
|
||||||
Code int
|
|
||||||
Env map[string]string
|
|
||||||
Var SimpleMap
|
|
||||||
OS string
|
|
||||||
WSL bool
|
|
||||||
PromptCount int
|
|
||||||
SHLVL int
|
|
||||||
Segments *ConcurrentMap
|
|
||||||
SegmentsCache SimpleMap
|
|
||||||
|
|
||||||
initialized bool
|
|
||||||
sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *TemplateCache) AddSegmentData(key string, value any) {
|
|
||||||
t.Segments.Set(key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *TemplateCache) RemoveSegmentData(key string) {
|
|
||||||
t.Segments.Delete(key)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Environment interface {
|
type Environment interface {
|
||||||
Getenv(key string) string
|
Getenv(key string) string
|
||||||
Pwd() string
|
Pwd() string
|
||||||
|
@ -253,23 +195,6 @@ type Environment interface {
|
||||||
Trace(start time.Time, args ...string)
|
Trace(start time.Time, args ...string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type commandCache struct {
|
|
||||||
commands *ConcurrentMap
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *commandCache) set(command, path string) {
|
|
||||||
c.commands.Set(command, path)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *commandCache) get(command string) (string, bool) {
|
|
||||||
cacheCommand, found := c.commands.Get(command)
|
|
||||||
if !found {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
command, ok := cacheCommand.(string)
|
|
||||||
return command, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
type Shell struct {
|
type Shell struct {
|
||||||
CmdFlags *Flags
|
CmdFlags *Flags
|
||||||
Var SimpleMap
|
Var SimpleMap
|
||||||
|
|
Loading…
Reference in a new issue