aboutsummaryrefslogtreecommitdiffhomepage
path: root/bindings
diff options
context:
space:
mode:
Diffstat (limited to 'bindings')
-rw-r--r--bindings/go/Makefile4
-rw-r--r--bindings/go/src/notmuch-addrlookup/addrlookup.go14
-rw-r--r--bindings/python/notmuch/database.py2
-rw-r--r--bindings/python/notmuch/thread.py27
-rw-r--r--bindings/ruby/defs.h3
-rw-r--r--bindings/ruby/extconf.rb23
-rw-r--r--bindings/ruby/init.c1
-rw-r--r--bindings/ruby/query.c2
-rw-r--r--bindings/ruby/thread.c20
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