summaryrefslogtreecommitdiff
path: root/app/cache.go
diff options
context:
space:
mode:
authorlost+skunk <[email protected]>2025-02-22 15:30:29 +0300
committerlost+skunk <[email protected]>2025-02-22 15:30:29 +0300
commit048bb470ab8dc3adce83d2e615f3ab369efa2199 (patch)
tree3b0dc678795aa8713109e0aa74609ab8fd631908 /app/cache.go
parent32c61ec8ea577fdd37f7d50e1c176273960aa3e0 (diff)
downloadskunky-art-048bb470ab8dc3adce83d2e615f3ab369efa2199.tar.gz
skunky-art-048bb470ab8dc3adce83d2e615f3ab369efa2199.tar.bz2
skunky-art-048bb470ab8dc3adce83d2e615f3ab369efa2199.zip
Переключатель кеша в озу, небольшие улучшения ксс, фикс нсфв, фикс максимального размера кеша
Diffstat (limited to 'app/cache.go')
-rw-r--r--app/cache.go76
1 files changed, 45 insertions, 31 deletions
diff --git a/app/cache.go b/app/cache.go
index f9225be..e03db67 100644
--- a/app/cache.go
+++ b/app/cache.go
@@ -38,17 +38,7 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) {
fileName := sha1.Sum([]byte(subdomain + path))
filePath := CFG.Cache.Path + "/" + hex.EncodeToString(fileName[:])
- mx.Lock()
- if tempFS[fileName] == nil {
- tempFS[fileName] = &file{}
- }
- mx.Unlock()
-
- if tempFS[fileName].Content != nil {
- response = tempFS[fileName].Content
- tempFS[fileName].Score += 2
- break
- } else {
+ c := func() {
file, err := os.Open(filePath)
if err != nil {
if dwnld := Download(url.String()); dwnld.Status == 200 && dwnld.Headers["Content-Type"][0][:5] == "image" {
@@ -63,27 +53,44 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) {
try(e)
response = file
}
+ }
- go func() {
- defer restore()
-
- mx.RLock()
- tempFS[fileName].Content = response
- mx.RUnlock()
-
- for {
- time.Sleep(1 * time.Minute)
+ if CFG.Cache.MemCache {
+ mx.Lock()
+ if tempFS[fileName] == nil {
+ tempFS[fileName] = &file{}
+ }
+ mx.Unlock()
- mx.Lock()
- if tempFS[fileName].Score <= 0 {
- delete(tempFS, fileName)
+ if tempFS[fileName].Content != nil {
+ response = tempFS[fileName].Content
+ tempFS[fileName].Score += 2
+ break
+ } else {
+ c()
+ go func() {
+ defer restore()
+
+ mx.RLock()
+ tempFS[fileName].Content = response
+ mx.RUnlock()
+
+ for {
+ time.Sleep(1 * time.Minute)
+
+ mx.Lock()
+ if tempFS[fileName].Score <= 0 {
+ delete(tempFS, fileName)
+ mx.Unlock()
+ return
+ }
+ tempFS[fileName].Score--
mx.Unlock()
- return
}
- tempFS[fileName].Score--
- mx.Unlock()
- }
- }()
+ }()
+ }
+ } else {
+ c()
}
case CFG.Proxy:
dwnld := Download(url.String())
@@ -112,6 +119,7 @@ func InitCacheSystem() {
println(err.Error())
}
+ var total int64
for _, file := range dir {
fileName := c.Path + "/" + file.Name()
fileInfo, err := file.Info()
@@ -128,9 +136,15 @@ func InitCacheSystem() {
}
}
- if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize {
- try(os.RemoveAll(fileName))
- }
+ total += fileInfo.Size()
+ // if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize {
+ // try(os.RemoveAll(fileName))
+ // }
+ }
+
+ if c.MaxSize != 0 && total > c.MaxSize {
+ try(os.RemoveAll(c.Path))
+ os.Mkdir(c.Path, 0700)
}
time.Sleep(time.Second * time.Duration(c.UpdateInterval))