mirror of
https://codeberg.org/video-prize-ranch/rimgo.git
synced 2025-12-14 04:05:14 +00:00
next button for tagged posts (#169)
No previous button because that would be annoying to implement serverside with pagination etc. Closes #115 Fixed conflict with #154, #155, #156 Co-authored-by: video-prize-ranch <cb.8a3w5@simplelogin.co> Reviewed-on: https://codeberg.org/rimgo/rimgo/pulls/169 Reviewed-by: video-prize-ranch <video-prize-ranch@noreply.codeberg.org> Co-authored-by: orangix <orangix@noreply.codeberg.org> Co-committed-by: orangix <orangix@noreply.codeberg.org>
This commit is contained in:
committed by
video-prize-ranch
parent
7433265991
commit
927ea20fad
64
api/tag.go
64
api/tag.go
@@ -3,9 +3,9 @@ package api
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
|
||||
"github.com/patrickmn/go-cache"
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
@@ -21,6 +21,9 @@ type Tag struct {
|
||||
}
|
||||
|
||||
func (client *Client) FetchTag(tag string, sort string, page string) (Tag, error) {
|
||||
// Dots are automatically removed on Imgur, so more cache hits
|
||||
tag = strings.ReplaceAll(tag, ".", "")
|
||||
|
||||
cacheData, found := client.Cache.Get(tag + sort + page + "-tag")
|
||||
if found {
|
||||
return cacheData.(Tag), nil
|
||||
@@ -64,47 +67,44 @@ func (client *Client) FetchTag(tag string, sort string, page string) (Tag, error
|
||||
|
||||
data := gjson.Parse(string(body))
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
posts := make([]Submission, 0)
|
||||
data.Get("posts").ForEach(
|
||||
func(key, value gjson.Result) bool {
|
||||
wg.Add(1)
|
||||
url, _ := url.Parse(strings.ReplaceAll(value.Get("url").String(), "https://imgur.com", ""))
|
||||
q := url.Query()
|
||||
q.Add("tag", tag+"."+sort+"."+page+"."+key.String())
|
||||
url.RawQuery = q.Encode()
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
posts = append(posts, Submission{
|
||||
Id: value.Get("id").String(),
|
||||
Title: value.Get("title").String(),
|
||||
Link: strings.ReplaceAll(value.Get("url").String(), "https://imgur.com", ""),
|
||||
Cover: Media{
|
||||
Id: value.Get("cover_id").String(),
|
||||
Type: value.Get("cover.type").String(),
|
||||
Url: strings.ReplaceAll(value.Get("cover.url").String(), "https://i.imgur.com", ""),
|
||||
},
|
||||
Points: value.Get("point_count").Int(),
|
||||
Upvotes: value.Get("upvote_count").Int(),
|
||||
Downvotes: value.Get("downvote_count").Int(),
|
||||
Comments: value.Get("comment_count").Int(),
|
||||
Views: value.Get("view_count").Int(),
|
||||
IsAlbum: value.Get("is_album").Bool(),
|
||||
})
|
||||
}()
|
||||
posts = append(posts, Submission{
|
||||
Id: value.Get("id").String(),
|
||||
Title: value.Get("title").String(),
|
||||
Link: url.String(),
|
||||
Cover: Media{
|
||||
Id: value.Get("cover_id").String(),
|
||||
Type: value.Get("cover.type").String(),
|
||||
Url: strings.ReplaceAll(value.Get("cover.url").String(), "https://i.imgur.com", ""),
|
||||
},
|
||||
Points: value.Get("point_count").Int(),
|
||||
Upvotes: value.Get("upvote_count").Int(),
|
||||
Downvotes: value.Get("downvote_count").Int(),
|
||||
Comments: value.Get("comment_count").Int(),
|
||||
Views: value.Get("view_count").Int(),
|
||||
IsAlbum: value.Get("is_album").Bool(),
|
||||
})
|
||||
|
||||
return true
|
||||
},
|
||||
)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
tagData := Tag{
|
||||
Tag: tag,
|
||||
Display: data.Get("display").String(),
|
||||
Sort: sort,
|
||||
PostCount: data.Get("post_count").Int(),
|
||||
Posts: posts,
|
||||
Background: "/" + data.Get("background_id").String() + ".webp",
|
||||
Tag: tag,
|
||||
Display: data.Get("display").String(),
|
||||
Sort: sort,
|
||||
PostCount: data.Get("post_count").Int(),
|
||||
Posts: posts,
|
||||
Background: "/" + data.Get("background_id").String() + ".webp",
|
||||
}
|
||||
|
||||
client.Cache.Set(tag + sort + page + "-tag", tagData, cache.DefaultExpiration)
|
||||
client.Cache.Set(tag+sort+page+"-tag", tagData, 4*cache.DefaultExpiration)
|
||||
return tagData, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user