отображение ошибок

This commit is contained in:
lost+skunk 2024-09-04 20:22:58 +03:00
parent 5a8a0987a2
commit c39399403e
11 changed files with 74 additions and 35 deletions

View File

@ -5,14 +5,13 @@
* **Доделать парсинг описания** * **Доделать парсинг описания**
* ~~Реализовать стрипы в ежедневных артах~~ ✔️ * ~~Реализовать стрипы в ежедневных артах~~ ✔️
* ~~Исправить баг с навигацией по страницам~~ ✔️ * ~~Исправить баг с навигацией по страницам~~ ✔️
* Сделать нормальное отображение ошибок * ~~Сделать нормальное отображение ошибок~~ ✔️
* ~~Сделать единицы в конфиге более понятными~~ ✔️ * ~~Сделать единицы в конфиге более понятными~~ ✔️
* Добавить чекер инстанса на работоспособность * Добавить чекер инстанса на работоспособность
* ~~Добавить просмотр понравившихся артов пользователю~~ ✔️ * ~~Добавить просмотр понравившихся артов пользователю~~ ✔️
* Добавить возможность включить темплейты в бинарник [P] * Добавить возможность включить темплейты в бинарник [P]
* ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️ * ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️
* Написать Makefile и скрипт для автоматического развёртывания инстанса * Написать Makefile и скрипт для автоматического развёртывания инстанса
* **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)**
* Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться * Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться
* ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️ * ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️
* ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ ✔️ * ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ ✔️

View File

@ -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) 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) try(err)
if daErr.RAW != nil {
continue
}
deviation := &s.Results[rand.Intn(len(s.Results))] deviation := &s.Results[rand.Intn(len(s.Results))]
if deviation.NSFW && !CFG.Nsfw { if deviation.NSFW && !CFG.Nsfw {

View File

@ -127,6 +127,7 @@ func InitCacheSystem() {
try(os.RemoveAll(fileName)) try(os.RemoveAll(fileName))
} }
} }
if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize {
try(os.RemoveAll(fileName)) try(os.RemoveAll(fileName))
} }

View File

@ -89,7 +89,7 @@ func ExecuteConfig() {
lifetimeParsed = duration * int64(num) lifetimeParsed = duration * int64(num)
} }
CFG.Cache.MaxSize /= 1024 ^ 2 CFG.Cache.MaxSize *= 1024 ^ 2
go InitCacheSystem() go InitCacheSystem()
} }
devianter.UserAgent = CFG.UserAgent devianter.UserAgent = CFG.UserAgent

View File

@ -9,7 +9,11 @@ import (
"golang.org/x/net/html" "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 var cmmts strings.Builder
replied := make(map[int]string) replied := make(map[int]string)

View File

@ -64,13 +64,13 @@ func Router() {
var skunky = skunkyart{Version: Release.Version} var skunky = skunkyart{Version: Release.Version}
skunky.Args = r.URL.Query()
arg := skunky.Args.Get arg := skunky.Args.Get
p, _ := strconv.Atoi(arg("p")) p, _ := strconv.Atoi(arg("p"))
skunky.Endpoint = path[1] skunky.Endpoint = path[1]
skunky.API.main = &skunky skunky.API.main = &skunky
skunky.Writer = w skunky.Writer = w
skunky.Args = r.URL.Query()
skunky.BasePath = CFG.URI skunky.BasePath = CFG.URI
skunky.QueryRaw = arg("q") skunky.QueryRaw = arg("q")
skunky.Query = u.QueryEscape(skunky.QueryRaw) skunky.Query = u.QueryEscape(skunky.QueryRaw)
@ -128,9 +128,9 @@ func Router() {
skunky.API.Error("Not Found", 404) skunky.API.Error("Not Found", 404)
} }
// 404 // 404
default: default:
skunky.ReturnHTTPError(404) skunky.ReturnHTTPError(404)
} }
} }

View File

