X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=bindings%2Fruby%2Fmessages.c;h=443a30c989c1aeb13e6443cd5863756318411018;hp=6b296b32c2876e6f517f07481a8fffff442fb672;hb=05dddf883dd762420bb8e6b86790e68d734fd568;hpb=06bf04500ba282052d38adf428219968ae62bb54 diff --git a/bindings/ruby/messages.c b/bindings/ruby/messages.c index 6b296b32..443a30c9 100644 --- a/bindings/ruby/messages.c +++ b/bindings/ruby/messages.c @@ -1,6 +1,6 @@ /* The Ruby interface to the notmuch mail library * - * Copyright © 2010 Ali Polatel + * Copyright © 2010, 2011 Ali Polatel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,30 +20,40 @@ #include "defs.h" +/* + * call-seq: MESSAGES.destroy! => nil + * + * Destroys the messages, freeing all resources allocated for it. + */ +VALUE +notmuch_rb_messages_destroy (VALUE self) +{ + notmuch_messages_t *messages; + + Data_Get_Notmuch_Messages (self, messages); + + notmuch_messages_destroy (messages); + DATA_PTR (self) = NULL; + + return Qnil; +} + /* call-seq: MESSAGES.each {|item| block } => MESSAGES * * Calls +block+ once for each message in +self+, passing that element as a * parameter. */ VALUE -notmuch_rb_messages_each(VALUE self) +notmuch_rb_messages_each (VALUE self) { - notmuch_rb_message_t *message; - notmuch_rb_messages_t *messages; - VALUE messagev; + notmuch_message_t *message; + notmuch_messages_t *messages; - Data_Get_Struct(self, notmuch_rb_messages_t, messages); - if (!messages->nm_messages) - return self; + Data_Get_Notmuch_Messages (self, messages); - for (; notmuch_messages_valid(messages->nm_messages); - notmuch_messages_move_to_next(messages->nm_messages)) - { - messagev = Data_Make_Struct(notmuch_rb_cMessage, notmuch_rb_message_t, - notmuch_rb_message_mark, notmuch_rb_message_free, message); - message->nm_message = notmuch_messages_get(messages->nm_messages); - message->parent = self; - rb_yield(messagev); + for (; notmuch_messages_valid (messages); notmuch_messages_move_to_next (messages)) { + message = notmuch_messages_get (messages); + rb_yield (Data_Wrap_Struct (notmuch_rb_cMessage, NULL, NULL, message)); } return self; @@ -55,20 +65,16 @@ notmuch_rb_messages_each(VALUE self) * Collect tags from the messages */ VALUE -notmuch_rb_messages_collect_tags(VALUE self) +notmuch_rb_messages_collect_tags (VALUE self) { - notmuch_rb_tags_t *tags; - notmuch_rb_messages_t *messages; - VALUE tagsv; + notmuch_tags_t *tags; + notmuch_messages_t *messages; - Data_Get_Struct(self, notmuch_rb_messages_t, messages); + Data_Get_Notmuch_Messages (self, messages); - tagsv = Data_Make_Struct(notmuch_rb_cTags, notmuch_rb_tags_t, - notmuch_rb_tags_mark, notmuch_rb_tags_free, tags); - tags->nm_tags = notmuch_messages_collect_tags(messages->nm_messages); - tags->parent = self; - if (!tags->nm_tags) - rb_raise(notmuch_rb_eMemoryError, "out of memory"); + tags = notmuch_messages_collect_tags (messages); + if (!tags) + rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return tagsv; + return Data_Wrap_Struct (notmuch_rb_cTags, NULL, NULL, tags); }