- /* XXX: if possible, avoid fetching these in the first place */
- /* Skip tasks deleted or completed. */
- if (rtm_task_get_completed_date (rtm_task) ||
- rtm_task_get_deleted_date (rtm_task)) {
- continue;
+ id = rtm_task_get_id (rtm_task);
+ g_hash_table_insert (priv->tasks, g_strdup (id),
+ g_object_ref (rtm_task));
+
+ task_in_store = model_store_find_task (model, rtm_task, &iter);
+
+ /* Task is deleted or completed */
+ if (task_is_finished (rtm_task)) {
+ if (task_in_store) {
+ gtk_list_store_remove (priv->store, &iter);
+ }
+ /* Task has been changed */
+ } else if (task_in_store) {
+ GtkTreePath *path;
+
+ gtk_tree_model_get (
+ GTK_TREE_MODEL (priv->store), &iter,
+ MILK_TASK_MODEL_COLUMN_TASK, &task,
+ -1);
+
+ milk_task_set_title (task,
+ rtm_task_get_name (rtm_task));
+
+ path = gtk_tree_model_get_path (
+ GTK_TREE_MODEL (priv->store), &iter);
+ gtk_tree_model_row_changed (
+ GTK_TREE_MODEL (priv->store),
+ path, &iter);
+ gtk_tree_path_free (path);
+
+ g_object_unref (task);
+
+ /* Task is new */
+ } else {
+ /* FIXME: remove the MilkTask class; just use RtmTask
+ * directly */
+ task = milk_task_new (id, rtm_task_get_name (rtm_task),
+ /* FIXME: switch priority from int to
+ * string */
+ g_ascii_strtod (rtm_task_get_priority
+ (rtm_task), NULL));
+
+ gtk_list_store_append (priv->store, &iter);
+ gtk_list_store_set (
+ priv->store, &iter,
+ MILK_TASK_MODEL_COLUMN_TASK, task,
+ -1);