diff --git a/src/Main.elm b/src/Main.elm index 4e728a0..b0ade95 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -122,6 +122,7 @@ type Msg | PouchDBPutSuccessfully Value | TimerTriggeredSave | TimerTriggeredSyncAll + | TimerTriggeredCompaction | FocusedOnEditor | UserClickedNewNote | UserEditedNode String @@ -157,6 +158,7 @@ type Effect | Put Value | FocusOnEditor | SyncOnce Sync + | Compact type UpdatedRevision @@ -240,6 +242,9 @@ update msg model = , Batch (List.map SyncOnce model.settings.syncs) ) + TimerTriggeredCompaction -> + ( model, Compact ) + FocusedOnEditor -> ( model, NoEffect ) @@ -632,6 +637,9 @@ perform model effect = Nothing -> Cmd.none + Compact -> + compact () + port put : Value -> Cmd msg @@ -639,6 +647,9 @@ port put : Value -> Cmd msg port syncOnce : String -> Cmd msg +port compact : () -> Cmd msg + + port putSuccessfully : (Value -> msg) -> Sub msg @@ -647,7 +658,8 @@ subscriptions model = Sub.batch [ putSuccessfully PouchDBPutSuccessfully , Time.every 1000 (\_ -> TimerTriggeredSave) - , Time.every 10000 (\_ -> TimerTriggeredSyncAll) + , Time.every 60000 (\_ -> TimerTriggeredSyncAll) + , Time.every 120000 (\_ -> TimerTriggeredCompaction) -- Using a 1-second resolution is more than enough for most UI -- concerns. If it needs to be more precise, crank this down! But diff --git a/src/index.js b/src/index.js index d33cf0b..8d6f2de 100644 --- a/src/index.js +++ b/src/index.js @@ -62,6 +62,13 @@ var db = new PouchDB("notes"); .catch((err) => console.error(err)); }); + // compacting + app.ports.compact.subscribe(() => { + db.compact() + .then(() => console.log("compaction success")) + .catch(err) => console.error(err)); + }) + // syncing app.ports.syncOnce.subscribe((url) => { db.replicate.from(url).on("complete", (info) => { diff --git a/tests/MainTest.elm b/tests/MainTest.elm index f87be99..a8e827b 100644 --- a/tests/MainTest.elm +++ b/tests/MainTest.elm @@ -65,7 +65,10 @@ testPerform effect = FocusOnEditor -> SCmd.none - StartSyncing _ -> + SyncOnce _ -> + SCmd.none + + Compact -> SCmd.none