From 6813fbb5226acfa53e30f41564bb41c93d808656 Mon Sep 17 00:00:00 2001 From: Dirk Van Haerenborgh Date: Wed, 23 Oct 2019 12:18:44 +0200 Subject: add scopeable version of message.freeze/thaw --- tests/commands.rs | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 tests/commands.rs (limited to 'tests/commands.rs') 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(db: D) -> Result + where + D: Into>, + { + 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, Error> +where + D: Into>, + P: AsRef +{ + let mut database = db.into(); + + let _atomic = AtomicOperation::new(Supercow::share(&mut database)).unwrap(); + + match ::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 -- cgit v1.2.1