formatRssViewToMessagesSlice 格式化RssClientView为消息切片
(view *domain.RssClientView)
| 19 | |
| 20 | // formatRssViewToMessagesSlice 格式化RssClientView为消息切片 |
| 21 | func formatRssViewToMessagesSlice(view *domain.RssClientView) ([]message.Message, error) { |
| 22 | // 取前20条 |
| 23 | cts := view.Contents |
| 24 | if len(cts) > 20 { |
| 25 | cts = cts[:20] |
| 26 | } |
| 27 | // 2n+1条消息 |
| 28 | fv := make([]message.Message, len(cts)*2+1) |
| 29 | // 订阅源头图 |
| 30 | toastPic, err := text.RenderToBase64(fmt.Sprintf("%s\n\n\n%s\n\n\n更新时间:%v\n\n\n", |
| 31 | view.Source.Title, view.Source.Link, view.Source.UpdatedParsed.Local().Format(time.DateTime)), |
| 32 | text.SakuraFontFile, 1200, 40) |
| 33 | if err != nil { |
| 34 | return nil, err |
| 35 | } |
| 36 | fv[0] = message.Message{message.Image("base64://" + binary.BytesToString(toastPic))} |
| 37 | // 元素信息 |
| 38 | for idx, item := range cts { |
| 39 | contentStr := fmt.Sprintf("%s\n\n\n", item.Title) |
| 40 | // Date为空时不显示 |
| 41 | if !item.Date.IsZero() { |
| 42 | contentStr += fmt.Sprintf("更新时间:\n%v\n", item.Date.Local().Format(time.DateTime)) |
| 43 | } |
| 44 | var content []byte |
| 45 | content, err = text.RenderToBase64(contentStr, text.SakuraFontFile, 1200, 40) |
| 46 | if err != nil { |
| 47 | logrus.WithError(err).Error("RssHub订阅姬渲染图片失败") |
| 48 | continue |
| 49 | } |
| 50 | itemMessagePic := message.Message{message.Image("base64://" + binary.BytesToString(content))} |
| 51 | fv[2*idx+1] = itemMessagePic |
| 52 | fv[2*idx+2] = message.Message{message.Text(item.Link)} |
| 53 | } |
| 54 | return fv, nil |
| 55 | } |
| 56 | |
| 57 | // newRssSourcesMsg Rss订阅源列表 |
| 58 | func newRssSourcesMsg(ctx *zero.Ctx, view []*domain.RssClientView) (message.Message, error) { |
no test coverage detected