Thanks for checking the source and sorry for the late response... I can only look into this on rare free weekends.
On Wed, May 22, 2013 at 6:47 AM, Matthieu Rakotojaona < matthieu.rakotoja...@gmail.com> wrote: > Hey Horacio, > > I took a stab at your gmail_source branch, and made a few > fixes/improvements [0]: > > - Add configuration option in sup-add > - Dump the LevelDB path in the sources.yaml > - Add a load_from_yaml method for a source to initialize its working > values (for instance, the @db cannot be serialized, it needs to be > reconstructed) > - Fixed the msg_att monkey-patch for imap.rb > > Great, I will add these changes to my branch.... > All in all, the gmail source seems to work. I tested it on my usual > gmail account, I haven't tried to download it all, but I did download a > few dozens of emails without a problem. I'd like to warn users about > LevelDB though: it's sad to say, but as other wmorgan's stuff, it looks > abandoned. There are at least 2 bugs you will encounter if you try it: a > pb in configuration (fixed in [1]) and you need the `snappy` gem to make > it work if your db is more than 4MB large [2]. There are some up-to-date > forks, though. > > I see LevelDB is used mostly for storing messages and mailboxes > uid{validity/last}, but if we are to use gmail (it's the only IMAP > provider that makes sense for sup), I believe we would stick to the All > Mail label, right ? So, no need for storing this in db, rather in the > sources.yaml file. Also, if leveldb-ruby is unreliable (I did encounter > some issues way back about something with glibc...), and we want to use > it for caching messages, I think we can salvage heliotrope's zmbox [3] > because it's so simple to use yet far better than simple mbox. Using zmbox, mbox, maildir or any other mail storage (mix?) means I need to keep track of three indexes to allow two way sync between the Gmail source and the Sup index. I would need the Sup index id, the store id (e.g. zmbox file index) and the Gmail X-GM-MSGID. That complicates things a lot. Using key/value stores like LevelDB allows me to directly store the messages and associate them directly with the Gmail X-GM-MSGID. Also LevelDB comes with high compression for text data, perfect for emails, and high performance [1]. The issues you mention seem to be on the ruby library rather than LevelDB itself and they are fixable. If there are no bigger issues (e.g. data corruption/loss) I will stick with LevelDB. Regarding your ids questions, if you want to access the sup's messages > from the gmail source, you could use the mail's Message-ID header and > apply the same logic as in Message.sanitize_message_id. Caution, > however: I've already encountered the case where multiple messages in > GMail (i.e multiple X-GM-MSGID) have the same Message-ID, so they would > be considered the same in sup/heliotrope... yeah, that's annoying as > hell, and I don't know how we can solve this in the case of multiple > sources. > > Thanks, this comment put me on track and I found a way to get the emails from the index using the message id provided by the source. All I need to do is call Message.build_from_source(source, info) where info is the message id provided by the source. In my case this would be the X-GM-MSGID string. If you want to sync-back, maybe sup can call a source-level "sync_back" > method with the current known state ? Speaking of which, for general > synchronization we could reuse the elegant offlineimap's sync algorithm > [4]. The idea is basic: have each source class store a snapshot of the > state. When a message is modified on the source, diff the change with > the known status and propagate to sup; when a message is modified in > sup, diff with the known status and propagate to the source. > > Interesting and simple algorithm. Let me study it a little more and see how it is applicable to Sup. [1] http://leveldb.googlecode.com/svn/trunk/doc/benchmark.html regards, Horacio Just a brain dump. > > [0] https://github.com/rakoo/sup/tree/gmail_source > [1] https://github.com/wmorgan/leveldb-ruby/pull/27 > [2] https://github.com/wmorgan/leveldb-ruby/issues/23 > [3] > https://github.com/sup-heliotrope/heliotrope/blob/64d4b50d5649ec616a311a4cf6955137fdaeb13d/lib/heliotrope/zmbox.rb > [4] http://offlineimap.org/howitworks.html > > Regards, > > -- > Matthieu Rakotojaona > > _______________________________________________ > Sup-devel mailing list > Sup-devel@rubyforge.org > http://rubyforge.org/mailman/listinfo/sup-devel > >
_______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel