mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-02-01 22:47:40 +00:00
49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
// Vikunja is a to-do list application to facilitate your life.
|
|
// Copyright 2018-present Vikunja and contributors. All rights reserved.
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
package plugins
|
|
|
|
import "sync"
|
|
|
|
// Registry keeps track of loaded plugins.
|
|
type Registry struct {
|
|
mu sync.RWMutex
|
|
plugins map[string]Plugin
|
|
}
|
|
|
|
// NewRegistry creates a new Registry.
|
|
func NewRegistry() *Registry {
|
|
return &Registry{plugins: make(map[string]Plugin)}
|
|
}
|
|
|
|
// Add registers a plugin.
|
|
func (r *Registry) Add(p Plugin) {
|
|
r.mu.Lock()
|
|
defer r.mu.Unlock()
|
|
r.plugins[p.Name()] = p
|
|
}
|
|
|
|
// All returns all registered plugins.
|
|
func (r *Registry) All() []Plugin {
|
|
r.mu.RLock()
|
|
defer r.mu.RUnlock()
|
|
res := make([]Plugin, 0, len(r.plugins))
|
|
for _, p := range r.plugins {
|
|
res = append(res, p)
|
|
}
|
|
return res
|
|
}
|