use log::trace;
use crate::database::crawler::structs::CrawlerDatabase;
use crate::database::DatabaseError;
use crate::database::id::AgentId;
use crate::Origin;
use crate::url::UrlWithoutFragment;
impl CrawlerDatabase {
pub fn ignore_url(
&mut self, url: UrlWithoutFragment, agent_id: AgentId,
) -> Result<(), DatabaseError> {
self.base().assert_writable("ignore_url")?;
trace!("crawler_db.ignore_url()");
let url_id = self.base_mut().get_or_add_url_id(&url)?;
let mut statement = self.connection().prepare_cached(
"INSERT OR IGNORE INTO ignore_url (
url_id,
agent_id
) Values (?,?)
")?;
statement.execute((
url_id,
agent_id,
))?;
Ok(())
}
pub fn unignore_url(
&mut self, url: UrlWithoutFragment, agent_id: AgentId,
) -> Result<(), DatabaseError> {
self.base().assert_writable("ignore_url")?;
trace!("crawler_db.unignore_url()");
let url_id = self.base().read_url_id(&url)?;
self.connection().execute(
"DELETE FROM ignore_url
WHERE
url_id = ?
AND agent_id = ?
",(
url_id,
agent_id,
))?;
Ok(())
}
pub fn ignore_origin(
&mut self, origin: Origin, agent_id: AgentId,
) -> Result<(), DatabaseError> {
self.base().assert_writable("ignore_origin")?;
trace!("crawler_db.ignore_origin()");
let transaction = self.start_transaction()?;
let origin_id = transaction.base_transaction.get_origin_id(&origin, true)?;
transaction.commit()?;
self.connection().execute(
"INSERT OR IGNORE INTO ignore_origin (
origin_id,
agent_id
) Values (?,?)
",(
origin_id,
agent_id,
))?;
Ok(())
}
pub fn unignore_origin(
&mut self, origin: Origin, agent_id: AgentId,
) -> Result<(), DatabaseError> {
self.base().assert_writable("unignore_origin")?;
trace!("crawler_db.unignore_origin()");
let transaction = self.start_transaction()?;
let origin_id = transaction.base_transaction.get_origin_id(&origin, false)?;
transaction.commit()?;
self.connection().execute(
"DELETE FROM ignore_origin
WHERE
origin_id = ?
AND agent_id = ?
",(
origin_id,
agent_id,
))?;
Ok(())
}
}