Update rmp-ipc

Signed-off-by: trivernis <trivernis@protonmail.com>
pull/4/head
trivernis 3 years ago
parent d3ba1152ac
commit 19efd2f7d7

@ -873,7 +873,6 @@ dependencies = [
"chrono", "chrono",
"mediarepo-core", "mediarepo-core",
"mediarepo-model", "mediarepo-model",
"rmp-ipc",
"serde", "serde",
"tokio", "tokio",
] ]
@ -1412,9 +1411,9 @@ dependencies = [
[[package]] [[package]]
name = "rmp-ipc" name = "rmp-ipc"
version = "0.4.3" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ada2c7329ea55e1e80f2a1ae9ddb123f93ae4b349d493273138118feadfecb" checksum = "20fd9347d94995cc197ef2267a8c6b82f4519d3cb5c333caf57edb1376077dd1"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"log", "log",

@ -1034,9 +1034,9 @@ dependencies = [
[[package]] [[package]]
name = "rmp-ipc" name = "rmp-ipc"
version = "0.4.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af495ca346adde10163eb920b52b5a3992fb209b31df58ece4ed0f855661978c" checksum = "20fd9347d94995cc197ef2267a8c6b82f4519d3cb5c333caf57edb1376077dd1"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"log", "log",

@ -12,7 +12,7 @@ multibase = "0.9.1"
base64 = "0.13.0" base64 = "0.13.0"
toml = "0.5.8" toml = "0.5.8"
serde = "1.0.130" serde = "1.0.130"
rmp-ipc = "0.4.0" rmp-ipc = "0.5.0"
typemap_rev = "0.1.5" typemap_rev = "0.1.5"
image = "0.23.14" image = "0.23.14"
futures = "0.3.17" futures = "0.3.17"

@ -7,3 +7,4 @@ pub mod type_keys;
pub use futures; pub use futures;
pub use image; pub use image;
pub use rmp_ipc;

@ -1267,9 +1267,9 @@ dependencies = [
[[package]] [[package]]
name = "rmp-ipc" name = "rmp-ipc"
version = "0.4.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af495ca346adde10163eb920b52b5a3992fb209b31df58ece4ed0f855661978c" checksum = "20fd9347d94995cc197ef2267a8c6b82f4519d3cb5c333caf57edb1376077dd1"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"log", "log",

@ -1298,9 +1298,9 @@ dependencies = [
[[package]] [[package]]
name = "rmp-ipc" name = "rmp-ipc"
version = "0.4.0" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af495ca346adde10163eb920b52b5a3992fb209b31df58ece4ed0f855661978c" checksum = "20fd9347d94995cc197ef2267a8c6b82f4519d3cb5c333caf57edb1376077dd1"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"log", "log",

@ -789,7 +789,6 @@ dependencies = [
"chrono", "chrono",
"mediarepo-core", "mediarepo-core",
"mediarepo-model", "mediarepo-model",
"rmp-ipc",
"serde", "serde",
"tokio", "tokio",
] ]
@ -1311,9 +1310,9 @@ dependencies = [
[[package]] [[package]]
name = "rmp-ipc" name = "rmp-ipc"
version = "0.4.3" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ada2c7329ea55e1e80f2a1ae9ddb123f93ae4b349d493273138118feadfecb" checksum = "20fd9347d94995cc197ef2267a8c6b82f4519d3cb5c333caf57edb1376077dd1"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"log", "log",

@ -6,7 +6,6 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
rmp-ipc = "0.4.3"
serde = "1.0.130" serde = "1.0.130"
[dependencies.mediarepo-core] [dependencies.mediarepo-core]

@ -1,17 +1,14 @@
use crate::types::responses::InfoResponse; use crate::types::responses::InfoResponse;
use rmp_ipc::context::Context; use mediarepo_core::rmp_ipc::prelude::*;
use rmp_ipc::error::Result;
use rmp_ipc::{Event, IPCBuilder};
mod namespaces; mod namespaces;
pub mod types; pub mod types;
pub fn get_builder(address: &str) -> IPCBuilder { pub fn get_builder(address: &str) -> IPCBuilder {
namespaces::build_namespaces(IPCBuilder::new().address(address)) namespaces::build_namespaces(IPCBuilder::new().address(address)).on("info", callback!(info))
.on("info", |c, e| Box::pin(info(c, e)))
} }
async fn info(ctx: &Context, event: Event) -> Result<()> { async fn info(ctx: &Context, event: Event) -> IPCResult<()> {
let response = InfoResponse { let response = InfoResponse {
name: env!("CARGO_PKG_NAME").to_string(), name: env!("CARGO_PKG_NAME").to_string(),
version: env!("CARGO_PKG_VERSION").to_string(), version: env!("CARGO_PKG_VERSION").to_string(),

@ -3,28 +3,32 @@ use crate::types::requests::{
}; };
use crate::types::responses::{FileResponse, ThumbnailResponse}; use crate::types::responses::{FileResponse, ThumbnailResponse};
use mediarepo_core::error::{RepoError, RepoResult}; use mediarepo_core::error::{RepoError, RepoResult};
use mediarepo_core::rmp_ipc::prelude::*;
use mediarepo_model::file::File; use mediarepo_model::file::File;
use mediarepo_model::repo::Repo; use mediarepo_model::repo::Repo;
use mediarepo_model::type_keys::RepoKey; use mediarepo_model::type_keys::RepoKey;
use rmp_ipc::context::Context;
use rmp_ipc::error::Result;
use rmp_ipc::{Event, NamespaceBuilder};
use std::path::PathBuf; use std::path::PathBuf;
use tokio::io::AsyncReadExt; use tokio::io::AsyncReadExt;
pub const FILES_NAMESPACE: &str = "files"; pub struct FilesNamespace;
pub fn build(builder: NamespaceBuilder) -> NamespaceBuilder { impl NamespaceProvider for FilesNamespace {
builder fn name() -> String {
.on("all_files", |c, e| Box::pin(all_files(c, e))) String::from("files")
.on("add_file", |c, e| Box::pin(add_file(c, e))) }
.on("read_file", |c, e| Box::pin(read_file(c, e)))
.on("get_thumbnails", |c, e| Box::pin(get_file_thumbnails(c, e))) fn register(handler: &mut EventHandler) {
.on("read_thumbnail", |c, e| Box::pin(read_thumbnail(c, e))) handler.on("all_files", callback!(Self::all_files));
handler.on("add_file", callback!(Self::add_file));
handler.on("read_file", callback!(Self::read_file));
handler.on("get_thumbnails", callback!(Self::thumbnails));
handler.on("read_thumbnail", callback!(Self::read_thumbnail));
}
} }
/// Returns a list of all files impl FilesNamespace {
async fn all_files(ctx: &Context, event: Event) -> Result<()> { /// Returns a list of all files
async fn all_files(ctx: &Context, event: Event) -> IPCResult<()> {
let files = { let files = {
let data = ctx.data.read().await; let data = ctx.data.read().await;
let repo = data.get::<RepoKey>().unwrap(); let repo = data.get::<RepoKey>().unwrap();
@ -32,14 +36,14 @@ async fn all_files(ctx: &Context, event: Event) -> Result<()> {
}; };
let responses: Vec<FileResponse> = files.into_iter().map(FileResponse::from).collect(); let responses: Vec<FileResponse> = files.into_iter().map(FileResponse::from).collect();
ctx.emitter ctx.emitter
.emit_response_to(event.id(), FILES_NAMESPACE, "all_files", responses) .emit_response_to(event.id(), Self::name(), "all_files", responses)
.await?; .await?;
Ok(()) Ok(())
} }
/// Adds a file to the repository /// Adds a file to the repository
async fn add_file(ctx: &Context, event: Event) -> Result<()> { async fn add_file(ctx: &Context, event: Event) -> IPCResult<()> {
let request = event.data::<AddFileRequest>()?; let request = event.data::<AddFileRequest>()?;
let path = PathBuf::from(request.path); let path = PathBuf::from(request.path);
let file = { let file = {
@ -50,17 +54,17 @@ async fn add_file(ctx: &Context, event: Event) -> Result<()> {
ctx.emitter ctx.emitter
.emit_response_to( .emit_response_to(
event.id(), event.id(),
FILES_NAMESPACE, Self::name(),
"add_file", "add_file",
FileResponse::from(file), FileResponse::from(file),
) )
.await?; .await?;
Ok(()) Ok(())
} }
/// Reads the binary contents of a file /// Reads the binary contents of a file
async fn read_file(ctx: &Context, event: Event) -> Result<()> { async fn read_file(ctx: &Context, event: Event) -> IPCResult<()> {
let request = event.data::<ReadFileRequest>()?; let request = event.data::<ReadFileRequest>()?;
let mut reader = { let mut reader = {
let data = ctx.data.read().await; let data = ctx.data.read().await;
@ -73,14 +77,14 @@ async fn read_file(ctx: &Context, event: Event) -> Result<()> {
let mut buf = Vec::new(); let mut buf = Vec::new();
reader.read_to_end(&mut buf).await?; reader.read_to_end(&mut buf).await?;
ctx.emitter ctx.emitter
.emit_response_to(event.id(), FILES_NAMESPACE, "read_file", buf) .emit_response_to(event.id(), Self::name(), "read_file", buf)
.await?; .await?;
Ok(()) Ok(())
} }
/// Returns a list of available thumbnails of a file /// Returns a list of available thumbnails of a file
async fn get_file_thumbnails(ctx: &Context, event: Event) -> Result<()> { async fn thumbnails(ctx: &Context, event: Event) -> IPCResult<()> {
let request = event.data::<GetFileThumbnailsRequest>()?; let request = event.data::<GetFileThumbnailsRequest>()?;
let data = ctx.data.read().await; let data = ctx.data.read().await;
let repo = data.get::<RepoKey>().unwrap(); let repo = data.get::<RepoKey>().unwrap();
@ -93,19 +97,14 @@ async fn get_file_thumbnails(ctx: &Context, event: Event) -> Result<()> {
.map(ThumbnailResponse::from) .map(ThumbnailResponse::from)
.collect(); .collect();
ctx.emitter ctx.emitter
.emit_response_to( .emit_response_to(event.id(), Self::name(), "get_thumbnails", thumb_responses)
event.id(),
FILES_NAMESPACE,
"get_thumbnails",
thumb_responses,
)
.await?; .await?;
Ok(()) Ok(())
} }
/// Reads a thumbnail for the given thumbnail hash /// Reads a thumbnail for the given thumbnail hash
async fn read_thumbnail(ctx: &Context, event: Event) -> Result<()> { async fn read_thumbnail(ctx: &Context, event: Event) -> IPCResult<()> {
let hash = event.data::<String>()?; let hash = event.data::<String>()?;
let mut reader = { let mut reader = {
let data = ctx.data.read().await; let data = ctx.data.read().await;
@ -119,10 +118,11 @@ async fn read_thumbnail(ctx: &Context, event: Event) -> Result<()> {
let mut buf = Vec::new(); let mut buf = Vec::new();
reader.read_to_end(&mut buf).await?; reader.read_to_end(&mut buf).await?;
ctx.emitter ctx.emitter
.emit_response_to(event.id(), FILES_NAMESPACE, "read_thumbnail", buf) .emit_response_to(event.id(), Self::name(), "read_thumbnail", buf)
.await?; .await?;
Ok(()) Ok(())
}
} }
async fn file_by_identifier(identifier: FileIdentifier, repo: &Repo) -> RepoResult<Option<File>> { async fn file_by_identifier(identifier: FileIdentifier, repo: &Repo) -> RepoResult<Option<File>> {

@ -1,10 +1,7 @@
use crate::namespaces::files::FILES_NAMESPACE; use mediarepo_core::rmp_ipc::{namespace, namespace::Namespace, IPCBuilder};
use rmp_ipc::IPCBuilder;
pub mod files; pub mod files;
pub fn build_namespaces(builder: IPCBuilder) -> IPCBuilder { pub fn build_namespaces(builder: IPCBuilder) -> IPCBuilder {
let builder = files::build(builder.namespace(FILES_NAMESPACE)).build(); builder.add_namespace(namespace!(files::FilesNamespace))
builder
} }

Loading…
Cancel
Save