// Translated from nzedb Binaries.php and pynab handling // Save all messages that match a basic regex as segments and func saveOverviewBatch(dbh *db.Handle, group string, overviews []nntp.MessageOverview, missed types.MessageNumberSet) error { parts := map[string]*types.Part{} for _, o := range overviews { //TODO: make this a function call if blacklistRegexp.MatchString(o.Subject) { continue } m := segmentRegexp.FindStringSubmatch(o.Subject) if m != nil { subj := m[1] if !yencRegexp.MatchString(subj) { subj += " yEnc" } segNum, _ := strconv.Atoi(m[2]) segTotal, _ := strconv.Atoi(m[3]) hash := hashOverview(subj, o.From, group, segTotal) seg := types.Segment{ MessageID: o.MessageID, Segment: segNum, Size: int64(o.Bytes), } if part, ok := parts[hash]; ok { part.Segments = append(part.Segments, seg) } else { parts[hash] = &types.Part{ Hash: hash, Subject: subj, Posted: o.Date, From: o.From, GroupName: group, TotalSegments: segTotal, Xref: o.Xref(), Segments: []types.Segment{seg}, } } } } mm := make([]types.MissedMessage, missed.Cardinality()) i := 0 for id := range missed.Iter() { mm[i] = types.MissedMessage{ MessageNumber: int64(id), GroupName: group, Attempts: 1, } i++ } logrus.Debugf("Found %d new parts, %d missed messages", len(parts), len(mm)) return dbh.SavePartsAndMissedMessages(parts, mm) }