From c39399403e031a8c1ad53969770e4261d2c9e7aa Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Wed, 4 Sep 2024 20:22:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 3 +-- app/api.go | 6 ++++- app/cache.go | 1 + app/config.go | 2 +- app/parsers.go | 6 ++++- app/router.go | 8 +++--- app/util.go | 15 +++++++++++- app/wrapper.go | 59 ++++++++++++++++++++++++++++++--------------- config.example.json | 2 +- go.mod | 3 +-- go.sum | 4 +-- 11 files changed, 74 insertions(+), 35 deletions(-) diff --git a/TODO.md b/TODO.md index fbca5d8..01bc524 100644 --- a/TODO.md +++ b/TODO.md @@ -5,14 +5,13 @@ * **Доделать парсинг описания** * ~~Реализовать стрипы в ежедневных артах~~ ✔️ * ~~Исправить баг с навигацией по страницам~~ ✔️ -* Сделать нормальное отображение ошибок +* ~~Сделать нормальное отображение ошибок~~ ✔️ * ~~Сделать единицы в конфиге более понятными~~ ✔️ * Добавить чекер инстанса на работоспособность * ~~Добавить просмотр понравившихся артов пользователю~~ ✔️ * Добавить возможность включить темплейты в бинарник [P] * ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️ * Написать Makefile и скрипт для автоматического развёртывания инстанса -* **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)** * Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться * ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️ * ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ ✔️ diff --git a/app/api.go b/app/api.go index 3d0871c..fdf8270 100644 --- a/app/api.go +++ b/app/api.go @@ -58,8 +58,12 @@ func (a API) Random() { a.Error("Sorry, butt NSFW on this are disabled, and the instance failed to find a random art without NSFW", 500) } - s, err := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') + s, err, daErr := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a') try(err) + if daErr.RAW != nil { + continue + } + deviation := &s.Results[rand.Intn(len(s.Results))] if deviation.NSFW && !CFG.Nsfw { diff --git a/app/cache.go b/app/cache.go index cbf2432..975fa0a 100644 --- a/app/cache.go +++ b/app/cache.go @@ -127,6 +127,7 @@ func InitCacheSystem() { try(os.RemoveAll(fileName)) } } + if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { try(os.RemoveAll(fileName)) } diff --git a/app/config.go b/app/config.go index eff9ee8..745d2f4 100644 --- a/app/config.go +++ b/app/config.go @@ -89,7 +89,7 @@ func ExecuteConfig() { lifetimeParsed = duration * int64(num) } - CFG.Cache.MaxSize /= 1024 ^ 2 + CFG.Cache.MaxSize *= 1024 ^ 2 go InitCacheSystem() } devianter.UserAgent = CFG.UserAgent diff --git a/app/parsers.go b/app/parsers.go index 3a318be..b7f15fd 100644 --- a/app/parsers.go +++ b/app/parsers.go @@ -9,7 +9,11 @@ import ( "golang.org/x/net/html" ) -func (s skunkyart) ParseComments(c devianter.Comments) string { +func (s skunkyart) ParseComments(c devianter.Comments, daError devianter.Error) string { + if daError.RAW != nil { + return "Failed to fetch comments :(" + } + var cmmts strings.Builder replied := make(map[int]string) diff --git a/app/router.go b/app/router.go index 2625374..32488cb 100644 --- a/app/router.go +++ b/app/router.go @@ -64,13 +64,13 @@ func Router() { var skunky = skunkyart{Version: Release.Version} + skunky.Args = r.URL.Query() arg := skunky.Args.Get p, _ := strconv.Atoi(arg("p")) skunky.Endpoint = path[1] skunky.API.main = &skunky skunky.Writer = w - skunky.Args = r.URL.Query() skunky.BasePath = CFG.URI skunky.QueryRaw = arg("q") skunky.Query = u.QueryEscape(skunky.QueryRaw) @@ -128,9 +128,9 @@ func Router() { skunky.API.Error("Not Found", 404) } - // 404 - default: - skunky.ReturnHTTPError(404) + // 404 + default: + skunky.ReturnHTTPError(404) } } diff --git a/app/util.go b/app/util.go index c992466..c698090 100644 --- a/app/util.go +++ b/app/util.go @@ -139,6 +139,19 @@ func UrlBuilder(strs ...string) string { return str.String() } +func (s skunkyart) Error(dAerr devianter.Error) { + s.Writer.WriteHeader(502) + + var msg strings.Builder + msg.WriteString(`

DeviantArt error — '`) + msg.WriteString(dAerr.Error) + msg.WriteString("'

") + + wr(s.Writer, msg.String()) +} + func (s skunkyart) ReturnHTTPError(status int) { s.Writer.WriteHeader(status) @@ -203,7 +216,7 @@ func ParseMedia(media devianter.Media, thumb ...int) string { } return UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", filename) } - return mediaUrl + return "" } func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) { diff --git a/app/wrapper.go b/app/wrapper.go index a3d251b..a2e0fa4 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -18,10 +18,15 @@ func (s skunkyart) GRUser() { } var g devianter.Group + var daError devianter.Error g.Name = s.Query var err error - s.Templates.GroupUser.GR, err = g.Get() + s.Templates.GroupUser.GR, err, daError = g.Get() try(err) + if daError.RAW != nil { + s.Error(daError) + return + } group := &s.Templates.GroupUser @@ -63,12 +68,7 @@ func (s skunkyart) GRUser() { group.About.Interests += interest.String() } } - group.About.Comments = s.ParseComments(devianter.GetComments( - strconv.Itoa(group.GR.Gruser.ID), - "", - s.Page, - 4, - )) + group.About.Comments = s.ParseComments(devianter.GetComments(strconv.Itoa(group.GR.Gruser.ID),"",s.Page,4)) case "cover_deviation": group.About.BGMeta = x.ModuleData.CoverDeviation.Deviation @@ -98,12 +98,17 @@ func (s skunkyart) GRUser() { } if s.Type == 'f' { - content = g.Favourites(s.Page, all, folderid) + content, daError = g.Favourites(s.Page, all, folderid) } else { - content, err = g.Gallery(s.Page, folderid) + content, err, daError = g.Gallery(s.Page, folderid) try(err) } + if daError.RAW != nil { + s.Error(daError) + return + } + if folderid > 0 || (s.Type == 'f' && all) { group.Gallery.List = s.DeviationList(content.Content.Results, true, DeviationList{ More: content.Content.HasMore, @@ -172,19 +177,26 @@ func (s skunkyart) Deviation(author, postname string) { return } + var err devianter.Error post := &s.Templates.Deviation id := id_search[len(id_search)-1] - post.Post = devianter.GetDeviation(id, author) + post.Post, err = devianter.GetDeviation(id, author) + if err.RAW != nil { + s.Error(err) + return + } + + if post.Post.Comments.Total <= 50 { + post.Post.Comments.Cursor = "" + } if post.Post.Deviation.TextContent.Excerpt != "" { post.Post.Description = ParseDescription(post.Post.Deviation.TextContent) } else { post.Post.Description = ParseDescription(post.Post.Deviation.Extended.DescriptionText) } - // время публикации - post.StringTime = post.Post.Deviation.PublishedTime.UTC().String() - post.Post.IMG = ParseMedia(post.Post.Deviation.Media) + for _, x := range post.Post.Deviation.Extended.RelatedContent { if len(x.Deviations) != 0 { post.Related += s.DeviationList(x.Deviations, false) @@ -203,17 +215,19 @@ func (s skunkyart) Deviation(author, postname string) { post.Tags += tag.String() } - if post.Post.Comments.Total <= 50 { - post.Post.Comments.Cursor = "" - } - post.Comments = s.ParseComments(devianter.GetComments(id, post.Post.Comments.Cursor, s.Page, 1)) + post.StringTime = post.Post.Deviation.PublishedTime.UTC().String() + post.Post.IMG = ParseMedia(post.Post.Deviation.Media) s.ExecuteTemplate("deviantion.htm", "html", &s) } func (s skunkyart) DD() { - dd := devianter.GetDailyDeviations(s.Page) + dd, err := devianter.GetDailyDeviations(s.Page) + if err.RAW != nil { + s.Error(err) + return + } var strips strings.Builder for _, x := range dd.Strips { strips.WriteString(`

/home/skunk/projects/devianter require ( - git.macaw.me/skunky/devianter v0.2.5 + git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133 golang.org/x/net v0.27.0 ) diff --git a/go.sum b/go.sum index 8e79784..323fd90 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,4 @@ -git.macaw.me/skunky/devianter v0.2.5 h1:aAc6CG/ghvG130Ob7gGUdK4IV3MSeCD5t3QIJjto1M0= -git.macaw.me/skunky/devianter v0.2.5/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= +git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133 h1:ziutYUyDmdbsptR8Lj4lNmZUxfgwGsNbHM1mO9ATph8= +git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=