Переключатель кеша в озу, небольшие улучшения ксс, фикс нсфв, фикс максимального размера кеша

This commit is contained in:
lost+skunk 2025-02-22 15:30:29 +03:00
parent 32c61ec8ea
commit 048bb470ab
7 changed files with 88 additions and 47 deletions

View File

@ -41,12 +41,18 @@ func (a API) Error(description string, status int) {
func (a API) sendMedia(d *devianter.Deviation) { func (a API) sendMedia(d *devianter.Deviation) {
mediaUrl, name := devianter.UrlFromMedia(d.Media) mediaUrl, name := devianter.UrlFromMedia(d.Media)
a.main.SetFilename(name) a.main.SetFilename(name)
if len(mediaUrl) != 0 { if len(mediaUrl) != 0 {
return
}
if CFG.Proxy {
mediaUrl = mediaUrl[21:] mediaUrl = mediaUrl[21:]
dot := strings.Index(mediaUrl, ".") dot := strings.Index(mediaUrl, ".")
a.main.Writer.Header().Del("Content-Type") a.main.Writer.Header().Del("Content-Type")
a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:])
} else {
a.main.Writer.Header().Add("Location", mediaUrl)
a.main.Writer.WriteHeader(302)
} }
} }

View File

@ -38,17 +38,7 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) {
fileName := sha1.Sum([]byte(subdomain + path)) fileName := sha1.Sum([]byte(subdomain + path))
filePath := CFG.Cache.Path + "/" + hex.EncodeToString(fileName[:]) filePath := CFG.Cache.Path + "/" + hex.EncodeToString(fileName[:])
mx.Lock() c := func() {
if tempFS[fileName] == nil {
tempFS[fileName] = &file{}
}
mx.Unlock()
if tempFS[fileName].Content != nil {
response = tempFS[fileName].Content
tempFS[fileName].Score += 2
break
} else {
file, err := os.Open(filePath) file, err := os.Open(filePath)
if err != nil { if err != nil {
if dwnld := Download(url.String()); dwnld.Status == 200 && dwnld.Headers["Content-Type"][0][:5] == "image" { 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) try(e)
response = file response = file
} }
}
go func() { if CFG.Cache.MemCache {
defer restore() mx.Lock()
if tempFS[fileName] == nil {
tempFS[fileName] = &file{}
}
mx.Unlock()
mx.RLock() if tempFS[fileName].Content != nil {
tempFS[fileName].Content = response response = tempFS[fileName].Content
mx.RUnlock() tempFS[fileName].Score += 2
break
} else {
c()
go func() {
defer restore()
for { mx.RLock()
time.Sleep(1 * time.Minute) tempFS[fileName].Content = response
mx.RUnlock()
mx.Lock() for {
if tempFS[fileName].Score <= 0 { time.Sleep(1 * time.Minute)
delete(tempFS, fileName)
mx.Lock()
if tempFS[fileName].Score <= 0 {
delete(tempFS, fileName)
mx.Unlock()
return
}
tempFS[fileName].Score--
mx.Unlock() mx.Unlock()
return
} }
tempFS[fileName].Score-- }()
mx.Unlock() }
} } else {
}() c()
} }
case CFG.Proxy: case CFG.Proxy:
dwnld := Download(url.String()) dwnld := Download(url.String())
@ -112,6 +119,7 @@ func InitCacheSystem() {
println(err.Error()) println(err.Error())
} }
var total int64
for _, file := range dir { for _, file := range dir {
fileName := c.Path + "/" + file.Name() fileName := c.Path + "/" + file.Name()
fileInfo, err := file.Info() fileInfo, err := file.Info()
@ -128,9 +136,15 @@ func InitCacheSystem() {
} }
} }
if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { total += fileInfo.Size()
try(os.RemoveAll(fileName)) // 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)) time.Sleep(time.Second * time.Duration(c.UpdateInterval))

View File

@ -12,12 +12,13 @@ import (
) )
var Release struct { var Release struct {
Version string Version string
Description string Description string
} }
type cache_config struct { type cache_config struct {
Enabled bool Enabled bool
MemCache bool `json:"memcache"`
Path string Path string
MaxSize int64 `json:"max-size"` MaxSize int64 `json:"max-size"`
Lifetime string Lifetime string
@ -93,7 +94,7 @@ func ExecuteConfig() {
About = instanceAbout{ About = instanceAbout{
Proxy: CFG.Proxy, Proxy: CFG.Proxy,
Nsfw: CFG.Nsfw, Nsfw: CFG.Nsfw,
} }
static.StaticPath = CFG.StaticPath static.StaticPath = CFG.StaticPath

View File

@ -36,13 +36,12 @@ func (s skunkyart) GRUser() {
for _, x := range g.Gruser.Page.Modules { for _, x := range g.Gruser.Page.Modules {
switch x.Name { switch x.Name {
case "about", "group_about": case "about", "group_about":
switch g.Owner.Group { if g.Owner.Group {
case true:
var about = &x.ModuleData.GroupAbout var about = &x.ModuleData.GroupAbout
group.Group = true group.Group = true
group.CreationDate = x.ModuleData.GroupAbout.FoundatedAt.UTC().String() group.CreationDate = x.ModuleData.GroupAbout.FoundatedAt.UTC().String()
group.About.DescriptionFormatted = ParseDescription(about.Description) group.About.DescriptionFormatted = ParseDescription(about.Description)
case false: } else if false {
group.About.A = x.ModuleData.About group.About.A = x.ModuleData.About
var about = &group.About.A var about = &group.About.A
group.CreationDate = time.Unix(time.Now().Unix()-x.ModuleData.About.RegDate, 0).UTC().String() group.CreationDate = time.Unix(time.Now().Unix()-x.ModuleData.About.RegDate, 0).UTC().String()
@ -186,6 +185,14 @@ func (s skunkyart) Deviation(author, postname string) {
return return
} }
if post.Post.Deviation.NSFW {
s.Writer.WriteHeader(403)
wr(s.Writer, `<html><link rel="stylesheet" href="`+
UrlBuilder("stylesheet")+
`" /><h1>NSFW content are disabled on this instance.</h1></html>`)
return
}
if post.Post.Comments.Total <= 50 { if post.Post.Comments.Total <= 50 {
post.Post.Comments.Cursor = "" post.Post.Comments.Cursor = ""
} }

View File

@ -6,11 +6,12 @@
"path": "cache", "path": "cache",
"lifetime": null, "lifetime": null,
"max-size": 200, "max-size": 200,
"memcache": false,
"update-interval": 5 "update-interval": 5
}, },
"static-path": "static", "static-path": "static",
"download-proxy": "http://127.0.0.1:8080", "download-proxy": "http://127.0.0.1:8080",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
"proxy": true, "proxy": true,
"nsfw": true "nsfw": false
} }

View File

@ -1,6 +1,6 @@
/* TAGS */ /* TAGS */
html { html {
font-family: Ubuntu; font-family: ubuntu, system-ui;
background-color:black; background-color:black;
color: rgb(234, 216, 216); color: rgb(234, 216, 216);
} }
@ -45,24 +45,22 @@ input:focus {
justify-content: center; justify-content: center;
} }
.block { .block {
max-width: 20%; padding: 0px 0px 6px 0px;
height: 0%; border: 3px solid #000;
padding: 4px;
border-radius: 2px;
border: 3px solid #091f19;
word-break: break-all; word-break: break-all;
background-color: #091f19; background-color: #091f19;
margin-left: 5px; margin-left: 5px;
margin-top: 5px; margin-top: 5px;
text-align: center; text-align: center;
} }
.block h1 {
padding: 8.5vh;
}
.block:hover { .block:hover {
border: 3px solid #4d27d6; border: 3px solid #4d27d6;
transition: 400ms; transition: 400ms;
} }
.block img, .plates .user-plate img {
width: 100%;
}
.block p { .block p {
word-break: break-all; word-break: break-all;
} }
@ -185,6 +183,20 @@ input:focus {
font-size: 60%; font-size: 60%;
max-width: 80% max-width: 80%
} }
.block img, .plates .user-plate img {
width: 100%;
}
}
@media (orientation: landscape) {
.block {
width: 20%;
}
.block img, .plates .user-plate img {
width: 100%;
height: 30vh;
object-fit: cover;
}
} }
@media (max-width: 1462px) and (orientation: landscape) { @media (max-width: 1462px) and (orientation: landscape) {

View File

@ -30,7 +30,7 @@
</form> <h1>| {{.Templates.GroupUser.GR.Owner.Username}}</h1> </form> <h1>| {{.Templates.GroupUser.GR.Owner.Username}}</h1>
</header> </header>
{{if eq .Type 'a'}} {{if eq .Type 'a'}}
{{if ne .Templates.GroupUser.About.BG ""}} {{if and (and (ne .Templates.About.Nsfw true) (ne .Templates.GroupUser.About.BGMeta.NSFW true)) (ne .Templates.GroupUser.About.BG "")}}
<a href="{{.Templates.GroupUser.About.BGMeta.Url}}" class="ubg"><img title="{{if ne .Templates.GroupUser.GR.Owner.Username .Templates.GroupUser.About.BGMeta.Author.Username}} <a href="{{.Templates.GroupUser.About.BGMeta.Url}}" class="ubg"><img title="{{if ne .Templates.GroupUser.GR.Owner.Username .Templates.GroupUser.About.BGMeta.Author.Username}}
{{.Templates.GroupUser.About.BGMeta.Author.Username}} - {{end}}{{.Templates.GroupUser.About.BGMeta.Title}}" src="{{.Templates.GroupUser.About.BG}}"></a> {{.Templates.GroupUser.About.BGMeta.Author.Username}} - {{end}}{{.Templates.GroupUser.About.BGMeta.Title}}" src="{{.Templates.GroupUser.About.BG}}"></a>
{{end}} {{end}}