mirror of
https://codeberg.org/VnPower/PixivFE
synced 2024-12-06 19:16:23 +01:00
tag: high resolution thumbnails
This commit is contained in:
@@ -34,7 +34,12 @@
|
||||
<div class="col-lg-4 d-flex thumbnail-hover-dark">
|
||||
<div class="thumbnail-wrapper rounded-top-5 rounded-start-lg-5 rounded-end-lg-0 w-100 overflow-hidden">
|
||||
<a href="/artworks/{{ .Tag.Metadata.ID }}">
|
||||
<img src="{{ .Tag.Metadata.Image }}" alt="{{ .Tag.Name }}" class="img-fluid w-100 h-100 object-fit-cover" />
|
||||
<img
|
||||
srcset="{{ .Tag.Metadata.Image }}, {{ .Tag.Metadata.ImageMaster }} 2x"
|
||||
src="{{ .Tag.Metadata.ImageMaster }}"
|
||||
alt="{{ .Tag.Name }}"
|
||||
class="img-fluid w-100 h-100 object-fit-cover"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+43
-4
@@ -2,6 +2,8 @@ package core
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"codeberg.org/vnpower/pixivfe/v2/audit"
|
||||
@@ -13,10 +15,11 @@ type TagDetail struct {
|
||||
Name string `json:"tag"`
|
||||
AlternativeName string `json:"word"`
|
||||
Metadata struct {
|
||||
Detail string `json:"abstract"`
|
||||
Image string `json:"image"`
|
||||
Name string `json:"tag"`
|
||||
ID json.Number `json:"id"`
|
||||
Detail string `json:"abstract"`
|
||||
Image string `json:"image"` // The original image URL as returned by the API
|
||||
ImageMaster string // The higher resolution version obtained by transformImageURL
|
||||
Name string `json:"tag"`
|
||||
ID json.Number `json:"id"`
|
||||
} `json:"pixpedia"`
|
||||
}
|
||||
|
||||
@@ -78,6 +81,32 @@ func (s SearchPageSettings) ReturnMap() map[string]string {
|
||||
}
|
||||
}
|
||||
|
||||
// transformImageURL replaces the "/c/{parameters}/" segment in the image URL with "/".
|
||||
//
|
||||
// Regex matching is used instead of simple substring replacement for flexibility.
|
||||
func transformImageURL(auditor *audit.Auditor, inputURL string) (string, error) {
|
||||
auditor.SugaredLogger.Debugf("transformImageURL provided with original URL: %s", inputURL)
|
||||
|
||||
// Parse the URL to ensure it's valid and to manipulate its path
|
||||
parsedURL, err := url.Parse(inputURL)
|
||||
if err != nil {
|
||||
auditor.SugaredLogger.Errorf("transformImageURL found invalid URL '%s': %v", inputURL, err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
// Define a regex to match the "/c/{parameters}/" segment and replace it with "/"
|
||||
re := regexp.MustCompile(`/c/[^/]+/`)
|
||||
updatedPath := re.ReplaceAllString(parsedURL.Path, "/")
|
||||
|
||||
// Update the path in the parsed URL and reconstruct the full URL
|
||||
parsedURL.Path = updatedPath
|
||||
updatedURL := parsedURL.String()
|
||||
|
||||
auditor.SugaredLogger.Debugf("transformImageURL returned transformed URL: %s", updatedURL)
|
||||
|
||||
return updatedURL, nil
|
||||
}
|
||||
|
||||
func GetTagData(auditor *audit.Auditor, r *http.Request, name string) (TagDetail, error) {
|
||||
var tag TagDetail
|
||||
|
||||
@@ -95,6 +124,16 @@ func GetTagData(auditor *audit.Auditor, r *http.Request, name string) (TagDetail
|
||||
return tag, err
|
||||
}
|
||||
|
||||
auditor.SugaredLogger.Debugf("testesetsetsetse: %s", tag.Metadata.Image)
|
||||
|
||||
// Call transformImageURL to obtain a higher resolution thumbnail
|
||||
originalImageURL := tag.Metadata.Image
|
||||
masterURL, err := transformImageURL(auditor, originalImageURL)
|
||||
if err != nil {
|
||||
return tag, err
|
||||
}
|
||||
tag.Metadata.ImageMaster = masterURL
|
||||
|
||||
return tag, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,9 @@ func TagPage(auditor *audit.Auditor, w http.ResponseWriter, r *http.Request) err
|
||||
ActiveSearchMode: GetQueryParam(r, "smode", ""),
|
||||
}
|
||||
|
||||
PreloadImage(w, tag.Metadata.Image)
|
||||
PreloadImage(w, tag.Metadata.ImageMaster)
|
||||
|
||||
return RenderHTML(w, r, data)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user