mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 19:36:36 +08:00
120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
package service
|
|
|
|
import (
|
|
"net/url"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
func applyCloudNFOArtwork(typ string, sidecars cloudSidecarSet, meta *LocalMetadata, doc *nfoDocument) *LocalMetadata {
|
|
if meta == nil {
|
|
meta = &LocalMetadata{}
|
|
}
|
|
if doc == nil {
|
|
return meta
|
|
}
|
|
if ref := cloudImageRefFromNFOValues(sidecars, nfoPosterValues(doc)...); ref != "" {
|
|
meta.PosterURL = cloudPlaybackURL(typ, ref)
|
|
meta.HasArtwork = true
|
|
}
|
|
if ref := cloudImageRefFromNFOValues(sidecars, nfoBackdropValues(doc)...); ref != "" {
|
|
meta.BackdropURL = cloudPlaybackURL(typ, ref)
|
|
meta.HasArtwork = true
|
|
}
|
|
return meta
|
|
}
|
|
|
|
func applyCloudDirectoryArtwork(typ, displayDir string, sidecars cloudSidecarSet, meta *LocalMetadata) *LocalMetadata {
|
|
if meta == nil {
|
|
meta = &LocalMetadata{}
|
|
}
|
|
if meta.PosterURL == "" {
|
|
if ref := firstCloudImageRef(sidecars, cloudPosterNameCandidates(cloudDirectoryArtworkBases(displayDir), "poster", "folder", "cover", "show", "tvshow")...); ref != "" {
|
|
meta.PosterURL = cloudPlaybackURL(typ, ref)
|
|
meta.HasArtwork = true
|
|
}
|
|
}
|
|
if meta.BackdropURL == "" {
|
|
if ref := firstCloudImageRef(sidecars, cloudBackdropNameCandidates(cloudDirectoryArtworkBases(displayDir), "fanart", "backdrop", "background", "landscape")...); ref != "" {
|
|
meta.BackdropURL = cloudPlaybackURL(typ, ref)
|
|
meta.HasArtwork = true
|
|
}
|
|
}
|
|
return meta
|
|
}
|
|
|
|
func applyCloudFileArtwork(typ string, sidecars cloudSidecarSet, displayPath, fileName, base string, meta *LocalMetadata) *LocalMetadata {
|
|
if meta == nil {
|
|
meta = &LocalMetadata{}
|
|
}
|
|
bases := cloudFileArtworkBases(displayPath, fileName, base)
|
|
if meta.PosterURL == "" {
|
|
if ref := firstCloudImageRef(sidecars, cloudPosterNameCandidates(bases, "poster", "folder", "cover", "movie", "show", "thumb")...); ref != "" {
|
|
meta.PosterURL = cloudPlaybackURL(typ, ref)
|
|
meta.HasArtwork = true
|
|
}
|
|
}
|
|
if meta.BackdropURL == "" {
|
|
if ref := firstCloudImageRef(sidecars, cloudBackdropNameCandidates(bases, "fanart", "backdrop", "background", "landscape")...); ref != "" {
|
|
meta.BackdropURL = cloudPlaybackURL(typ, ref)
|
|
meta.HasArtwork = true
|
|
}
|
|
}
|
|
return meta
|
|
}
|
|
|
|
func firstCloudImageRef(sidecars cloudSidecarSet, names ...string) string {
|
|
for _, name := range names {
|
|
if ref := cloudImageRefByName(sidecars, name); ref != "" {
|
|
return ref
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func cloudImageRefFromNFOValues(sidecars cloudSidecarSet, values ...string) string {
|
|
for _, value := range values {
|
|
if ref := cloudImageRefByName(sidecars, value); ref != "" {
|
|
return ref
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func cloudImageRefByName(sidecars cloudSidecarSet, value string) string {
|
|
name := normalizeCloudArtworkName(value)
|
|
if name == "" || isHTTPURL(name) {
|
|
return ""
|
|
}
|
|
if ref := sidecars.imageByName[strings.ToLower(name)]; ref != "" {
|
|
return ref
|
|
}
|
|
base := strings.TrimSuffix(name, path.Ext(name))
|
|
if ref := sidecars.imageByBase[strings.ToLower(base)]; ref != "" {
|
|
return ref
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func normalizeCloudArtworkName(value string) string {
|
|
value = cleanXMLText(value)
|
|
if value == "" {
|
|
return ""
|
|
}
|
|
if isHTTPURL(value) {
|
|
return value
|
|
}
|
|
if unescaped, err := url.QueryUnescape(value); err == nil {
|
|
value = unescaped
|
|
}
|
|
value = strings.ReplaceAll(value, "\\", "/")
|
|
if idx := strings.IndexAny(value, "?#"); idx >= 0 {
|
|
value = value[:idx]
|
|
}
|
|
value = strings.Trim(strings.TrimSpace(value), "/")
|
|
if value == "" {
|
|
return ""
|
|
}
|
|
return path.Base(value)
|
|
}
|