mirror of
https://github.com/Myzel394/tifsep.git
synced 2025-06-18 23:45:27 +02:00
fix: Outsource searching
This commit is contained in:
parent
2ef3eea524
commit
9c3a48710d
@ -1,10 +1,12 @@
|
|||||||
pub mod engine_base {
|
pub mod engine_base {
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
|
|
||||||
use futures::{Stream, StreamExt};
|
use futures::{lock::Mutex, Future, Stream, StreamExt};
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use reqwest::Error;
|
use reqwest::{Client, Error, Response};
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref STRIP: Regex = Regex::new(r"\s+").unwrap();
|
static ref STRIP: Regex = Regex::new(r"\s+").unwrap();
|
||||||
|
32
src/helpers.rs
Normal file
32
src/helpers.rs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Helpers for specific project-related tasks
|
||||||
|
// This module differs from utils in the way that everything here
|
||||||
|
// is specifically related the project
|
||||||
|
pub mod helpers {
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use futures::{lock::Mutex, Future, StreamExt};
|
||||||
|
use reqwest::{Error, Response};
|
||||||
|
|
||||||
|
use crate::engines::engine_base::engine_base::EngineBase;
|
||||||
|
|
||||||
|
pub async fn run_search(
|
||||||
|
request: impl Future<Output = Result<Response, Error>>,
|
||||||
|
engine_ref: Arc<Mutex<impl EngineBase>>,
|
||||||
|
) {
|
||||||
|
let response = request.await.unwrap();
|
||||||
|
|
||||||
|
let mut stream = response.bytes_stream();
|
||||||
|
while let Some(chunk) = stream.next().await {
|
||||||
|
let buffer = chunk.unwrap();
|
||||||
|
|
||||||
|
let mut engine = engine_ref.lock().await;
|
||||||
|
|
||||||
|
if let Some(result) = engine.parse_packet(buffer.iter()) {
|
||||||
|
engine.add_result(result);
|
||||||
|
|
||||||
|
drop(engine);
|
||||||
|
tokio::task::yield_now().await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
44
src/main.rs
44
src/main.rs
@ -1,21 +1,19 @@
|
|||||||
use crate::engines::engine_base::engine_base::EngineBase;
|
|
||||||
use std::str;
|
use std::str;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use engines::brave::brave::Brave;
|
use engines::brave::brave::Brave;
|
||||||
use futures::lock::Mutex;
|
use futures::lock::Mutex;
|
||||||
use futures::StreamExt;
|
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use reqwest::ClientBuilder;
|
use reqwest::ClientBuilder;
|
||||||
use rocket::response::{
|
use rocket::response::content::{RawCss, RawHtml};
|
||||||
content::{RawCss, RawHtml},
|
use rocket::response::stream::TextStream;
|
||||||
stream::TextStream,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
use crate::helpers::helpers::run_search;
|
||||||
use crate::static_files::static_files::read_file_contents;
|
use crate::static_files::static_files::read_file_contents;
|
||||||
|
|
||||||
pub mod client;
|
pub mod client;
|
||||||
pub mod engines;
|
pub mod engines;
|
||||||
|
pub mod helpers;
|
||||||
pub mod static_files;
|
pub mod static_files;
|
||||||
pub mod tsclient;
|
pub mod tsclient;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
@ -56,27 +54,17 @@ async fn hello<'a>(query: &str) -> RawHtml<TextStream![String]> {
|
|||||||
let completed_ref_writer = completed_ref.clone();
|
let completed_ref_writer = completed_ref.clone();
|
||||||
let brave_ref = Arc::new(Mutex::new(Brave::new()));
|
let brave_ref = Arc::new(Mutex::new(Brave::new()));
|
||||||
let brave_ref_writer = brave_ref.clone();
|
let brave_ref_writer = brave_ref.clone();
|
||||||
|
let client = Arc::new(Box::new(
|
||||||
|
ClientBuilder::new().user_agent(USER_AGENT).build().unwrap(),
|
||||||
|
));
|
||||||
|
let client_ref = client.clone();
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let client = ClientBuilder::new().user_agent(USER_AGENT).build().unwrap();
|
let request = client_ref
|
||||||
let response = client
|
|
||||||
.get(format!("https://search.brave.com/search?q={}", query_box))
|
.get(format!("https://search.brave.com/search?q={}", query_box))
|
||||||
.send()
|
.send();
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let mut stream = response.bytes_stream();
|
run_search(request, brave_ref_writer).await;
|
||||||
while let Some(chunk) = stream.next().await {
|
|
||||||
let buffer = chunk.unwrap();
|
|
||||||
|
|
||||||
let mut brave = brave_ref_writer.lock().await;
|
|
||||||
if let Some(result) = brave.parse_packet(buffer.iter()) {
|
|
||||||
brave.add_result(result);
|
|
||||||
|
|
||||||
drop(brave);
|
|
||||||
tokio::task::yield_now().await;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut completed = completed_ref_writer.lock().await;
|
let mut completed = completed_ref_writer.lock().await;
|
||||||
*completed = true;
|
*completed = true;
|
||||||
@ -88,12 +76,12 @@ async fn hello<'a>(query: &str) -> RawHtml<TextStream![String]> {
|
|||||||
yield HTML_BEGINNING.to_string();
|
yield HTML_BEGINNING.to_string();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let ddg = brave_ref.lock().await;
|
let brave = brave_ref.lock().await;
|
||||||
|
|
||||||
let len = ddg.results.len();
|
let len = brave.results.len();
|
||||||
|
|
||||||
if len == 0 {
|
if len == 0 {
|
||||||
drop(ddg);
|
drop(brave);
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -105,13 +93,13 @@ async fn hello<'a>(query: &str) -> RawHtml<TextStream![String]> {
|
|||||||
drop(completed);
|
drop(completed);
|
||||||
|
|
||||||
for ii in (current_index + 1)..len {
|
for ii in (current_index + 1)..len {
|
||||||
let result = ddg.results.get(ii).unwrap();
|
let result = brave.results.get(ii).unwrap();
|
||||||
|
|
||||||
let text = format!("<li><h1>{}</h1><p>{}</p></li>", &result.title, &result.description);
|
let text = format!("<li><h1>{}</h1><p>{}</p></li>", &result.title, &result.description);
|
||||||
|
|
||||||
yield text.to_string();
|
yield text.to_string();
|
||||||
}
|
}
|
||||||
drop(ddg);
|
drop(brave);
|
||||||
tokio::task::yield_now().await;
|
tokio::task::yield_now().await;
|
||||||
|
|
||||||
// [1] -> 0
|
// [1] -> 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user