// handleInBandMessageWithHandler runs a message against the specified handler func (g *gregorHandler) handleInBandMessageWithHandler(ctx context.Context, cli gregor1.IncomingInterface, ibm gregor.InBandMessage, handler libkb.GregorInBandMessageHandler) (bool, error) { g.Debug("handleInBand: %+v", ibm) gcli, err := g.getGregorCli() if err != nil { return false, err } state, err := gcli.StateMachineState(nil) if err != nil { return false, err } sync := ibm.ToStateSyncMessage() if sync != nil { g.Debug("state sync message") return false, nil } update := ibm.ToStateUpdateMessage() if update != nil { g.Debug("state update message") item := update.Creation() if item != nil { id := item.Metadata().MsgID().String() g.Debug("msg ID %s created ctime: %s", id, item.Metadata().CTime()) category := "" if item.Category() != nil { category = item.Category().String() g.Debug("item %s has category %s", id, category) } if handled, err := handler.Create(ctx, cli, category, item); err != nil { return handled, err } } dismissal := update.Dismissal() if dismissal != nil { g.Debug("received dismissal") for _, id := range dismissal.MsgIDsToDismiss() { item, present := state.GetItem(id) if !present { g.Debug("tried to dismiss item %s, not present", id.String()) continue } g.Debug("dismissing item %s", id.String()) category := "" if item.Category() != nil { category = item.Category().String() g.Debug("dismissal %s has category %s", id, category) } if handled, err := handler.Dismiss(ctx, cli, category, item); handled && err != nil { return handled, err } } if len(dismissal.RangesToDismiss()) > 0 { g.Debug("message range dismissing not implemented") } } return true, nil } return false, nil }