mirror of
https://github.com/photoprism/photoprism.git
synced 2025-09-27 05:08:13 +08:00
120 lines
3.0 KiB
Go
120 lines
3.0 KiB
Go
package config
|
|
|
|
import (
|
|
"path"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/photoprism/photoprism/internal/config/pwa"
|
|
"github.com/photoprism/photoprism/pkg/clean"
|
|
"github.com/photoprism/photoprism/pkg/fs"
|
|
"github.com/photoprism/photoprism/pkg/txt"
|
|
)
|
|
|
|
// DefaultAppColor specifies the default app background and splash screen color.
|
|
var DefaultAppColor = "#19191a"
|
|
|
|
// AppName returns the app name when installed on a device.
|
|
func (c *Config) AppName() string {
|
|
name := strings.TrimSpace(c.options.AppName)
|
|
|
|
if name == "" {
|
|
name = c.SiteTitle()
|
|
}
|
|
|
|
name = strings.Map(func(r rune) rune {
|
|
switch r {
|
|
case '\'', '"':
|
|
return -1
|
|
}
|
|
|
|
return r
|
|
}, name)
|
|
|
|
return txt.Clip(name, 32)
|
|
}
|
|
|
|
// AppMode returns the app mode when installed on a device.
|
|
func (c *Config) AppMode() string {
|
|
switch c.options.AppMode {
|
|
case "fullscreen", "standalone", "minimal-ui", "browser":
|
|
return c.options.AppMode
|
|
default:
|
|
return "standalone"
|
|
}
|
|
}
|
|
|
|
// AppIcon returns the app icon when installed on a device.
|
|
func (c *Config) AppIcon() string {
|
|
defaultIcon := "logo"
|
|
|
|
if c.options.AppIcon != "" && c.options.AppIcon != defaultIcon {
|
|
if themeIcon := filepath.Join(c.ThemePath(), c.options.AppIcon); fs.FileExistsNotEmpty(themeIcon) {
|
|
return path.Join(ThemeUri, c.options.AppIcon)
|
|
} else if strings.Contains(c.options.AppIcon, "/") {
|
|
return c.options.AppIcon
|
|
} else if fs.FileExistsNotEmpty(c.AppIconsPath(c.options.AppIcon, "16.png")) {
|
|
return c.options.AppIcon
|
|
}
|
|
}
|
|
|
|
return defaultIcon
|
|
}
|
|
|
|
// AppColor returns the app background and splash screen color.
|
|
func (c *Config) AppColor() string {
|
|
if appColor := clean.Color(c.options.AppColor); appColor == "" {
|
|
return DefaultAppColor
|
|
} else {
|
|
return appColor
|
|
}
|
|
}
|
|
|
|
// AppIconsPath returns the path to the app icons.
|
|
func (c *Config) AppIconsPath(name ...string) string {
|
|
if len(name) > 0 {
|
|
filePath := []string{c.StaticPath(), fs.IconsDir}
|
|
filePath = append(filePath, name...)
|
|
return filepath.Join(filePath...)
|
|
}
|
|
|
|
return filepath.Join(c.StaticPath(), fs.IconsDir)
|
|
}
|
|
|
|
// AppConfig returns the progressive web app config.
|
|
func (c *Config) AppConfig() pwa.Config {
|
|
return pwa.Config{
|
|
Icon: c.AppIcon(),
|
|
Color: c.AppColor(),
|
|
Name: c.AppName(),
|
|
Description: c.SiteDescription(),
|
|
DefaultLocale: c.DefaultLocale(),
|
|
Mode: c.AppMode(),
|
|
BaseUri: c.BaseUri("/"),
|
|
StaticUri: c.StaticUri(),
|
|
SiteUrl: c.SiteUrl(),
|
|
CdnUrl: c.CdnUrl("/"),
|
|
ThemeUri: ThemeUri,
|
|
ThemePath: c.ThemePath(),
|
|
}
|
|
}
|
|
|
|
// AppManifest returns the progressive web app manifest.
|
|
func (c *Config) AppManifest() *pwa.Manifest {
|
|
if cacheData, ok := Cache.Get(CacheKeyAppManifest); ok {
|
|
log.Tracef("config: cache hit for %s", CacheKeyAppManifest)
|
|
|
|
return cacheData.(*pwa.Manifest)
|
|
}
|
|
|
|
result := pwa.NewManifest(c.AppConfig())
|
|
|
|
if result != nil {
|
|
Cache.SetDefault(CacheKeyAppManifest, result)
|
|
} else {
|
|
log.Warnf("config: no web app manifest returned - you may have found a bug")
|
|
}
|
|
|
|
return result
|
|
}
|