X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=bindings%2Fruby%2Fdatabase.c;h=416eb709f19d231bfdf6460c37a8e2262fad24af;hp=ba9a1391a50918f25ca2d1bc5921c4907666e11b;hb=b10ce6bc23002d48916b1b2f375480e7540e3164;hpb=288feb7cdf1798408c708394fd935f05acf87985 diff --git a/bindings/ruby/database.c b/bindings/ruby/database.c index ba9a1391..416eb709 100644 --- a/bindings/ruby/database.c +++ b/bindings/ruby/database.c @@ -13,7 +13,7 @@ * 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 */ @@ -42,6 +42,8 @@ notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE self) int create, mode; VALUE pathv, hashv; VALUE modev; + notmuch_database_t *database; + notmuch_status_t ret; /* Check arguments */ rb_scan_args (argc, argv, "11", &pathv, &hashv); @@ -73,9 +75,13 @@ notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE self) } Check_Type (self, T_DATA); - DATA_PTR (self) = create ? notmuch_database_create (path) : notmuch_database_open (path, mode); - if (!DATA_PTR (self)) - rb_raise (notmuch_rb_eDatabaseError, "Failed to open database"); + if (create) + ret = notmuch_database_create (path, &database); + else + ret = notmuch_database_open (path, mode, &database); + notmuch_rb_status_raise (ret); + + DATA_PTR (self) = database; return self; } @@ -107,11 +113,13 @@ notmuch_rb_database_open (int argc, VALUE *argv, VALUE klass) VALUE notmuch_rb_database_close (VALUE self) { + notmuch_status_t ret; notmuch_database_t *db; Data_Get_Notmuch_Database (self, db); - notmuch_database_destroy (db); + ret = notmuch_database_destroy (db); DATA_PTR (self) = NULL; + notmuch_rb_status_raise (ret); return Qnil; } @@ -246,6 +254,7 @@ VALUE notmuch_rb_database_get_directory (VALUE self, VALUE pathv) { const char *path; + notmuch_status_t ret; notmuch_directory_t *dir; notmuch_database_t *db; @@ -254,11 +263,11 @@ notmuch_rb_database_get_directory (VALUE self, VALUE pathv) SafeStringValue (pathv); path = RSTRING_PTR (pathv); - dir = notmuch_database_get_directory (db, path); - if (!dir) - rb_raise (notmuch_rb_eXapianError, "Xapian exception"); - - return Data_Wrap_Struct (notmuch_rb_cDirectory, NULL, NULL, dir); + ret = notmuch_database_get_directory (db, path, &dir); + notmuch_rb_status_raise (ret); + if (dir) + return Data_Wrap_Struct (notmuch_rb_cDirectory, NULL, NULL, dir); + return Qnil; } /* @@ -282,7 +291,7 @@ notmuch_rb_database_add_message (VALUE self, VALUE pathv) SafeStringValue (pathv); path = RSTRING_PTR (pathv); - ret = notmuch_database_add_message (db, path, &message); + ret = notmuch_database_index_file (db, path, NULL, &message); notmuch_rb_status_raise (ret); return rb_assoc_new (Data_Wrap_Struct (notmuch_rb_cMessage, NULL, NULL, message), (ret == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) ? Qtrue : Qfalse); @@ -365,6 +374,30 @@ notmuch_rb_database_find_message_by_filename (VALUE self, VALUE pathv) return Qnil; } +/* + * call-seq: DB.get_all_tags() => TAGS + * + * Returns a list of all tags found in the database. + */ +VALUE +notmuch_rb_database_get_all_tags (VALUE self) +{ + notmuch_database_t *db; + notmuch_tags_t *tags; + + Data_Get_Notmuch_Database (self, db); + + tags = notmuch_database_get_all_tags (db); + if (!tags) { + const char *msg = notmuch_database_status_string (db); + if (!msg) + msg = "Unknown notmuch error"; + + rb_raise (notmuch_rb_eBaseError, "%s", msg); + } + return Data_Wrap_Struct (notmuch_rb_cTags, NULL, NULL, tags); +} + /* * call-seq: DB.query(query) => QUERY *