Exemple #1
0
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
}
Exemple #2
0
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
}