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=