* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "modest-debug.h"
#include "modest-ui-dimming-manager.h"
#include "modest-dimming-rules-group-priv.h"
typedef struct _ModestUIDimmingManagerPrivate ModestUIDimmingManagerPrivate;
struct _ModestUIDimmingManagerPrivate {
GHashTable *groups_map;
- GHashTable *delayed_calls;
};
#define MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
(GEqualFunc) g_str_equal,
(GDestroyNotify) g_free,
(GDestroyNotify) g_object_unref);
- priv->delayed_calls = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- NULL);
}
static void
priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(obj);
if (priv->groups_map != NULL)
- g_hash_table_unref (priv->groups_map);
-
- if (priv->delayed_calls != NULL)
- g_hash_table_unref (priv->delayed_calls);
+ g_hash_table_destroy (priv->groups_map);
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
g_hash_table_foreach (priv->groups_map, _process_all_rules, NULL);
}
-typedef struct
-{
- ModestDimmingRulesGroup *group;
- ModestUIDimmingManager *manager;
- gchar *name;
-} DelayedDimmingRules;
-
-static gboolean
-process_dimming_rules_delayed (gpointer data)
-{
- DelayedDimmingRules *helper = (DelayedDimmingRules *) data;
- gpointer timeout_handler;
- ModestUIDimmingManagerPrivate *priv;
-
- /* We remove the timeout here because the execute action could
- take too much time, and so this will be called again */
- priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(helper->manager);
- timeout_handler = g_hash_table_lookup (priv->delayed_calls, helper->name);
-
- MODEST_DEBUG_BLOCK(g_print ("---------------------HIT %d\n", GPOINTER_TO_INT (timeout_handler)););
-
- if (GPOINTER_TO_INT (timeout_handler) > 0) {
- g_source_remove (GPOINTER_TO_INT (timeout_handler));
- }
-
- modest_dimming_rules_group_execute (helper->group);
-
- return FALSE;
-}
-
-static void
-process_dimming_rules_delayed_destroyer (gpointer data)
-{
- DelayedDimmingRules *helper = (DelayedDimmingRules *) data;
- ModestUIDimmingManagerPrivate *priv;
-
- priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(helper->manager);
- g_hash_table_remove (priv->delayed_calls, helper->name);
- g_free (helper->name);
- g_slice_free (DelayedDimmingRules, helper);
-}
-
void
modest_ui_dimming_manager_process_dimming_rules_group (ModestUIDimmingManager *self,
const gchar *group_name)
{
ModestDimmingRulesGroup *group = NULL;
ModestUIDimmingManagerPrivate *priv;
- guint *handler, new_handler;
- DelayedDimmingRules *helper;
g_return_if_fail (group_name != NULL);
/* Search group by name */
group = MODEST_DIMMING_RULES_GROUP(g_hash_table_lookup (priv->groups_map, group_name));
g_return_if_fail (group != NULL);
-
- /* If there was another pending dimming operation check then ignore this */
- handler = g_hash_table_lookup (priv->delayed_calls, group_name);
- if (!handler) {
- /* Create the helper and start the timeout */
- helper = g_slice_new (DelayedDimmingRules);
- helper->group = group;
- helper->manager = self;
- helper->name = g_strdup (group_name);
- new_handler = g_timeout_add_full (G_PRIORITY_DEFAULT, 500, process_dimming_rules_delayed,
- helper, process_dimming_rules_delayed_destroyer);
- g_hash_table_insert (priv->delayed_calls, g_strdup (group_name), GINT_TO_POINTER (new_handler));
- MODEST_DEBUG_BLOCK(g_print ("---------------------Adding %d\n", new_handler););
- } else {
- MODEST_DEBUG_BLOCK(g_print ("---------------------Ignoring\n"););
- }
+
+ /* Performs group dimming rules checking */
+ modest_dimming_rules_group_execute (group);
}
gboolean all_seen = TRUE;
gboolean all_cached = TRUE;
gboolean all_has_attach = TRUE;
- TnyFolder *folder = NULL;
g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(window), NULL);
state->any_has_attachments = flags & TNY_HEADER_FLAG_ATTACHMENTS;
/* sent in progress */
- folder = tny_header_get_folder (header);
- if (folder) {
- if (modest_tny_folder_guess_folder_type (folder) == TNY_FOLDER_TYPE_OUTBOX) {
- msg_uid = modest_tny_send_queue_get_msg_id (header);
- if (!state->sent_in_progress) {
- cache_mgr = modest_runtime_get_cache_mgr ();
- send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
- MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
+ msg_uid = modest_tny_send_queue_get_msg_id (header);
+ if (!state->sent_in_progress) {
+ cache_mgr = modest_runtime_get_cache_mgr ();
+ send_queue_cache = modest_cache_mgr_get_cache (cache_mgr,
+ MODEST_CACHE_MGR_CACHE_TYPE_SEND_QUEUE);
- g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
-
- for (node = send_queues; node != NULL && !found; node = g_slist_next (node)) {
- send_queue = MODEST_TNY_SEND_QUEUE (node->data);
-
- /* Check if msg uid is being processed inside send queue */
- found = modest_tny_send_queue_msg_is_being_sent (send_queue, msg_uid);
- }
- state->sent_in_progress = found;
- }
+ g_hash_table_foreach (send_queue_cache, (GHFunc) fill_list_of_caches, &send_queues);
+
+ for (node = send_queues; node != NULL && !found; node = g_slist_next (node)) {
+ send_queue = MODEST_TNY_SEND_QUEUE (node->data);
+
+ /* Check if msg uid is being processed inside send queue */
+ found = modest_tny_send_queue_msg_is_being_sent (send_queue, msg_uid);
}
- g_object_unref (folder);
+ state->sent_in_progress = found;
}
+
tny_iterator_next (iter);
g_object_unref (header);
}