From 048bb470ab8dc3adce83d2e615f3ab369efa2199 Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Sat, 22 Feb 2025 15:30:29 +0300 Subject: Переключатель кеша в озу, небольшие улучшения ксс, фикс нсфв, фикс максимального размера кеша MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cache.go | 76 +++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 31 deletions(-) (limited to 'app/cache.go') 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)) -- cgit v1.2.3