diff options
| author | lost+skunk <[email protected]> | 2025-02-22 15:30:29 +0300 |
|---|---|---|
| committer | lost+skunk <[email protected]> | 2025-02-22 15:30:29 +0300 |
| commit | 048bb470ab8dc3adce83d2e615f3ab369efa2199 (patch) | |
| tree | 3b0dc678795aa8713109e0aa74609ab8fd631908 /app/cache.go | |
| parent | 32c61ec8ea577fdd37f7d50e1c176273960aa3e0 (diff) | |
| download | skunky-art-048bb470ab8dc3adce83d2e615f3ab369efa2199.tar.gz skunky-art-048bb470ab8dc3adce83d2e615f3ab369efa2199.tar.bz2 skunky-art-048bb470ab8dc3adce83d2e615f3ab369efa2199.zip | |
Переключатель кеша в озу, небольшие улучшения ксс, фикс нсфв, фикс максимального размера кеша
Diffstat (limited to 'app/cache.go')
| -rw-r--r-- | app/cache.go | 76 |
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)) |
