mirror of
https://codeberg.org/VnPower/PixivFE
synced 2024-12-06 19:16:23 +01:00
Related novels
This commit is contained in:
@@ -121,3 +121,9 @@ func GetNovelURL(id string) string {
|
||||
|
||||
return fmt.Sprintf(base, id)
|
||||
}
|
||||
|
||||
func GetNovelRelatedURL(id string, limit int) string {
|
||||
base := "https://www.pixiv.net/ajax/novel/%s/recommend/init?limit=%d"
|
||||
|
||||
return fmt.Sprintf(base, id, limit)
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
session "codeberg.org/vnpower/pixivfe/v2/core/user"
|
||||
http "codeberg.org/vnpower/pixivfe/v2/core/http"
|
||||
session "codeberg.org/vnpower/pixivfe/v2/core/user"
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
@@ -342,7 +342,7 @@ func GetArtworkByID(c *fiber.Ctx, id string, full bool) (*Illust, error) {
|
||||
sort.Slice(recent[:], func(i, j int) bool {
|
||||
left := recent[i].ID
|
||||
right := recent[j].ID
|
||||
return numberGreaterThan(left,right)
|
||||
return numberGreaterThan(left, right)
|
||||
})
|
||||
illust.RecentWorks = recent
|
||||
}()
|
||||
@@ -366,7 +366,6 @@ func GetArtworkByID(c *fiber.Ctx, id string, full bool) (*Illust, error) {
|
||||
var err error
|
||||
comments, err := GetArtworkComments(c, id)
|
||||
if err != nil {
|
||||
println("here")
|
||||
cerr <- err
|
||||
return
|
||||
}
|
||||
|
||||
+23
-1
@@ -3,8 +3,8 @@ package core
|
||||
import (
|
||||
"time"
|
||||
|
||||
session "codeberg.org/vnpower/pixivfe/v2/core/user"
|
||||
http "codeberg.org/vnpower/pixivfe/v2/core/http"
|
||||
session "codeberg.org/vnpower/pixivfe/v2/core/user"
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
@@ -101,3 +101,25 @@ func GetNovelByID(c *fiber.Ctx, id string) (Novel, error) {
|
||||
|
||||
return novel, nil
|
||||
}
|
||||
|
||||
func GetNovelRelated(c *fiber.Ctx, id string) ([]NovelBrief, error) {
|
||||
var novels struct {
|
||||
List []NovelBrief `json:"novels"`
|
||||
}
|
||||
|
||||
// hard-coded value, may change
|
||||
URL := http.GetNovelRelatedURL(id, 100)
|
||||
|
||||
response, err := http.UnwrapWebAPIRequest(c.Context(), URL, "")
|
||||
if err != nil {
|
||||
return novels.List, err
|
||||
}
|
||||
response = session.ProxyImageUrl(c, response)
|
||||
|
||||
err = json.Unmarshal([]byte(response), &novels)
|
||||
if err != nil {
|
||||
return novels.List, err
|
||||
}
|
||||
|
||||
return novels.List, nil
|
||||
}
|
||||
|
||||
+8
-2
@@ -19,9 +19,15 @@ func NovelPage(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
|
||||
related, err := core.GetNovelRelated(c, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// todo: passing ArtWorkData{} here will not work. maybe lowercase?
|
||||
return c.Render("pages/novel", fiber.Map{
|
||||
"Novel": novel,
|
||||
"Title": novel.Title,
|
||||
"Novel": novel,
|
||||
"NovelRelated": related,
|
||||
"Title": novel.Title,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
|
||||
<div class="novel-card">
|
||||
<div class="novel-detail">
|
||||
<div class="novel-cover">
|
||||
<a href="/novel/{{ .ID }}">
|
||||
<img src="{{ .CoverURL }}" alt="{{ .Title }}" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="novel-metadata">
|
||||
<a href="/novel/{{ .ID }}">
|
||||
<div class="novel-title">
|
||||
{{ .Title }}
|
||||
</div>
|
||||
</a>
|
||||
<small><span>{{ .WordCount }} word(s)</span> <span>{{ floor: .ReadingTime / 60 }} min</span></small>
|
||||
<a href="/users/{{ .UserID }}">
|
||||
<div class="novel-author">
|
||||
<img src="{{ .UserAvatar }}" alt="{{ .UserName }}" />
|
||||
<span>{{ .UserName }}</span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="novel-description">{{ raw: .Description }}</p>
|
||||
|
||||
<div class="illust-tags">
|
||||
{{ if .AiType == 2 }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name" id="highlight">AI-generated</span>
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ if .IsOriginal }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name">Original</span>
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ if .Genre != "0" }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name">{{ novelGenre: .Genre }}</span>
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ range .Tags }} {{ if isEmphasize(.) }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name" id="highlight">{{ . }}</span>
|
||||
</span>
|
||||
{{ else }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-translation"
|
||||
><a href="/tags/{{ escapeString(.) }}">#{{ . }}</a></span
|
||||
>
|
||||
</span>
|
||||
{{ end }} {{ end }}
|
||||
</div>
|
||||
|
||||
<div class="illust-tags">
|
||||
<span class="illust-tag-attr">
|
||||
<img src="/assets/heart-solid.png" alt="Bookmarks" />
|
||||
{{ .Bookmarks }}
|
||||
</span>
|
||||
<span class="illust-tag-attr">
|
||||
<img src="/assets/calendar.png" alt="Date" />
|
||||
{{ parseTime: .CreateDate }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -62,4 +62,9 @@
|
||||
<div class="novel-content">
|
||||
{{ raw: renderNovel(Novel.Content) }}
|
||||
</div>
|
||||
<div class="novel-container">
|
||||
{{ range NovelRelated }}
|
||||
{{ include "components/novel-tn" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -14,70 +14,7 @@
|
||||
</div>
|
||||
<div class="novel-container">
|
||||
{{ range Novels }}
|
||||
<div class="novel-card">
|
||||
<div class="novel-detail">
|
||||
<div class="novel-cover">
|
||||
<a href="/novel/{{ .ID }}">
|
||||
<img src="{{ .CoverURL }}" alt="{{ .Title }}" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="novel-metadata">
|
||||
<a href="/novel/{{ .ID }}">
|
||||
<div class="novel-title">
|
||||
{{ .Title }}
|
||||
</div>
|
||||
</a>
|
||||
<small><span>{{ .WordCount }} word(s)</span> <span>{{ floor: .ReadingTime / 60 }} min</span></small>
|
||||
<a href="/users/{{ .UserID }}">
|
||||
<div class="novel-author">
|
||||
<img src="{{ .UserAvatar }}" alt="{{ .UserName }}" />
|
||||
<span>{{ .UserName }}</span>
|
||||
</div>
|
||||
</a>
|
||||
<p class="novel-description">{{ raw: .Description }}</p>
|
||||
|
||||
<div class="illust-tags">
|
||||
{{ if .AiType == 2 }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name" id="highlight">AI-generated</span>
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ if .IsOriginal }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name">Original</span>
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ if .Genre != "0" }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name">{{ novelGenre: .Genre }}</span>
|
||||
</span>
|
||||
{{ end }}
|
||||
{{ range .Tags }} {{ if isEmphasize(.) }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-name" id="highlight">{{ . }}</span>
|
||||
</span>
|
||||
{{ else }}
|
||||
<span class="illust-tag">
|
||||
<span class="illust-tag-translation"
|
||||
><a href="/tags/{{ escapeString(.) }}">#{{ . }}</a></span
|
||||
>
|
||||
</span>
|
||||
{{ end }} {{ end }}
|
||||
</div>
|
||||
|
||||
<div class="illust-tags">
|
||||
<span class="illust-tag-attr">
|
||||
<img src="/assets/heart-solid.png" alt="Bookmarks" />
|
||||
{{ .Bookmarks }}
|
||||
</span>
|
||||
<span class="illust-tag-attr">
|
||||
<img src="/assets/calendar.png" alt="Date" />
|
||||
{{ parseTime: .CreateDate }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ include "components/novel-tn" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
<div class="pagination">
|
||||
|
||||
Reference in New Issue
Block a user