GetRecentPermanodes returns recently-modified permanodes.
(ctx context.Context, req *RecentRequest)
| 513 | |
| 514 | // GetRecentPermanodes returns recently-modified permanodes. |
| 515 | func (h *Handler) GetRecentPermanodes(ctx context.Context, req *RecentRequest) (*RecentResponse, error) { |
| 516 | h.index.RLock() |
| 517 | defer h.index.RUnlock() |
| 518 | |
| 519 | ch := make(chan camtypes.RecentPermanode) |
| 520 | errch := make(chan error, 1) |
| 521 | before := time.Now() |
| 522 | if !req.Before.IsZero() { |
| 523 | before = req.Before |
| 524 | } |
| 525 | go func() { |
| 526 | // TODO(mpl): change index funcs to take signer keyID. dont care for now, just |
| 527 | // fixing the essential search and describe ones. |
| 528 | errch <- h.index.GetRecentPermanodes(ctx, ch, h.owner.BlobRef(), req.n(), before) |
| 529 | }() |
| 530 | |
| 531 | dr := h.NewDescribeRequest() |
| 532 | |
| 533 | var recent []*RecentItem |
| 534 | for res := range ch { |
| 535 | dr.StartDescribe(ctx, res.Permanode, 2) |
| 536 | recent = append(recent, &RecentItem{ |
| 537 | BlobRef: res.Permanode, |
| 538 | Owner: res.Signer, |
| 539 | ModTime: types.Time3339(res.LastModTime), |
| 540 | }) |
| 541 | testHookBug121() // http://perkeep.org/issue/121 |
| 542 | } |
| 543 | |
| 544 | if err := <-errch; err != nil { |
| 545 | return nil, err |
| 546 | } |
| 547 | |
| 548 | metaMap, err := dr.metaMap() |
| 549 | if err != nil { |
| 550 | return nil, err |
| 551 | } |
| 552 | |
| 553 | res := &RecentResponse{ |
| 554 | Recent: recent, |
| 555 | Meta: metaMap, |
| 556 | } |
| 557 | return res, nil |
| 558 | } |
| 559 | |
| 560 | func (h *Handler) serveRecentPermanodes(rw http.ResponseWriter, req *http.Request) { |
| 561 | defer httputil.RecoverJSON(rw, req) |
no test coverage detected