func Pin(b *hb.Bot, actor, path, label string) { if !strings.HasPrefix(path, "/ipfs") && !strings.HasPrefix(path, "/ipns") { path = "/ipfs/" + path } errs := make(chan error, len(shs)) var wg sync.WaitGroup b.Msg(actor, fmt.Sprintf("now pinning %s", path)) // pin to every node concurrently. for i, sh := range shs { wg.Add(1) go func(i int, sh *shell.Shell) { defer wg.Done() if err := tryPin(path, sh); err != nil { errs <- fmt.Errorf("[host %d] %s", i, err) } }(i, sh) } // close the err chan when done. go func() { wg.Wait() close(errs) }() // wait on the err chan and print every err we get as we get it. var failed int for err := range errs { b.Msg(actor, err.Error()) failed++ } successes := len(shs) - failed b.Msg(actor, fmt.Sprintf("pin %d/%d successes -- %s%s", successes, len(shs), gateway, path)) if err := writePin(path, label); err != nil { b.Msg(actor, fmt.Sprintf("failed to write log entry for last pin: %s", err)) } }
func connectToFreenodeIpfs(con *hb.Bot) { con.AddTrigger(pinTrigger) con.AddTrigger(unpinTrigger) con.AddTrigger(listTrigger) con.AddTrigger(befriendTrigger) con.AddTrigger(shunTrigger) con.AddTrigger(OmNomNom) con.AddTrigger(EatEverything) con.Channels = []string{ "#ipfs", } con.Run() for _ = range con.Incoming { } }