aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/tell/database.rs
diff options
context:
space:
mode:
authorJokler <jokler.contact@gmail.com>2018-03-05 18:11:51 +0100
committerJokler <jokler.contact@gmail.com>2018-03-05 18:11:51 +0100
commit1bb6e307f1011456b28bb6eb27abc80e71ef187d (patch)
tree5cb3b84e07a3252e247704fac058848148ccd441 /src/plugins/tell/database.rs
parent3e439f17248a5168c22955d7cb4d0a9ba7531e5f (diff)
downloadfrippy-1bb6e307f1011456b28bb6eb27abc80e71ef187d.tar.gz
frippy-1bb6e307f1011456b28bb6eb27abc80e71ef187d.zip
Check for outstanding tells when a userlist is received
Diffstat (limited to 'src/plugins/tell/database.rs')
-rw-r--r--src/plugins/tell/database.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/plugins/tell/database.rs b/src/plugins/tell/database.rs
index 40ec6fc..98e9fb3 100644
--- a/src/plugins/tell/database.rs
+++ b/src/plugins/tell/database.rs
@@ -43,6 +43,7 @@ pub struct NewTellMessage<'a> {
pub trait Database: Send {
fn insert_tell(&mut self, tell: &NewTellMessage) -> Result<(), TellError>;
fn get_tells(&self, receiver: &str) -> Result<Vec<TellMessage>, TellError>;
+ fn get_receivers(&self) -> Result<Vec<String>, TellError>;
fn delete_tells(&mut self, receiver: &str) -> Result<(), TellError>;
}
@@ -69,6 +70,12 @@ impl Database for HashMap<String, Vec<TellMessage>> {
Ok(self.get(receiver).cloned().ok_or(ErrorKind::NotFound)?)
}
+ fn get_receivers(&self) -> Result<Vec<String>, TellError> {
+ Ok(self.iter()
+ .map(|(receiver, _)| receiver.to_owned())
+ .collect::<Vec<_>>())
+ }
+
fn delete_tells(&mut self, receiver: &str) -> Result<(), TellError> {
match self.remove(receiver) {
Some(_) => Ok(()),
@@ -120,6 +127,16 @@ impl Database for Arc<Pool<ConnectionManager<MysqlConnection>>> {
.context(ErrorKind::MysqlError)?)
}
+ fn get_receivers(&self) -> Result<Vec<String>, TellError> {
+ use self::tells::columns;
+
+ let conn = &*self.get().context(ErrorKind::NoConnection)?;
+ Ok(tells::table
+ .select(columns::receiver)
+ .load::<String>(conn)
+ .context(ErrorKind::MysqlError)?)
+ }
+
fn delete_tells(&mut self, receiver: &str) -> Result<(), TellError> {
use diesel;
use self::tells::columns;