53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package peer
|
|
|
|
import (
|
|
"cwtch.im/cwtch/event"
|
|
"cwtch.im/cwtch/model"
|
|
"cwtch.im/cwtch/model/attr"
|
|
"cwtch.im/cwtch/settings"
|
|
)
|
|
|
|
type ProfileHooks interface {
|
|
// EventsToRegister returns a set of events that the extension is interested hooking
|
|
EventsToRegister() []event.Type
|
|
|
|
// ExperimentsToRegister returns a set of experiments that the extension is interested in being notified about
|
|
ExperimentsToRegister() []string
|
|
|
|
// OnEvent is called whenever an event Registered with RegisterEvents is called
|
|
OnEvent(event event.Event, profile CwtchPeer)
|
|
|
|
// OnContactRequestValue is Hooked when a contact sends a request for the given path
|
|
OnContactRequestValue(profile CwtchPeer, conversation model.Conversation, eventID string, path attr.ScopedZonedPath)
|
|
|
|
// OnContactReceiveValue is Hooked after a profile receives a response to a Get/Val Request
|
|
OnContactReceiveValue(profile CwtchPeer, conversation model.Conversation, path attr.ScopedZonedPath, value string, exists bool)
|
|
|
|
// NotifySettingsUpdate allow profile hooks to access configs e.g. download folder
|
|
NotifySettingsUpdate(settings settings.GlobalSettings)
|
|
}
|
|
|
|
type ProfileHook struct {
|
|
extension ProfileHooks
|
|
events map[event.Type]bool
|
|
experiments map[string]bool
|
|
}
|
|
|
|
func ConstructHook(extension ProfileHooks) ProfileHook {
|
|
events := make(map[event.Type]bool)
|
|
for _, e := range extension.EventsToRegister() {
|
|
events[e] = true
|
|
}
|
|
|
|
experiments := make(map[string]bool)
|
|
for _, experiment := range extension.ExperimentsToRegister() {
|
|
experiments[experiment] = true
|
|
}
|
|
|
|
return ProfileHook{
|
|
extension,
|
|
events,
|
|
experiments,
|
|
}
|
|
}
|