diff --git a/internal/config/config.go b/internal/config/config.go index add66f844..ace347b4a 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -140,6 +140,9 @@ func (c *Config) Options() *Options { func (c *Config) Propagate() { log.SetLevel(c.LogLevel()) + // Update options. + c.Options().Sponsor = c.Hub().Plus() || c.Options().Sponsor + // Set thumbnail generation parameters. thumb.StandardRGB = c.ThumbSRGB() thumb.SizePrecached = c.ThumbSizePrecached() @@ -176,12 +179,6 @@ func (c *Config) Init() error { return err } - // Show funding info? - if !c.Sponsor() { - log.Info(MsgSponsor) - log.Info(MsgSignUp) - } - if insensitive, err := c.CaseInsensitive(); err != nil { return err } else if insensitive { @@ -223,13 +220,16 @@ func (c *Config) Init() error { c.Propagate() - err := c.connectDb() - - if err == nil { - log.Debugf("config: successfully initialized [%s]", time.Since(start)) + if err := c.connectDb(); err != nil { + return err + } else if !c.Sponsor() { + log.Info(MsgSponsor) + log.Info(MsgSignUp) } - return err + log.Debugf("config: successfully initialized [%s]", time.Since(start)) + + return nil } // readSerial reads and returns the current storage serial. @@ -471,12 +471,12 @@ func (c *Config) Demo() bool { return c.options.Demo } -// Sponsor reports if you support our mission, see https://photoprism.app/membership. +// Sponsor reports if you have chosen to support our mission. func (c *Config) Sponsor() bool { return Sponsor || c.options.Sponsor } -// NoSponsor reports if the instance is not operated by a sponsor. +// NoSponsor reports if you prefer not to support our mission. func (c *Config) NoSponsor() bool { return !c.Sponsor() && !c.Demo() } diff --git a/internal/hub/config.go b/internal/hub/config.go index 60d015831..0cca1a138 100644 --- a/internal/hub/config.go +++ b/internal/hub/config.go @@ -23,6 +23,16 @@ import ( "github.com/photoprism/photoprism/pkg/fs" ) +const ( + StatusUnknown = "" + StatusNew = "unregistered" + StatusCommunity = "ce" + StatusPlus = "plus" + StatusDev = "dev" + StatusInt = "int" + StatusTest = "test" +) + // Config represents backend api credentials for maps & geodata. type Config struct { Version string `json:"version" yaml:"Version"` @@ -68,6 +78,18 @@ func (c *Config) Propagate() { places.Secret = c.Secret } +// Plus reports if you have a community membership. +func (c *Config) Plus() bool { + switch c.Status { + case StatusUnknown, StatusNew, StatusCommunity: + return false + case StatusPlus, StatusDev, StatusInt, StatusTest: + return len(c.Session) > 0 + default: + return false + } +} + // Sanitize verifies and sanitizes backend api credentials. func (c *Config) Sanitize() { c.Key = strings.ToLower(c.Key) diff --git a/internal/hub/config_test.go b/internal/hub/config_test.go index e87d1f8d1..269321b91 100644 --- a/internal/hub/config_test.go +++ b/internal/hub/config_test.go @@ -12,3 +12,17 @@ func TestConfig_MapKey(t *testing.T) { assert.Equal(t, "", c.MapKey()) }) } + +func TestConfig_Plus(t *testing.T) { + t.Run("Status", func(t *testing.T) { + c := NewConfig("0.0.0", "testdata/new.yml", "zqkunt22r0bewti9", "test", "PhotoPrism/Test", "test") + assert.False(t, c.Plus()) + c.Status = StatusPlus + assert.False(t, c.Plus()) + c.Session = "bde6d0cf514e5456591de5ae09d981056eb88dccf71ba268974bf2cc7b028545e7641c1dfbaa716e4d13f8b0e0d1863e64c16e1f0ac551fc85e1171a87cbda6608cbe330de9e0d5f5b0e14ff61f2ff08fee369" + assert.True(t, c.Plus()) + c.Status = "" + assert.False(t, c.Plus()) + c.Session = "" + }) +}