93 lines
1.6 KiB
Go
93 lines
1.6 KiB
Go
package lib
|
|
|
|
import (
|
|
"encoding/json" // Added for logging
|
|
"os"
|
|
// Added for path manipulation
|
|
)
|
|
|
|
const cacheFileName = "cache.json" // Renamed for clarity
|
|
|
|
type CacheItem struct {
|
|
Fetcher string
|
|
Value string
|
|
}
|
|
|
|
type Cache struct {
|
|
Items []CacheItem
|
|
cacheFilePath string // New field to store the full path
|
|
}
|
|
|
|
func NewCache() *Cache {
|
|
return &Cache{
|
|
Items: make([]CacheItem, 0),
|
|
cacheFilePath: cacheFileName,
|
|
}
|
|
}
|
|
|
|
func (c *Cache) Update(fetcher string, value string) {
|
|
for i := range c.Items {
|
|
if c.Items[i].Fetcher == fetcher {
|
|
c.Items[i].Value = value
|
|
return
|
|
}
|
|
}
|
|
c.Items = append(c.Items, CacheItem{
|
|
Fetcher: fetcher,
|
|
Value: value,
|
|
})
|
|
}
|
|
|
|
func (c *Cache) Get(fetcher string) (string, bool) {
|
|
for _, item := range c.Items {
|
|
if item.Fetcher == fetcher {
|
|
return item.Value, true
|
|
}
|
|
}
|
|
return "", false
|
|
}
|
|
|
|
func (c *Cache) Has(fetcher string) bool {
|
|
_, found := c.Get(fetcher)
|
|
return found
|
|
}
|
|
|
|
func (c *Cache) IsChanged(fetcher string, value string) bool {
|
|
cachedValue, found := c.Get(fetcher)
|
|
if !found {
|
|
return true
|
|
}
|
|
if cachedValue != value {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (c *Cache) TryUpdate(fetcher string, value string) bool {
|
|
if c.IsChanged(fetcher, value) {
|
|
c.Update(fetcher, value)
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (c *Cache) Load() {
|
|
f, err := os.Open(c.cacheFilePath)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer f.Close()
|
|
|
|
json.NewDecoder(f).Decode(&c.Items)
|
|
}
|
|
|
|
func (c *Cache) Save() {
|
|
f, err := os.Create(c.cacheFilePath)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer f.Close()
|
|
|
|
json.NewEncoder(f).Encode(c.Items)
|
|
}
|