Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gauteh/abunchoftags
(DISCONTINUED, use gmailieer) experimental tag syncing between gmail tags (using X-Keywords) and notmuch tags
https://github.com/gauteh/abunchoftags
gmail gmail-labels notmuch offlineimap sync
Last synced: about 2 months ago
JSON representation
(DISCONTINUED, use gmailieer) experimental tag syncing between gmail tags (using X-Keywords) and notmuch tags
- Host: GitHub
- URL: https://github.com/gauteh/abunchoftags
- Owner: gauteh
- Created: 2014-10-30T16:28:09.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2017-05-14T20:39:49.000Z (over 7 years ago)
- Last Synced: 2024-05-01T22:57:44.103Z (8 months ago)
- Topics: gmail, gmail-labels, notmuch, offlineimap, sync
- Language: C++
- Homepage:
- Size: 71.3 KB
- Stars: 16
- Watchers: 6
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# keywsync
attempts to synchronize notmuch tags between the X-Keywords header of
messages and the notmuch database.## Disclaimer
This is highly experimental. It will modify you emails. It may totally destroy all your email. Use at own risk.
## Things to be aware of
Check out `keywsync.hh` to see which tags are ignored and how the mappings are
done. I also replace `/` with `.`, so if you got any tags with `.` in them it
is going to become a mess. This can be controlled with `--replace-chars` and
`--no-replace-chars`.Also, there is no support for tags with spaces in them (they should probably be
wrapped in quotes at some point). Make sure you have a recent version of
OfflineIMAP, some issues with [multiple occurences of
tags](https://github.com/OfflineIMAP/offlineimap/pull/136) should be fixed
there.## Usage
## Remote to local
Add all tags from remote to notmuch db:
`$ ./keywsync -m /path/to/db -k -p -a -q query`
Remove all tags from notmuch db that are not in remote:
`$ ./keywsync -m /path/to/db -k -p -r -q query`
Do both in one go:
`$ ./keywsync -m /path/to/db -k -p -q query`
#### Note:
Typically use a query with `tag:new`, but since notmuch will not detect a
change within a message (say a keyword has been changed on an existing message)
it is necessary to run this on all messages now and then to ensure all remote
tag changes have been caught.## Local to remote
Add all tags from local to remote:
`$ ./keywsync -m /path/to/db -t -p -a -q query`
Remove all tags from local to remote:
`$ ./keywsync -m /path/to/db -t -p -r -q query`
Do both in one go:
`$ ./keywsync -m /path/to/db -t -p -q query`
## Strategy:
Assuming you have fully synced database and you want to synchronize your
maildir with the remote maildir:> Note: The query needs to filter messages so that only the messages of the
> GMail maildir are tested.See this example: [fetch_and_sync.sh](examples/fetch_and_sync.sh).
1. Synchronize tags local-to-remote (`-t`), now all tag changes done in the
notmuch db are synchronized with the message files (preferably using a
`lastmod:` query [1] which catches messages where changes have been done after
the revision of the db at the time of the last remote-to-local synchronization)1. Save the current unix time: `$ before_offlineimap=$( date +%s )`
1. Run `offlineimap` to synchronize your local maildir and messages with the
remote. According to the offlineimap documentation [0] the X-Keywords flags
are synchronized in the same way as maildir flags (whatever that means [2]).1. Run `notmuch new` to detect any new or deleted files, or and renames.
1. Synchronize tags remote-to-local (`-k`) using a `query` that filters out anything
but the maildir in question. Use the `--mtime` flag to only sync messages that match
the `query` and are modified after offlineimap was run: `echo $before_offlineimap`.1. Store the current database revision for the next `lastmod` search in the
local-to-remote step of your next search: `$ notmuch_get_revision
/path/to/db`. Alternatively, store the revision from before the
local-to-remote sync. In that way it is possible to detect local changes
that happened during the sync. This will re-check the messages that were
modified as part of the remote-to-local sync.> Note: `notmuch new` does not detect message changes that do not include a file addition,
> removal or rename. Therefore simple changes to the `X-Keywords` header will not be detected.
> Use the **--mtime** query to filter out unchanged files.## Initial sync
If you wish to discard all local tags, start with a `remote-to-local` sync with a query
matching the entire directory.If you wish to discard all remote tags, start with a `local-to-remote` sync.
You might be able to preserve some stuff using the `--only-add` and `--only-remove` flags during
sync. Otherwise dumping notmuch tags and restoring at a later time when you have brought your local
copy up-to-date with the remote might work.## Timing
Running a full keyword-to-tag sync on a Macbook Pro with around 55k messages on an encfs volume
took 1m48s and used about 108MB of memory.Running a full tag-to-keyword check on the same message base with 3 changed messages
took about 1m5s and 100MB of memory.## References
[0] http://offlineimap.readthedocs.org/en/next/MANUAL.html?highlight=keywords#sync-from-gmail-to-a-local-maildir-with-labels
[1] id:[email protected]
[2] Someone have any documentation [anywhere?](https://github.com/OfflineIMAP/offlineimap/issues/130)#### Other resources
Access to GMail labels via IMAP extensions: https://developers.google.com/gmail/imap_extensions#access_to_gmail_labels_x-gm-labels
Commit in OfflineIMAP for GMail label support: https://github.com/OfflineIMAP/offlineimap/commit/0e4afa913253c43409e6a32a6b6e11e8b03ed3d9
Original patch for OfflineIMAP: http://thread.gmane.org/gmane.mail.imap.offlineimap.general/5943/focus=5970
Special tags for notmuch: http://notmuchmail.org/special-tags/