2 * mvs-tmdb-movie-service.c
4 * This file is part of maevies
5 * Copyright (C) 2010 Simón Pena <spenap@gmail.com>
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation; either version 3 of the
10 * License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
19 #include <dbus/dbus-glib-bindings.h>
21 #include "mvs-tmdb-movie-service.h"
22 #include "mvs-tmdb-image.h"
24 #define TMDB_MOVIE_SERVICE_OBJECT_PATH "/TMDBMovie"
25 #define TMDB_MOVIE_SERVICE_NAME "com.simonpena.maevies.tmdbmovie"
27 G_DEFINE_TYPE (MvsTmdbMovieService, mvs_tmdb_movie_service, G_TYPE_OBJECT)
35 #define GET_PRIVATE(o) \
36 (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_TMDB_MOVIE_SERVICE, MvsTmdbMovieServicePrivate))
38 struct _MvsTmdbMovieServicePrivate {
40 DBusGConnection *connection;
45 mvs_tmdb_movie_service_get_title (MvsTmdbMovieService *self, gchar **title,
48 *title = g_strdup (mvs_tmdb_movie_get_name (self->priv->movie));
49 return *title != NULL;
53 mvs_tmdb_movie_service_get_popularity (MvsTmdbMovieService *self, gchar **popularity,
56 *popularity = g_strdup (mvs_tmdb_movie_get_popularity (self->priv->movie));
57 return *popularity != NULL;
61 mvs_tmdb_movie_service_get_rating (MvsTmdbMovieService *self, gchar **rating)
63 *rating = g_strdup (mvs_tmdb_movie_get_rating (self->priv->movie));
64 return *rating != NULL;
68 mvs_tmdb_movie_service_get_released (MvsTmdbMovieService *self, gchar **released)
70 *released = g_strdup (mvs_tmdb_movie_get_released (self->priv->movie));
71 return *released != NULL;
75 mvs_tmdb_movie_service_get_overview (MvsTmdbMovieService *self, gchar **overview)
77 *overview = g_strdup (mvs_tmdb_movie_get_overview (self->priv->movie));
78 return *overview != NULL;
82 mvs_tmdb_movie_service_get_images (MvsTmdbMovieService *self, GPtrArray **image_array, GError **error)
85 *image_array = g_ptr_array_new ();
87 GList *movie_images = mvs_tmdb_movie_get_images (self->priv->movie);
88 for (iter = movie_images; iter; iter = iter->next) {
90 GValueArray *image_properties = g_value_array_new (4);
91 MvsTmdbImage *movie_image = MVS_TMDB_IMAGE (iter->data);
94 g_value_init (&value, G_TYPE_STRING);
96 g_value_set_string (&value,
97 mvs_tmdb_image_get_imagetype (movie_image));
99 g_value_array_append (image_properties,
102 g_value_set_string (&value,
103 mvs_tmdb_image_get_url (movie_image));
105 g_value_array_append (image_properties,
108 g_value_set_string (&value,
109 mvs_tmdb_image_get_size (movie_image));
111 g_value_array_append (image_properties,
114 g_value_set_string (&value,
115 mvs_tmdb_image_get_id (movie_image));
117 g_value_array_append (image_properties,
120 g_ptr_array_add (*image_array, image_properties);
123 return image_array != NULL;
126 #include "mvs-tmdb-movie-service-glue.h"
129 setup_dbus (MvsTmdbMovieService *self)
132 guint request_name_result;
133 GError *error = NULL;
134 gchar *object_path = NULL;
136 proxy = dbus_g_proxy_new_for_name (self->priv->connection,
139 DBUS_INTERFACE_DBUS);
141 if (!org_freedesktop_DBus_request_name (proxy,
142 TMDB_MOVIE_SERVICE_NAME,
143 0, &request_name_result,
145 g_warning ("Unable to register service: %s", error->message);
146 g_error_free (error);
149 object_path = g_strdup_printf (TMDB_MOVIE_SERVICE_OBJECT_PATH "/%s",
152 dbus_g_connection_register_g_object (self->priv->connection,
156 g_free (object_path);
157 g_object_unref (proxy);
161 mvs_tmdb_movie_service_set_property (GObject *object, guint property_id,
162 const GValue *value, GParamSpec *pspec)
164 MvsTmdbMovieService *self = MVS_TMDB_MOVIE_SERVICE (object);
166 switch (property_id) {
168 if (!self->priv->connection) {
169 DBusGConnection *tmp = g_value_get_pointer (value);
171 self->priv->connection =
172 dbus_g_connection_ref (tmp);
176 g_assert (self->priv->connection);
179 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
184 mvs_tmdb_movie_service_finalize (GObject *object)
186 MvsTmdbMovieService *self = MVS_TMDB_MOVIE_SERVICE (object);
188 if (self->priv->connection) {
189 dbus_g_connection_unref (self->priv->connection);
191 g_free (self->priv->suffix);
192 g_object_unref (self->priv->movie);
193 G_OBJECT_CLASS (mvs_tmdb_movie_service_parent_class)->finalize (object);
197 mvs_tmdb_movie_service_class_init (MvsTmdbMovieServiceClass *klass)
199 GObjectClass *object_class = G_OBJECT_CLASS (klass);
201 g_type_class_add_private (klass, sizeof (MvsTmdbMovieServicePrivate));
203 object_class->set_property = mvs_tmdb_movie_service_set_property;
204 object_class->finalize = mvs_tmdb_movie_service_finalize;
206 g_object_class_install_property
207 (object_class, PROP_DBUSGCONN,
208 g_param_spec_pointer ("connection", "DBusGConnection",
212 dbus_g_object_type_install_info (MVS_TYPE_TMDB_MOVIE_SERVICE,
213 &dbus_glib_mvs_tmdb_movie_service_object_info);
217 mvs_tmdb_movie_service_init (MvsTmdbMovieService *self)
219 self->priv = GET_PRIVATE (self);
220 self->priv->movie = NULL;
221 self->priv->connection = NULL;
222 self->priv->suffix = NULL;
226 mvs_tmdb_movie_service_new (DBusGConnection *connection,
227 MvsTmdbMovie *movie, const gchar *suffix)
229 MvsTmdbMovieService *instance = g_object_new (MVS_TYPE_TMDB_MOVIE_SERVICE, NULL);
230 instance->priv->suffix = g_strdup(suffix);
231 g_object_set (instance, "connection", connection, NULL);
232 instance->priv->movie = movie;