func (g *gregorHandler) handleOutOfBandMessage(ctx context.Context, obm gregor.OutOfBandMessage) error { g.Debug("handleOutOfBand: %+v", obm) if obm.System() == nil { return errors.New("nil system in out of band message") } if tmp, ok := obm.(gregor1.OutOfBandMessage); ok { g.pushOutOfBandMessages([]gregor1.OutOfBandMessage{tmp}) } else { g.G().Log.Warning("Got non-exportable out-of-band message") } switch obm.System().String() { case "kbfs.favorites": return g.kbfsFavorites(ctx, obm) default: return fmt.Errorf("unhandled system: %s", obm.System()) } }
func (g *gregorHandler) kbfsFavorites(ctx context.Context, m gregor.OutOfBandMessage) error { if m.Body() == nil { return errors.New("gregor handler for kbfs.favorites: nil message body") } body, err := jsonw.Unmarshal(m.Body().Bytes()) if err != nil { return err } action, err := body.AtPath("action").GetString() if err != nil { return err } switch action { case "create", "delete": return g.notifyFavoritesChanged(ctx, m.UID()) default: return fmt.Errorf("unhandled kbfs.favorites action %q", action) } }