func (c *Conn) DecodedArticle(mid string) (*decoders.Part, error) { mid = stripBrackets(mid) if _, _, err := c.sendCmd(fmt.Sprintf("BODY <%s>", mid), 222); err != nil { return nil, err } dec := decoders.NewYencStreamingDecoder(c.baseConn.R) part, err := dec.Decode() if err != nil { return nil, err } c.baseConn.ReadDotBytes() return part, nil }
func (c *Conn) XOverview(start, end uint64) ([]Overview, error) { if _, _, err := c.sendCmd(fmt.Sprintf("XZVER %d-%d", start, end), 224); err != nil { return nil, err } dec := decoders.NewYencStreamingDecoder(c.baseConn.R) part, err := dec.Decode() if err != nil { return nil, err } c.baseConn.ReadDotBytes() src := bytes.NewReader(part.Body) r := flate.NewReader(src) var result bytes.Buffer io.Copy(&result, r) headers := strings.Split(string(result.Bytes()), "\r\n") count := len(headers) - 1 overviews := make([]Overview, count) for i := range headers[:count] { h := strings.Split(headers[i], "\t") dt, _ := c.parseDate(h[3]) aid, _ := strconv.ParseUint(h[0], 10, 64) bc, _ := strconv.ParseUint(h[6], 10, 64) lc, _ := strconv.ParseUint(h[7], 10, 64) overviews[i] = Overview{ ArticleId: aid, Subject: h[1], Author: h[2], Date: dt, MessageId: h[4], References: h[5], Bytes: bc, Lines: lc, } } return overviews, nil }