diff options
Diffstat (limited to 'bindings')
-rw-r--r-- | bindings/go/Makefile | 4 | ||||
-rw-r--r-- | bindings/go/src/notmuch-addrlookup/addrlookup.go | 14 | ||||
-rw-r--r-- | bindings/python/notmuch/database.py | 2 | ||||
-rw-r--r-- | bindings/python/notmuch/thread.py | 27 | ||||
-rw-r--r-- | bindings/ruby/defs.h | 3 | ||||
-rw-r--r-- | bindings/ruby/extconf.rb | 23 | ||||
-rw-r--r-- | bindings/ruby/init.c | 1 | ||||
-rw-r--r-- | bindings/ruby/query.c | 2 | ||||
-rw-r--r-- | bindings/ruby/thread.c | 20 |
9 files changed, 76 insertions, 20 deletions
diff --git a/bindings/go/Makefile b/bindings/go/Makefile index c38f2340..1b9e7505 100644 --- a/bindings/go/Makefile +++ b/bindings/go/Makefile @@ -15,8 +15,8 @@ notmuch: .PHONY: goconfig goconfig: - if [ ! -d src/github.com/kless/goconfig/config ]; then \ - $(GO) get github.com/kless/goconfig/config; \ + if [ ! -d github.com/msbranco/goconfig ]; then \ + $(GO) get github.com/msbranco/goconfig; \ fi .PHONY: notmuch-addrlookup diff --git a/bindings/go/src/notmuch-addrlookup/addrlookup.go b/bindings/go/src/notmuch-addrlookup/addrlookup.go index 59283f81..916e5bb2 100644 --- a/bindings/go/src/notmuch-addrlookup/addrlookup.go +++ b/bindings/go/src/notmuch-addrlookup/addrlookup.go @@ -11,7 +11,7 @@ import "sort" // 3rd-party imports import "notmuch" -import "github.com/kless/goconfig/config" +import "github.com/msbranco/goconfig" type mail_addr_freq struct { addr string @@ -178,22 +178,20 @@ type address_matcher struct { } func new_address_matcher() *address_matcher { - var cfg *config.Config - var err error - // honor NOTMUCH_CONFIG home := os.Getenv("NOTMUCH_CONFIG") if home == "" { home = os.Getenv("HOME") } - if cfg, err = config.ReadDefault(path.Join(home, ".notmuch-config")); err != nil { + cfg, err := goconfig.ReadConfigFile(path.Join(home, ".notmuch-config")) + if err != nil { log.Fatalf("error loading config file:", err) } - db_path, _ := cfg.String("database", "path") - primary_email, _ := cfg.String("user", "primary_email") - addrbook_tag, err := cfg.String("user", "addrbook_tag") + db_path, _ := cfg.GetString("database", "path") + primary_email, _ := cfg.GetString("user", "primary_email") + addrbook_tag, err := cfg.GetString("user", "addrbook_tag") if err != nil { addrbook_tag = "addressbook" } diff --git a/bindings/python/notmuch/database.py b/bindings/python/notmuch/database.py index fe692eb7..7ddf5cfe 100644 --- a/bindings/python/notmuch/database.py +++ b/bindings/python/notmuch/database.py @@ -188,7 +188,7 @@ class Database(object): "already has an open one.") db = NotmuchDatabaseP() - status = Database._create(_str(path), Database.MODE.READ_WRITE, byref(db)) + status = Database._create(_str(path), byref(db)) if status != STATUS.SUCCESS: raise NotmuchError(status) diff --git a/bindings/python/notmuch/thread.py b/bindings/python/notmuch/thread.py index 009cb2bf..0454dbd4 100644 --- a/bindings/python/notmuch/thread.py +++ b/bindings/python/notmuch/thread.py @@ -128,11 +128,6 @@ class Thread(object): in the thread. It will only iterate over the messages in the thread which are not replies to other messages in the thread. - To iterate over all messages in the thread, the caller will need to - iterate over the result of :meth:`Message.get_replies` for each - top-level message (and do that recursively for the resulting - messages, etc.). - :returns: :class:`Messages` :raises: :exc:`NotInitializedError` if query is not initialized :raises: :exc:`NullPointerError` if search_messages failed @@ -147,6 +142,28 @@ class Thread(object): return Messages(msgs_p, self) + """notmuch_thread_get_messages""" + _get_messages = nmlib.notmuch_thread_get_messages + _get_messages.argtypes = [NotmuchThreadP] + _get_messages.restype = NotmuchMessagesP + + def get_messages(self): + """Returns a :class:`Messages` iterator for all messages in 'thread' + + :returns: :class:`Messages` + :raises: :exc:`NotInitializedError` if query is not initialized + :raises: :exc:`NullPointerError` if get_messages failed + """ + if not self._thread: + raise NotInitializedError() + + msgs_p = Thread._get_messages(self._thread) + + if not msgs_p: + raise NullPointerError() + + return Messages(msgs_p, self) + _get_matched_messages = nmlib.notmuch_thread_get_matched_messages _get_matched_messages.argtypes = [NotmuchThreadP] _get_matched_messages.restype = c_int diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h index fe81b3f9..5b44585a 100644 --- a/bindings/ruby/defs.h +++ b/bindings/ruby/defs.h @@ -262,6 +262,9 @@ VALUE notmuch_rb_thread_get_toplevel_messages (VALUE self); VALUE +notmuch_rb_thread_get_messages (VALUE self); + +VALUE notmuch_rb_thread_get_matched_messages (VALUE self); VALUE diff --git a/bindings/ruby/extconf.rb b/bindings/ruby/extconf.rb index 7b9750f2..6160db26 100644 --- a/bindings/ruby/extconf.rb +++ b/bindings/ruby/extconf.rb @@ -5,9 +5,26 @@ require 'mkmf' -# Notmuch Library -find_header('notmuch.h', '../../lib') -find_library('notmuch', 'notmuch_database_create', '../../lib') +dir = File.join('..', '..', 'lib') + +# includes +$INCFLAGS = "-I#{dir} #{$INCFLAGS}" + +# make sure there are no undefined symbols +$LDFLAGS += ' -Wl,--no-undefined' + +def have_local_library(lib, path, func, headers = nil) + checking_for checking_message(func, lib) do + lib = File.join(path, lib) + if try_func(func, lib, headers) + $LOCAL_LIBS += lib + end + end +end + +if not have_local_library('libnotmuch.so', dir, 'notmuch_database_create', 'notmuch.h') + exit 1 +end # Create Makefile dir_config('notmuch') diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c index f4931d34..663271d4 100644 --- a/bindings/ruby/init.c +++ b/bindings/ruby/init.c @@ -306,6 +306,7 @@ Init_notmuch (void) rb_define_method (notmuch_rb_cThread, "thread_id", notmuch_rb_thread_get_thread_id, 0); /* in thread.c */ rb_define_method (notmuch_rb_cThread, "total_messages", notmuch_rb_thread_get_total_messages, 0); /* in thread.c */ rb_define_method (notmuch_rb_cThread, "toplevel_messages", notmuch_rb_thread_get_toplevel_messages, 0); /* in thread.c */ + rb_define_method (notmuch_rb_cThread, "messages", notmuch_rb_thread_get_messages, 0); /* in thread.c */ rb_define_method (notmuch_rb_cThread, "matched_messages", notmuch_rb_thread_get_matched_messages, 0); /* in thread.c */ rb_define_method (notmuch_rb_cThread, "authors", notmuch_rb_thread_get_authors, 0); /* in thread.c */ rb_define_method (notmuch_rb_cThread, "subject", notmuch_rb_thread_get_subject, 0); /* in thread.c */ diff --git a/bindings/ruby/query.c b/bindings/ruby/query.c index e5ba1b7a..1658edee 100644 --- a/bindings/ruby/query.c +++ b/bindings/ruby/query.c @@ -180,5 +180,5 @@ notmuch_rb_query_count_messages (VALUE self) * (function may return 0 after printing a message) * Thus there is nothing we can do here... */ - return UINT2FIX(notmuch_query_count_messages(query)); + return UINT2NUM(notmuch_query_count_messages(query)); } diff --git a/bindings/ruby/thread.c b/bindings/ruby/thread.c index efe5aaf7..56616d9f 100644 --- a/bindings/ruby/thread.c +++ b/bindings/ruby/thread.c @@ -92,6 +92,26 @@ notmuch_rb_thread_get_toplevel_messages (VALUE self) } /* + * 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_Struct (notmuch_rb_cMessages, NULL, NULL, messages); +} + +/* * call-seq: THREAD.matched_messages => fixnum * * Get the number of messages in thread that matched the search |