static gboolean gw_info_set_flags (CamelMessageInfo *info, guint32 flags, guint32 set) { guint32 old; CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info; /* TODO: locking? */ old = mi->flags; /* we don't set flags which aren't appropriate for the folder*/ if ((set == (CAMEL_MESSAGE_JUNK|CAMEL_MESSAGE_JUNK_LEARN|CAMEL_MESSAGE_SEEN)) && (old & CAMEL_GW_MESSAGE_JUNK)) return FALSE; mi->flags = (old & ~flags) | (set & flags); if (old != mi->flags) { mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED; if (mi->summary) camel_folder_summary_touch(mi->summary); } /* This is a hack, we are using CAMEL_MESSAGE_JUNK justo to hide the item * we make sure this doesn't have any side effects*/ if ((set == CAMEL_MESSAGE_JUNK_LEARN) && (old & CAMEL_GW_MESSAGE_JUNK)) { mi->flags |= CAMEL_GW_MESSAGE_NOJUNK | CAMEL_MESSAGE_JUNK; /* This has ugly side-effects. Evo will never learn unjunk. We need to create one CAMEL_MESSAGE_HIDDEN flag which must be used for all hiding operations. We must also get rid of the seperate file that is maintained somewhere in evolution/mail/em-folder-browser.c for hidden messages */ if (mi->summary) { camel_folder_summary_touch(mi->summary); } } else if ((old & ~CAMEL_MESSAGE_SYSTEM_MASK) == (mi->flags & ~CAMEL_MESSAGE_SYSTEM_MASK)) return FALSE; if (mi->summary && mi->summary->folder && mi->uid) { CamelFolderChangeInfo *changes = camel_folder_change_info_new(); camel_folder_change_info_change_uid(changes, camel_message_info_uid(info)); camel_object_trigger_event(mi->summary->folder, "folder_changed", changes); camel_folder_change_info_free(changes); } return TRUE; }
static gboolean nntp_folder_synchronize_sync (CamelFolder *folder, gboolean expunge, GCancellable *cancellable, GError **error) { CamelFolderSummary *summary; GPtrArray *changed; if (expunge) { if (!camel_folder_expunge_sync (folder, cancellable, error)) return FALSE; } summary = folder->summary; changed = camel_folder_summary_get_changed (summary); if (changed != NULL) { g_ptr_array_foreach ( changed, (GFunc) unset_flagged_flag, summary); g_ptr_array_foreach ( changed, (GFunc) camel_pstring_free, NULL); camel_folder_summary_touch (summary); g_ptr_array_free (changed, TRUE); } return camel_folder_summary_save_to_db (summary, error); }
/** * camel_groupwise_summary_new: * @filename: the file to store the summary in. * * This will create a new CamelGroupwiseSummary object and read in the * summary data from disk, if it exists. * * Return value: A new CamelGroupwiseSummary object. **/ CamelFolderSummary * camel_groupwise_summary_new (struct _CamelFolder *folder, const char *filename) { CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY ( camel_object_new (camel_groupwise_summary_get_type ())); summary->folder = folder ; camel_folder_summary_set_build_content (summary, TRUE); camel_folder_summary_set_filename (summary, filename); if (camel_folder_summary_load (summary) == -1) { camel_folder_summary_clear (summary); camel_folder_summary_touch (summary); } return summary; }