blob: f0f1175ba4ab5f19e82b861e3fb9ab26b6bfe99a [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
crate::utils::{self, Either, WatchOrSetResult},
fidl_fuchsia_settings::{DoNotDisturbProxy, DoNotDisturbSettings},
};
pub async fn command(
proxy: DoNotDisturbProxy,
user_dnd: Option<bool>,
night_mode_dnd: Option<bool>,
) -> WatchOrSetResult {
let mut settings = DoNotDisturbSettings::EMPTY;
settings.user_initiated_do_not_disturb = user_dnd;
settings.night_mode_initiated_do_not_disturb = night_mode_dnd;
Ok(if settings != DoNotDisturbSettings::EMPTY {
let mutate_result = proxy.set(settings).await?;
Either::Set(match mutate_result {
Ok(_) => {
let mut settings_clone = DoNotDisturbSettings::EMPTY;
settings_clone.user_initiated_do_not_disturb = user_dnd;
settings_clone.night_mode_initiated_do_not_disturb = night_mode_dnd;
format!(
"Successfully set do_not_disturb to {:#?}",
describe_do_not_disturb_setting(&settings_clone)
)
}
Err(err) => format!("{:?}", err),
})
} else {
Either::Watch(utils::formatted_watch_to_stream(
proxy,
|p| p.watch(),
|s| describe_do_not_disturb_setting(&s),
))
})
}
fn describe_do_not_disturb_setting(do_not_disturb_setting: &DoNotDisturbSettings) -> String {
let mut output = String::new();
output.push_str("DoNotDisturb { ");
if let Some(user_dnd) = do_not_disturb_setting.user_initiated_do_not_disturb {
output.push_str(&format!("user_initiated_do_not_disturb: {} ", user_dnd))
}
if let Some(night_mode_dnd) = do_not_disturb_setting.night_mode_initiated_do_not_disturb {
output.push_str(&format!("night_mode_initiated_do_not_disturb: {} ", night_mode_dnd))
}
output.push_str("}");
output
}