unobtanium 3.0.0

Opinioated Web search engine library with crawler and viewer companion.
Documentation
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(())
	}

}