From eefaa5da49f0cee473b10899d8fb2064f85c3eff Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 6 Nov 2018 21:57:12 -0500 Subject: support fetching new tracks since a given date --- src/lastfm/mod.rs | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/lastfm/mod.rs b/src/lastfm/mod.rs index 96f4555..ea23ee5 100644 --- a/src/lastfm/mod.rs +++ b/src/lastfm/mod.rs @@ -24,21 +24,23 @@ pub struct Tracks<'a> { client: &'a LastFMClient, page: u64, buf: Vec, + from: Option, } impl<'a> Tracks<'a> { - fn new(client: &LastFMClient) -> Tracks { + fn new(client: &LastFMClient, from: Option) -> Tracks { Tracks { client, page: 0, buf: vec![], + from, } } fn get_next_page(&mut self) -> Result<()> { self.page += 1; - let mut res = self.client.client + let req = self.client.client .get(API_ROOT) .query(&[ ("method", "user.getrecenttracks"), @@ -47,8 +49,15 @@ impl<'a> Tracks<'a> { ("format", "json"), ("page", &format!("{}", self.page)), ("limit", "200"), - ]) - .send()?; + ]); + let req = if let Some(from) = self.from { + req.query(&[("from", &format!("{}", from))]) + } + else { + req + }; + + let mut res = req.send()?; if res.status().is_success() { let data: api_types::recent_tracks = res.json()?; @@ -94,16 +103,23 @@ impl LastFMClient { } } - pub fn track_count(&self) -> Result { - let mut res = self.client + pub fn track_count(&self, from: Option) -> Result { + let req = self.client .get(API_ROOT) .query(&[ ("method", "user.getrecenttracks"), ("api_key", &self.api_key), ("user", &self.user), ("format", "json"), - ]) - .send()?; + ]); + let req = if let Some(from) = from { + req.query(&[("from", &format!("{}", from))]) + } + else { + req + }; + + let mut res = req.send()?; if res.status().is_success() { let data: api_types::recent_tracks = res.json()?; @@ -114,7 +130,7 @@ impl LastFMClient { } } - pub fn tracks(&self) -> Tracks { - Tracks::new(&self) + pub fn tracks(&self, from: Option) -> Tracks { + Tracks::new(&self, from) } } -- cgit v1.2.3