Skip to content

Commit d3a886d

Browse files
committed
feat: adb list fixes
1 parent e86086e commit d3a886d

File tree

8 files changed

+16
-25
lines changed

8 files changed

+16
-25
lines changed

adb_client/src/adb_device_ext.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub trait ADBDeviceExt {
2525
fn push(&mut self, stream: &mut dyn Read, path: &dyn AsRef<str>) -> Result<()>;
2626

2727
/// List the items in a directory on the device
28-
fn list(&mut self, path: &str) -> Result<Vec<ADBListItem>>;
28+
fn list(&mut self, path: &dyn AsRef<str>) -> Result<Vec<ADBListItem>>;
2929

3030
/// Reboot the device using given reboot type
3131
fn reboot(&mut self, reboot_type: RebootType) -> Result<()>;

adb_client/src/device/adb_message_device_commands.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl<T: ADBMessageTransport> ADBDeviceExt for ADBMessageDevice<T> {
4343
self.framebuffer_inner()
4444
}
4545

46-
fn list(&mut self, path: &str) -> Result<Vec<crate::ADBListItem>> {
46+
fn list(&mut self, path: &dyn AsRef<str>) -> Result<Vec<crate::ADBListItem>> {
4747
self.list(path)
4848
}
4949
}

adb_client/src/device/adb_tcp_device.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ impl ADBDeviceExt for ADBTcpDevice {
114114
self.inner.framebuffer_inner()
115115
}
116116

117-
fn list(&mut self, path: &str) -> Result<Vec<crate::ADBListItem>> {
117+
fn list(&mut self, path: &dyn AsRef<str>) -> Result<Vec<crate::ADBListItem>> {
118118
self.inner.list(path)
119119
}
120120
}

adb_client/src/device/adb_usb_device.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ impl ADBDeviceExt for ADBUSBDevice {
283283
self.inner.framebuffer_inner()
284284
}
285285

286-
fn list(&mut self, path: &str) -> Result<Vec<crate::ADBListItem>> {
286+
fn list(&mut self, path: &dyn AsRef<str>) -> Result<Vec<crate::ADBListItem>> {
287287
self.inner.list(path)
288288
}
289289
}

adb_client/src/device/commands/list.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::str;
1212
impl<T: ADBMessageTransport> ADBMessageDevice<T> {
1313
/// List the entries in the given directory on the device.
1414
/// note: path uses internal file paths, so Documents is at /storage/emulated/0/Documents
15-
pub(crate) fn list(&mut self, path: &str) -> Result<Vec<ADBListItem>> {
15+
pub(crate) fn list<A: AsRef<str>>(&mut self, path: A) -> Result<Vec<ADBListItem>> {
1616
self.begin_synchronization()?;
1717

1818
let output = self.handle_list(path);
@@ -70,22 +70,22 @@ impl<T: ADBMessageTransport> ADBMessageDevice<T> {
7070
}
7171
}
7272

73-
fn handle_list(&mut self, path: &str) -> Result<Vec<ADBListItem>> {
73+
fn handle_list<A: AsRef<str>>(&mut self, path: A) -> Result<Vec<ADBListItem>> {
7474
// TODO: use LIS2 to support files over 2.14 GB in size.
7575
// SEE: https://github.com/cstyan/adbDocumentation?tab=readme-ov-file#adb-list
7676
let local_id = self.get_local_id()?;
7777
let remote_id = self.get_remote_id()?;
7878
{
7979
let mut len_buf = Vec::from([0_u8; 4]);
80-
LittleEndian::write_u32(&mut len_buf, path.len() as u32);
80+
LittleEndian::write_u32(&mut len_buf, path.as_ref().len() as u32);
8181

8282
let subcommand_data = MessageSubcommand::List; //.with_arg(path.len() as u32);
8383

8484
let mut serialized_message =
8585
bincode::serialize(&subcommand_data).map_err(|_e| RustADBError::ConversionError)?;
8686

8787
serialized_message.append(&mut len_buf);
88-
let mut path_bytes: Vec<u8> = Vec::from(path.as_bytes());
88+
let mut path_bytes: Vec<u8> = Vec::from(path.as_ref().as_bytes());
8989
serialized_message.append(&mut path_bytes);
9090

9191
let message = ADBTransportMessage::new(

adb_client/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ pub enum RustADBError {
121121
#[error("unknown transport: {0}")]
122122
UnknownTransport(String),
123123
/// An unknown file mode was encountered in list
124-
#[error("Unknown file type {0}")]
124+
#[error("Unknown file mode {0}")]
125125
UnknownFileMode(u32),
126126
}
127127

adb_client/src/server_device/adb_server_device_commands.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl ADBDeviceExt for ADBServerDevice {
120120
self.framebuffer_inner()
121121
}
122122

123-
fn list(&mut self, path: &str) -> Result<Vec<crate::ADBListItem>> {
123+
fn list(&mut self, path: &dyn AsRef<str>) -> Result<Vec<crate::ADBListItem>> {
124124
self.list(path)
125125
}
126126
}

adb_client/src/server_device/commands/list.rs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::{
22
ADBServerDevice, Result, RustADBError,
33
models::{ADBListItem, ADBListItemType, AdbServerCommand, SyncCommand},
44
};
5-
use byteorder::{ByteOrder, LittleEndian};
5+
use byteorder::{ByteOrder, LittleEndian, ReadBytesExt};
66
use std::{
77
io::{Read, Write},
88
str,
@@ -23,7 +23,7 @@ impl ADBServerDevice {
2323
self.handle_list_command(path)
2424
}
2525

26-
fn handle_list_command<S: AsRef<str>>(&mut self, path: S) -> Result<Vec<ADBListItem>> {
26+
fn handle_list_command<A: AsRef<str>>(&mut self, path: A) -> Result<Vec<ADBListItem>> {
2727
// TODO: use LIS2 to support files over 2.14 GB in size.
2828
// SEE: https://github.com/cstyan/adbDocumentation?tab=readme-ov-file#adb-list
2929
let mut len_buf = [0_u8; 4];
@@ -47,21 +47,12 @@ impl ADBServerDevice {
4747
.read_exact(&mut response)?;
4848
match str::from_utf8(response.as_ref())? {
4949
"DENT" => {
50-
let mut mode = [0_u8; 4];
51-
let mut size = [0_u8; 4];
52-
let mut time = [0_u8; 4];
53-
let mut name_len = [0_u8; 4];
54-
5550
let mut connection = self.transport.get_raw_connection()?;
56-
connection.read_exact(&mut mode)?;
57-
connection.read_exact(&mut size)?;
58-
connection.read_exact(&mut time)?;
59-
connection.read_exact(&mut name_len)?;
6051

61-
let mode = LittleEndian::read_u32(&mode);
62-
let size = LittleEndian::read_u32(&size);
63-
let time = LittleEndian::read_u32(&time);
64-
let name_len = LittleEndian::read_u32(&name_len);
52+
let mode = connection.read_u32::<LittleEndian>()?;
53+
let size = connection.read_u32::<LittleEndian>()?;
54+
let time = connection.read_u32::<LittleEndian>()?;
55+
let name_len = connection.read_u32::<LittleEndian>()?;
6556
let mut name_buf = vec![0_u8; name_len as usize];
6657
connection.read_exact(&mut name_buf)?;
6758
let name = String::from_utf8(name_buf)?;

0 commit comments

Comments
 (0)