aboutsummaryrefslogtreecommitdiffstats
path: root/tests/commands.rs
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-23 12:18:44 +0200
committerDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-23 12:18:44 +0200
commit6813fbb5226acfa53e30f41564bb41c93d808656 (patch)
tree2df75b5b132b8bdb0f3224938c87cadeceeddc80 /tests/commands.rs
parentedf986b7888a97ad434f08c1900d5ae4356ec44a (diff)
downloadmail-6813fbb5226acfa53e30f41564bb41c93d808656.tar.gz
add scopeable version of message.freeze/thaw
Diffstat (limited to 'tests/commands.rs')
-rw-r--r--tests/commands.rs140
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/commands.rs b/tests/commands.rs
new file mode 100644
index 0000000..c9f9d60
--- /dev/null
+++ b/tests/commands.rs
@@ -0,0 +1,140 @@
+extern crate dirs;
+extern crate notmuch;
+extern crate supercow;
+
+use std::path::Path;
+use std::sync::Arc;
+use std::result::Result;
+use supercow::Supercow;
+use notmuch::ScopedSupercow;
+
+use notmuch::{
+ Database,
+ DatabaseExt,
+ Query,
+ QueryExt,
+ Message,
+ FrozenMessage,
+ Error
+};
+
+#[derive(Debug)]
+pub struct AtomicOperation<'d> {
+ database: ScopedSupercow<'d, Database>,
+}
+
+impl<'d> AtomicOperation<'d> {
+ pub fn new<D>(db: D) -> Result<Self, Error>
+ where
+ D: Into<ScopedSupercow<'d, Database>>,
+ {
+ let database = db.into();
+ database.begin_atomic()?;
+ Ok(AtomicOperation{
+ database
+ })
+ }
+}
+
+impl<'d> Drop for AtomicOperation<'d> {
+ fn drop(&mut self) {
+ let _ = self.database.end_atomic();
+ }
+}
+
+/// Add a single file to the database
+pub fn add_file<'d, D, P>(db: D, filename: &P) -> Result<Message<'d, Database>, Error>
+where
+ D: Into<ScopedSupercow<'d, Database>>,
+ P: AsRef<Path>
+{
+ let mut database = db.into();
+
+ let _atomic = AtomicOperation::new(Supercow::share(&mut database)).unwrap();
+
+ match <Database as DatabaseExt>::index_file(Supercow::share(&mut database), filename, None) {
+ Ok(msg) => {
+
+ // scoped version of freezing a message
+ {
+ let _fmsg = FrozenMessage::new(&msg);
+
+
+ }
+ Ok(msg)
+ },
+ Err(err) => {
+ Err(err)
+ }
+ }
+
+
+}
+
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_add_file() {
+
+
+
+ }
+}
+
+
+
+// status = notmuch_database_index_file (notmuch, filename, indexing_cli_choices.opts, &message);
+// switch (status) {
+// /* Success. */
+// case NOTMUCH_STATUS_SUCCESS:
+// state->added_messages++;
+// notmuch_message_freeze (message);
+// if (state->synchronize_flags)
+// notmuch_message_maildir_flags_to_tags (message);
+
+// for (tag = state->new_tags; *tag != NULL; tag++) {
+// if (strcmp ("unread", *tag) != 0 ||
+// ! notmuch_message_has_maildir_flag (message, 'S')) {
+// notmuch_message_add_tag (message, *tag);
+// }
+// }
+
+// notmuch_message_thaw (message);
+// break;
+// /* Non-fatal issues (go on to next file). */
+// case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID:
+// if (state->synchronize_flags)
+// notmuch_message_maildir_flags_to_tags (message);
+// break;
+// case NOTMUCH_STATUS_FILE_NOT_EMAIL:
+// fprintf (stderr, "Note: Ignoring non-mail file: %s\n", filename);
+// break;
+// case NOTMUCH_STATUS_FILE_ERROR:
+// /* Someone renamed/removed the file between scandir and now. */
+// state->vanished_files++;
+// fprintf (stderr, "Unexpected error with file %s\n", filename);
+// (void) print_status_database ("add_file", notmuch, status);
+// break;
+// /* Fatal issues. Don't process anymore. */
+// case NOTMUCH_STATUS_READ_ONLY_DATABASE:
+// case NOTMUCH_STATUS_XAPIAN_EXCEPTION:
+// case NOTMUCH_STATUS_OUT_OF_MEMORY:
+// (void) print_status_database ("add_file", notmuch, status);
+// goto DONE;
+// default:
+// INTERNAL_ERROR ("add_message returned unexpected value: %d", status);
+// goto DONE;
+// }
+
+// status = notmuch_database_end_atomic (notmuch);
+
+// DONE:
+// if (message)
+// notmuch_message_destroy (message);
+
+// return status;
+// }
+ \ No newline at end of file