def add_gmail_attrs(db_session, log, new_uid, flags, folder, g_thrid, g_msgid, g_labels, created): """ Gmail-specific post-create-message bits. """ # Disable autoflush so we don't try to flush a message with null # thread_id, causing a crash, and so that we don't flush on each # added/removed label. with db_session.no_autoflush: new_uid.message.g_msgid = g_msgid # NOTE: g_thrid == g_msgid on the first message in the thread :) new_uid.message.g_thrid = g_thrid new_uid.update_imap_flags(flags, g_labels) thread = new_uid.message.thread = ImapThread.from_gmail_message( db_session, new_uid.account.namespace, new_uid.message) # make sure this thread has all the correct labels new_labels = account.update_thread_labels(thread, folder.name, g_labels, db_session) # Reconciliation for Drafts, Sent Mail folders: if (('draft' in new_labels or 'sent' in new_labels) and not created and new_uid.message.inbox_uid): reconcile_message(db_session, log, new_uid.message.inbox_uid, new_uid.message) return new_uid
def add_gmail_attrs(db_session, log, new_uid, flags, folder, g_thrid, g_msgid, g_labels, created): """ Gmail-specific post-create-message bits. """ # Disable autoflush so we don't try to flush a message with null # thread_id, causing a crash, and so that we don't flush on each # added/removed label. with db_session.no_autoflush: new_uid.message.g_msgid = g_msgid # NOTE: g_thrid == g_msgid on the first message in the thread :) new_uid.message.g_thrid = g_thrid # we rely on Gmail's threading instead of our threading algorithm. new_uid.message.thread_order = 0 new_uid.update_imap_flags(flags, g_labels) thread = new_uid.message.thread = ImapThread.from_gmail_message( db_session, new_uid.account.namespace, new_uid.message) # make sure this thread has all the correct labels new_labels = account.update_thread_labels(thread, folder.name, g_labels, db_session) # Reconciliation for Drafts, Sent Mail folders: if (('draft' in new_labels or 'sent' in new_labels) and not created and new_uid.message.inbox_uid): reconcile_message(db_session, log, new_uid.message.inbox_uid, new_uid.message) return new_uid
def add_attrs(db_session, log, new_uid, flags, folder, created): """ Post-create-message bits.""" with db_session.no_autoflush: clean_subject = cleanup_subject(new_uid.message.subject) parent_threads = db_session.query(ImapThread).\ filter(ImapThread.subject.like(clean_subject)).all() if parent_threads == []: new_uid.message.thread = ImapThread.from_imap_message( db_session, new_uid.account.namespace, new_uid.message) new_uid.message.thread_order = 0 else: # FIXME: arbitrarily select the first thread. This shouldn't # be a problem now but it could become one if we choose # to implement thread-splitting. parent_thread = parent_threads[0] parent_thread.messages.append(new_uid.message) constructed_thread = thread_messages(parent_thread.messages) for index, message in enumerate(constructed_thread): message.thread_order = index # FIXME: refactor 'new_labels' name. This is generic IMAP, not # gmail. # make sure this thread has all the correct labels new_labels = account.update_thread_labels(new_uid.message.thread, folder.name, [folder.canonical_name], db_session) # Reconciliation for Drafts, Sent Mail folders: if (('draft' in new_labels or 'sent' in new_labels) and not created and new_uid.message.inbox_uid): reconcile_message(db_session, log, new_uid.message.inbox_uid, new_uid.message) new_uid.update_imap_flags(flags) return new_uid
def add_attrs(db_session, log, new_uid, flags, folder, created): """ Post-create-message bits.""" with db_session.no_autoflush: clean_subject = cleanup_subject(new_uid.message.subject) parent_threads = db_session.query(ImapThread).filter( ImapThread.subject.like(clean_subject)).all() if parent_threads == []: new_uid.message.thread = ImapThread.from_imap_message( db_session, new_uid.account.namespace, new_uid.message) new_uid.message.thread_order = 0 else: # FIXME: arbitrarily select the first thread. This shouldn't # be a problem now but it could become one if we choose # to implement thread-splitting. parent_thread = parent_threads[0] parent_thread.messages.append(new_uid.message) constructed_thread = thread_messages(parent_thread.messages) for index, message in enumerate(constructed_thread): message.thread_order = index # FIXME: refactor 'new_labels' name. This is generic IMAP, not # gmail. # make sure this thread has all the correct labels new_labels = account.update_thread_labels(new_uid.message.thread, folder.name, [folder.canonical_name], db_session) # Reconciliation for Drafts, Sent Mail folders: if (('draft' in new_labels or 'sent' in new_labels) and not created and new_uid.message.inbox_uid): reconcile_message(db_session, log, new_uid.message.inbox_uid, new_uid.message) new_uid.update_imap_flags(flags) return new_uid