Commit c39399403e

c39399403e031a8c1ad53969770e4261d2c9e7aa

parent: 5a8a0987a2

Unsigned

lost+skunk <skunky@ebloid.ru> · 2024-09-04 17:22 UTC

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

Layout: unified · split

TODO.md +1 −2
@@ -5,14 +5,13 @@
55* **Доделать парсинг описания**
66* ~~Реализовать стрипы в ежедневных артах~~ ✔️
77* ~~Исправить баг с навигацией по страницам~~ ✔️
8* Сделать нормальное отображение ошибок
8* ~~Сделать нормальное отображение ошибок~~ ✔️
99* ~~Сделать единицы в конфиге более понятными~~ ✔️
1010* Добавить чекер инстанса на работоспособность
1111* ~~Добавить просмотр понравившихся артов пользователю~~ ✔️
1212* Добавить возможность включить темплейты в бинарник [P]
1313* ~~Реализовать миниатюры и оптимизировать CSS под маленькие экраны~~ ✔️
1414* Написать Makefile и скрипт для автоматического развёртывания инстанса
15* **Реализовать отображение контента, отличного от картинок (видео, аудио, etc)**
1615* Исправить баг с эмоджи, когда некоторые кастомные эмоции могут не отображаться
1716* ~~Добавить аргумент &filename, который будет выдавать файл с нормально выглядещем именем~~ ✔️
1817* ~~Улучшить систему кеширования: добавить рейтинг для удаления и копирование изображений в ОЗУ~~ ✔️
app/api.go +5 −1
@@ -58,8 +58,12 @@ func (a API) Random() {
5858 a.Error("Sorry, butt NSFW on this are disabled, and the instance failed to find a random art without NSFW", 500)
5959 }
6060
61 s, err := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a')
61 s, err, daErr := devianter.PerformSearch(string(rand.Intn(999)), rand.Intn(30), 'a')
6262 try(err)
63 if daErr.RAW != nil {
64 continue
65 }
66
6367 deviation := &s.Results[rand.Intn(len(s.Results))]
6468
6569 if deviation.NSFW && !CFG.Nsfw {
app/cache.go +1
@@ -127,6 +127,7 @@ func InitCacheSystem() {
127127 try(os.RemoveAll(fileName))
128128 }
129129 }
130
130131 if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize {
131132 try(os.RemoveAll(fileName))
132133 }
app/config.go +1 −1
@@ -89,7 +89,7 @@ func ExecuteConfig() {
8989
9090 lifetimeParsed = duration * int64(num)
9191 }
92 CFG.Cache.MaxSize /= 1024 ^ 2
92 CFG.Cache.MaxSize *= 1024 ^ 2
9393 go InitCacheSystem()
9494 }
9595 devianter.UserAgent = CFG.UserAgent
app/parsers.go +5 −1
@@ -9,7 +9,11 @@ import (
99 "golang.org/x/net/html"
1010)
1111
12func (s skunkyart) ParseComments(c devianter.Comments) string {
12func (s skunkyart) ParseComments(c devianter.Comments, daError devianter.Error) string {
13 if daError.RAW != nil {
14 return "Failed to fetch comments :("
15 }
16
1317 var cmmts strings.Builder
1418 replied := make(map[int]string)
1519
app/router.go +4 −4
@@ -64,13 +64,13 @@ func Router() {
6464
6565 var skunky = skunkyart{Version: Release.Version}
6666
67 skunky.Args = r.URL.Query()
6768 arg := skunky.Args.Get
6869 p, _ := strconv.Atoi(arg("p"))
6970
7071 skunky.Endpoint = path[1]
7172 skunky.API.main = &skunky
7273 skunky.Writer = w
73 skunky.Args = r.URL.Query()
7474 skunky.BasePath = CFG.URI
7575 skunky.QueryRaw = arg("q")
7676 skunky.Query = u.QueryEscape(skunky.QueryRaw)
@@ -128,9 +128,9 @@ func Router() {
128128 skunky.API.Error("Not Found", 404)
129129 }
130130
131 // 404
132 default:
133 skunky.ReturnHTTPError(404)
131 // 404
132 default:
133 skunky.ReturnHTTPError(404)
134134 }
135135 }
136136
app/util.go +14 −1
@@ -139,6 +139,19 @@ func UrlBuilder(strs ...string) string {
139139 return str.String()
140140}
141141
142func (s skunkyart) Error(dAerr devianter.Error) {
143 s.Writer.WriteHeader(502)
144
145 var msg strings.Builder
146 msg.WriteString(`<html><link rel="stylesheet" href="`)
147 msg.WriteString(UrlBuilder("stylesheet"))
148 msg.WriteString(`" /><h3>DeviantArt error — '`)
149 msg.WriteString(dAerr.Error)
150 msg.WriteString("'</h3></html>")
151
152 wr(s.Writer, msg.String())
153}
154
142155func (s skunkyart) ReturnHTTPError(status int) {
143156 s.Writer.WriteHeader(status)
144157
@@ -203,7 +216,7 @@ func ParseMedia(media devianter.Media, thumb ...int) string {
203216 }
204217 return UrlBuilder("media", "file", mediaUrl[:dot], mediaUrl[dot+11:], "&filename=", filename)
205218 }
206 return mediaUrl
219 return ""
207220}
208221
209222func ConvertDeviantArtUrlToSkunkyArt(url string) (output string) {
app/wrapper.go +39 −20
@@ -18,10 +18,15 @@ func (s skunkyart) GRUser() {
1818 }
1919
2020 var g devianter.Group
21 var daError devianter.Error
2122 g.Name = s.Query
2223 var err error
23 s.Templates.GroupUser.GR, err = g.Get()
24 s.Templates.GroupUser.GR, err, daError = g.Get()
2425 try(err)
26 if daError.RAW != nil {
27 s.Error(daError)
28 return
29 }
2530
2631 group := &s.Templates.GroupUser
2732
@@ -63,12 +68,7 @@ func (s skunkyart) GRUser() {
6368 group.About.Interests += interest.String()
6469 }
6570 }
66 group.About.Comments = s.ParseComments(devianter.GetComments(
67 strconv.Itoa(group.GR.Gruser.ID),
68 "",
69 s.Page,
70 4,
71 ))
71 group.About.Comments = s.ParseComments(devianter.GetComments(strconv.Itoa(group.GR.Gruser.ID),"",s.Page,4))
7272
7373 case "cover_deviation":
7474 group.About.BGMeta = x.ModuleData.CoverDeviation.Deviation
@@ -98,12 +98,17 @@ func (s skunkyart) GRUser() {
9898 }
9999
100100 if s.Type == 'f' {
101 content = g.Favourites(s.Page, all, folderid)
101 content, daError = g.Favourites(s.Page, all, folderid)
102102 } else {
103 content, err = g.Gallery(s.Page, folderid)
103 content, err, daError = g.Gallery(s.Page, folderid)
104104 try(err)
105105 }
106106
107 if daError.RAW != nil {
108 s.Error(daError)
109 return
110 }
111
107112 if folderid > 0 || (s.Type == 'f' && all) {
108113 group.Gallery.List = s.DeviationList(content.Content.Results, true, DeviationList{
109114 More: content.Content.HasMore,
@@ -172,19 +177,26 @@ func (s skunkyart) Deviation(author, postname string) {
172177 return
173178 }
174179
180 var err devianter.Error
175181 post := &s.Templates.Deviation
176182
177183 id := id_search[len(id_search)-1]
178 post.Post = devianter.GetDeviation(id, author)
184 post.Post, err = devianter.GetDeviation(id, author)
185 if err.RAW != nil {
186 s.Error(err)
187 return
188 }
189
190 if post.Post.Comments.Total <= 50 {
191 post.Post.Comments.Cursor = ""
192 }
179193
180194 if post.Post.Deviation.TextContent.Excerpt != "" {
181195 post.Post.Description = ParseDescription(post.Post.Deviation.TextContent)
182196 } else {
183197 post.Post.Description = ParseDescription(post.Post.Deviation.Extended.DescriptionText)
184198 }
185 // время публикации
186 post.StringTime = post.Post.Deviation.PublishedTime.UTC().String()
187 post.Post.IMG = ParseMedia(post.Post.Deviation.Media)
199
188200 for _, x := range post.Post.Deviation.Extended.RelatedContent {
189201 if len(x.Deviations) != 0 {
190202 post.Related += s.DeviationList(x.Deviations, false)
@@ -203,17 +215,19 @@ func (s skunkyart) Deviation(author, postname string) {
203215 post.Tags += tag.String()
204216 }
205217
206 if post.Post.Comments.Total <= 50 {
207 post.Post.Comments.Cursor = ""
208 }
209
210218 post.Comments = s.ParseComments(devianter.GetComments(id, post.Post.Comments.Cursor, s.Page, 1))
219 post.StringTime = post.Post.Deviation.PublishedTime.UTC().String()
220 post.Post.IMG = ParseMedia(post.Post.Deviation.Media)
211221
212222 s.ExecuteTemplate("deviantion.htm", "html", &s)
213223}
214224
215225func (s skunkyart) DD() {
216 dd := devianter.GetDailyDeviations(s.Page)
226 dd, err := devianter.GetDailyDeviations(s.Page)
227 if err.RAW != nil {
228 s.Error(err)
229 return
230 }
217231 var strips strings.Builder
218232 for _, x := range dd.Strips {
219233 strips.WriteString(`<h3 class="`)
@@ -243,12 +257,13 @@ func (s skunkyart) Search() {
243257 }
244258
245259 var err error
260 var daError devianter.Error
246261 ss := &s.Templates.Search
247262 switch s.Type {
248263 case 'a', 't':
249 ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type)
264 ss.Content, err, daError = devianter.PerformSearch(s.Query, s.Page, s.Type)
250265 case 'g', 'f':
251 ss.Content, err = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr"))
266 ss.Content, err, daError = devianter.PerformSearch(s.Query, s.Page, s.Type, s.Args.Get("usr"))
252267 case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп
253268 var (
254269 usernames = make(map[int]string)
@@ -297,6 +312,10 @@ func (s skunkyart) Search() {
297312 return
298313 }
299314 try(err)
315 if daError.RAW != nil {
316 s.Error(daError)
317 return
318 }
300319
301320 if s.Type != 'r' {
302321 ss.List = s.DeviationList(ss.Content.Results, false, DeviationList{
config.example.json +1 −1
@@ -5,7 +5,7 @@
55 "enabled": true,
66 "path": "cache",
77 "lifetime": null,
8 "max-size": 1024,
8 "max-size": 200,
99 "update-interval": 5
1010 },
1111 "static-path": "static",
go.mod +1 −2
@@ -2,8 +2,7 @@ module skunkyart
22
33go 1.18
44
5replace git.macaw.me/skunky/devianter v0.2.5 => /home/skunk/projects/devianter
65require (
7 git.macaw.me/skunky/devianter v0.2.5
6 git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133
87 golang.org/x/net v0.27.0
98)
go.sum +2 −2
@@ -1,4 +1,4 @@
1git.macaw.me/skunky/devianter v0.2.5 h1:aAc6CG/ghvG130Ob7gGUdK4IV3MSeCD5t3QIJjto1M0=
2git.macaw.me/skunky/devianter v0.2.5/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is=
1git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133 h1:ziutYUyDmdbsptR8Lj4lNmZUxfgwGsNbHM1mO9ATph8=
2git.macaw.me/skunky/devianter v0.2.6-0.20240904171839-b3c99749f133/go.mod h1:ZLn527xBlnpXrUB1B8z/MhyeiWVK4nPWjyfnhWOE8Is=
33golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
44golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=