diff --git a/src/databases/mysql.rs b/src/databases/mysql.rs index a4d870101..fc6ff5098 100644 --- a/src/databases/mysql.rs +++ b/src/databases/mysql.rs @@ -141,10 +141,10 @@ impl Database for MysqlDatabase { "SELECT info_hash FROM whitelist WHERE info_hash = :info_hash", params! { info_hash }, ) - .map_err(|_| database::Error::QueryReturnedNoRows)? + .map_err(|_| database::Error::DatabaseError)? { Some(info_hash) => Ok(InfoHash::from_str(&info_hash).unwrap()), - None => Err(database::Error::InvalidQuery), + None => Err(database::Error::QueryReturnedNoRows), } } diff --git a/src/databases/sqlite.rs b/src/databases/sqlite.rs index ef9f12d9c..7a567b07e 100644 --- a/src/databases/sqlite.rs +++ b/src/databases/sqlite.rs @@ -137,13 +137,15 @@ impl Database for SqliteDatabase { let mut stmt = conn.prepare("SELECT info_hash FROM whitelist WHERE info_hash = ?")?; let mut rows = stmt.query([info_hash])?; - if let Some(row) = rows.next()? { - let info_hash: String = row.get(0).unwrap(); - - // should never be able to fail - Ok(InfoHash::from_str(&info_hash).unwrap()) - } else { - Err(database::Error::InvalidQuery) + match rows.next() { + Ok(row) => match row { + Some(row) => Ok(InfoHash::from_str(&row.get_unwrap::<_, String>(0)).unwrap()), + None => Err(database::Error::QueryReturnedNoRows), + }, + Err(e) => { + debug!("{:?}", e); + Err(database::Error::InvalidQuery) + } } } diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index a02e1123b..8987f49f5 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -108,17 +108,19 @@ impl TorrentTracker { /// It adds a torrent to the whitelist if it has not been whitelisted previously async fn add_torrent_to_database_whitelist(&self, info_hash: &InfoHash) -> Result<(), database::Error> { - match self + if let Err(e) = self .database .get_info_hash_from_whitelist(&info_hash.to_owned().to_string()) .await { - Ok(_preexisting_info_hash) => Ok(()), - _ => { + if let database::Error::QueryReturnedNoRows = e { self.database.add_info_hash_to_whitelist(*info_hash).await?; - Ok(()) + } else { + eprintln!("{e}"); + return Err(e); } } + Ok(()) } pub async fn add_torrent_to_memory_whitelist(&self, info_hash: &InfoHash) -> bool {