Use try_global()

This commit is contained in:
Joseph T. Lyons 2024-01-18 00:58:50 -05:00
parent 933fb87013
commit b807e6fe80
10 changed files with 52 additions and 70 deletions

View File

@ -145,17 +145,16 @@ pub fn view_release_notes(_: &ViewReleaseNotes, cx: &mut AppContext) {
let auto_updater = auto_updater.read(cx); let auto_updater = auto_updater.read(cx);
let server_url = &auto_updater.server_url; let server_url = &auto_updater.server_url;
let current_version = auto_updater.current_version; let current_version = auto_updater.current_version;
if cx.has_global::<ReleaseChannel>() {
match cx.global::<ReleaseChannel>() { if let Some(release_channel) = cx.try_global::<ReleaseChannel>() {
ReleaseChannel::Dev => {} let channel = match release_channel {
ReleaseChannel::Nightly => {} ReleaseChannel::Preview => "preview",
ReleaseChannel::Preview => { ReleaseChannel::Stable => "stable",
cx.open_url(&format!("{server_url}/releases/preview/{current_version}")) _ => return,
} };
ReleaseChannel::Stable => { cx.open_url(&format!(
cx.open_url(&format!("{server_url}/releases/stable/{current_version}")) "{server_url}/releases/{channel}/{current_version}"
} ))
}
} }
} }
} }
@ -257,11 +256,13 @@ impl AutoUpdater {
"{server_url}/api/releases/latest?token={ZED_SECRET_CLIENT_TOKEN}&asset=Zed.dmg" "{server_url}/api/releases/latest?token={ZED_SECRET_CLIENT_TOKEN}&asset=Zed.dmg"
); );
cx.update(|cx| { cx.update(|cx| {
if cx.has_global::<ReleaseChannel>() { if let Some(param) = cx
if let Some(param) = cx.global::<ReleaseChannel>().release_query_param() { .try_global::<ReleaseChannel>()
url_string += "&"; .map(|release_channel| release_channel.release_query_param())
url_string += param; .flatten()
} {
url_string += "&";
url_string += param;
} }
})?; })?;
@ -313,8 +314,8 @@ impl AutoUpdater {
let (installation_id, release_channel, telemetry) = cx.update(|cx| { let (installation_id, release_channel, telemetry) = cx.update(|cx| {
let installation_id = cx.global::<Arc<Client>>().telemetry().installation_id(); let installation_id = cx.global::<Arc<Client>>().telemetry().installation_id();
let release_channel = cx let release_channel = cx
.has_global::<ReleaseChannel>() .try_global::<ReleaseChannel>()
.then(|| cx.global::<ReleaseChannel>().display_name()); .map(|release_channel| release_channel.display_name());
let telemetry = TelemetrySettings::get_global(cx).metrics; let telemetry = TelemetrySettings::get_global(cx).metrics;
(installation_id, release_channel, telemetry) (installation_id, release_channel, telemetry)

View File

@ -150,11 +150,9 @@ const FLUSH_INTERVAL: Duration = Duration::from_secs(60 * 5);
impl Telemetry { impl Telemetry {
pub fn new(client: Arc<dyn HttpClient>, cx: &mut AppContext) -> Arc<Self> { pub fn new(client: Arc<dyn HttpClient>, cx: &mut AppContext) -> Arc<Self> {
let release_channel = if cx.has_global::<ReleaseChannel>() { let release_channel = cx
Some(cx.global::<ReleaseChannel>().display_name()) .try_global::<ReleaseChannel>()
} else { .map(|release_channel| release_channel.display_name());
None
};
TelemetrySettings::register(cx); TelemetrySettings::register(cx);

View File

@ -308,11 +308,7 @@ impl EventEmitter<Event> for Copilot {}
impl Copilot { impl Copilot {
pub fn global(cx: &AppContext) -> Option<Model<Self>> { pub fn global(cx: &AppContext) -> Option<Model<Self>> {
if cx.has_global::<Model<Self>>() { cx.try_global::<Model<Self>>().map(|model| model.clone())
Some(cx.global::<Model<Self>>().clone())
} else {
None
}
} }
fn start( fn start(

View File

@ -57,18 +57,14 @@ impl FeatureFlagAppExt for AppContext {
} }
fn has_flag<T: FeatureFlag>(&self) -> bool { fn has_flag<T: FeatureFlag>(&self) -> bool {
if self.has_global::<FeatureFlags>() { self.try_global::<FeatureFlags>()
self.global::<FeatureFlags>().has_flag(T::NAME) .map(|flags| flags.has_flag(T::NAME))
} else { .unwrap_or(false)
false
}
} }
fn is_staff(&self) -> bool { fn is_staff(&self) -> bool {
if self.has_global::<FeatureFlags>() { self.try_global::<FeatureFlags>()
return self.global::<FeatureFlags>().staff; .map(|flags| flags.staff)
} else { .unwrap_or(false)
false
}
} }
} }

View File

@ -42,7 +42,7 @@ impl FileAssociations {
} }
pub fn get_icon(path: &Path, cx: &AppContext) -> Option<Arc<str>> { pub fn get_icon(path: &Path, cx: &AppContext) -> Option<Arc<str>> {
let this = cx.has_global::<Self>().then(|| cx.global::<Self>())?; let this = cx.try_global::<Self>()?;
// FIXME: Associate a type with the languages and have the file's language // FIXME: Associate a type with the languages and have the file's language
// override these associations // override these associations
@ -58,7 +58,7 @@ impl FileAssociations {
} }
pub fn get_folder_icon(expanded: bool, cx: &AppContext) -> Option<Arc<str>> { pub fn get_folder_icon(expanded: bool, cx: &AppContext) -> Option<Arc<str>> {
let this = cx.has_global::<Self>().then(|| cx.global::<Self>())?; let this = cx.try_global::<Self>()?;
let key = if expanded { let key = if expanded {
EXPANDED_DIRECTORY_TYPE EXPANDED_DIRECTORY_TYPE
@ -72,7 +72,7 @@ impl FileAssociations {
} }
pub fn get_chevron_icon(expanded: bool, cx: &AppContext) -> Option<Arc<str>> { pub fn get_chevron_icon(expanded: bool, cx: &AppContext) -> Option<Arc<str>> {
let this = cx.has_global::<Self>().then(|| cx.global::<Self>())?; let this = cx.try_global::<Self>()?;
let key = if expanded { let key = if expanded {
EXPANDED_CHEVRON_TYPE EXPANDED_CHEVRON_TYPE

View File

@ -275,11 +275,8 @@ pub struct SearchResult {
impl SemanticIndex { impl SemanticIndex {
pub fn global(cx: &mut AppContext) -> Option<Model<SemanticIndex>> { pub fn global(cx: &mut AppContext) -> Option<Model<SemanticIndex>> {
if cx.has_global::<Model<Self>>() { cx.try_global::<Model<Self>>()
Some(cx.global::<Model<SemanticIndex>>().clone()) .map(|semantic_index| semantic_index.clone())
} else {
None
}
} }
pub fn authenticate(&mut self, cx: &mut AppContext) -> bool { pub fn authenticate(&mut self, cx: &mut AppContext) -> bool {

View File

@ -28,11 +28,10 @@ impl ModeIndicator {
fn update_mode(&mut self, cx: &mut ViewContext<Self>) { fn update_mode(&mut self, cx: &mut ViewContext<Self>) {
// Vim doesn't exist in some tests // Vim doesn't exist in some tests
if !cx.has_global::<Vim>() { let Some(vim) = cx.try_global::<Vim>() else {
return; return;
} };
let vim = Vim::read(cx);
if vim.enabled { if vim.enabled {
self.mode = Some(vim.state().mode); self.mode = Some(vim.state().mode);
} else { } else {

View File

@ -586,13 +586,9 @@ impl<T: Item> ItemHandle for View<T> {
} }
fn to_followable_item_handle(&self, cx: &AppContext) -> Option<Box<dyn FollowableItemHandle>> { fn to_followable_item_handle(&self, cx: &AppContext) -> Option<Box<dyn FollowableItemHandle>> {
if cx.has_global::<FollowableItemBuilders>() { let builders = cx.try_global::<FollowableItemBuilders>()?;
let builders = cx.global::<FollowableItemBuilders>(); let item = self.to_any();
let item = self.to_any(); Some(builders.get(&item.entity_type())?.1(&item))
Some(builders.get(&item.entity_type())?.1(&item))
} else {
None
}
} }
fn on_release( fn on_release(

View File

@ -616,8 +616,8 @@ impl Workspace {
let modal_layer = cx.new_view(|_| ModalLayer::new()); let modal_layer = cx.new_view(|_| ModalLayer::new());
let mut active_call = None; let mut active_call = None;
if cx.has_global::<Model<ActiveCall>>() { if let Some(call) = cx.try_global::<Model<ActiveCall>>() {
let call = cx.global::<Model<ActiveCall>>().clone(); let call = call.clone();
let mut subscriptions = Vec::new(); let mut subscriptions = Vec::new();
subscriptions.push(cx.subscribe(&call, Self::on_active_call_event)); subscriptions.push(cx.subscribe(&call, Self::on_active_call_event));
active_call = Some((call, subscriptions)); active_call = Some((call, subscriptions));
@ -3686,11 +3686,8 @@ impl WorkspaceStore {
update: proto::update_followers::Variant, update: proto::update_followers::Variant,
cx: &AppContext, cx: &AppContext,
) -> Option<()> { ) -> Option<()> {
if !cx.has_global::<Model<ActiveCall>>() { let active_call = cx.try_global::<Model<ActiveCall>>()?;
return None; let room_id = active_call.read(cx).room()?.read(cx).id();
}
let room_id = ActiveCall::global(cx).read(cx).room()?.read(cx).id();
let follower_ids: Vec<_> = self let follower_ids: Vec<_> = self
.followers .followers
.iter() .iter()

View File

@ -102,13 +102,15 @@ fn main() {
let open_listener = listener.clone(); let open_listener = listener.clone();
app.on_open_urls(move |urls, _| open_listener.open_urls(&urls)); app.on_open_urls(move |urls, _| open_listener.open_urls(&urls));
app.on_reopen(move |cx| { app.on_reopen(move |cx| {
if cx.has_global::<Weak<AppState>>() { if let Some(app_state) = cx
if let Some(app_state) = cx.global::<Weak<AppState>>().upgrade() { .try_global::<Weak<AppState>>()
workspace::open_new(&app_state, cx, |workspace, cx| { .map(|app_state| app_state.upgrade())
Editor::new_file(workspace, &Default::default(), cx) .flatten()
}) {
.detach(); workspace::open_new(&app_state, cx, |workspace, cx| {
} Editor::new_file(workspace, &Default::default(), cx)
})
.detach();
} }
}); });