@ -139,6 +139,19 @@ func UrlBuilder(strs ...string) string {
return str.String() return str.String()
} }
func (s skunkyart) Error(dAerr devianter.Error) {
s.Writer.WriteHeader(502)
var msg strings.Builder
msg.WriteString(`<html><link rel="stylesheet" href="`)
msg.WriteString(UrlBuilder("stylesheet"))
msg.WriteString(`" /><h3>DeviantArt error — '`)
msg.WriteString(dAerr.Error)
msg.WriteString("'</h3></html>")
wr(s.Writer, msg.String())
}
func (s skunkyart) ReturnHTTPError(status int) { func (s skunkyart) ReturnHTTPError(status int) {
s.Writer.WriteHeader(status) 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 UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", filename)
} }
return mediaUrl return ""
} }
func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) { func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) {

View File

@ -18,10 +18,15 @@ func (s skunkyart) GRUser() {
} }
var g devianter.Group var g devianter.Group
var daError devianter.Error
g.Name = s.Query g.Name = s.Query
var err error var err error
s.Templates.GroupUser.GR, err = g.Get() s.Templates.GroupUser.GR, err, daError = g.Get()
try(err) try(err)
if daError.RAW != nil {
s.Error(daError)
return
}
group := &s.Templates.GroupUser group := &s.Templates.GroupUser
@ -63,12 +68,7 @@ func (s skunkyart) GRUser() {
group.About.Interests += interest.String() group.About.Interests += interest.String()
} }
} }
group.About.Comments = s.ParseComments(devianter.GetComments( group.About.Comments = s.ParseComments(devianter.GetComments(strconv.Itoa(group.GR.Gruser.ID),"",s.Page,4))
strconv.Itoa(group.GR.Gruser.ID),
"",
s.Page,
4,
))
case "cover_deviation": case "cover_deviation":
group.About.BGMeta = x.ModuleData.CoverDeviation.Deviation group.About.BGMeta = x.ModuleData.CoverDeviation.Deviation
@ -98,12 +98,17 @@ func (s skunkyart) GRUser() {
} }
if s.Type == 'f' { if s.Type == 'f' {
content = g.Favourites(s.Page, all, folderid) content, daError = g.Favourites(s.Page, all, folderid)
} else { } else {
content, err = g.Gallery(s.Page, folderid) content, err, daError = g.Gallery(s.Page, folderid)
try(err) try(err)
} }
if daError.RAW != nil {
s.Error(daError)
return
}
if folderid > 0 || (s.Type == 'f' && all) { if folderid > 0 || (s.Type == 'f' && all) {
group.Gallery.List = s.DeviationList(content.Content.Results, true, DeviationList{ group.Gallery.List = s.DeviationList(content.Content.Results, true, DeviationList{
More: content.Content.HasMore, More: content.Content.HasMore,
@ -172,19 +177,26 @@ func (s skunkyart) Deviation(author, postname string) {
return return
} }
var err devianter.Error
post := &s.Templates.Deviation post := &s.Templates.Deviation
id := id_search[len(id_search)-1] 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 != "" { if post.Post.Deviation.TextContent.Excerpt != "" {
post.Post.Description = ParseDescription(post.Post.Deviation.TextContent) post.Post.Description = ParseDescription(post.Post.Deviation.TextContent)
} else { } else {
post.Post.Description = ParseDescription(post.Post.Deviation.Extended.DescriptionText) 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 { for _, x := range post.Post.Deviation.Extended.RelatedContent {
if len(x.Deviations) != 0 { if len(x.Deviations) != 0 {
post.Related += s.DeviationList(x.Deviations, false) post.Related += s.DeviationList(x.Deviations, false)
@ -203,17 +215,19 @@ func (s skunkyart) Deviation(author, postname string) {
post.Tags += tag.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.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) s.ExecuteTemplate("deviantion.htm", "html", &s)
} }
func (s skunkyart) DD() { 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 var strips strings.Builder
for _, x := range dd.Strips { for _, x := range dd.Strips {
strips.WriteString(`<h3 class="`) strips.WriteString(`<h3 class="`)
@ -243,12 +257,13 @@ func (s skunkyart) Search() {
} }
var err error var err error
var daError devianter.Error
ss := &s.Templates.Search ss := &s.Templates.Search
switch s.Type { switch s.Type {
case 'a', 't': case 'a', 't':
ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type) ss.Content, err, daError = devianter.PerformSearch(s.Query, s.Page, s.Type)
case 'g', 'f': case 'g', 'f':
ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr")) ss.Content, err, daError = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr"))
case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп
var ( var (
usernames = make(map[int]string) usernames = make(map[int]string)
@ -297,6 +312,10 @@ func (s skunkyart) Search() {
return return
} }
try(err) try(err)
if daError.RAW != nil {
s.Error(daError)
return
}
if s.Type != 'r' { if s.Type != 'r' {
ss.List = s.DeviationList(ss.Content.Results, false, DeviationList{ ss.List = s.DeviationList(ss.Content.Results, false, DeviationList{

View File

@ -5,7 +5,7 @@
"enabled": true, "enabled": true,
"path": "cache", "path": "cache",
"lifetime": null, "lifetime": null,
"max-size": 1024, "max-size": 200,
"update-interval": 5 "update-interval": 5
}, },
"static-path": "static", "static-path": "static",

3
go.mod
View File

@ -2,8 +2,7 @@ module skunkyart
go 1.18 go 1.18
replace git.macaw.me/skunky/devianter v0.2.5 => /home/skunk/projects/devianter
require ( 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 golang.org/x/net v0.27.0
) )

4
go.sum
View File

@ -1,4 +1,4 @@
git.macaw.me/skunky/devianter v0.2.5 h1:aAc6CG/ghvG130Ob7gGUdK4IV3MSeCD5t3QIJjto1M0= git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133 h1:ziutYUyDmdbsptR8Lj4lNmZUxfgwGsNbHM1mO9ATph8=
git.macaw.me/skunky/devianter v0.2.5/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is= 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 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=