/* list my signals */
enum {
QUEUE_CHANGED_SIGNAL,
+ QUEUE_EMPTY_SIGNAL,
NUM_SIGNALS
};
NULL, NULL,
modest_marshal_VOID__POINTER_INT,
G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_INT);
+
+ /**
+ * ModestMailOperationQueue::queue-empty
+ * @self: the #ModestMailOperationQueue that emits the signal
+ * @user_data: user data set when the signal handler was connected
+ *
+ * Issued whenever the queue is empty
+ */
+ signals[QUEUE_EMPTY_SIGNAL] =
+ g_signal_new ("queue-empty",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ModestMailOperationQueueClass, queue_empty),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
}
static void
* until the signal emission is complete. armin. */
/* modest_runtime_verify_object_last_ref (mail_op, ""); */
g_object_unref (G_OBJECT (mail_op));
+
+ /* Emit the queue empty-signal */
+ g_signal_emit (self, signals[QUEUE_EMPTY_SIGNAL], 0);
}
guint
g_slist_free(operations_to_cancel);
}
+
+typedef struct
+{
+ GSList **new_list;
+ GObject *source;
+} FindBySourceInfo;
+
+static void
+on_find_by_source_foreach (gpointer op, gpointer data)
+{
+ FindBySourceInfo *info = (FindBySourceInfo*) data;
+
+ if ( info->source == modest_mail_operation_get_source (MODEST_MAIL_OPERATION (op))) {
+ g_object_ref (G_OBJECT (op));
+ *(info->new_list) = g_slist_prepend (*(info->new_list), MODEST_MAIL_OPERATION (op));
+ }
+}
+
+GSList*
+modest_mail_operation_queue_get_by_source (
+ ModestMailOperationQueue *self,
+ GObject *source)
+{
+ ModestMailOperationQueuePrivate *priv;
+ GSList* found_operations= NULL;
+ FindBySourceInfo *info = g_new0 (FindBySourceInfo, 1);
+
+ g_return_val_if_fail (MODEST_IS_MAIL_OPERATION_QUEUE (self), NULL);
+ g_return_val_if_fail (source != NULL, NULL);
+
+ priv = MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(self);
+
+ info->new_list = &found_operations;
+ info->source = source;
+
+ g_mutex_lock (priv->queue_lock);
+ g_queue_foreach (priv->op_queue, (GFunc) on_find_by_source_foreach, info);
+ g_mutex_unlock (priv->queue_lock);
+
+ g_free (info);
+
+ return found_operations;
+}