summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2018-11-06 21:57:12 -0500
committerJesse Luehrs <doy@tozt.net>2018-11-06 21:57:12 -0500
commiteefaa5da49f0cee473b10899d8fb2064f85c3eff (patch)
tree728ec8547e1bf77ea201f60823378466af117a3a
parentb657e862df6a90ad2f957f02b964d2576e2f03be (diff)
downloadlastfm-query-eefaa5da49f0cee473b10899d8fb2064f85c3eff.tar.gz
lastfm-query-eefaa5da49f0cee473b10899d8fb2064f85c3eff.zip
support fetching new tracks since a given date
-rw-r--r--src/lastfm/mod.rs36
1 files 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<Track>,
+ from: Option<i64>,
}
impl<'a> Tracks<'a> {
- fn new(client: &LastFMClient) -> Tracks {
+ fn new(client: &LastFMClient, from: Option<i64>) -> 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<u64> {
- let mut res = self.client
+ pub fn track_count(&self, from: Option<i64>) -> Result<u64> {
+ 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<i64>) -> Tracks {
+ Tracks::new(&self, from)
}
}