Skip to content

Commit fabd186

Browse files
Merge pull request #1372 from ItsEeleeya/custom-default-project-name
(feat) Customize default project name, update project file names from UUID to pretty name
2 parents 1506972 + ead1b32 commit fabd186

File tree

15 files changed

+1383
-307
lines changed

15 files changed

+1383
-307
lines changed

Cargo.lock

Lines changed: 17 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
[workspace]
22
resolver = "2"
3-
members = ["apps/cli", "apps/desktop/src-tauri", "crates/*", "crates/workspace-hack"]
3+
members = [
4+
"apps/cli",
5+
"apps/desktop/src-tauri",
6+
"crates/*",
7+
"crates/workspace-hack",
8+
]
49

510
[workspace.dependencies]
611
anyhow = { version = "1.0.86" }
@@ -22,6 +27,7 @@ specta = { version = "=2.0.0-rc.20", features = [
2227
"derive",
2328
"serde_json",
2429
"uuid",
30+
"chrono"
2531
] }
2632
serde = { version = "1", features = ["derive"] }
2733

@@ -40,6 +46,7 @@ sentry = { version = "0.42.0", features = [
4046
] }
4147
tracing = "0.1.41"
4248
futures = "0.3.31"
49+
aho-corasick = "1.1.4"
4350

4451
cidre = { git = "https://github.com/CapSoftware/cidre", rev = "bf84b67079a8", features = [
4552
"macos_12_7",

apps/desktop/src-tauri/Cargo.toml

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ swift-rs = { version = "1.0.6", features = ["build"] }
2020

2121
[dependencies]
2222
tauri = { workspace = true, features = [
23-
"macos-private-api",
24-
"protocol-asset",
25-
"tray-icon",
26-
"image-png",
27-
"devtools",
23+
"macos-private-api",
24+
"protocol-asset",
25+
"tray-icon",
26+
"image-png",
27+
"devtools",
2828
] }
2929
tauri-specta = { version = "=2.0.0-rc.20", features = ["derive", "typescript"] }
3030
tauri-plugin-dialog = "2.2.0"
@@ -60,6 +60,7 @@ tracing.workspace = true
6060
tempfile = "3.9.0"
6161
ffmpeg.workspace = true
6262
chrono = { version = "0.4.31", features = ["serde"] }
63+
regex = "1.10.4"
6364
rodio = "0.19.0"
6465
png = "0.17.13"
6566
device_query = "4.0.1"
@@ -106,22 +107,24 @@ tauri-plugin-sentry = "0.5.0"
106107
thiserror.workspace = true
107108
bytes = "1.10.1"
108109
async-stream = "0.3.6"
110+
sanitize-filename = "0.6.0"
109111
tracing-futures = { version = "0.2.5", features = ["futures-03"] }
110112
tracing-opentelemetry = "0.32.0"
111113
opentelemetry = "0.31.0"
112-
opentelemetry-otlp = "0.31.0" #{ version = , features = ["http-proto", "reqwest-client"] }
114+
opentelemetry-otlp = "0.31.0" #{ version = , features = ["http-proto", "reqwest-client"] }
113115
opentelemetry_sdk = { version = "0.31.0", features = ["rt-tokio", "trace"] }
114116
posthog-rs = "0.3.7"
115117
workspace-hack = { version = "0.1", path = "../../../crates/workspace-hack" }
118+
aho-corasick.workspace = true
116119

117120

118121
[target.'cfg(target_os = "macos")'.dependencies]
119122
core-graphics = "0.24.0"
120123
core-foundation = "0.10.0"
121124
objc2-app-kit = { version = "0.3.0", features = [
122-
"NSWindow",
123-
"NSResponder",
124-
"NSHapticFeedback",
125+
"NSWindow",
126+
"NSResponder",
127+
"NSHapticFeedback",
125128
] }
126129
cocoa = "0.26.0"
127130
objc = "0.2.7"
@@ -131,10 +134,10 @@ cidre = { workspace = true }
131134

132135
[target.'cfg(target_os= "windows")'.dependencies]
133136
windows = { workspace = true, features = [
134-
"Win32_Foundation",
135-
"Win32_System",
136-
"Win32_UI_WindowsAndMessaging",
137-
"Win32_Graphics_Gdi",
137+
"Win32_Foundation",
138+
"Win32_System",
139+
"Win32_UI_WindowsAndMessaging",
140+
"Win32_Graphics_Gdi",
138141
] }
139142
windows-sys = { workspace = true }
140143

apps/desktop/src-tauri/src/general_settings.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ pub struct GeneralSettingsStore {
122122
pub delete_instant_recordings_after_upload: bool,
123123
#[serde(default = "default_instant_mode_max_resolution")]
124124
pub instant_mode_max_resolution: u32,
125+
#[serde(default)]
126+
pub default_project_name_template: Option<String>,
125127
}
126128

127129
fn default_enable_native_camera_preview() -> bool {
@@ -187,6 +189,7 @@ impl Default for GeneralSettingsStore {
187189
excluded_windows: default_excluded_windows(),
188190
delete_instant_recordings_after_upload: false,
189191
instant_mode_max_resolution: 1920,
192+
default_project_name_template: None,
190193
}
191194
}
192195
}

apps/desktop/src-tauri/src/lib.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ mod screenshot_editor;
2828
mod target_select_overlay;
2929
mod thumbnails;
3030
mod tray;
31+
mod update_project_names;
3132
mod upload;
3233
mod web_api;
3334
mod window_exclusion;
@@ -2388,7 +2389,8 @@ pub async fn run(recording_logging_handle: LoggingHandle, logs_dir: PathBuf) {
23882389
target_select_overlay::display_information,
23892390
target_select_overlay::get_window_icon,
23902391
target_select_overlay::focus_window,
2391-
editor_delete_project
2392+
editor_delete_project,
2393+
format_project_name,
23922394
])
23932395
.events(tauri_specta::collect_events![
23942396
RecordingOptionsChanged,
@@ -2533,6 +2535,11 @@ pub async fn run(recording_logging_handle: LoggingHandle, logs_dir: PathBuf) {
25332535
.invoke_handler(specta_builder.invoke_handler())
25342536
.setup(move |app| {
25352537
let app = app.handle().clone();
2538+
2539+
if let Err(err) = update_project_names::migrate_if_needed(&app) {
2540+
tracing::error!("Failed to migrate project file names: {}", err);
2541+
}
2542+
25362543
specta_builder.mount_events(&app);
25372544
hotkeys::init(&app);
25382545
general_settings::init(&app);
@@ -3153,6 +3160,24 @@ async fn write_clipboard_string(
31533160
.map_err(|e| format!("Failed to write text to clipboard: {e}"))
31543161
}
31553162

3163+
#[tauri::command(async)]
3164+
#[specta::specta]
3165+
fn format_project_name(
3166+
template: Option<String>,
3167+
target_name: String,
3168+
target_kind: String,
3169+
recording_mode: RecordingMode,
3170+
datetime: Option<chrono::DateTime<chrono::Local>>,
3171+
) -> String {
3172+
recording::format_project_name(
3173+
template.as_deref(),
3174+
target_name.as_str(),
3175+
target_kind.as_str(),
3176+
recording_mode,
3177+
datetime,
3178+
)
3179+
}
3180+
31563181
trait EventExt: tauri_specta::Event {
31573182
fn listen_any_spawn<Fut>(
31583183
app: &AppHandle,

0 commit comments

Comments
 (0)