summaryrefslogtreecommitdiffstats
path: root/src/commands/core/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/core/mod.rs')
-rw-r--r--src/commands/core/mod.rs39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/commands/core/mod.rs b/src/commands/core/mod.rs
index f212880..74e2852 100644
--- a/src/commands/core/mod.rs
+++ b/src/commands/core/mod.rs
@@ -1,20 +1,23 @@
mod actor;
mod extractor;
+use crate::clients::cheatsh;
+use crate::config::Source;
+use crate::filesystem;
use crate::finder::structures::Opts as FinderOpts;
use crate::parser::Parser;
use crate::prelude::*;
+use crate::structures::fetcher::{Fetcher, StaticFetcher};
use crate::welcome;
-pub fn main() -> Result<()> {
+pub fn init(fetcher: Box<dyn Fetcher>) -> Result<()> {
let config = &CONFIG;
let opts = FinderOpts::snippet_default();
+ // let fetcher = config.fetcher();
let (raw_selection, (variables, files)) = config
.finder()
.call(opts, |writer| {
- let fetcher = config.fetcher();
-
let mut parser = Parser::new(writer, true);
let found_something = fetcher
@@ -32,10 +35,38 @@ pub fn main() -> Result<()> {
let extractions = extractor::extract_from_selections(&raw_selection, config.best_match());
if extractions.is_err() {
- return main();
+ return init(fetcher);
}
actor::act(extractions, files, variables)?;
Ok(())
}
+
+pub fn get_fetcher() -> Result<Box<dyn Fetcher>> {
+ match CONFIG.source() {
+ Source::Cheats(query) => {
+ let lines = cheatsh::call(&query)?;
+ let fetcher = Box::new(StaticFetcher::new(lines));
+ Ok(fetcher)
+ }
+ Source::Tldr(query) => {
+ let lines = cheatsh::call(&query)?;
+ let fetcher = Box::new(StaticFetcher::new(lines));
+ Ok(fetcher)
+ }
+ Source::Filesystem(path) => {
+ let fetcher = Box::new(filesystem::Fetcher::new(path));
+ Ok(fetcher)
+ }
+ Source::Welcome => {
+ let fetcher = Box::new(welcome::Fetcher::new());
+ Ok(fetcher)
+ }
+ }
+}
+
+pub fn main() -> Result<()> {
+ let fetcher = get_fetcher()?;
+ init(fetcher)
+}