pimalaya/neverest

Consider moving state to `$XDG_STATE_HOME` as opposed to `$XDG_CACHE_HOME`

Opened this issue · 4 comments

To follow-up from our Matrix chat:

Currently, neverest stores state/locks in two places:
$XDG_CACHE_HOME/pimalaya and $XDG_RUNTIME_DIR/pimalaya.

The former is the one I'd like to see changed to $XDG_STATE_HOME/pimalaya, as
storing in $XDG_CACHE_HOME/pimalaya runs the risk of accidental deletion of
the state files.

The latter isn't as much of an issue.

We could, maybe in the future, store state in the IMAP/Maildir backends as well.

In how far is it safe vs. not safe to delete $XDG_CACHE_HOME/pimalaya? Could anything go wrong next time I run neverest synchronize? If yes, that folder should definitely be considered state.

In how far is it safe vs. not safe to delete $XDG_CACHE_HOME/pimalaya? Could anything go wrong next time I run neverest synchronize? If yes, that folder should definitely be considered state.

The scariest scenario is when you delete your data, the root-dir, without deleting the cache. It may consider that all emails were removed and needs to be removed remotely.

If you delete the cache, Neverest will not be able to know if sth has been deleted right side or added left side. For now it comes with safe defaults: it will always take the path that does not delete data. Worst case you just get back emails you previously deleted, or get duplicates (same email in trash and inbox).

I believe cache is not crucial. It just helps the sync to take the right decision. Hence my initial choice behind the cache directory. That said, the state directory also makes sense, and may be a safer default. So let's do it!

@soywod Thanks for elaborating! That is quite scary indeed.

Would it make sense to add a "readonly" flag to protect either left or right side from accidental changes or a flag to indicate the "direction" of the sync? In my case I'm only ever interested in syncing from left to right. (Except for the hopefully unlikely case when I need to restore left from my backup on the right.)

Would it make sense to add a "readonly" flag to protect either left or right side from accidental changes or a flag to indicate the "direction" of the sync?

You have permissions for that purpose:

# Left backend permissions
#
# In this example, we set up a full permissive backend (default
# behaviour):
#
left.folder.permissions.create = true
left.folder.permissions.delete = true
left.flag.permissions.update = true
left.message.permissions.create = true
left.message.permissions.delete = true