From 43732a5ece679d851b9ef849c89889c8ec7e7c0b Mon Sep 17 00:00:00 2001 From: Young-Flash <871946895@qq.com> Date: Thu, 3 Aug 2023 23:03:07 +0800 Subject: [PATCH 1/5] add write for oay webdav --- bin/oay/src/services/webdav/webdav_file.rs | 27 ++++++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/bin/oay/src/services/webdav/webdav_file.rs b/bin/oay/src/services/webdav/webdav_file.rs index 80be6f5a4386..406ca0805924 100644 --- a/bin/oay/src/services/webdav/webdav_file.rs +++ b/bin/oay/src/services/webdav/webdav_file.rs @@ -62,18 +62,35 @@ impl DavFile for WebdavFile { } fn write_buf(&mut self, _buf: Box) -> FsFuture<()> { - todo!() + self.write_bytes(bytes::Bytes::copy_from_slice(_buf.chunk())) } - fn write_bytes(&mut self, _buf: bytes::Bytes) -> FsFuture<()> { - todo!() + fn write_bytes(&mut self, buf: bytes::Bytes) -> FsFuture<()> { + async move { + let file_path = self.path.as_url_string(); + self.op + .write(&file_path, buf) + .await + .map_err(|e| convert_error(e)) + } + .boxed() } fn seek(&mut self, _pos: SeekFrom) -> FsFuture { - todo!() + futures_util::future::ok(0).boxed() } fn flush(&mut self) -> FsFuture<()> { - todo!() + futures_util::future::ok(()).boxed() + } +} + +fn convert_error(opendal_error: opendal::Error) -> dav_server::fs::FsError { + match opendal_error.kind() { + opendal::ErrorKind::AlreadyExists | opendal::ErrorKind::IsSameFile => { + dav_server::fs::FsError::Exists + } + opendal::ErrorKind::NotFound => dav_server::fs::FsError::NotFound, + _ => dav_server::fs::FsError::GeneralFailure, } } From 3b4fa078a6536880470bbc92cb6b6157070b0a63 Mon Sep 17 00:00:00 2001 From: Young-Flash <871946895@qq.com> Date: Thu, 3 Aug 2023 23:26:15 +0800 Subject: [PATCH 2/5] update --- bin/oay/src/services/webdav/webdav_file.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/oay/src/services/webdav/webdav_file.rs b/bin/oay/src/services/webdav/webdav_file.rs index 406ca0805924..50bf82d1dedd 100644 --- a/bin/oay/src/services/webdav/webdav_file.rs +++ b/bin/oay/src/services/webdav/webdav_file.rs @@ -71,13 +71,13 @@ impl DavFile for WebdavFile { self.op .write(&file_path, buf) .await - .map_err(|e| convert_error(e)) + .map_err(convert_error) } .boxed() } fn seek(&mut self, _pos: SeekFrom) -> FsFuture { - futures_util::future::ok(0).boxed() + futures_util::future::err(dav_server::fs::FsError::NotImplemented).boxed() } fn flush(&mut self) -> FsFuture<()> { From ba3184011316074b952818b6195a392dd116ebb7 Mon Sep 17 00:00:00 2001 From: Young-Flash <871946895@qq.com> Date: Thu, 3 Aug 2023 23:28:52 +0800 Subject: [PATCH 3/5] cargo fmt --- bin/oay/src/services/webdav/webdav_file.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bin/oay/src/services/webdav/webdav_file.rs b/bin/oay/src/services/webdav/webdav_file.rs index 50bf82d1dedd..75c7e110d9c9 100644 --- a/bin/oay/src/services/webdav/webdav_file.rs +++ b/bin/oay/src/services/webdav/webdav_file.rs @@ -68,10 +68,7 @@ impl DavFile for WebdavFile { fn write_bytes(&mut self, buf: bytes::Bytes) -> FsFuture<()> { async move { let file_path = self.path.as_url_string(); - self.op - .write(&file_path, buf) - .await - .map_err(convert_error) + self.op.write(&file_path, buf).await.map_err(convert_error) } .boxed() } From 96b2f317ed2296a7c016e5ce00c87d8efc75e672 Mon Sep 17 00:00:00 2001 From: Young-Flash <871946895@qq.com> Date: Fri, 4 Aug 2023 20:51:18 +0800 Subject: [PATCH 4/5] update --- bin/oay/src/services/webdav/webdav_file.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/bin/oay/src/services/webdav/webdav_file.rs b/bin/oay/src/services/webdav/webdav_file.rs index 75c7e110d9c9..e52d8ec361e6 100644 --- a/bin/oay/src/services/webdav/webdav_file.rs +++ b/bin/oay/src/services/webdav/webdav_file.rs @@ -24,6 +24,7 @@ use dav_server::fs::FsFuture; use dav_server::fs::OpenOptions; use futures::FutureExt; use opendal::Operator; +use bytes::Bytes; use super::webdav_metadata::WebdavMetaData; @@ -35,7 +36,7 @@ pub struct WebdavFile { } impl DavFile for WebdavFile { - fn read_bytes(&mut self, count: usize) -> FsFuture { + fn read_bytes(&mut self, count: usize) -> FsFuture { async move { let file_path = self.path.as_url_string(); let content = self @@ -44,7 +45,7 @@ impl DavFile for WebdavFile { .await .unwrap(); //error handle ? - Ok(bytes::Bytes::from(content)) + Ok(Bytes::from(content)) } .boxed() } @@ -61,11 +62,11 @@ impl DavFile for WebdavFile { .boxed() } - fn write_buf(&mut self, _buf: Box) -> FsFuture<()> { - self.write_bytes(bytes::Bytes::copy_from_slice(_buf.chunk())) + fn write_buf(&mut self, buf: Box) -> FsFuture<()> { + self.write_bytes(Bytes::copy_from_slice(buf.chunk())) } - fn write_bytes(&mut self, buf: bytes::Bytes) -> FsFuture<()> { + fn write_bytes(&mut self, buf: Bytes) -> FsFuture<()> { async move { let file_path = self.path.as_url_string(); self.op.write(&file_path, buf).await.map_err(convert_error) From 086d60bca7e6d056d9e983ea809f51cbfe9baae1 Mon Sep 17 00:00:00 2001 From: Young-Flash <871946895@qq.com> Date: Fri, 4 Aug 2023 20:52:33 +0800 Subject: [PATCH 5/5] cargo fmt --- bin/oay/src/services/webdav/webdav_file.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/oay/src/services/webdav/webdav_file.rs b/bin/oay/src/services/webdav/webdav_file.rs index e52d8ec361e6..5a10813ea0ce 100644 --- a/bin/oay/src/services/webdav/webdav_file.rs +++ b/bin/oay/src/services/webdav/webdav_file.rs @@ -17,6 +17,7 @@ use std::io::SeekFrom; +use bytes::Bytes; use dav_server::davpath::DavPath; use dav_server::fs::DavFile; use dav_server::fs::DavMetaData; @@ -24,7 +25,6 @@ use dav_server::fs::FsFuture; use dav_server::fs::OpenOptions; use futures::FutureExt; use opendal::Operator; -use bytes::Bytes; use super::webdav_metadata::WebdavMetaData;