From 7d7053b990419edc1772c8a370bb80976455dee0 Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Tue, 28 Feb 2023 19:20:21 -0800 Subject: [PATCH] Move to using stateless --- Cargo.lock | 1 + assets/settings/default.json | 2 +- crates/db/src/db.rs | 3 ++- crates/zed/Cargo.toml | 1 + crates/zed/src/main.rs | 14 +++++++++++--- crates/zed/src/zed.rs | 25 ++++++++++++++++++++++++- 6 files changed, 40 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 90da178c7b..c8124fcc3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8395,6 +8395,7 @@ dependencies = [ "command_palette", "context_menu", "ctor", + "db", "diagnostics", "easy-parallel", "editor", diff --git a/assets/settings/default.json b/assets/settings/default.json index 2a5e05b401..90c47478f3 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -50,7 +50,7 @@ // "default_dock_anchor": "right" // 3. Position the dock full screen over the entire workspace" // "default_dock_anchor": "expanded" - "default_dock_anchor": "right", + "default_dock_anchor": "bottom", // Whether or not to remove any trailing whitespace from lines of a buffer // before saving it. "remove_trailing_whitespace_on_save": true, diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs index 20f2300d89..f4d0dc1a46 100644 --- a/crates/db/src/db.rs +++ b/crates/db/src/db.rs @@ -39,7 +39,8 @@ const FALLBACK_DB_NAME: &'static str = "FALLBACK_MEMORY_DB"; const DB_FILE_NAME: &'static str = "db.sqlite"; lazy_static::lazy_static! { - static ref ZED_STATELESS: bool = std::env::var("ZED_STATELESS").map_or(false, |v| !v.is_empty()); + // !!!!!!! CHANGE BACK TO DEFAULT FALSE BEFORE SHIPPING + static ref ZED_STATELESS: bool = std::env::var("ZED_STATELESS").map_or(true, |v| !v.is_empty()); static ref DB_FILE_OPERATIONS: Mutex<()> = Mutex::new(()); pub static ref BACKUP_DB_PATH: RwLock> = RwLock::new(None); pub static ref ALL_FILE_DB_FAILED: AtomicBool = AtomicBool::new(false); diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index d3b6e4810f..68b04c7e2f 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -29,6 +29,7 @@ context_menu = { path = "../context_menu" } client = { path = "../client" } clock = { path = "../clock" } diagnostics = { path = "../diagnostics" } +db = { path = "../db" } editor = { path = "../editor" } feedback = { path = "../feedback" } file_finder = { path = "../file_finder" } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 298e8ef8b9..a9625bf78e 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -13,6 +13,7 @@ use client::{ http::{self, HttpClient}, UserStore, ZED_APP_VERSION, ZED_SECRET_CLIENT_TOKEN, }; +use db::kvp::KEY_VALUE_STORE; use futures::{ channel::{mpsc, oneshot}, FutureExt, SinkExt, StreamExt, @@ -43,9 +44,12 @@ use theme::ThemeRegistry; use util::StaffMode; use util::{channel::RELEASE_CHANNEL, paths, ResultExt, TryFutureExt}; use workspace::{ - self, item::ItemHandle, notifications::NotifyResultExt, AppState, OpenPaths, Welcome, Workspace, + self, item::ItemHandle, notifications::NotifyResultExt, AppState, NewFile, OpenPaths, Workspace, +}; +use zed::{ + self, build_window_options, initialize_workspace, languages, menus, WelcomeExperience, + FIRST_OPEN, }; -use zed::{self, build_window_options, initialize_workspace, languages, menus}; fn main() { let http = http::client(); @@ -258,9 +262,13 @@ async fn restore_or_create_workspace(mut cx: AsyncAppContext) { paths: location.paths().as_ref().clone(), }) }); + } else if matches!(KEY_VALUE_STORE.read_kvp(FIRST_OPEN), Ok(None)) { + cx.update(|cx| { + cx.dispatch_global_action(WelcomeExperience); + }); } else { cx.update(|cx| { - cx.dispatch_global_action(Welcome); + cx.dispatch_global_action(NewFile); }); } } diff --git a/crates/zed/src/zed.rs b/crates/zed/src/zed.rs index 2fbac3613e..75cdf0e687 100644 --- a/crates/zed/src/zed.rs +++ b/crates/zed/src/zed.rs @@ -8,6 +8,7 @@ use breadcrumbs::Breadcrumbs; pub use client; use collab_ui::{CollabTitlebarItem, ToggleContactsMenu}; use collections::VecDeque; +use db::kvp::KEY_VALUE_STORE; pub use editor; use editor::{Editor, MultiBuffer}; @@ -34,7 +35,9 @@ use std::{borrow::Cow, env, path::Path, str, sync::Arc}; use util::{channel::ReleaseChannel, paths, ResultExt, StaffMode}; use uuid::Uuid; pub use workspace; -use workspace::{sidebar::SidebarSide, AppState, Restart, Workspace}; +use workspace::{sidebar::SidebarSide, AppState, Restart, Welcome, Workspace}; + +pub const FIRST_OPEN: &str = "first_open"; #[derive(Deserialize, Clone, PartialEq)] pub struct OpenBrowser { @@ -67,6 +70,7 @@ actions!( ResetBufferFontSize, InstallCommandLineInterface, ResetDatabase, + WelcomeExperience ] ); @@ -252,6 +256,25 @@ pub fn init(app_state: &Arc, cx: &mut gpui::MutableAppContext) { }, ); + cx.add_global_action(|_: &WelcomeExperience, cx| { + if !matches!(KEY_VALUE_STORE.read_kvp(FIRST_OPEN), Ok(None)) { + return; //noop, in case someone fires this from the command palette + } + + // Make a workspace, set it up with an open bottom dock and the welcome page + + cx.dispatch_global_action(Welcome); + + cx.background() + .spawn(async move { + KEY_VALUE_STORE + .write_kvp(FIRST_OPEN.to_string(), "false".to_string()) + .await + .log_err(); + }) + .detach(); + }); + activity_indicator::init(cx); call::init(app_state.client.clone(), app_state.user_store.clone(), cx); settings::KeymapFileContent::load_defaults(cx);