mirror of
https://github.com/house-of-vanity/furumi.git
synced 2025-07-06 21:24:08 +00:00
Read feature in progress.
This commit is contained in:
@ -881,25 +881,26 @@ impl MemFS {
|
||||
}
|
||||
counter += 1;
|
||||
};
|
||||
drop(full_path_mutex);
|
||||
let inodes = self.inodes.lock().await;
|
||||
|
||||
let inode = inodes.get(op.ino()).ok_or_else(no_entry)?;
|
||||
let inode = inode.lock().await;
|
||||
|
||||
|
||||
let content = match inode.kind {
|
||||
INodeKind::RegularFile(ref content) => content,
|
||||
_ => return Err(io::Error::from_raw_os_error(libc::EINVAL)),
|
||||
};
|
||||
|
||||
// let inodes = self.inodes.lock().await;
|
||||
//
|
||||
// let inode = inodes.get(op.ino()).ok_or_else(no_entry)?;
|
||||
// let inode = inode.lock().await;
|
||||
//
|
||||
//
|
||||
// let content = match inode.kind {
|
||||
// INodeKind::RegularFile(ref content) => content,
|
||||
// _ => return Err(io::Error::from_raw_os_error(libc::EINVAL)),
|
||||
// };
|
||||
//
|
||||
let offset = op.offset() as usize;
|
||||
let size = op.size() as usize;
|
||||
drop(full_path_mutex);
|
||||
let chunk = self.http.read(full_path, size, offset).await.unwrap();
|
||||
|
||||
let content = content.get(offset..).unwrap_or(&[]);
|
||||
let content = &content[..std::cmp::min(content.len(), size)];
|
||||
//let content = content.get(offset..).unwrap_or(&[]);
|
||||
//let content = &content[..std::cmp::min(content.len(), size)];
|
||||
|
||||
Ok(content.to_vec())
|
||||
Ok(chunk.to_vec())
|
||||
}
|
||||
|
||||
async fn do_write<R: ?Sized>(
|
||||
|
22
src/http.rs
22
src/http.rs
@ -55,14 +55,13 @@ impl HTTP {
|
||||
let client = reqwest::Client::builder()
|
||||
.user_agent(APP_USER_AGENT)
|
||||
.default_headers(headers)
|
||||
// .gzip(true)
|
||||
.build().unwrap();
|
||||
Self {
|
||||
client,
|
||||
server
|
||||
}
|
||||
}
|
||||
pub async fn list(&self, path: PathBuf, ) -> Result<Vec<RemoteEntry>, Error> {
|
||||
pub async fn list(&self, path: PathBuf) -> Result<Vec<RemoteEntry>, Error> {
|
||||
debug!("Fetching path '{}/{}'", self.server, path.display());
|
||||
let mut client = &self.client;
|
||||
let resp = client
|
||||
@ -74,5 +73,24 @@ impl HTTP {
|
||||
info!("Found {} entries into '{}'", resp.len(), path.display());
|
||||
Ok(resp)
|
||||
}
|
||||
|
||||
pub async fn read(&self, path: PathBuf, size: usize, offset: usize) -> Result<Vec<u8>, Error> {
|
||||
debug!("Reading path '{}/{}'", self.server, path.display());
|
||||
let mut headers = header::HeaderMap::new();
|
||||
let range = format!("bytes={}-{}", offset, {offset+size});
|
||||
headers.insert(header::RANGE, header::HeaderValue::from_str(range.as_str()).unwrap());
|
||||
|
||||
|
||||
let mut client = &self.client;
|
||||
let resp = client
|
||||
.get(format!("{}/{}", self.server, path.display()).as_str())
|
||||
.headers(headers)
|
||||
.send()
|
||||
.await?
|
||||
.bytes()
|
||||
.await?;
|
||||
info!("Found {} entries into '{}'", resp.len(), path.display());
|
||||
Ok(resp.to_vec())
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user