diff --git a/crates/theme_selector/src/theme_selector.rs b/crates/theme_selector/src/theme_selector.rs index a7d17ad533..6484e0f627 100644 --- a/crates/theme_selector/src/theme_selector.rs +++ b/crates/theme_selector/src/theme_selector.rs @@ -114,6 +114,64 @@ impl ThemeSelector { let theme_name = mat.string.clone(); + // cx.global:: + // cx.global::() // lock + + // 1) Truncation can cause data loss, make it atomic by creating tmp file and moving + // 2) Maybe firing too often? Conceptually want to commit + // Having a lock on the settings file + + // - + // | | + // FS _ + + // General problem: whenever we want to persist stuff + // In memory representation -> File on disk + // Write font size, + // Write theme to disk + // Write -> See your own write -> Another Write + + // Memory Write 1 -> Write To Disk 1, | Memory Write 2, + // Blocking ->>>>>> | Read From Disk 1, + // Discard | Read WHATEVER is from disk | + + // Blocking lock -> + + // Whenever we update the settings in memory, we enqueue a write to disk + // When we receive a file system event, we only honor it if all pending disk writes are complete. + + // When the settings become dirty in memory, schedule a write to disk + // When we are sure the write is completed, consider the settings clean + // Only read settings from disk into memory when in memory settings are clean + // read settings just does not happen, if the settings are dirty + + // 10 settings queued up: + // lock() -> Only needs to be on the file + // How to set a setting: + // write to memory + // Read the whole file from disk + // Surgically inject the setting string + // Write to disk + // unlock() + + // Write 10 x change font size + // Read-open-write font size + // Read-open-write font size + // Read-open-write font size + // Read-open-write font size + // Read-open-write font size + // .. + // Read from file system, only gets the latest font size and uselessly sets font size + + // `SettingsFile` + // You can non-blocking, write to it as much as you need + // Debounces your changes, waits for you to be done, and then flushes them all to the file system + // And blocks the read + + // Read and write to memory. ^ up from the file system + + // If there's pendings writes, we need to wait until this whole thing is done' + cx.background() .spawn(async move { match write_theme_name(theme_name).await {