Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
148 lines
2.7 KiB
Go
148 lines
2.7 KiB
Go
package playletser
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func pathSegment(slug string, id int64) string {
|
|
slug = strings.TrimSpace(slug)
|
|
if slug == "" && id > 0 {
|
|
slug = strconv.FormatInt(id, 10)
|
|
}
|
|
if slug == "" {
|
|
return ""
|
|
}
|
|
return url.PathEscape(slug)
|
|
}
|
|
|
|
func detailURL(slug string, id int64) string {
|
|
if segment := pathSegment(slug, id); segment != "" {
|
|
return "/detail/" + segment + "/"
|
|
}
|
|
return "#"
|
|
}
|
|
|
|
func playURL(slug string, playletID int64) string {
|
|
if segment := pathSegment(slug, playletID); segment != "" {
|
|
return "/play/" + segment + "/"
|
|
}
|
|
return "#"
|
|
}
|
|
|
|
func chapterPlayURL(slug string, playletID, chapterID int64) string {
|
|
path := playURL(slug, playletID)
|
|
if path == "#" || chapterID <= 0 {
|
|
return path
|
|
}
|
|
return fmt.Sprintf("%s%d/", path, chapterID)
|
|
}
|
|
|
|
func categoryURL(slug string, id int64) string {
|
|
if segment := pathSegment(slug, id); segment != "" {
|
|
return "/topic/" + segment + "/"
|
|
}
|
|
return "/topic/"
|
|
}
|
|
|
|
func DetailPath(slug string, id int64) string {
|
|
return detailURL(slug, id)
|
|
}
|
|
|
|
func PlayPath(slug string, id int64) string {
|
|
return playURL(slug, id)
|
|
}
|
|
|
|
func ChapterPlayPath(slug string, playletID, chapterID int64) string {
|
|
return chapterPlayURL(slug, playletID, chapterID)
|
|
}
|
|
|
|
func updateStatusText(status int) string {
|
|
if status == 2 {
|
|
return "已完结"
|
|
}
|
|
return "连载中"
|
|
}
|
|
|
|
func browseText(n int64) string {
|
|
if n <= 0 {
|
|
return "0次播放"
|
|
}
|
|
if n < 10000 {
|
|
return fmt.Sprintf("%d次播放", n)
|
|
}
|
|
v := float64(n) / 10000
|
|
if v >= 100 {
|
|
return fmt.Sprintf("%.0f万次播放", v)
|
|
}
|
|
return fmt.Sprintf("%.1f万次播放", v)
|
|
}
|
|
|
|
func usableAnchor(anchor string) string {
|
|
anchor = strings.TrimSpace(anchor)
|
|
if anchor == "" || anchor == "暂无" {
|
|
return ""
|
|
}
|
|
return anchor
|
|
}
|
|
|
|
func rankClass(rank int) string {
|
|
switch rank {
|
|
case 1:
|
|
return "gold"
|
|
case 2:
|
|
return "silver"
|
|
case 3:
|
|
return "bronze"
|
|
default:
|
|
return "dark"
|
|
}
|
|
}
|
|
|
|
func episodeText(n int) string {
|
|
if n <= 0 {
|
|
return ""
|
|
}
|
|
return fmt.Sprintf("%d集", n)
|
|
}
|
|
|
|
func formatHeat(n int64) string {
|
|
if n <= 0 {
|
|
return "0 热度"
|
|
}
|
|
if n < 10000 {
|
|
return fmt.Sprintf("%d 热度", n)
|
|
}
|
|
v := float64(n) / 10000
|
|
if v >= 100 {
|
|
return fmt.Sprintf("%.0f万 热度", v)
|
|
}
|
|
return fmt.Sprintf("%.1f万 热度", v)
|
|
}
|
|
|
|
// formatLikeCount 封面点赞数展示:不足一万原样,否则 x.x万。
|
|
func formatLikeCount(n int64) string {
|
|
if n <= 0 {
|
|
return "0"
|
|
}
|
|
if n < 10000 {
|
|
return fmt.Sprintf("%d", n)
|
|
}
|
|
v := float64(n) / 10000
|
|
if v >= 100 {
|
|
return fmt.Sprintf("%.0f万", v)
|
|
}
|
|
return fmt.Sprintf("%.1f万", v)
|
|
}
|
|
|
|
func firstNonEmpty(values ...string) string {
|
|
for _, v := range values {
|
|
if strings.TrimSpace(v) != "" {
|
|
return v
|
|
}
|
|
}
|
|
return ""
|
|
}
|