Use file metadata to sort files and directories
This commit is contained in:
@@ -69,6 +69,12 @@ impl FromRequest for Claims {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct PhotosResponse<'a> {
|
||||||
|
pub photos: &'a [String],
|
||||||
|
pub dirs: &'a [String],
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct ThumbnailRequest {
|
pub struct ThumbnailRequest {
|
||||||
pub path: String,
|
pub path: String,
|
||||||
|
|||||||
18
src/main.rs
18
src/main.rs
@@ -2,9 +2,7 @@
|
|||||||
extern crate diesel;
|
extern crate diesel;
|
||||||
extern crate rayon;
|
extern crate rayon;
|
||||||
|
|
||||||
use crate::auth::login;
|
|
||||||
use actix_web_prom::PrometheusMetrics;
|
use actix_web_prom::PrometheusMetrics;
|
||||||
use database::{DbError, DbErrorKind, FavoriteDao, SqliteFavoriteDao, SqliteUserDao, UserDao};
|
|
||||||
use futures::stream::StreamExt;
|
use futures::stream::StreamExt;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use prometheus::{self, IntGauge};
|
use prometheus::{self, IntGauge};
|
||||||
@@ -29,12 +27,12 @@ use actix_web::{
|
|||||||
};
|
};
|
||||||
use notify::{watcher, DebouncedEvent, RecursiveMode, Watcher};
|
use notify::{watcher, DebouncedEvent, RecursiveMode, Watcher};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
use data::{AddFavoriteRequest, MetadataResponse, ThumbnailRequest};
|
|
||||||
use log::{debug, error, info};
|
use log::{debug, error, info};
|
||||||
|
|
||||||
use crate::data::Claims;
|
use crate::auth::login;
|
||||||
|
use crate::data::*;
|
||||||
|
use crate::database::*;
|
||||||
use crate::files::{is_image_or_video, is_valid_path, list_files};
|
use crate::files::{is_image_or_video, is_valid_path, list_files};
|
||||||
use crate::video::*;
|
use crate::video::*;
|
||||||
|
|
||||||
@@ -67,13 +65,13 @@ async fn list_photos(_claims: Claims, req: Query<ThumbnailRequest>) -> impl Resp
|
|||||||
|
|
||||||
let photos = &files
|
let photos = &files
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|f| !f.extension().unwrap_or_default().is_empty())
|
.filter(|&f| f.metadata().map_or(false, |md| md.is_file()))
|
||||||
.map(|f| f.to_str().unwrap().to_string())
|
.map(|f| f.to_str().unwrap().to_string())
|
||||||
.collect::<Vec<String>>();
|
.collect::<Vec<String>>();
|
||||||
|
|
||||||
let dirs = &files
|
let dirs = &files
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|f| f.extension().unwrap_or_default().is_empty())
|
.filter(|&f| f.metadata().map_or(false, |md| md.is_dir()))
|
||||||
.map(|f| f.to_str().unwrap().to_string())
|
.map(|f| f.to_str().unwrap().to_string())
|
||||||
.collect::<Vec<String>>();
|
.collect::<Vec<String>>();
|
||||||
|
|
||||||
@@ -84,12 +82,6 @@ async fn list_photos(_claims: Claims, req: Query<ThumbnailRequest>) -> impl Resp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
struct PhotosResponse<'a> {
|
|
||||||
photos: &'a [String],
|
|
||||||
dirs: &'a [String],
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/image")]
|
#[get("/image")]
|
||||||
async fn get_image(
|
async fn get_image(
|
||||||
_claims: Claims,
|
_claims: Claims,
|
||||||
|
|||||||
Reference in New Issue
Block a user