]> git.notmuchmail.org Git - notmuch/blob - bindings/ruby/query.c
5140c0083b25c0becbc85223ef568117fc5e5fdc
[notmuch] / bindings / ruby / query.c
1 /* The Ruby interface to the notmuch mail library
2  *
3  * Copyright © 2010 Ali Polatel
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see http://www.gnu.org/licenses/ .
17  *
18  * Author: Ali Polatel <alip@exherbo.org>
19  */
20
21 #include "defs.h"
22
23 /*
24  * call-seq: QUERY.destroy => nil
25  *
26  * Destroys the query, freeing all resources allocated for it.
27  */
28 VALUE
29 notmuch_rb_query_destroy(VALUE self)
30 {
31     notmuch_query_t *query;
32
33     Data_Get_Struct(self, notmuch_query_t, query);
34
35     notmuch_query_destroy(query);
36
37     return Qnil;
38 }
39
40 /*
41  * call-seq: QUERY.sort=(fixnum) => nil
42  *
43  * Set sort type of the +QUERY+
44  */
45 VALUE
46 notmuch_rb_query_set_sort(VALUE self, VALUE sortv)
47 {
48     notmuch_query_t *query;
49
50     Data_Get_Struct(self, notmuch_query_t, query);
51
52     if (!FIXNUM_P(sortv))
53         rb_raise(rb_eTypeError, "Not a fixnum");
54
55     notmuch_query_set_sort(query, FIX2UINT(sortv));
56
57     return Qnil;
58 }
59
60 /*
61  * call-seq: QUERY.search_threads => THREADS
62  *
63  * Search for threads
64  */
65 VALUE
66 notmuch_rb_query_search_threads(VALUE self)
67 {
68     notmuch_query_t *query;
69     notmuch_threads_t *threads;
70
71     Data_Get_Struct(self, notmuch_query_t, query);
72
73     threads = notmuch_query_search_threads(query);
74     if (!threads)
75         rb_raise(notmuch_rb_eMemoryError, "Out of memory");
76
77     return Data_Wrap_Struct(notmuch_rb_cThreads, NULL, NULL, threads);
78 }
79
80 /*
81  * call-seq: QUERY.search_messages => MESSAGES
82  *
83  * Search for messages
84  */
85 VALUE
86 notmuch_rb_query_search_messages(VALUE self)
87 {
88     notmuch_query_t *query;
89     notmuch_messages_t *messages;
90
91     Data_Get_Struct(self, notmuch_query_t, query);
92
93     messages = notmuch_query_search_messages(query);
94     if (!messages)
95         rb_raise(notmuch_rb_eMemoryError, "Out of memory");
96
97     return Data_Wrap_Struct(notmuch_rb_cMessages, NULL, NULL, messages);
98 }