*
* Returns: the summary item, or %NULL if the uid @uid is not available
*
+ * See camel_folder_summary_get_info_flags().
+ *
* Since: 3.4
**/
CamelMessageInfo *
return class->message_info_from_uid (summary, uid);
}
+/**
+ * camel_folder_summary_get_info_flags:
+ * @summary: a #CamelFolderSummary object
+ * @uid: a uid
+ *
+ * Retrieve CamelMessageInfo::flags for a message info with UID @uid.
+ * This is much quicker than camel_folder_summary_get(), because it
+ * doesn't require reading the message info from a disk.
+ *
+ * Returns: the flags currently stored for message info with UID @uid,
+ * or (~0) on error
+ *
+ * Since: 3.12
+ **/
+guint32
+camel_folder_summary_get_info_flags (CamelFolderSummary *summary,
+ const gchar *uid)
+{
+ gpointer ptr_uid = NULL, ptr_flags = NULL;
+
+ g_return_val_if_fail (CAMEL_IS_FOLDER_SUMMARY (summary), (~0));
+ g_return_val_if_fail (uid != NULL, (~0));
+
+ camel_folder_summary_lock (summary);
+ if (!g_hash_table_lookup_extended (summary->priv->uids, uid, &ptr_uid, &ptr_flags)) {
+ camel_folder_summary_unlock (summary);
+ return (~0);
+ }
+
+ camel_folder_summary_unlock (summary);
+
+ return GPOINTER_TO_UINT (ptr_flags);
+}
+
static CamelMessageContentInfo *
perform_content_info_load_from_db (CamelFolderSummary *summary,
CamelMIRecord *mir)
CamelMessageInfo *
camel_folder_summary_get (CamelFolderSummary *summary,
const gchar *uid);
+guint32 camel_folder_summary_get_info_flags
+ (CamelFolderSummary *summary,
+ const gchar *uid);
GPtrArray * camel_folder_summary_get_array (CamelFolderSummary *summary);
void camel_folder_summary_free_array (GPtrArray *array);
if (junk_filter != NULL)
g_object_ref (junk_filter);
+ /* Reset junk learn flag so that we don't process it again */
+ if (data->junk) {
+ for (i = 0; i < data->junk->len; i++) {
+ info = camel_folder_summary_get (data->folder->summary, data->junk->pdata[i]);
+ if (!info)
+ continue;
+
+ camel_message_info_set_flags (info, CAMEL_MESSAGE_JUNK_LEARN, 0);
+ camel_message_info_unref (info);
+ }
+ }
+
+ if (data->notjunk) {
+ for (i = 0; i < data->notjunk->len; i++) {
+ info = camel_folder_summary_get (data->folder->summary, data->notjunk->pdata[i]);
+ if (!info)
+ continue;
+
+ camel_message_info_set_flags (info, CAMEL_MESSAGE_JUNK_LEARN, 0);
+ camel_message_info_unref (info);
+ }
+ }
+
if (data->junk) {
gboolean success = TRUE;
CamelMessageFlags flags;
for (i = 0; i < info->uid_changed->len; i++) {
- flags = camel_folder_get_message_flags (folder, info->uid_changed->pdata[i]);
+ flags = camel_folder_summary_get_info_flags (folder->summary, info->uid_changed->pdata[i]);
if (flags & CAMEL_MESSAGE_JUNK_LEARN) {
if (flags & CAMEL_MESSAGE_JUNK) {
if (!junk)
notjunk = g_ptr_array_new ();
g_ptr_array_add (notjunk, g_strdup (info->uid_changed->pdata[i]));
}
- /* reset junk learn flag so that we don't process it again*/
- camel_folder_set_message_flags (
- folder, info->uid_changed->pdata[i],
- CAMEL_MESSAGE_JUNK_LEARN, 0);
+
+ /* the flag will be unset in the thread, to not block the UI/main thread */
}
}
}