mirror of
https://github.com/photoprism/photoprism.git
synced 2025-09-27 05:08:13 +08:00
114 lines
2.5 KiB
Go
114 lines
2.5 KiB
Go
package config
|
||
|
||
import (
|
||
"reflect"
|
||
"strings"
|
||
|
||
"github.com/urfave/cli/v2"
|
||
|
||
"github.com/photoprism/photoprism/pkg/list"
|
||
)
|
||
|
||
// CliFlag represents a command-line parameter.
|
||
type CliFlag struct {
|
||
Flag cli.DocGenerationFlag
|
||
Tags []string
|
||
DocDefault string
|
||
}
|
||
|
||
// Skip checks if the parameter should be skipped based on a list of tags.
|
||
func (f CliFlag) Skip(tags []string) bool {
|
||
return len(f.Tags) > 0 && !list.ContainsAny(f.Tags, tags)
|
||
}
|
||
|
||
// Fields returns the flag struct fields.
|
||
func (f CliFlag) Fields() reflect.Value {
|
||
fields := reflect.ValueOf(f.Flag)
|
||
|
||
for fields.Kind() == reflect.Ptr {
|
||
fields = reflect.Indirect(fields)
|
||
}
|
||
|
||
return fields
|
||
}
|
||
|
||
// Default returns the default value.
|
||
func (f CliFlag) Default() string {
|
||
if f.DocDefault != "" {
|
||
return f.DocDefault
|
||
}
|
||
|
||
return f.Flag.GetValue()
|
||
}
|
||
|
||
// Hidden checks if the flag is hidden.
|
||
func (f CliFlag) Hidden() bool {
|
||
field := f.Fields().FieldByName("Hidden")
|
||
|
||
if !field.IsValid() || !field.Bool() {
|
||
return false
|
||
}
|
||
|
||
return true
|
||
}
|
||
|
||
// EnvVar returns the names of the environment variables as a comma separated string.
|
||
func (f CliFlag) EnvVar() string {
|
||
return strings.Join(f.EnvVars(), ", ")
|
||
}
|
||
|
||
// EnvVars returns the environment variable names as string slice.
|
||
func (f CliFlag) EnvVars() []string {
|
||
field := f.Fields().FieldByName("EnvVars")
|
||
|
||
if !field.IsValid() {
|
||
return []string{}
|
||
}
|
||
|
||
if vars := field.Interface().([]string); len(vars) > 0 {
|
||
return vars
|
||
}
|
||
|
||
return []string{}
|
||
}
|
||
|
||
// Name returns the command flag names as a comma-separated string.
|
||
func (f CliFlag) String() string {
|
||
return strings.Join(f.Names(), ", ")
|
||
}
|
||
|
||
// Name returns the default command flag name.
|
||
func (f CliFlag) Name() string {
|
||
if n := f.Flag.Names(); len(n) > 0 {
|
||
return n[0]
|
||
}
|
||
|
||
return ""
|
||
}
|
||
|
||
// Names returns the command flag names as string slice.
|
||
func (f CliFlag) Names() []string {
|
||
return f.Flag.Names()
|
||
}
|
||
|
||
// CommandFlag returns the full command flag based on the name.
|
||
func (f CliFlag) CommandFlag() string {
|
||
n := strings.Split(f.String(), ",")
|
||
return "--" + strings.TrimSpace(n[0])
|
||
}
|
||
|
||
// Usage returns the command flag usage.
|
||
func (f CliFlag) Usage() string {
|
||
if list.Contains(f.Tags, EnvSponsor) {
|
||
return f.Flag.GetUsage() + " *members only*"
|
||
} else if list.Contains(f.Tags, Pro) {
|
||
return f.Flag.GetUsage() + " *pro*"
|
||
} else if list.Contains(f.Tags, Plus) {
|
||
return f.Flag.GetUsage() + " *plus*"
|
||
} else if list.Contains(f.Tags, Essentials) {
|
||
return f.Flag.GetUsage() + " *essentials*"
|
||
} else {
|
||
return f.Flag.GetUsage()
|
||
}
|
||
}
|