WIP: improve search #1
|
@ -35,7 +35,7 @@ enum SortKey {
|
|||
|
||||
impl Default for SortKey {
|
||||
fn default() -> Self {
|
||||
Self::Name
|
||||
Self::Scraped
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,14 +119,10 @@ async fn search(
|
|||
Ok(res)
|
||||
}
|
||||
|
||||
// TODO what is NewQuery used for?
|
||||
// it is not a file search, that is done through SearchQuery
|
||||
#[derive(Deserialize)]
|
||||
struct NewQuery {
|
||||
page: Option<usize>,
|
||||
size: Option<usize>,
|
||||
sort_key: Option<SortKey>,
|
||||
sort_dir: Option<SortDirection>,
|
||||
type_: Option<String>,
|
||||
}
|
||||
|
||||
|
@ -134,7 +130,6 @@ async fn new_torrents(
|
|||
db: web::Data<r2d2::Pool<SqliteConnectionManager>>,
|
||||
query: web::Query<NewQuery>,
|
||||
) -> Result<HttpResponse, actix_web::Error> {
|
||||
|
||||
let res = web::block(move || {
|
||||
let conn = db.get().unwrap();
|
||||
new_query(query, conn)
|
||||
|
@ -148,29 +143,6 @@ async fn new_torrents(
|
|||
Ok(res)
|
||||
}
|
||||
|
||||
fn build_order_clause(type_: &str, sort_key: SortKey, sort_dir: SortDirection) -> String {
|
||||
let dir = match sort_dir {
|
||||
SortDirection::Asc => "asc",
|
||||
SortDirection::Desc => "desc",
|
||||
};
|
||||
|
||||
let column = match sort_key {
|
||||
SortKey::Name => {
|
||||
if type_ == "file" {
|
||||
"path"
|
||||
} else {
|
||||
"name"
|
||||
}
|
||||
},
|
||||
SortKey::Size => "size_bytes",
|
||||
SortKey::Seeds => "seeders",
|
||||
SortKey::Leeches => "leechers",
|
||||
SortKey::Scraped => "scraped_date",
|
||||
};
|
||||
|
||||
format!("{} {}", column, dir)
|
||||
}
|
||||
|
||||
fn search_query(
|
||||
query: web::Query<SearchQuery>,
|
||||
conn: r2d2::PooledConnection<SqliteConnectionManager>,
|
||||
|
@ -211,14 +183,12 @@ fn new_query(
|
|||
|
||||
let page = query.page.unwrap_or(1);
|
||||
let size = cmp::min(100, query.size.unwrap_or(DEFAULT_SIZE));
|
||||
let sort_key = query.sort_key.unwrap_or_default();
|
||||
let sort_dir = query.sort_dir.unwrap_or_default();
|
||||
let type_ = query.type_.as_ref().map_or("torrent", String::deref);
|
||||
let offset = size * (page - 1);
|
||||
|
||||
println!(
|
||||
"new, type = {}, page = {}, size = {}, sort_key = {:?}, sort_dir = {:?}",
|
||||
type_, page, size, sort_key, sort_dir
|
||||
"new, type = {}, page = {}, size = {}",
|
||||
type_, page, size
|
||||
);
|
||||
|
||||
let res = if type_ == "file" {
|
||||
|
@ -405,6 +375,29 @@ fn torrent_file_new(
|
|||
Ok(files)
|
||||
}
|
||||
|
||||
fn build_order_clause(type_: &str, sort_key: SortKey, sort_dir: SortDirection) -> String {
|
||||
let dir = match sort_dir {
|
||||
SortDirection::Asc => "asc",
|
||||
SortDirection::Desc => "desc",
|
||||
};
|
||||
|
||||
let column = match sort_key {
|
||||
SortKey::Name => {
|
||||
if type_ == "file" {
|
||||
"path"
|
||||
} else {
|
||||
"name"
|
||||
}
|
||||
},
|
||||
SortKey::Size => "size_bytes",
|
||||
SortKey::Seeds => "seeders",
|
||||
SortKey::Leeches => "leechers",
|
||||
SortKey::Scraped => "scraped_date",
|
||||
};
|
||||
|
||||
format!("{} {}", column, dir)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use r2d2_sqlite::SqliteConnectionManager;
|
||||
|
|
|
@ -85,7 +85,6 @@ export class Navbar extends Component<any, State> {
|
|||
i.setState({ searchParams: searchParams });
|
||||
}
|
||||
|
||||
// TODO why does switching from torrent to file search clear the sort_key?
|
||||
searchTypeChange(i: Navbar, event) {
|
||||
let searchParams: SearchParams = {
|
||||
q: i.state.searchParams.q,
|
||||
|
@ -96,6 +95,7 @@ export class Navbar extends Component<any, State> {
|
|||
}
|
||||
i.setState({ searchParams: searchParams });
|
||||
}
|
||||
|
||||
fillSearchField() {
|
||||
let splitPath: Array<string> = this.context.router.route.location.pathname.split("/");
|
||||
if (splitPath.length == 7 && splitPath[1] == 'search')
|
||||
|
|
Loading…
Reference in New Issue