/
githubmirror
/
photoprism
Обзор
Документация
Войти
/
githubmirror
/
photoprism
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
internal/server/extensions.go
58 строк
1 KB
Michael Mayer
Config: Show error if originals and storage path seem identical #1642
21 янв 2024, 16:22
21 янв 2024, 16:22
86dc89c
Код
Авторство
О чём код?
package server import ( "sync" "sync/atomic" "time" "github.com/gin-gonic/gin" "github.com/photoprism/photoprism/internal/config" "github.com/photoprism/photoprism/pkg/clean" ) var ( extInit sync.Once extMutex sync.Mutex extensions atomic.Value ) // Register registers a new package extension. func Register(name string, init func(router *gin.Engine, conf *config.Config) error) { extMutex.Lock() h, _ := extensions.Load().(Extensions) extensions.Store(append(h, Extension{name: name, init: init})) extMutex.Unlock() } // Ext returns all registered package extensions. func Ext() (ext Extensions) { extMutex.Lock() ext, _ = extensions.Load().(Extensions) extMutex.Unlock() return ext } // Extension represents a named package extension with callbacks. type Extension struct { name string init func(router *gin.Engine, conf *config.Config) error } // Extensions represents a list of package extensions. type Extensions []Extension // Init initializes the registered extensions. func (ext Extensions) Init(router *gin.Engine, conf *config.Config) { extInit.Do(func() { for _, e := range ext { start := time.Now() if err := e.init(router, conf); err != nil { log.Warnf("server: %s when loading %s extension", err, clean.Log(e.name)) } else { log.Tracef("server: %s extension loaded [%s]", clean.Log(e.name), time.Since(start)) } } }) }