Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion crates/core/src/firetv/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,10 @@ pub fn get_status(ip: &str) -> Result<FireTvStatus> {
});
}

let connected = connect(&target).unwrap_or(false);
let (connected, connection_error) = match connect(&target) {
Ok(connected) => (connected, None),
Err(error) => (false, Some(error)),
};
let screen_awake = if connected {
screen_is_on(&target).ok()
} else {
Expand All @@ -126,6 +129,8 @@ pub fn get_status(ip: &str) -> Result<FireTvStatus> {
Some(false) => format!("Connected to Fire TV at {target}; screen appears asleep"),
None => format!("Connected to Fire TV at {target}; power state unavailable"),
}
} else if let Some(error) = connection_error {
fire_tv_connection_error_message(&target, &error)
} else {
fire_tv_unreachable_message(&target)
};
Expand Down Expand Up @@ -311,6 +316,12 @@ fn fire_tv_unreachable_message(target: &str) -> String {
)
}

fn fire_tv_connection_error_message(target: &str, error: &anyhow::Error) -> String {
format!(
"Could not connect to Fire TV at {target}. Check the IP address, network, and ADB debugging settings, then retry. Details: {error}"
)
}

fn fire_tv_not_awake_message(target: &str) -> String {
format!(
"Fire TV at {target} did not wake after retries. Confirm the TV is powered on and still accepts ADB commands."
Expand Down Expand Up @@ -599,6 +610,18 @@ mod tests {
assert!(message.contains("debugging prompt"));
}

#[test]
fn fire_tv_connection_error_message_preserves_the_root_cause() {
let message = fire_tv_connection_error_message(
"192.168.1.50:5555",
&anyhow!("adb connect timed out"),
);

assert!(message.contains("192.168.1.50:5555"));
assert!(message.contains("adb connect timed out"));
assert!(message.contains("ADB debugging"));
}

#[test]
fn fire_tv_not_awake_message_lists_power_and_adb_steps() {
let message = fire_tv_not_awake_message("192.168.1.50:5555");
Expand Down