diff --git a/.cargo/config.toml b/.cargo/config.toml index 1320a3480..923a1bf4e 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,6 +1,2 @@ [target.'cfg(all(windows, target_env = "msvc"))'] rustflags = ["-Ctarget-feature=+crt-static"] - -[target.'cfg(all(windows, target_env = "msvc"))'.env] -CFLAGS = "/MT" -CXXFLAGS = "/MT" diff --git a/apps/desktop/src/routes/app.new.tsx b/apps/desktop/src/routes/app.new.tsx index 0c7e5065a..eecdcc2f0 100644 --- a/apps/desktop/src/routes/app.new.tsx +++ b/apps/desktop/src/routes/app.new.tsx @@ -36,6 +36,7 @@ export const Route = createFileRoute("/app/new")({ words: [], record_start: null, record_end: null, + pre_meeting_memo_html: null, }); await dbCommands.sessionAddParticipant(sessionId, userId); @@ -54,6 +55,7 @@ export const Route = createFileRoute("/app/new")({ words: [], record_start: null, record_end: null, + pre_meeting_memo_html: null, }); await dbCommands.sessionAddParticipant(sessionId, userId); diff --git a/crates/db-user/src/extensions_types.rs b/crates/db-user/src/extensions_types.rs index 4fcc5d2de..c969eedbd 100644 --- a/crates/db-user/src/extensions_types.rs +++ b/crates/db-user/src/extensions_types.rs @@ -69,23 +69,3 @@ user_common_derives! { pub tags: Vec, } } - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_extension_definition() { - let generator = schemars::gen::SchemaSettings::draft07().into_generator(); - let schema = generator.into_root_schema_for::(); - - let current_dir = env!("CARGO_MANIFEST_DIR"); - let name = "definition.schema.json"; - let config_schema_path = std::path::PathBuf::from(current_dir) - .join("../../extensions/") - .join(name); - - let config_schema_content = serde_json::to_string_pretty(&schema).unwrap(); - std::fs::write(config_schema_path, config_schema_content).unwrap(); - } -} diff --git a/crates/db-user/src/init.rs b/crates/db-user/src/init.rs index 70d69c90c..06212c66d 100644 --- a/crates/db-user/src/init.rs +++ b/crates/db-user/src/init.rs @@ -62,33 +62,17 @@ pub async fn onboarding(db: &UserDatabase, user_id: impl Into) -> Result let onboarding_session_id = db.onboarding_session_id(); let thank_you_session = Session { - id: uuid::Uuid::new_v4().to_string(), - user_id: user_id.clone(), title: "Thank you".to_string(), - created_at: chrono::Utc::now(), - visited_at: chrono::Utc::now(), - calendar_event_id: None, raw_memo_html: hypr_buffer::opinionated_md_to_html(THANK_YOU_MD).unwrap(), - enhanced_memo_html: None, - conversations: vec![], - words: vec![], - record_start: None, - record_end: None, + ..new_default_session(&user_id) }; let onboarding_session = Session { id: onboarding_session_id, - user_id: user_id.clone(), title: "Welcome to Hyprnote".to_string(), - created_at: chrono::Utc::now(), - visited_at: chrono::Utc::now(), calendar_event_id: Some(onboarding_event.id.clone()), raw_memo_html: ONBOARDING_RAW_HTML.to_string(), - enhanced_memo_html: None, - conversations: vec![], - words: vec![], - record_start: None, - record_end: None, + ..new_default_session(&user_id) }; let _ = db.upsert_calendar(default_calendar).await?; @@ -487,5 +471,6 @@ fn new_default_session(user_id: impl Into) -> Session { words: vec![], record_start: None, record_end: None, + pre_meeting_memo_html: None, } } diff --git a/crates/db-user/src/lib.rs b/crates/db-user/src/lib.rs index 0b9aa3014..6c94515ad 100644 --- a/crates/db-user/src/lib.rs +++ b/crates/db-user/src/lib.rs @@ -129,7 +129,7 @@ impl std::ops::Deref for UserDatabase { } // Append only. Do not reorder. -const MIGRATIONS: [&str; 17] = [ +const MIGRATIONS: [&str; 18] = [ include_str!("./calendars_migration.sql"), include_str!("./configs_migration.sql"), include_str!("./events_migration.sql"), @@ -147,6 +147,7 @@ const MIGRATIONS: [&str; 17] = [ include_str!("./sessions_migration_1.sql"), include_str!("./sessions_migration_2.sql"), include_str!("./sessions_migration_3.sql"), + include_str!("./sessions_migration_4.sql"), ]; pub async fn migrate(db: &UserDatabase) -> Result<(), crate::Error> { diff --git a/crates/db-user/src/sessions_migration_4.sql b/crates/db-user/src/sessions_migration_4.sql new file mode 100644 index 000000000..982be9c0d --- /dev/null +++ b/crates/db-user/src/sessions_migration_4.sql @@ -0,0 +1,4 @@ +ALTER TABLE + sessions +ADD + COLUMN pre_meeting_memo_html TEXT; diff --git a/crates/db-user/src/sessions_ops.rs b/crates/db-user/src/sessions_ops.rs index c857c4711..771a0b8e4 100644 --- a/crates/db-user/src/sessions_ops.rs +++ b/crates/db-user/src/sessions_ops.rs @@ -16,6 +16,7 @@ impl UserDatabase { title = '' AND raw_memo_html = '' AND (enhanced_memo_html IS NULL OR enhanced_memo_html = '') AND + (pre_meeting_memo_html IS NULL OR pre_meeting_memo_html = '') AND conversations = '[]'", (), ) @@ -199,7 +200,8 @@ impl UserDatabase { conversations, words, record_start, - record_end + record_end, + pre_meeting_memo_html ) VALUES ( :id, :created_at, @@ -212,7 +214,8 @@ impl UserDatabase { :conversations, :words, :record_start, - :record_end + :record_end, + :pre_meeting_memo_html ) ON CONFLICT(id) DO UPDATE SET created_at = :created_at, @@ -225,7 +228,8 @@ impl UserDatabase { conversations = :conversations, words = :words, record_start = :record_start, - record_end = :record_end + record_end = :record_end, + pre_meeting_memo_html = :pre_meeting_memo_html RETURNING *", libsql::named_params! { ":id": session.id.clone(), @@ -240,6 +244,7 @@ impl UserDatabase { ":words": serde_json::to_string(&session.words).unwrap(), ":record_start": session.record_start.map(|dt| dt.to_rfc3339()), ":record_end": session.record_end.map(|dt| dt.to_rfc3339()), + ":pre_meeting_memo_html": session.pre_meeting_memo_html.clone(), }, ) .await?; @@ -385,6 +390,7 @@ mod tests { }], record_start: None, record_end: None, + pre_meeting_memo_html: Some("pre_meeting_memo_html_1".to_string()), }; let mut session = db.upsert_session(session).await.unwrap(); @@ -392,6 +398,10 @@ mod tests { assert_eq!(session.enhanced_memo_html, None); assert_eq!(session.title, "test"); assert_eq!(session.words.len(), 1); + assert_eq!( + session.pre_meeting_memo_html, + Some("pre_meeting_memo_html_1".to_string()) + ); let sessions = db.list_sessions(None).await.unwrap(); assert_eq!(sessions.len(), 1); diff --git a/crates/db-user/src/sessions_types.rs b/crates/db-user/src/sessions_types.rs index 7a200df54..d2ed946a4 100644 --- a/crates/db-user/src/sessions_types.rs +++ b/crates/db-user/src/sessions_types.rs @@ -18,6 +18,7 @@ user_common_derives! { pub words: Vec, pub record_start: Option>, pub record_end: Option>, + pub pre_meeting_memo_html: Option, } } @@ -57,6 +58,7 @@ impl Session { .map(|dt| dt.with_timezone(&Utc)) .ok() }), + pre_meeting_memo_html: row.get(12).expect("pre_meeting_memo_html"), }) } diff --git a/crates/db-user/src/tags_ops.rs b/crates/db-user/src/tags_ops.rs index 19014be2d..e35c298e2 100644 --- a/crates/db-user/src/tags_ops.rs +++ b/crates/db-user/src/tags_ops.rs @@ -123,6 +123,7 @@ mod tests { words: vec![], record_start: None, record_end: None, + pre_meeting_memo_html: None, }) .await .unwrap(); diff --git a/plugins/db/js/bindings.gen.ts b/plugins/db/js/bindings.gen.ts index a8667d8cc..d317b50b1 100644 --- a/plugins/db/js/bindings.gen.ts +++ b/plugins/db/js/bindings.gen.ts @@ -156,7 +156,7 @@ export type ListOrganizationFilter = { search: [number, string] } export type ListSessionFilter = ({ user_id: string; limit: number | null }) & ({ type: "search"; query: string } | { type: "recentlyVisited" } | { type: "dateRange"; start: string; end: string }) export type Organization = { id: string; name: string; description: string | null } export type Platform = "Apple" | "Google" | "Outlook" -export type Session = { id: string; created_at: string; visited_at: string; user_id: string; calendar_event_id: string | null; title: string; raw_memo_html: string; enhanced_memo_html: string | null; words: Word[]; record_start: string | null; record_end: string | null } +export type Session = { id: string; created_at: string; visited_at: string; user_id: string; calendar_event_id: string | null; title: string; raw_memo_html: string; enhanced_memo_html: string | null; words: Word[]; record_start: string | null; record_end: string | null; pre_meeting_memo_html: string | null } export type SpeakerIdentity = { type: "unassigned"; value: { index: number } } | { type: "assigned"; value: { id: string; label: string } } export type Tag = { id: string; name: string } export type Template = { id: string; user_id: string; title: string; description: string; sections: TemplateSection[]; tags: string[] }