From b5c303bdbd98e6d8a445f5cd01901f29050f4057 Mon Sep 17 00:00:00 2001 From: Travis Reitter Date: Mon, 16 Nov 2009 17:12:16 -0800 Subject: [PATCH] Base the task model around an auth object, so we can make the model reflect the server state. --- src/milk-auth.c | 2 +- src/milk-auth.h | 3 +- src/milk-main-window.c | 10 +--- src/milk-main.c | 3 - src/milk-task-model.c | 151 +++++++++++++++++++++++++++++++++--------------- src/milk-task-model.h | 6 +- 6 files changed, 115 insertions(+), 60 deletions(-) diff --git a/src/milk-auth.c b/src/milk-auth.c index 8f81131..4c60455 100644 --- a/src/milk-auth.c +++ b/src/milk-auth.c @@ -195,7 +195,7 @@ auth_response_cb_OUT: } void -milk_auth_run_demo (MilkAuth *auth) +milk_auth_log_in (MilkAuth *auth) { MilkAuthPrivate *priv; diff --git a/src/milk-auth.h b/src/milk-auth.h index 55caa36..4508a84 100644 --- a/src/milk-auth.h +++ b/src/milk-auth.h @@ -64,7 +64,6 @@ GType milk_auth_get_type (void); MilkAuth* milk_auth_get_default (void); -/* FIXME: cut this */ -void milk_auth_run_demo (MilkAuth* auth) ; +void milk_auth_log_in (MilkAuth* auth) ; #endif /* _MILK_AUTH_H */ diff --git a/src/milk-main-window.c b/src/milk-main-window.c index 06d435e..1d6901b 100644 --- a/src/milk-main-window.c +++ b/src/milk-main-window.c @@ -247,14 +247,9 @@ begin_auth_idle (MilkMainWindow *window) priv = MILK_MAIN_WINDOW_PRIVATE (window); - /* FIXME: is there a better place for this? */ - priv->auth = milk_auth_get_default (); - /* FIXME: plug this into the task model */ - /* FIXME: cut this */ g_debug ("trying to run the milk auth demo"); - /* FIXME: cut this */ - milk_auth_run_demo (priv->auth); + milk_auth_log_in (priv->auth); return FALSE; } @@ -288,7 +283,8 @@ milk_main_window_constructed (GObject* object) /* * Task List */ - model = GTK_TREE_MODEL (milk_task_model_new ()); + priv->auth = milk_auth_get_default (); + model = GTK_TREE_MODEL (milk_task_model_new (priv->auth)); w = hildon_touch_selector_new (); diff --git a/src/milk-main.c b/src/milk-main.c index 2de05ee..7b551e8 100644 --- a/src/milk-main.c +++ b/src/milk-main.c @@ -39,9 +39,6 @@ main (int argc, char *argv[]) memset (&app, 0, sizeof (app)); app.main_window = milk_main_window_get_default (); - /* FIXME: cut this */ - g_debug ("in main(), main window: %p", app.main_window); - gtk_widget_show_all (app.main_window); gtk_main (); diff --git a/src/milk-task-model.c b/src/milk-task-model.c index 5550537..9a69c6a 100644 --- a/src/milk-task-model.c +++ b/src/milk-task-model.c @@ -25,6 +25,7 @@ #include #include "milk-task-model.h" +#include "milk-auth.h" #include "milk-task.h" static void @@ -43,6 +44,11 @@ G_DEFINE_TYPE_EXTENDED (MilkTaskModel, struct _MilkTaskModelPrivate { GtkListStore *store; + MilkAuth *auth; +}; + +enum { + PROP_AUTH = 1, }; static GtkTreeModelFlags @@ -224,48 +230,7 @@ milk_task_model_iter_parent (GtkTreeModel *model, } static void -milk_task_model_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec) -{ - switch (property_id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, - pspec); - } -} - -static void -milk_task_model_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec) -{ - switch (property_id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, - pspec); - } -} - -static void -milk_task_model_dispose (GObject *object) -{ - MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object); - - if (priv->store) { - g_object_unref (priv->store); - priv->store = NULL; - } - - G_OBJECT_CLASS (milk_task_model_parent_class)->dispose (object); -} - -static void -milk_task_model_constructed (GObject* object) +populate_model (MilkTaskModel *model) { typedef struct { const char *id; @@ -282,10 +247,13 @@ milk_task_model_constructed (GObject* object) { "5", "Finalize Halloween costume", 3}, }; - MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object); + MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (model); GtkTreeIter iter; gint i; + /* FIXME: remove all existing rows */ + /* FIXME: use the tasks from the auth */ + /* Populate model */ for (i = 0; i < G_N_ELEMENTS (tasks); i++) { MilkTask *task; @@ -301,6 +269,87 @@ milk_task_model_constructed (GObject* object) } } +void +milk_task_model_set_auth (MilkTaskModel *model, + MilkAuth *auth) +{ + MilkTaskModelPrivate *priv; + + g_return_if_fail (model); + g_return_if_fail (MILK_IS_TASK_MODEL (model)); + g_return_if_fail (auth); + g_return_if_fail (MILK_IS_AUTH (auth)); + + priv = MILK_TASK_MODEL_PRIVATE (model); + + /* FIXME: cut this */ + g_debug ("authorizing and populating model with %p", auth); + + if (priv->auth) { + g_object_unref (priv->auth); + priv->auth = g_object_ref (auth); + } + + populate_model (model); +} + +static void +milk_task_model_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object); + + switch (property_id) + { + case PROP_AUTH: + g_value_set_object (value, priv->auth); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, + pspec); + } +} + +static void +milk_task_model_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) + { + case PROP_AUTH: + milk_task_model_set_auth (MILK_TASK_MODEL (object), + g_value_get_object (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, + pspec); + } +} + +static void +milk_task_model_dispose (GObject *object) +{ + MilkTaskModelPrivate *priv = MILK_TASK_MODEL_PRIVATE (object); + + if (priv->auth) { + g_object_unref (priv->auth); + priv->auth = NULL; + } + + if (priv->store) { + g_object_unref (priv->store); + priv->store = NULL; + } + + G_OBJECT_CLASS (milk_task_model_parent_class)->dispose (object); +} + static void milk_task_model_class_init (MilkTaskModelClass *klass) { @@ -310,8 +359,18 @@ milk_task_model_class_init (MilkTaskModelClass *klass) object_class->get_property = milk_task_model_get_property; object_class->set_property = milk_task_model_set_property; - object_class->constructed = milk_task_model_constructed; object_class->dispose = milk_task_model_dispose; + + g_object_class_install_property + (object_class, + PROP_AUTH, + g_param_spec_object + ("auth", + "Authentication proxy", + "Remember The Milk authentication proxy.", + MILK_TYPE_AUTH, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); } static void @@ -344,7 +403,7 @@ milk_task_model_tree_model_init (GtkTreeModelIface *iface) } MilkTaskModel* -milk_task_model_new () +milk_task_model_new (MilkAuth *auth) { - return g_object_new (MILK_TYPE_TASK_MODEL, NULL); + return g_object_new (MILK_TYPE_TASK_MODEL, "auth", auth, NULL); } diff --git a/src/milk-task-model.h b/src/milk-task-model.h index 1ce3a28..e48b75e 100644 --- a/src/milk-task-model.h +++ b/src/milk-task-model.h @@ -20,6 +20,8 @@ #ifndef _MILK_TASK_MODEL_H #define _MILK_TASK_MODEL_H +#include "milk-auth.h" + G_BEGIN_DECLS #define MILK_TYPE_TASK_MODEL milk_task_model_get_type() @@ -67,6 +69,8 @@ struct _MilkTaskModelClass GType milk_task_model_get_type (void); -MilkTaskModel* milk_task_model_new (void); +MilkTaskModel* milk_task_model_new (MilkAuth *auth); +void milk_task_model_set_auth (MilkTaskModel *model, MilkAuth *auth); + #endif /* _MILK_TASK_MODEL_H */ -- 1.7.9.5