static void nntp_folder_search_free (CamelFolder *folder, GPtrArray *result) { CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder); camel_folder_search_free_result (nntp_folder->search, result); }
static gboolean nntp_folder_refresh_info_sync (CamelFolder *folder, GCancellable *cancellable, GError **error) { CamelStore *parent_store; CamelNNTPStore *nntp_store; CamelFolderChangeInfo *changes = NULL; CamelNNTPFolder *nntp_folder; gchar *line; gboolean success; parent_store = camel_folder_get_parent_store (folder); nntp_folder = CAMEL_NNTP_FOLDER (folder); nntp_store = CAMEL_NNTP_STORE (parent_store); /* When invoked with no fmt, camel_nntp_command() just selects the folder * and should return zero. */ success = !camel_nntp_command ( nntp_store, cancellable, error, nntp_folder, &line, NULL); if (camel_folder_change_info_changed (nntp_folder->changes)) { changes = nntp_folder->changes; nntp_folder->changes = camel_folder_change_info_new (); } if (changes) { camel_folder_changed (folder, changes); camel_folder_change_info_free (changes); } return success; }
static void nntp_folder_finalize (GObject *object) { CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (object); g_mutex_clear (&nntp_folder->priv->search_lock); g_mutex_clear (&nntp_folder->priv->cache_lock); /* Chain up to parent's finalize() method. */ G_OBJECT_CLASS (camel_nntp_folder_parent_class)->finalize (object); }
static void nntp_folder_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { case PROP_APPLY_FILTERS: g_value_set_boolean ( value, nntp_folder_get_apply_filters ( CAMEL_NNTP_FOLDER (object))); return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); }
static GPtrArray* nntp_folder_search_by_expression (CamelFolder *folder, const char *expression, CamelException *ex) { CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder); GPtrArray *matches; CAMEL_NNTP_FOLDER_LOCK(nntp_folder, search_lock); if (nntp_folder->search == NULL) nntp_folder->search = camel_folder_search_new (); camel_folder_search_set_folder (nntp_folder->search, folder); matches = camel_folder_search_search(nntp_folder->search, expression, NULL, ex); CAMEL_NNTP_FOLDER_UNLOCK(nntp_folder, search_lock); return matches; }
static guint32 nntp_folder_count_by_expression (CamelFolder *folder, const gchar *expression, GCancellable *cancellable, GError **error) { CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder); guint32 count; CAMEL_NNTP_FOLDER_LOCK (nntp_folder, search_lock); if (nntp_folder->search == NULL) nntp_folder->search = camel_folder_search_new (); camel_folder_search_set_folder (nntp_folder->search, folder); count = camel_folder_search_count (nntp_folder->search, expression, cancellable, error); CAMEL_NNTP_FOLDER_UNLOCK (nntp_folder, search_lock); return count; }
static GPtrArray * nntp_folder_search_by_expression (CamelFolder *folder, const gchar *expression, GCancellable *cancellable, GError **error) { CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder); GPtrArray *matches; CAMEL_NNTP_FOLDER_LOCK (nntp_folder, search_lock); if (nntp_folder->search == NULL) nntp_folder->search = camel_folder_search_new (); camel_folder_search_set_folder (nntp_folder->search, folder); matches = camel_folder_search_search (nntp_folder->search, expression, NULL, cancellable, error); CAMEL_NNTP_FOLDER_UNLOCK (nntp_folder, search_lock); return matches; }
static CamelMimeMessage * nntp_folder_get_message_sync (CamelFolder *folder, const gchar *uid, GCancellable *cancellable, GError **error) { CamelStore *parent_store; CamelMimeMessage *message = NULL; CamelDataCache *nntp_cache; CamelNNTPStore *nntp_store; CamelFolderChangeInfo *changes; CamelNNTPFolder *nntp_folder; CamelStream *stream = NULL; GIOStream *base_stream; gchar *article, *msgid; gsize article_len; parent_store = camel_folder_get_parent_store (folder); nntp_folder = CAMEL_NNTP_FOLDER (folder); nntp_store = CAMEL_NNTP_STORE (parent_store); article_len = strlen (uid) + 1; article = alloca (article_len); g_strlcpy (article, uid, article_len); msgid = strchr (article, ','); if (msgid == NULL) { g_set_error ( error, CAMEL_ERROR, CAMEL_ERROR_GENERIC, _("Internal error: UID in invalid format: %s"), uid); return NULL; } *msgid++ = 0; /* Lookup in cache, NEWS is global messageid's so use a global cache path */ nntp_cache = camel_nntp_store_ref_cache (nntp_store); base_stream = camel_data_cache_get (nntp_cache, "cache", msgid, NULL); g_clear_object (&nntp_cache); if (base_stream != NULL) { stream = camel_stream_new (base_stream); g_object_unref (base_stream); } else { CamelServiceConnectionStatus connection_status; connection_status = camel_service_get_connection_status ( CAMEL_SERVICE (parent_store)); if (connection_status != CAMEL_SERVICE_CONNECTED) { g_set_error ( error, CAMEL_SERVICE_ERROR, CAMEL_SERVICE_ERROR_UNAVAILABLE, _("This message is not currently available")); goto fail; } stream = nntp_folder_download_message (nntp_folder, article, msgid, cancellable, error); if (stream == NULL) goto fail; } message = camel_mime_message_new (); if (!camel_data_wrapper_construct_from_stream_sync ((CamelDataWrapper *) message, stream, cancellable, error)) { g_prefix_error (error, _("Cannot get message %s: "), uid); g_object_unref (message); message = NULL; } g_object_unref (stream); fail: if (camel_folder_change_info_changed (nntp_folder->changes)) { changes = nntp_folder->changes; nntp_folder->changes = camel_folder_change_info_new (); } else { changes = NULL; } if (changes) { camel_folder_changed (folder, changes); camel_folder_change_info_free (changes); } return message; }