diff options
author | Jesse Luehrs <doy@tozt.net> | 2018-11-06 23:26:02 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2018-11-06 23:26:02 -0500 |
commit | 3f4a6ec11e55a1d5634ba24e2dfd32d9e1d70d65 (patch) | |
tree | 52c83d5495b734890ff0f6312273704311e45011 /src/exporter.rs | |
parent | a47cdb90b8bfb91bccb7ea7d36a54115d429605d (diff) | |
download | lastfm-query-3f4a6ec11e55a1d5634ba24e2dfd32d9e1d70d65.tar.gz lastfm-query-3f4a6ec11e55a1d5634ba24e2dfd32d9e1d70d65.zip |
make db syncing work
Diffstat (limited to 'src/exporter.rs')
-rw-r--r-- | src/exporter.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/exporter.rs b/src/exporter.rs new file mode 100644 index 0000000..89ad32c --- /dev/null +++ b/src/exporter.rs @@ -0,0 +1,36 @@ +use db; +use lastfm; + +use error::Result; + +pub struct Exporter<'d, 'l> { + db: &'d db::DB, + lastfm: &'l lastfm::LastFMClient, +} + +impl<'d, 'l> Exporter<'d, 'l> { + pub fn new( + db: &'d db::DB, + lastfm: &'l lastfm::LastFMClient + ) -> Exporter<'d, 'l> { + Exporter { + db, + lastfm, + } + } + + pub fn tracks_to_sync(&self) -> Result<u64> { + let ts = self.db.most_recent_timestamp()?; + Ok(self.lastfm.track_count(ts.map(|x| x + 1))?) + } + + pub fn sync<F: FnMut(lastfm::Track)>(&self, track_cb: F) -> Result<()> { + let ts = self.db.most_recent_timestamp()?; + self.db.insert_tracks( + self.lastfm.tracks(ts.map(|x| x + 1)), + track_cb + )?; + + Ok(()) + } +} |