Added notes from working with Nathan

Mikayla Maki created

Change summary

crates/theme_selector/src/theme_selector.rs | 58 +++++++++++++++++++++++
1 file changed, 58 insertions(+)

Detailed changes

crates/theme_selector/src/theme_selector.rs 🔗

@@ -114,6 +114,64 @@ impl ThemeSelector {
 
                     let theme_name = mat.string.clone();
 
+                    // cx.global::<SettingsLock()>
+                    // cx.global::<SettingsFile>() // 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 {