diff --git a/core/src/services/dropbox/backend.rs b/core/src/services/dropbox/backend.rs index e9a2fecf162a..9072ecb605cb 100644 --- a/core/src/services/dropbox/backend.rs +++ b/core/src/services/dropbox/backend.rs @@ -48,14 +48,25 @@ impl Accessor for DropboxBackend { ma.set_scheme(Scheme::Dropbox) .set_root(&self.core.root) .set_capability(Capability { + stat: true, + read: true, + write: true, + + create_dir: true, + delete: true, + ..Default::default() }); ma } + async fn create_dir(&self, path: &str, args: OpCreateDir) -> Result { + + } + async fn read(&self, path: &str, _args: OpRead) -> Result<(RpRead, Self::Reader)> { let resp = self.core.dropbox_get(path).await?; let status = resp.status(); diff --git a/core/src/services/dropbox/core.rs b/core/src/services/dropbox/core.rs index 65b64b900c9e..633bddab6f17 100644 --- a/core/src/services/dropbox/core.rs +++ b/core/src/services/dropbox/core.rs @@ -114,6 +114,22 @@ impl DropboxCore { self.client.send(request).await } + pub async fn dropbox_create_folder(&self, path: &str) -> Result>{ + let url = "https://api.dropboxapi.com/2/files/create_folder_v2".to_string(); + let args = DropboxCreateFolderArgs { + path: build_rooted_abs_path(&self.root, path), + }; + + let bs = Bytes::from(serde_json::to_string(&args).map_err(new_json_serialize_error)?); + + let request = self + .build_auth_header(Request::post(&url)) + .header(header::CONTENT_TYPE, "application/json") + .body(AsyncBody::Bytes(bs)) + .map_err(new_request_build_error)?; + self.client.send(request).await + } + pub async fn dropbox_get_metadata(&self, path: &str) -> Result> { let url = "https://api.dropboxapi.com/2/files/get_metadata".to_string(); let args = DropboxMetadataArgs { @@ -157,6 +173,11 @@ struct DropboxDeleteArgs { path: String, } +#[derive(Clone, Debug, Deserialize, Serialize)] +struct DropboxCreateFolderArgs { + path: String, +} + #[derive(Clone, Debug, Deserialize, Serialize)] struct DropboxMetadataArgs { include_deleted: bool,