Start to implement the VideoService list_root_folder method.
This commit is contained in:
@@ -3,5 +3,6 @@
|
|||||||
backend/launcher/lumiere.sqlite
|
backend/launcher/lumiere.sqlite
|
||||||
backend/launcher/.env
|
backend/launcher/.env
|
||||||
backend/launcher/certs
|
backend/launcher/certs
|
||||||
|
backend/root_folder
|
||||||
frontend/.angular
|
frontend/.angular
|
||||||
frontend/node_modules
|
frontend/node_modules
|
||||||
@@ -4,6 +4,37 @@ use std::fs::File;
|
|||||||
use std::io::{BufRead, BufReader};
|
use std::io::{BufRead, BufReader};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
use lumiere_domain::video::error::VideoError;
|
||||||
|
use lumiere_domain::video::model::library_item::LibraryItem;
|
||||||
|
use lumiere_domain::video::port::VideoPort;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct VideoService {
|
||||||
|
video_port: Box<dyn VideoPort>
|
||||||
|
}
|
||||||
|
|
||||||
|
impl VideoService {
|
||||||
|
pub fn new(video_port: Box<dyn VideoPort>) -> Self {
|
||||||
|
Self { video_port }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn list_root_folder(self) -> Result<Vec<LibraryItem>, VideoError> {
|
||||||
|
let library_items = self.video_port.list_root_folder()?;
|
||||||
|
|
||||||
|
let items_without_id = library_items.iter().filter(|item| item.id == None);
|
||||||
|
// generate a new Uuid for each item without id
|
||||||
|
// assign this new Uuid to the item
|
||||||
|
// save the item by using the method video_port.save
|
||||||
|
// replace the items_without_id by modified items_without_id
|
||||||
|
|
||||||
|
Ok(vec!())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Basic example: Read file line by line using BufReader
|
/// Basic example: Read file line by line using BufReader
|
||||||
pub fn read_file_line_by_line(path: &str) -> std::io::Result<()> {
|
pub fn read_file_line_by_line(path: &str) -> std::io::Result<()> {
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
pub struct FolderItem {
|
||||||
|
pub id: Option<Uuid>,
|
||||||
|
pub name: String,
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
pub enum LibraryItemType {
|
||||||
|
VIDEO,
|
||||||
|
FOLDER
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct LibraryItem {
|
||||||
|
pub id: Uuid,
|
||||||
|
pub name: String,
|
||||||
|
pub r#type: LibraryItemType,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ReadLibraryItem {
|
||||||
|
pub id: Option<Uuid>,
|
||||||
|
pub name: String,
|
||||||
|
pub r#type: LibraryItemType,
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
pub mod folder;
|
||||||
|
pub mod library_item;
|
||||||
|
pub mod video;
|
||||||
@@ -12,7 +12,7 @@ pub trait VideoFile {}
|
|||||||
|
|
||||||
pub struct Video {
|
pub struct Video {
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
pub filename: String,
|
pub name: String,
|
||||||
pub file: Box<dyn VideoFile>,
|
pub file: Box<dyn VideoFile>,
|
||||||
pub format: VideoFormat,
|
pub format: VideoFormat,
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use crate::video::error::VideoError;
|
use crate::video::error::VideoError;
|
||||||
use crate::video::model::Video;
|
use crate::video::model::library_item::{LibraryItem, ReadLibraryItem};
|
||||||
|
use crate::video::model::video::Video;
|
||||||
|
|
||||||
pub trait VideoPort: Send + Sync {
|
pub trait VideoPort: Send + Sync {
|
||||||
fn list_root(&self) -> Result<Vec<Video>, VideoError>;
|
fn list_root_folder(&self) -> Result<Vec<ReadLibraryItem>, VideoError>;
|
||||||
fn list_folder(&self, folder_id: Uuid) -> Result<Vec<Video>, VideoError>;
|
fn list_folder(&self, folder_id: Uuid) -> Result<Vec<ReadLibraryItem>, VideoError>;
|
||||||
fn get_video_stream(&self, video_id: Uuid) -> Result<Video, VideoError>;
|
fn get_video_stream(&self, video_id: Uuid) -> Result<Video, VideoError>;
|
||||||
|
fn save(&self, library_item: LibraryItem) -> Result<(), VideoError>;
|
||||||
fn clone_box(&self) -> Box<dyn VideoPort>;
|
fn clone_box(&self) -> Box<dyn VideoPort>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
extern crate core;
|
extern crate core;
|
||||||
|
|
||||||
use crate::user::validator::validator;
|
|
||||||
use actix_web::web::ServiceConfig;
|
use actix_web::web::ServiceConfig;
|
||||||
use actix_web::{get, web, HttpResponse, Responder};
|
use actix_web::{get, web, HttpResponse, Responder};
|
||||||
use actix_web_httpauth::middleware::HttpAuthentication;
|
|
||||||
use crate::video::handler::download_file;
|
use crate::video::handler::download_file;
|
||||||
|
|
||||||
pub mod user;
|
pub mod user;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use lumiere_domain::video::model::VideoFormat;
|
use lumiere_domain::video::library_item::VideoFormat;
|
||||||
|
|
||||||
pub fn map_to_content_type(video_format: &VideoFormat) -> &'static str {
|
pub fn map_to_content_type(video_format: &VideoFormat) -> &'static str {
|
||||||
match video_format {
|
match video_format {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use lumiere_domain::video::model::VideoFormat;
|
use lumiere_domain::video::library_item::VideoFormat;
|
||||||
use lumiere_domain::video::model::VideoFormat::{AVI, MKV, MP4, UNKNOWN, WEBM};
|
use lumiere_domain::video::library_item::VideoFormat::{AVI, MKV, MP4, UNKNOWN, WEBM};
|
||||||
|
|
||||||
/// Determine Content-Type by reading file headers (magic numbers)
|
/// Determine Content-Type by reading file headers (magic numbers)
|
||||||
pub fn get_content_type(path: &Path) -> VideoFormat {
|
pub fn get_content_type(path: &Path) -> VideoFormat {
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
HTTPS_ENABLED=false
|
|
||||||
JWT_SECRET=jwt-secret
|
JWT_SECRET=jwt-secret
|
||||||
SQLITE_DATABASE_NAME=lumiere.sqlite
|
SQLITE_DATABASE_NAME=lumiere.sqlite
|
||||||
BCRYPT_SALT=salt
|
BCRYPT_SALT=salt
|
||||||
SNAPSHOT_RESOURCES_CRON_FREQUENCY="*/5 * * * * *"
|
ROOT_FOLDER=<replace-this-path>
|
||||||
SERVER_MODE=real # real | mocked
|
|
||||||
#MOCKED_DAEMON_START_SUCCESS=true
|
|
||||||
#MOCKED_DAEMON_STOP_SUCCESS=true
|
|
||||||
#MOCKED_DAEMON_RESTART_SUCCESS=true
|
|
||||||
Reference in New Issue
Block a user