ruby: Kill garbage collection related cruft.
[notmuch] / bindings / ruby / directory.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: DIR.destroy => nil
25  *
26  * Destroys the directory, freeing all resources allocated for it.
27  */
28 VALUE
29 notmuch_rb_directory_destroy(VALUE self)
30 {
31     notmuch_directory_t *dir;
32
33     Data_Get_Struct(self, notmuch_directory_t, dir);
34
35     notmuch_directory_destroy(dir);
36
37     return Qnil;
38 }
39
40 /*
41  * call-seq: DIR.mtime => fixnum
42  *
43  * Returns the mtime of the directory or +0+ if no mtime has been previously
44  * stored.
45  */
46 VALUE
47 notmuch_rb_directory_get_mtime(VALUE self)
48 {
49     notmuch_directory_t *dir;
50
51     Data_Get_Struct(self, notmuch_directory_t, dir);
52
53     return UINT2NUM(notmuch_directory_get_mtime(dir));
54 }
55
56 /*
57  * call-seq: DIR.mtime=(fixnum) => nil
58  *
59  * Store an mtime within the database for the directory object.
60  */
61 VALUE
62 notmuch_rb_directory_set_mtime(VALUE self, VALUE mtimev)
63 {
64     notmuch_status_t ret;
65     notmuch_directory_t *dir;
66
67     Data_Get_Struct(self, notmuch_directory_t, dir);
68
69     if (!FIXNUM_P(mtimev))
70         rb_raise(rb_eTypeError, "First argument not a fixnum");
71
72     ret = notmuch_directory_set_mtime(dir, FIX2UINT(mtimev));
73     notmuch_rb_status_raise(ret);
74
75     return Qtrue;
76 }
77
78 /*
79  * call-seq: DIR.child_files => FILENAMES
80  *
81  * Return a Notmuch::FileNames object, which is an +Enumerable+ listing all the
82  * filenames of messages in the database within the given directory.
83  */
84 VALUE
85 notmuch_rb_directory_get_child_files(VALUE self)
86 {
87     notmuch_directory_t *dir;
88     notmuch_filenames_t *fnames;
89
90     Data_Get_Struct(self, notmuch_directory_t, dir);
91
92     fnames = notmuch_directory_get_child_files(dir);
93
94     return Data_Wrap_Struct(notmuch_rb_cFileNames, NULL, NULL, fnames);
95 }
96
97 /*
98  * call-seq: DIR.child_directories => FILENAMES
99  *
100  * Return a Notmuch::FileNames object, which is an +Enumerable+ listing all the
101  * directories in the database within the given directory.
102  */
103 VALUE
104 notmuch_rb_directory_get_child_directories(VALUE self)
105 {
106     notmuch_directory_t *dir;
107     notmuch_filenames_t *fnames;
108
109     Data_Get_Struct(self, notmuch_directory_t, dir);
110
111     fnames = notmuch_directory_get_child_directories(dir);
112
113     return Data_Wrap_Struct(notmuch_rb_cFileNames, NULL, NULL, fnames);
114 }