X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=bindings%2Fruby%2Fthread.c;h=9b295981801779e1d970972d595b60eec1c4d5c6;hp=72a86b8f92162c99a8e0851e4ca6334ffc6ee0aa;hb=HEAD;hpb=06bf04500ba282052d38adf428219968ae62bb54 diff --git a/bindings/ruby/thread.c b/bindings/ruby/thread.c index 72a86b8f..b20ed893 100644 --- a/bindings/ruby/thread.c +++ b/bindings/ruby/thread.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 @@ -13,28 +13,42 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/ . + * along with this program. If not, see https://www.gnu.org/licenses/ . * * Author: Ali Polatel */ #include "defs.h" +/* + * call-seq: THREAD.destroy! => nil + * + * Destroys the thread, freeing all resources allocated for it. + */ +VALUE +notmuch_rb_thread_destroy (VALUE self) +{ + notmuch_rb_object_destroy (self, ¬much_rb_thread_type); + + return Qnil; +} + /* * call-seq: THREAD.thread_id => String * * Returns the thread id */ VALUE -notmuch_rb_thread_get_thread_id(VALUE self) +notmuch_rb_thread_get_thread_id (VALUE self) { const char *tid; - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; + + Data_Get_Notmuch_Thread (self, thread); - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + tid = notmuch_thread_get_thread_id (thread); - tid = notmuch_thread_get_thread_id(thread->nm_thread); - return tid ? rb_str_new2(tid) : Qnil; + return rb_str_new2 (tid); } /* @@ -43,13 +57,13 @@ notmuch_rb_thread_get_thread_id(VALUE self) * Returns the number of total messages */ VALUE -notmuch_rb_thread_get_total_messages(VALUE self) +notmuch_rb_thread_get_total_messages (VALUE self) { - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - return INT2FIX(notmuch_thread_get_total_messages(thread->nm_thread)); + return INT2FIX (notmuch_thread_get_total_messages (thread)); } /* @@ -58,22 +72,38 @@ notmuch_rb_thread_get_total_messages(VALUE self) * Get a Notmuch::Messages iterator for the top level messages in thread. */ VALUE -notmuch_rb_thread_get_toplevel_messages(VALUE self) +notmuch_rb_thread_get_toplevel_messages (VALUE self) { - notmuch_rb_messages_t *messages; - notmuch_rb_thread_t *thread; - VALUE messagesv; + notmuch_messages_t *messages; + notmuch_thread_t *thread; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - messagesv = Data_Make_Struct(notmuch_rb_cMessages, notmuch_rb_messages_t, - notmuch_rb_messages_mark, notmuch_rb_messages_free, messages); - messages->nm_messages = notmuch_thread_get_toplevel_messages(thread->nm_thread); - messages->parent = self; - if (!messages->nm_messages) - rb_raise(notmuch_rb_eMemoryError, "out of memory"); + messages = notmuch_thread_get_toplevel_messages (thread); + if (!messages) + rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return messagesv; + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, ¬much_rb_messages_type, messages); +} + +/* + * call-seq: THREAD.messages => MESSAGES + * + * Get a Notmuch::Messages iterator for the all messages in thread. + */ +VALUE +notmuch_rb_thread_get_messages (VALUE self) +{ + notmuch_messages_t *messages; + notmuch_thread_t *thread; + + Data_Get_Notmuch_Thread (self, thread); + + messages = notmuch_thread_get_messages (thread); + if (!messages) + rb_raise (notmuch_rb_eMemoryError, "Out of memory"); + + return Data_Wrap_Notmuch_Object (notmuch_rb_cMessages, ¬much_rb_messages_type, messages); } /* @@ -82,13 +112,13 @@ notmuch_rb_thread_get_toplevel_messages(VALUE self) * Get the number of messages in thread that matched the search */ VALUE -notmuch_rb_thread_get_matched_messages(VALUE self) +notmuch_rb_thread_get_matched_messages (VALUE self) { - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - return INT2FIX(notmuch_thread_get_matched_messages(thread->nm_thread)); + return INT2FIX (notmuch_thread_get_matched_messages (thread)); } /* @@ -97,15 +127,16 @@ notmuch_rb_thread_get_matched_messages(VALUE self) * Get a comma-separated list of the names of the authors. */ VALUE -notmuch_rb_thread_get_authors(VALUE self) +notmuch_rb_thread_get_authors (VALUE self) { const char *authors; - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - authors = notmuch_thread_get_authors(thread->nm_thread); - return authors ? rb_str_new2(authors) : Qnil; + authors = notmuch_thread_get_authors (thread); + + return rb_str_new2 (authors); } /* @@ -114,15 +145,16 @@ notmuch_rb_thread_get_authors(VALUE self) * Returns the subject of the thread */ VALUE -notmuch_rb_thread_get_subject(VALUE self) +notmuch_rb_thread_get_subject (VALUE self) { const char *subject; - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; + + Data_Get_Notmuch_Thread (self, thread); - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + subject = notmuch_thread_get_subject (thread); - subject = notmuch_thread_get_subject(thread->nm_thread); - return subject ? rb_str_new2(subject) : Qnil; + return rb_str_new2 (subject); } /* @@ -131,13 +163,13 @@ notmuch_rb_thread_get_subject(VALUE self) * Get the date of the oldest message in thread. */ VALUE -notmuch_rb_thread_get_oldest_date(VALUE self) +notmuch_rb_thread_get_oldest_date (VALUE self) { - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - return UINT2NUM(notmuch_thread_get_oldest_date(thread->nm_thread)); + return UINT2NUM (notmuch_thread_get_oldest_date (thread)); } /* @@ -146,13 +178,13 @@ notmuch_rb_thread_get_oldest_date(VALUE self) * Get the date of the newest message in thread. */ VALUE -notmuch_rb_thread_get_newest_date(VALUE self) +notmuch_rb_thread_get_newest_date (VALUE self) { - notmuch_rb_thread_t *thread; + notmuch_thread_t *thread; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - return UINT2NUM(notmuch_thread_get_newest_date(thread->nm_thread)); + return UINT2NUM (notmuch_thread_get_newest_date (thread)); } /* @@ -161,20 +193,16 @@ notmuch_rb_thread_get_newest_date(VALUE self) * Get a Notmuch::Tags iterator for the tags of the thread */ VALUE -notmuch_rb_thread_get_tags(VALUE self) +notmuch_rb_thread_get_tags (VALUE self) { - notmuch_rb_thread_t *thread; - notmuch_rb_tags_t *tags; - VALUE tagsv; + notmuch_thread_t *thread; + notmuch_tags_t *tags; - Data_Get_Struct(self, notmuch_rb_thread_t, thread); + Data_Get_Notmuch_Thread (self, thread); - tagsv = Data_Make_Struct(notmuch_rb_cTags, notmuch_rb_tags_t, - notmuch_rb_tags_mark, notmuch_rb_tags_free, tags); - tags->nm_tags = notmuch_thread_get_tags(thread->nm_thread); - tags->parent = self; - if (!tags->nm_tags) - rb_raise(notmuch_rb_eMemoryError, "out of memory"); + tags = notmuch_thread_get_tags (thread); + if (!tags) + rb_raise (notmuch_rb_eMemoryError, "Out of memory"); - return tagsv; + return notmuch_rb_tags_get (tags); }