mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
implement custom search providers feature
This commit is contained in:
parent
58d4439fcf
commit
b8a8fb49de
16 changed files with 668 additions and 30 deletions
|
|
@ -23,11 +23,21 @@ impl Search {
|
|||
let database = Database::init(connection, profile_id);
|
||||
let memory = Memory::init();
|
||||
|
||||
// Build initial index
|
||||
index(&database, &memory)?;
|
||||
match database.records() {
|
||||
Ok(records) => {
|
||||
// Init default search providers list on database empty
|
||||
if records.is_empty() {
|
||||
restore_defaults(&database)?
|
||||
}
|
||||
|
||||
// Return new `Self`
|
||||
Ok(Self { database, memory })
|
||||
// Build initial index
|
||||
index(&database, &memory)?;
|
||||
|
||||
// Return new `Self`
|
||||
Ok(Self { database, memory })
|
||||
}
|
||||
Err(e) => Err(Error::Database(e)),
|
||||
}
|
||||
}
|
||||
|
||||
// Actions
|
||||
|
|
@ -57,10 +67,25 @@ impl Search {
|
|||
/// Delete record from `database` and `memory` index
|
||||
pub fn delete(&self, id: i64) -> Result<(), Error> {
|
||||
match self.database.delete(id) {
|
||||
Ok(_) => Ok(index(&self.database, &self.memory)?),
|
||||
Ok(_) => match self.database.records() {
|
||||
Ok(records) => {
|
||||
if records.is_empty() {
|
||||
restore_defaults(&self.database)?
|
||||
}
|
||||
Ok(index(&self.database, &self.memory)?)
|
||||
}
|
||||
Err(e) => Err(Error::Database(e)),
|
||||
},
|
||||
Err(e) => Err(Error::Database(e)),
|
||||
}
|
||||
}
|
||||
|
||||
// Getters
|
||||
|
||||
/// Get default search provider from memory
|
||||
pub fn default(&self) -> Option<database::Row> {
|
||||
self.memory.default()
|
||||
}
|
||||
}
|
||||
|
||||
// Tools
|
||||
|
|
@ -91,3 +116,16 @@ fn index(database: &Database, memory: &Memory) -> Result<(), Error> {
|
|||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Create default search providers list for given profile
|
||||
fn restore_defaults(database: &Database) -> Result<(), Error> {
|
||||
for (provider, is_default) in &[
|
||||
("gemini://kennedy.gemi.dev/search", true),
|
||||
("gemini://tlgs.one/search/search", false),
|
||||
] {
|
||||
if let Err(e) = database.add(provider.to_string(), *is_default) {
|
||||
return Err(Error::Database(e));
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue