1 From 5a91b6b6efdaf28a6640126a32e819aef7e10a74 Mon Sep 17 00:00:00 2001
2 From: Manuel Bachmann <manuel.bachmann@iot.bzh>
3 Date: Sun, 25 Oct 2015 14:21:28 +0100
4 Subject: [PATCH] lms: add C source files
6 C source files are normally generated by Vala at compile
7 time, but we do not use Vala for Rygel under OpenEmbedded
8 (because it requires GObject-Introspection support in
9 dependencies such as GUPnP, and that is still buggy).
11 A full tarball release would contain the C files anyway,
12 so let us include them so the build succeeds with OE.
14 Signed-off-by: Manuel Bachmann <manuel.bachmann@iot.bzh>
16 src/plugins/lms/librygel_lms_la_vala.stamp | 1 +
17 src/plugins/lms/rygel-lms-album.c | 514 +++++
18 src/plugins/lms/rygel-lms-albums.c | 569 +++++
19 src/plugins/lms/rygel-lms-all-images.c | 305 +++
20 src/plugins/lms/rygel-lms-all-music.c | 417 ++++
21 src/plugins/lms/rygel-lms-all-videos.c | 456 ++++
22 src/plugins/lms/rygel-lms-artist.c | 274 +++
23 src/plugins/lms/rygel-lms-artists.c | 214 ++
24 src/plugins/lms/rygel-lms-category-container.c | 2772 ++++++++++++++++++++++++
25 src/plugins/lms/rygel-lms-database.c | 1349 ++++++++++++
26 src/plugins/lms/rygel-lms-dbus-interfaces.c | 261 +++
27 src/plugins/lms/rygel-lms-image-root.c | 178 ++
28 src/plugins/lms/rygel-lms-image-year.c | 422 ++++
29 src/plugins/lms/rygel-lms-image-years.c | 196 ++
30 src/plugins/lms/rygel-lms-music-root.c | 202 ++
31 src/plugins/lms/rygel-lms-plugin-factory.c | 307 +++
32 src/plugins/lms/rygel-lms-plugin.c | 134 ++
33 src/plugins/lms/rygel-lms-root-container.c | 318 +++
34 src/plugins/lms/rygel-lms-sql-function.c | 146 ++
35 src/plugins/lms/rygel-lms-sql-operator.c | 240 ++
36 21 files changed, 9276 insertions(+), 1 deletion(-)
37 create mode 100644 src/plugins/lms/librygel_lms_la_vala.stamp
38 create mode 100644 src/plugins/lms/rygel-lms-album.c
39 create mode 100644 src/plugins/lms/rygel-lms-albums.c
40 create mode 100644 src/plugins/lms/rygel-lms-all-images.c
41 create mode 100644 src/plugins/lms/rygel-lms-all-music.c
42 create mode 100644 src/plugins/lms/rygel-lms-all-videos.c
43 create mode 100644 src/plugins/lms/rygel-lms-artist.c
44 create mode 100644 src/plugins/lms/rygel-lms-artists.c
45 create mode 100644 src/plugins/lms/rygel-lms-category-container.c
46 create mode 100644 src/plugins/lms/rygel-lms-database.c
47 create mode 100644 src/plugins/lms/rygel-lms-dbus-interfaces.c
48 create mode 100644 src/plugins/lms/rygel-lms-image-root.c
49 create mode 100644 src/plugins/lms/rygel-lms-image-year.c
50 create mode 100644 src/plugins/lms/rygel-lms-image-years.c
51 create mode 100644 src/plugins/lms/rygel-lms-music-root.c
52 create mode 100644 src/plugins/lms/rygel-lms-plugin-factory.c
53 create mode 100644 src/plugins/lms/rygel-lms-plugin.c
54 create mode 100644 src/plugins/lms/rygel-lms-root-container.c
55 create mode 100644 src/plugins/lms/rygel-lms-sql-function.c
56 create mode 100644 src/plugins/lms/rygel-lms-sql-operator.c
58 diff --git a/src/plugins/lms/librygel_lms_la_vala.stamp b/src/plugins/lms/librygel_lms_la_vala.stamp
60 index 0000000..859afb1
62 +++ b/src/plugins/lms/librygel_lms_la_vala.stamp
65 diff --git a/src/plugins/lms/rygel-lms-album.c b/src/plugins/lms/rygel-lms-album.c
67 index 0000000..9da60bc
69 +++ b/src/plugins/lms/rygel-lms-album.c
71 +/* rygel-lms-album.c generated by valac 0.28.0, the Vala compiler
72 + * generated from rygel-lms-album.vala, do not modify */
75 + * Copyright (C) 2013 Intel Corporation.
77 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
79 + * This file is part of Rygel.
81 + * Rygel is free software; you can redistribute it and/or modify
82 + * it under the terms of the GNU Lesser General Public License as published by
83 + * the Free Software Foundation; either version 2 of the License, or
84 + * (at your option) any later version.
86 + * Rygel is distributed in the hope that it will be useful,
87 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
88 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
89 + * GNU Lesser General Public License for more details.
91 + * You should have received a copy of the GNU Lesser General Public License
92 + * along with this program; if not, write to the Free Software Foundation,
93 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
97 +#include <glib-object.h>
98 +#include <rygel-server.h>
102 +#include <gio/gio.h>
105 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
106 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
107 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
108 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
109 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
110 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
112 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
113 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
114 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
116 +#define RYGEL_LMS_TYPE_ALBUM (rygel_lms_album_get_type ())
117 +#define RYGEL_LMS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbum))
118 +#define RYGEL_LMS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbumClass))
119 +#define RYGEL_LMS_IS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALBUM))
120 +#define RYGEL_LMS_IS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALBUM))
121 +#define RYGEL_LMS_ALBUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbumClass))
123 +typedef struct _RygelLMSAlbum RygelLMSAlbum;
124 +typedef struct _RygelLMSAlbumClass RygelLMSAlbumClass;
125 +typedef struct _RygelLMSAlbumPrivate RygelLMSAlbumPrivate;
126 +#define _g_free0(var) (var = (g_free (var), NULL))
127 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
129 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
130 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
131 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
132 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
133 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
134 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
136 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
137 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
139 +struct _RygelLMSCategoryContainer {
140 + RygelMediaContainer parent_instance;
141 + RygelLMSCategoryContainerPrivate * priv;
142 + sqlite3_stmt* stmt_all;
143 + sqlite3_stmt* stmt_find_object;
144 + sqlite3_stmt* stmt_added;
145 + sqlite3_stmt* stmt_removed;
146 + gchar* child_prefix;
150 +struct _RygelLMSCategoryContainerClass {
151 + RygelMediaContainerClass parent_class;
152 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
153 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
154 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
155 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
156 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
159 +struct _RygelLMSAlbum {
160 + RygelLMSCategoryContainer parent_instance;
161 + RygelLMSAlbumPrivate * priv;
164 +struct _RygelLMSAlbumClass {
165 + RygelLMSCategoryContainerClass parent_class;
169 +static gpointer rygel_lms_album_parent_class = NULL;
171 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
172 +GType rygel_lms_album_get_type (void) G_GNUC_CONST;
174 + RYGEL_LMS_ALBUM_DUMMY_PROPERTY
176 +#define RYGEL_LMS_ALBUM_SQL_ALL_TEMPLATE "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
177 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
178 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = %s " "LIMIT ? OFFSET ?;"
179 +#define RYGEL_LMS_ALBUM_SQL_COUNT_TEMPLATE "SELECT COUNT(audios.id) " "FROM audios, files " "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = %s;"
180 +#define RYGEL_LMS_ALBUM_SQL_COUNT_WITH_FILTER_TEMPLATE "SELECT COUNT(audios.id), audios.title as title, " "audio_artists.name as artist, " "audio_albums.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = %s;"
181 +#define RYGEL_LMS_ALBUM_SQL_FIND_OBJECT_TEMPLATE "SELECT files.id, files.path, files.size, " "audios.title, audios.trackno, audios.length, audios.channels, audios.s" \
182 +"ampling_rate, audios.bitrate, audios.dlna_profile, audios.dlna_mime, " "audio_artists.name, " "audio_albums.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "WHERE dtime = 0 AND files.id = ? AND audios.id = files.id AND audios.a" \
184 +#define RYGEL_LMS_ALBUM_SQL_ADDED_TEMPLATE "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
185 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
186 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = %s " "AND update_id > ? AND update_id <= ?;"
187 +#define RYGEL_LMS_ALBUM_SQL_REMOVED_TEMPLATE "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
188 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
189 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "WHERE dtime <> 0 AND audios.id = files.id AND audios.album_id = %s " "AND update_id > ? AND update_id <= ?;"
190 +static RygelMediaObject* rygel_lms_album_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
191 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id);
192 +gchar* rygel_lms_category_container_build_reference_id (RygelLMSCategoryContainer* self, gint db_id);
193 +static gchar* rygel_lms_album_get_sql_all (const gchar* db_id);
194 +static gchar* rygel_lms_album_get_sql_find_object (const gchar* db_id);
195 +static gchar* rygel_lms_album_get_sql_count (const gchar* db_id);
196 +static gchar* rygel_lms_album_get_sql_added (const gchar* db_id);
197 +static gchar* rygel_lms_album_get_sql_removed (const gchar* db_id);
198 +static gchar* rygel_lms_album_real_get_sql_all_with_filter (RygelLMSCategoryContainer* base, const gchar* filter);
199 +const gchar* rygel_lms_category_container_get_sql_all (RygelLMSCategoryContainer* self);
200 +const gchar* rygel_lms_category_container_get_db_id (RygelLMSCategoryContainer* self);
201 +static gchar* rygel_lms_album_real_get_sql_count_with_filter (RygelLMSCategoryContainer* base, const gchar* filter);
202 +const gchar* rygel_lms_category_container_get_sql_count (RygelLMSCategoryContainer* self);
203 +gpointer rygel_lms_database_ref (gpointer instance);
204 +void rygel_lms_database_unref (gpointer instance);
205 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
206 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
207 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
208 +gpointer rygel_lms_value_get_database (const GValue* value);
209 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
210 +RygelLMSAlbum* rygel_lms_album_new (const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
211 +RygelLMSAlbum* rygel_lms_album_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
212 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
215 +static RygelMediaObject* rygel_lms_album_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
216 + RygelLMSAlbum * self;
217 + RygelMediaObject* result = NULL;
219 + sqlite3_stmt* _tmp0_ = NULL;
221 + gchar* path = NULL;
222 + sqlite3_stmt* _tmp2_ = NULL;
223 + const gchar* _tmp3_ = NULL;
224 + gchar* _tmp4_ = NULL;
225 + gchar* mime_type = NULL;
226 + sqlite3_stmt* _tmp5_ = NULL;
227 + const gchar* _tmp6_ = NULL;
228 + gchar* _tmp7_ = NULL;
229 + gboolean _tmp8_ = FALSE;
230 + const gchar* _tmp9_ = NULL;
231 + gchar* title = NULL;
232 + sqlite3_stmt* _tmp15_ = NULL;
233 + const gchar* _tmp16_ = NULL;
234 + gchar* _tmp17_ = NULL;
235 + gchar* song_id = NULL;
237 + gchar* _tmp19_ = NULL;
238 + RygelMusicItem* song = NULL;
239 + RygelMusicItem* _tmp20_ = NULL;
241 + gchar* _tmp22_ = NULL;
242 + gchar* _tmp23_ = NULL;
243 + sqlite3_stmt* _tmp24_ = NULL;
245 + sqlite3_stmt* _tmp26_ = NULL;
247 + sqlite3_stmt* _tmp28_ = NULL;
249 + sqlite3_stmt* _tmp30_ = NULL;
251 + sqlite3_stmt* _tmp32_ = NULL;
253 + sqlite3_stmt* _tmp34_ = NULL;
255 + sqlite3_stmt* _tmp36_ = NULL;
256 + const gchar* _tmp37_ = NULL;
257 + const gchar* _tmp38_ = NULL;
258 + sqlite3_stmt* _tmp39_ = NULL;
259 + const gchar* _tmp40_ = NULL;
260 + sqlite3_stmt* _tmp41_ = NULL;
261 + const gchar* _tmp42_ = NULL;
262 + GFile* file = NULL;
263 + const gchar* _tmp43_ = NULL;
264 + GFile* _tmp44_ = NULL;
265 + gchar* _tmp45_ = NULL;
266 + gchar* _tmp46_ = NULL;
267 + self = (RygelLMSAlbum*) base;
268 + g_return_val_if_fail (statement != NULL, NULL);
269 + _tmp0_ = statement;
270 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
272 + _tmp2_ = statement;
273 + _tmp3_ = sqlite3_column_text (_tmp2_, 1);
274 + _tmp4_ = g_strdup (_tmp3_);
276 + _tmp5_ = statement;
277 + _tmp6_ = sqlite3_column_text (_tmp5_, 10);
278 + _tmp7_ = g_strdup (_tmp6_);
279 + mime_type = _tmp7_;
280 + _tmp9_ = mime_type;
281 + if (_tmp9_ == NULL) {
284 + const gchar* _tmp10_ = NULL;
287 + _tmp10_ = mime_type;
288 + _tmp11_ = strlen (_tmp10_);
290 + _tmp8_ = _tmp12_ == 0;
294 + const gchar* _tmp14_ = NULL;
297 + g_debug ("rygel-lms-album.vala:101: Music item %d (%s) has no MIME type", _tmp13_, _tmp14_);
299 + _tmp15_ = statement;
300 + _tmp16_ = sqlite3_column_text (_tmp15_, 3);
301 + _tmp17_ = g_strdup (_tmp16_);
304 + _tmp19_ = rygel_lms_category_container_build_child_id ((RygelLMSCategoryContainer*) self, _tmp18_);
306 + _tmp20_ = rygel_music_item_new (song_id, (RygelMediaContainer*) self, title, RYGEL_MUSIC_ITEM_UPNP_CLASS);
309 + _tmp22_ = rygel_lms_category_container_build_reference_id ((RygelLMSCategoryContainer*) self, _tmp21_);
311 + rygel_media_object_set_ref_id ((RygelMediaObject*) song, _tmp23_);
312 + _g_free0 (_tmp23_);
313 + _tmp24_ = statement;
314 + _tmp25_ = sqlite3_column_int (_tmp24_, 2);
315 + rygel_media_file_item_set_size ((RygelMediaFileItem*) song, (gint64) _tmp25_);
316 + _tmp26_ = statement;
317 + _tmp27_ = sqlite3_column_int (_tmp26_, 4);
318 + rygel_music_item_set_track_number (song, _tmp27_);
319 + _tmp28_ = statement;
320 + _tmp29_ = sqlite3_column_int (_tmp28_, 5);
321 + rygel_audio_item_set_duration ((RygelAudioItem*) song, (glong) _tmp29_);
322 + _tmp30_ = statement;
323 + _tmp31_ = sqlite3_column_int (_tmp30_, 6);
324 + rygel_audio_item_set_channels ((RygelAudioItem*) song, _tmp31_);
325 + _tmp32_ = statement;
326 + _tmp33_ = sqlite3_column_int (_tmp32_, 7);
327 + rygel_audio_item_set_sample_freq ((RygelAudioItem*) song, _tmp33_);
328 + _tmp34_ = statement;
329 + _tmp35_ = sqlite3_column_int (_tmp34_, 8);
330 + rygel_audio_item_set_bitrate ((RygelAudioItem*) song, _tmp35_);
331 + _tmp36_ = statement;
332 + _tmp37_ = sqlite3_column_text (_tmp36_, 9);
333 + rygel_media_file_item_set_dlna_profile ((RygelMediaFileItem*) song, _tmp37_);
334 + _tmp38_ = mime_type;
335 + rygel_media_file_item_set_mime_type ((RygelMediaFileItem*) song, _tmp38_);
336 + _tmp39_ = statement;
337 + _tmp40_ = sqlite3_column_text (_tmp39_, 11);
338 + rygel_media_object_set_artist ((RygelMediaObject*) song, _tmp40_);
339 + _tmp41_ = statement;
340 + _tmp42_ = sqlite3_column_text (_tmp41_, 12);
341 + rygel_audio_item_set_album ((RygelAudioItem*) song, _tmp42_);
343 + _tmp44_ = g_file_new_for_path (_tmp43_);
345 + _tmp45_ = g_file_get_uri (file);
347 + rygel_media_object_add_uri ((RygelMediaObject*) song, _tmp46_);
348 + _g_free0 (_tmp46_);
349 + result = (RygelMediaObject*) song;
350 + _g_object_unref0 (file);
351 + _g_free0 (song_id);
353 + _g_free0 (mime_type);
359 +static gchar* rygel_lms_album_get_sql_all (const gchar* db_id) {
360 + gchar* result = NULL;
361 + const gchar* _tmp0_ = NULL;
362 + gchar* _tmp1_ = NULL;
363 + g_return_val_if_fail (db_id != NULL, NULL);
365 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_ALL_TEMPLATE, _tmp0_);
371 +static gchar* rygel_lms_album_get_sql_find_object (const gchar* db_id) {
372 + gchar* result = NULL;
373 + const gchar* _tmp0_ = NULL;
374 + gchar* _tmp1_ = NULL;
375 + g_return_val_if_fail (db_id != NULL, NULL);
377 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_FIND_OBJECT_TEMPLATE, _tmp0_);
383 +static gchar* rygel_lms_album_get_sql_count (const gchar* db_id) {
384 + gchar* result = NULL;
385 + const gchar* _tmp0_ = NULL;
386 + gchar* _tmp1_ = NULL;
387 + g_return_val_if_fail (db_id != NULL, NULL);
389 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_COUNT_TEMPLATE, _tmp0_);
395 +static gchar* rygel_lms_album_get_sql_added (const gchar* db_id) {
396 + gchar* result = NULL;
397 + const gchar* _tmp0_ = NULL;
398 + gchar* _tmp1_ = NULL;
399 + g_return_val_if_fail (db_id != NULL, NULL);
401 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_ADDED_TEMPLATE, _tmp0_);
407 +static gchar* rygel_lms_album_get_sql_removed (const gchar* db_id) {
408 + gchar* result = NULL;
409 + const gchar* _tmp0_ = NULL;
410 + gchar* _tmp1_ = NULL;
411 + g_return_val_if_fail (db_id != NULL, NULL);
413 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_REMOVED_TEMPLATE, _tmp0_);
419 +static gchar* rygel_lms_album_real_get_sql_all_with_filter (RygelLMSCategoryContainer* base, const gchar* filter) {
420 + RygelLMSAlbum * self;
421 + gchar* result = NULL;
422 + const gchar* _tmp0_ = NULL;
425 + gchar* filter_str = NULL;
426 + const gchar* _tmp6_ = NULL;
427 + const gchar* _tmp7_ = NULL;
428 + const gchar* _tmp8_ = NULL;
429 + gchar* _tmp9_ = NULL;
430 + const gchar* _tmp10_ = NULL;
431 + gchar* _tmp11_ = NULL;
432 + self = (RygelLMSAlbum*) base;
433 + g_return_val_if_fail (filter != NULL, NULL);
435 + _tmp1_ = strlen (_tmp0_);
438 + const gchar* _tmp3_ = NULL;
439 + const gchar* _tmp4_ = NULL;
440 + gchar* _tmp5_ = NULL;
441 + _tmp3_ = rygel_lms_category_container_get_sql_all ((RygelLMSCategoryContainer*) self);
443 + _tmp5_ = g_strdup (_tmp4_);
447 + _tmp6_ = rygel_lms_category_container_get_db_id ((RygelLMSCategoryContainer*) self);
450 + _tmp9_ = g_strdup_printf ("%s AND %s", _tmp7_, _tmp8_);
451 + filter_str = _tmp9_;
452 + _tmp10_ = filter_str;
453 + _tmp11_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_ALL_TEMPLATE, _tmp10_);
455 + _g_free0 (filter_str);
460 +static gchar* rygel_lms_album_real_get_sql_count_with_filter (RygelLMSCategoryContainer* base, const gchar* filter) {
461 + RygelLMSAlbum * self;
462 + gchar* result = NULL;
463 + const gchar* _tmp0_ = NULL;
466 + gchar* filter_str = NULL;
467 + const gchar* _tmp6_ = NULL;
468 + const gchar* _tmp7_ = NULL;
469 + const gchar* _tmp8_ = NULL;
470 + gchar* _tmp9_ = NULL;
471 + const gchar* _tmp10_ = NULL;
472 + gchar* _tmp11_ = NULL;
473 + self = (RygelLMSAlbum*) base;
474 + g_return_val_if_fail (filter != NULL, NULL);
476 + _tmp1_ = strlen (_tmp0_);
479 + const gchar* _tmp3_ = NULL;
480 + const gchar* _tmp4_ = NULL;
481 + gchar* _tmp5_ = NULL;
482 + _tmp3_ = rygel_lms_category_container_get_sql_count ((RygelLMSCategoryContainer*) self);
484 + _tmp5_ = g_strdup (_tmp4_);
488 + _tmp6_ = rygel_lms_category_container_get_db_id ((RygelLMSCategoryContainer*) self);
491 + _tmp9_ = g_strdup_printf ("%s AND %s", _tmp7_, _tmp8_);
492 + filter_str = _tmp9_;
493 + _tmp10_ = filter_str;
494 + _tmp11_ = g_strdup_printf (RYGEL_LMS_ALBUM_SQL_COUNT_WITH_FILTER_TEMPLATE, _tmp10_);
496 + _g_free0 (filter_str);
501 +RygelLMSAlbum* rygel_lms_album_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
502 + RygelLMSAlbum * self = NULL;
503 + const gchar* _tmp0_ = NULL;
504 + RygelMediaContainer* _tmp1_ = NULL;
505 + const gchar* _tmp2_ = NULL;
506 + RygelLMSDatabase* _tmp3_ = NULL;
507 + const gchar* _tmp4_ = NULL;
508 + gchar* _tmp5_ = NULL;
509 + gchar* _tmp6_ = NULL;
510 + const gchar* _tmp7_ = NULL;
511 + gchar* _tmp8_ = NULL;
512 + gchar* _tmp9_ = NULL;
513 + const gchar* _tmp10_ = NULL;
514 + gchar* _tmp11_ = NULL;
515 + gchar* _tmp12_ = NULL;
516 + const gchar* _tmp13_ = NULL;
517 + gchar* _tmp14_ = NULL;
518 + gchar* _tmp15_ = NULL;
519 + const gchar* _tmp16_ = NULL;
520 + gchar* _tmp17_ = NULL;
521 + gchar* _tmp18_ = NULL;
522 + g_return_val_if_fail (db_id != NULL, NULL);
523 + g_return_val_if_fail (parent != NULL, NULL);
524 + g_return_val_if_fail (title != NULL, NULL);
525 + g_return_val_if_fail (lms_db != NULL, NULL);
531 + _tmp5_ = rygel_lms_album_get_sql_all (_tmp4_);
534 + _tmp8_ = rygel_lms_album_get_sql_find_object (_tmp7_);
537 + _tmp11_ = rygel_lms_album_get_sql_count (_tmp10_);
540 + _tmp14_ = rygel_lms_album_get_sql_added (_tmp13_);
543 + _tmp17_ = rygel_lms_album_get_sql_removed (_tmp16_);
545 + self = (RygelLMSAlbum*) rygel_lms_category_container_construct (object_type, _tmp0_, _tmp1_, _tmp2_, _tmp3_, _tmp6_, _tmp9_, _tmp12_, _tmp15_, _tmp18_);
546 + _g_free0 (_tmp18_);
547 + _g_free0 (_tmp15_);
548 + _g_free0 (_tmp12_);
555 +RygelLMSAlbum* rygel_lms_album_new (const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
556 + return rygel_lms_album_construct (RYGEL_LMS_TYPE_ALBUM, db_id, parent, title, lms_db);
560 +static void rygel_lms_album_class_init (RygelLMSAlbumClass * klass) {
561 + rygel_lms_album_parent_class = g_type_class_peek_parent (klass);
562 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_album_real_object_from_statement;
563 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_all_with_filter = rygel_lms_album_real_get_sql_all_with_filter;
564 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_count_with_filter = rygel_lms_album_real_get_sql_count_with_filter;
568 +static void rygel_lms_album_instance_init (RygelLMSAlbum * self) {
572 +GType rygel_lms_album_get_type (void) {
573 + static volatile gsize rygel_lms_album_type_id__volatile = 0;
574 + if (g_once_init_enter (&rygel_lms_album_type_id__volatile)) {
575 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSAlbumClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_album_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSAlbum), 0, (GInstanceInitFunc) rygel_lms_album_instance_init, NULL };
576 + GType rygel_lms_album_type_id;
577 + rygel_lms_album_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSAlbum", &g_define_type_info, 0);
578 + g_once_init_leave (&rygel_lms_album_type_id__volatile, rygel_lms_album_type_id);
580 + return rygel_lms_album_type_id__volatile;
585 diff --git a/src/plugins/lms/rygel-lms-albums.c b/src/plugins/lms/rygel-lms-albums.c
587 index 0000000..f9fabe7
589 +++ b/src/plugins/lms/rygel-lms-albums.c
591 +/* rygel-lms-albums.c generated by valac 0.28.0, the Vala compiler
592 + * generated from rygel-lms-albums.vala, do not modify */
595 + * Copyright (C) 2013 Intel Corporation.
597 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
599 + * This file is part of Rygel.
601 + * Rygel is free software; you can redistribute it and/or modify
602 + * it under the terms of the GNU Lesser General Public License as published by
603 + * the Free Software Foundation; either version 2 of the License, or
604 + * (at your option) any later version.
606 + * Rygel is distributed in the hope that it will be useful,
607 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
608 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
609 + * GNU Lesser General Public License for more details.
611 + * You should have received a copy of the GNU Lesser General Public License
612 + * along with this program; if not, write to the Free Software Foundation,
613 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
617 +#include <glib-object.h>
618 +#include <rygel-server.h>
619 +#include <sqlite3.h>
623 +#include <glib/gi18n-lib.h>
626 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
627 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
628 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
629 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
630 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
631 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
633 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
634 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
635 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
637 +#define RYGEL_LMS_TYPE_ALBUMS (rygel_lms_albums_get_type ())
638 +#define RYGEL_LMS_ALBUMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALBUMS, RygelLMSAlbums))
639 +#define RYGEL_LMS_ALBUMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALBUMS, RygelLMSAlbumsClass))
640 +#define RYGEL_LMS_IS_ALBUMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALBUMS))
641 +#define RYGEL_LMS_IS_ALBUMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALBUMS))
642 +#define RYGEL_LMS_ALBUMS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALBUMS, RygelLMSAlbumsClass))
644 +typedef struct _RygelLMSAlbums RygelLMSAlbums;
645 +typedef struct _RygelLMSAlbumsClass RygelLMSAlbumsClass;
646 +typedef struct _RygelLMSAlbumsPrivate RygelLMSAlbumsPrivate;
647 +#define _g_free0(var) (var = (g_free (var), NULL))
649 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
650 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
651 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
652 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
653 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
654 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
656 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
657 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
658 +#define _sqlite3_finalize0(var) ((var == NULL) ? NULL : (var = (sqlite3_finalize (var), NULL)))
659 +#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
660 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
662 +#define RYGEL_LMS_TYPE_ALBUM (rygel_lms_album_get_type ())
663 +#define RYGEL_LMS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbum))
664 +#define RYGEL_LMS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbumClass))
665 +#define RYGEL_LMS_IS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALBUM))
666 +#define RYGEL_LMS_IS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALBUM))
667 +#define RYGEL_LMS_ALBUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbumClass))
669 +typedef struct _RygelLMSAlbum RygelLMSAlbum;
670 +typedef struct _RygelLMSAlbumClass RygelLMSAlbumClass;
672 +struct _RygelLMSCategoryContainer {
673 + RygelMediaContainer parent_instance;
674 + RygelLMSCategoryContainerPrivate * priv;
675 + sqlite3_stmt* stmt_all;
676 + sqlite3_stmt* stmt_find_object;
677 + sqlite3_stmt* stmt_added;
678 + sqlite3_stmt* stmt_removed;
679 + gchar* child_prefix;
683 +struct _RygelLMSCategoryContainerClass {
684 + RygelMediaContainerClass parent_class;
685 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
686 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
687 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
688 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
689 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
692 +struct _RygelLMSAlbums {
693 + RygelLMSCategoryContainer parent_instance;
694 + RygelLMSAlbumsPrivate * priv;
697 +struct _RygelLMSAlbumsClass {
698 + RygelLMSCategoryContainerClass parent_class;
702 + RYGEL_LMS_DATABASE_ERROR_OPEN,
703 + RYGEL_LMS_DATABASE_ERROR_PREPARE,
704 + RYGEL_LMS_DATABASE_ERROR_BIND,
705 + RYGEL_LMS_DATABASE_ERROR_STEP,
706 + RYGEL_LMS_DATABASE_ERROR_NOT_FOUND
707 +} RygelLMSDatabaseError;
708 +#define RYGEL_LMS_DATABASE_ERROR rygel_lms_database_error_quark ()
710 +static gpointer rygel_lms_albums_parent_class = NULL;
712 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
713 +GType rygel_lms_albums_get_type (void) G_GNUC_CONST;
715 + RYGEL_LMS_ALBUMS_DUMMY_PROPERTY
717 +#define RYGEL_LMS_ALBUMS_SQL_ALL "SELECT audio_albums.id, audio_albums.name as title, " "audio_artists.name as artist " "FROM audio_albums " "LEFT JOIN audio_artists " "ON audio_albums.artist_id = audio_artists.id " "LIMIT ? OFFSET ?;"
718 +#define RYGEL_LMS_ALBUMS_SQL_ALL_WITH_FILTER_TEMPLATE "SELECT audio_albums.id, audio_albums.name as title, " "audio_artists.name as artist " "FROM audio_albums " "LEFT JOIN audio_artists " "ON audio_albums.artist_id = audio_artists.id " "WHERE %s " "LIMIT ? OFFSET ?;"
719 +#define RYGEL_LMS_ALBUMS_SQL_COUNT "SELECT COUNT(audio_albums.id) " "FROM audio_albums;"
720 +#define RYGEL_LMS_ALBUMS_SQL_COUNT_WITH_FILTER_TEMPLATE "SELECT COUNT(audio_albums.id), audio_albums.name as title, " "audio_artists.name as artist " "FROM audio_albums " "LEFT JOIN audio_artists " "ON audio_albums.artist_id = audio_artists.id " "WHERE %s;"
721 +#define RYGEL_LMS_ALBUMS_SQL_CHILD_COUNT_WITH_FILTER_TEMPLATE "SELECT COUNT(audios.id), audios.title as title, " "audio_artists.name as artist " "FROM audios, files, audio_albums " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = audio_a" \
723 +#define RYGEL_LMS_ALBUMS_SQL_CHILD_ALL_WITH_FILTER_TEMPLATE "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
724 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
725 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name, audio_albums.id " "FROM audios, files, audio_albums " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "WHERE dtime = 0 AND audios.id = files.id AND audios.album_id = audio_a" \
726 +"lbums.id %s " "LIMIT ? OFFSET ?;"
727 +#define RYGEL_LMS_ALBUMS_SQL_FIND_OBJECT "SELECT audio_albums.id, audio_albums.name " "FROM audio_albums " "WHERE audio_albums.id = ?;"
728 +static gchar* rygel_lms_albums_real_get_sql_all_with_filter (RygelLMSCategoryContainer* base, const gchar* filter);
729 +static gchar* rygel_lms_albums_real_get_sql_count_with_filter (RygelLMSCategoryContainer* base, const gchar* filter);
730 +static guint rygel_lms_albums_real_get_child_count_with_filter (RygelLMSCategoryContainer* base, const gchar* where_filter, GValueArray* args);
731 +guint rygel_lms_category_container_get_child_count_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
732 +gpointer rygel_lms_database_ref (gpointer instance);
733 +void rygel_lms_database_unref (gpointer instance);
734 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
735 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
736 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
737 +gpointer rygel_lms_value_get_database (const GValue* value);
738 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
739 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self);
740 +GQuark rygel_lms_database_error_quark (void);
741 +sqlite3_stmt* rygel_lms_database_prepare_and_init (RygelLMSDatabase* self, const gchar* query, GValue* arguments, int arguments_length1, GError** error);
742 +static RygelMediaObjects* rygel_lms_albums_real_get_children_with_filter (RygelLMSCategoryContainer* base, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
743 +RygelMediaObjects* rygel_lms_category_container_get_children_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
744 +gboolean rygel_lms_database_get_children_step (sqlite3_stmt* stmt, GError** error);
745 +GType rygel_lms_album_get_type (void) G_GNUC_CONST;
746 +RygelLMSAlbum* rygel_lms_album_new (const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
747 +RygelLMSAlbum* rygel_lms_album_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
748 +RygelMediaObject* rygel_lms_category_container_object_from_statement (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
749 +static RygelMediaObject* rygel_lms_albums_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
750 +RygelLMSAlbums* rygel_lms_albums_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
751 +RygelLMSAlbums* rygel_lms_albums_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
752 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
755 +static gchar* rygel_lms_albums_real_get_sql_all_with_filter (RygelLMSCategoryContainer* base, const gchar* filter) {
756 + RygelLMSAlbums * self;
757 + gchar* result = NULL;
758 + const gchar* _tmp0_ = NULL;
761 + const gchar* _tmp4_ = NULL;
762 + gchar* _tmp5_ = NULL;
763 + self = (RygelLMSAlbums*) base;
764 + g_return_val_if_fail (filter != NULL, NULL);
766 + _tmp1_ = strlen (_tmp0_);
769 + gchar* _tmp3_ = NULL;
770 + _tmp3_ = g_strdup (RYGEL_LMS_ALBUMS_SQL_ALL);
775 + _tmp5_ = g_strdup_printf (RYGEL_LMS_ALBUMS_SQL_ALL_WITH_FILTER_TEMPLATE, _tmp4_);
781 +static gchar* rygel_lms_albums_real_get_sql_count_with_filter (RygelLMSCategoryContainer* base, const gchar* filter) {
782 + RygelLMSAlbums * self;
783 + gchar* result = NULL;
784 + const gchar* _tmp0_ = NULL;
787 + const gchar* _tmp4_ = NULL;
788 + gchar* _tmp5_ = NULL;
789 + self = (RygelLMSAlbums*) base;
790 + g_return_val_if_fail (filter != NULL, NULL);
792 + _tmp1_ = strlen (_tmp0_);
795 + gchar* _tmp3_ = NULL;
796 + _tmp3_ = g_strdup (RYGEL_LMS_ALBUMS_SQL_COUNT);
801 + _tmp5_ = g_strdup_printf (RYGEL_LMS_ALBUMS_SQL_COUNT_WITH_FILTER_TEMPLATE, _tmp4_);
807 +static guint rygel_lms_albums_real_get_child_count_with_filter (RygelLMSCategoryContainer* base, const gchar* where_filter, GValueArray* args) {
808 + RygelLMSAlbums * self;
811 + const gchar* _tmp0_ = NULL;
812 + GValueArray* _tmp1_ = NULL;
814 + gchar* filter = NULL;
815 + gchar* _tmp3_ = NULL;
816 + const gchar* _tmp4_ = NULL;
819 + gchar* query = NULL;
820 + const gchar* _tmp9_ = NULL;
821 + gchar* _tmp10_ = NULL;
822 + GError * _inner_error_ = NULL;
823 + self = (RygelLMSAlbums*) base;
824 + g_return_val_if_fail (where_filter != NULL, 0U);
825 + g_return_val_if_fail (args != NULL, 0U);
826 + _tmp0_ = where_filter;
828 + _tmp2_ = RYGEL_LMS_CATEGORY_CONTAINER_CLASS (rygel_lms_albums_parent_class)->get_child_count_with_filter (G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer), _tmp0_, _tmp1_);
830 + _tmp3_ = g_strdup ("");
832 + _tmp4_ = where_filter;
833 + _tmp5_ = strlen (_tmp4_);
836 + const gchar* _tmp7_ = NULL;
837 + gchar* _tmp8_ = NULL;
838 + _tmp7_ = where_filter;
839 + _tmp8_ = g_strdup_printf ("AND %s", _tmp7_);
844 + _tmp10_ = g_strdup_printf (RYGEL_LMS_ALBUMS_SQL_CHILD_COUNT_WITH_FILTER_TEMPLATE, _tmp9_);
847 + sqlite3_stmt* stmt = NULL;
848 + RygelLMSDatabase* _tmp11_ = NULL;
849 + RygelLMSDatabase* _tmp12_ = NULL;
850 + GValueArray* _tmp13_ = NULL;
851 + GValue* _tmp14_ = NULL;
852 + gint _tmp14__length1 = 0;
853 + sqlite3_stmt* _tmp15_ = NULL;
855 + _tmp11_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
858 + _tmp14_ = _tmp13_->values;
859 + _tmp14__length1 = (gint) _tmp13_->n_values;
860 + _tmp15_ = rygel_lms_database_prepare_and_init (_tmp12_, query, _tmp14_, _tmp14__length1, &_inner_error_);
862 + if (G_UNLIKELY (_inner_error_ != NULL)) {
863 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
864 + goto __catch8_rygel_lms_database_error;
868 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
869 + g_clear_error (&_inner_error_);
872 + _tmp16_ = sqlite3_step (stmt);
873 + if (_tmp16_ == SQLITE_ROW) {
874 + guint _tmp17_ = 0U;
877 + _tmp18_ = sqlite3_column_int (stmt, 0);
878 + count = _tmp17_ + _tmp18_;
880 + _sqlite3_finalize0 (stmt);
883 + __catch8_rygel_lms_database_error:
886 + GError* _tmp19_ = NULL;
887 + const gchar* _tmp20_ = NULL;
889 + _inner_error_ = NULL;
891 + _tmp20_ = _tmp19_->message;
892 + g_warning ("rygel-lms-albums.vala:116: Query failed: %s", _tmp20_);
893 + _g_error_free0 (e);
896 + if (G_UNLIKELY (_inner_error_ != NULL)) {
899 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
900 + g_clear_error (&_inner_error_);
910 +static RygelMediaObjects* rygel_lms_albums_real_get_children_with_filter (RygelLMSCategoryContainer* base, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count) {
911 + RygelLMSAlbums * self;
912 + RygelMediaObjects* result = NULL;
913 + RygelMediaObjects* children = NULL;
914 + const gchar* _tmp0_ = NULL;
915 + GValueArray* _tmp1_ = NULL;
916 + const gchar* _tmp2_ = NULL;
919 + RygelMediaObjects* _tmp5_ = NULL;
920 + gchar* filter = NULL;
921 + gchar* _tmp6_ = NULL;
922 + const gchar* _tmp7_ = NULL;
925 + gchar* query = NULL;
926 + const gchar* _tmp12_ = NULL;
927 + gchar* _tmp13_ = NULL;
928 + GError * _inner_error_ = NULL;
929 + self = (RygelLMSAlbums*) base;
930 + g_return_val_if_fail (where_filter != NULL, NULL);
931 + g_return_val_if_fail (args != NULL, NULL);
932 + g_return_val_if_fail (sort_criteria != NULL, NULL);
933 + _tmp0_ = where_filter;
935 + _tmp2_ = sort_criteria;
937 + _tmp4_ = max_count;
938 + _tmp5_ = RYGEL_LMS_CATEGORY_CONTAINER_CLASS (rygel_lms_albums_parent_class)->get_children_with_filter (G_TYPE_CHECK_INSTANCE_CAST (self, RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer), _tmp0_, _tmp1_, _tmp2_, _tmp3_, _tmp4_);
940 + _tmp6_ = g_strdup ("");
942 + _tmp7_ = where_filter;
943 + _tmp8_ = strlen (_tmp7_);
946 + const gchar* _tmp10_ = NULL;
947 + gchar* _tmp11_ = NULL;
948 + _tmp10_ = where_filter;
949 + _tmp11_ = g_strdup_printf ("AND %s", _tmp10_);
954 + _tmp13_ = g_strdup_printf (RYGEL_LMS_ALBUMS_SQL_CHILD_ALL_WITH_FILTER_TEMPLATE, _tmp12_);
957 + sqlite3_stmt* stmt = NULL;
958 + RygelLMSDatabase* _tmp14_ = NULL;
959 + RygelLMSDatabase* _tmp15_ = NULL;
960 + const gchar* _tmp16_ = NULL;
961 + GValueArray* _tmp17_ = NULL;
962 + GValue* _tmp18_ = NULL;
963 + gint _tmp18__length1 = 0;
964 + sqlite3_stmt* _tmp19_ = NULL;
965 + _tmp14_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
969 + _tmp18_ = _tmp17_->values;
970 + _tmp18__length1 = (gint) _tmp17_->n_values;
971 + _tmp19_ = rygel_lms_database_prepare_and_init (_tmp15_, _tmp16_, _tmp18_, _tmp18__length1, &_inner_error_);
973 + if (G_UNLIKELY (_inner_error_ != NULL)) {
974 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
975 + goto __catch9_rygel_lms_database_error;
979 + _g_object_unref0 (children);
980 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
981 + g_clear_error (&_inner_error_);
985 + gboolean _tmp20_ = FALSE;
986 + sqlite3_stmt* _tmp21_ = NULL;
987 + gboolean _tmp22_ = FALSE;
988 + gchar* album_id = NULL;
989 + sqlite3_stmt* _tmp23_ = NULL;
990 + const gchar* _tmp24_ = NULL;
991 + gchar* _tmp25_ = NULL;
992 + RygelLMSAlbum* album = NULL;
993 + const gchar* _tmp26_ = NULL;
994 + RygelLMSDatabase* _tmp27_ = NULL;
995 + RygelLMSDatabase* _tmp28_ = NULL;
996 + RygelLMSAlbum* _tmp29_ = NULL;
997 + RygelMediaObject* song = NULL;
998 + RygelLMSAlbum* _tmp30_ = NULL;
999 + sqlite3_stmt* _tmp31_ = NULL;
1000 + RygelMediaObject* _tmp32_ = NULL;
1001 + RygelMediaObject* _tmp33_ = NULL;
1002 + RygelMediaObject* _tmp34_ = NULL;
1003 + RygelMediaContainer* _tmp35_ = NULL;
1004 + RygelMediaContainer* _tmp36_ = NULL;
1005 + RygelMediaObjects* _tmp37_ = NULL;
1006 + RygelMediaObject* _tmp38_ = NULL;
1008 + _tmp22_ = rygel_lms_database_get_children_step (_tmp21_, &_inner_error_);
1009 + _tmp20_ = _tmp22_;
1010 + if (G_UNLIKELY (_inner_error_ != NULL)) {
1011 + _sqlite3_finalize0 (stmt);
1012 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
1013 + goto __catch9_rygel_lms_database_error;
1015 + _sqlite3_finalize0 (stmt);
1017 + _g_free0 (filter);
1018 + _g_object_unref0 (children);
1019 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
1020 + g_clear_error (&_inner_error_);
1027 + _tmp24_ = sqlite3_column_text (_tmp23_, 13);
1028 + _tmp25_ = g_strdup (_tmp24_);
1029 + album_id = _tmp25_;
1030 + _tmp26_ = album_id;
1031 + _tmp27_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
1032 + _tmp28_ = _tmp27_;
1033 + _tmp29_ = rygel_lms_album_new (_tmp26_, (RygelMediaContainer*) self, "", _tmp28_);
1037 + _tmp32_ = rygel_lms_category_container_object_from_statement ((RygelLMSCategoryContainer*) _tmp30_, _tmp31_);
1041 + _tmp35_ = rygel_media_object_get_parent (_tmp34_);
1042 + _tmp36_ = _tmp35_;
1043 + rygel_media_object_set_parent_ref (_tmp33_, _tmp36_);
1044 + _tmp37_ = children;
1046 + gee_abstract_collection_add ((GeeAbstractCollection*) _tmp37_, _tmp38_);
1047 + _g_object_unref0 (song);
1048 + _g_object_unref0 (album);
1049 + _g_free0 (album_id);
1051 + _sqlite3_finalize0 (stmt);
1054 + __catch9_rygel_lms_database_error:
1057 + GError* _tmp39_ = NULL;
1058 + const gchar* _tmp40_ = NULL;
1059 + e = _inner_error_;
1060 + _inner_error_ = NULL;
1062 + _tmp40_ = _tmp39_->message;
1063 + g_warning ("rygel-lms-albums.vala:149: Query failed: %s", _tmp40_);
1064 + _g_error_free0 (e);
1067 + if (G_UNLIKELY (_inner_error_ != NULL)) {
1069 + _g_free0 (filter);
1070 + _g_object_unref0 (children);
1071 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
1072 + g_clear_error (&_inner_error_);
1075 + result = children;
1077 + _g_free0 (filter);
1082 +static RygelMediaObject* rygel_lms_albums_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
1083 + RygelLMSAlbums * self;
1084 + RygelMediaObject* result = NULL;
1086 + sqlite3_stmt* _tmp0_ = NULL;
1088 + gchar* _tmp2_ = NULL;
1089 + RygelLMSAlbum* album = NULL;
1090 + sqlite3_stmt* _tmp3_ = NULL;
1091 + const gchar* _tmp4_ = NULL;
1092 + RygelLMSDatabase* _tmp5_ = NULL;
1093 + RygelLMSDatabase* _tmp6_ = NULL;
1094 + RygelLMSAlbum* _tmp7_ = NULL;
1095 + self = (RygelLMSAlbums*) base;
1096 + g_return_val_if_fail (statement != NULL, NULL);
1097 + _tmp0_ = statement;
1098 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
1099 + _tmp2_ = g_strdup_printf ("%d", _tmp1_);
1101 + _tmp3_ = statement;
1102 + _tmp4_ = sqlite3_column_text (_tmp3_, 1);
1103 + _tmp5_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
1105 + _tmp7_ = rygel_lms_album_new (id, (RygelMediaContainer*) self, _tmp4_, _tmp6_);
1107 + result = (RygelMediaObject*) album;
1113 +RygelLMSAlbums* rygel_lms_albums_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
1114 + RygelLMSAlbums * self = NULL;
1115 + RygelMediaContainer* _tmp0_ = NULL;
1116 + const gchar* _tmp1_ = NULL;
1117 + RygelLMSDatabase* _tmp2_ = NULL;
1118 + g_return_val_if_fail (parent != NULL, NULL);
1119 + g_return_val_if_fail (lms_db != NULL, NULL);
1121 + _tmp1_ = _ ("Albums");
1123 + self = (RygelLMSAlbums*) rygel_lms_category_container_construct (object_type, "albums", _tmp0_, _tmp1_, _tmp2_, RYGEL_LMS_ALBUMS_SQL_ALL, RYGEL_LMS_ALBUMS_SQL_FIND_OBJECT, RYGEL_LMS_ALBUMS_SQL_COUNT, NULL, NULL);
1128 +RygelLMSAlbums* rygel_lms_albums_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
1129 + return rygel_lms_albums_construct (RYGEL_LMS_TYPE_ALBUMS, parent, lms_db);
1133 +static void rygel_lms_albums_class_init (RygelLMSAlbumsClass * klass) {
1134 + rygel_lms_albums_parent_class = g_type_class_peek_parent (klass);
1135 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_all_with_filter = rygel_lms_albums_real_get_sql_all_with_filter;
1136 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_count_with_filter = rygel_lms_albums_real_get_sql_count_with_filter;
1137 + ((RygelLMSCategoryContainerClass *) klass)->get_child_count_with_filter = rygel_lms_albums_real_get_child_count_with_filter;
1138 + ((RygelLMSCategoryContainerClass *) klass)->get_children_with_filter = rygel_lms_albums_real_get_children_with_filter;
1139 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_albums_real_object_from_statement;
1143 +static void rygel_lms_albums_instance_init (RygelLMSAlbums * self) {
1147 +GType rygel_lms_albums_get_type (void) {
1148 + static volatile gsize rygel_lms_albums_type_id__volatile = 0;
1149 + if (g_once_init_enter (&rygel_lms_albums_type_id__volatile)) {
1150 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSAlbumsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_albums_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSAlbums), 0, (GInstanceInitFunc) rygel_lms_albums_instance_init, NULL };
1151 + GType rygel_lms_albums_type_id;
1152 + rygel_lms_albums_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSAlbums", &g_define_type_info, 0);
1153 + g_once_init_leave (&rygel_lms_albums_type_id__volatile, rygel_lms_albums_type_id);
1155 + return rygel_lms_albums_type_id__volatile;
1160 diff --git a/src/plugins/lms/rygel-lms-all-images.c b/src/plugins/lms/rygel-lms-all-images.c
1161 new file mode 100644
1162 index 0000000..33fb8c1
1164 +++ b/src/plugins/lms/rygel-lms-all-images.c
1166 +/* rygel-lms-all-images.c generated by valac 0.28.0, the Vala compiler
1167 + * generated from rygel-lms-all-images.vala, do not modify */
1170 + * Copyright (C) 2013 Intel Corporation.
1172 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
1174 + * This file is part of Rygel.
1176 + * Rygel is free software; you can redistribute it and/or modify
1177 + * it under the terms of the GNU Lesser General Public License as published by
1178 + * the Free Software Foundation; either version 2 of the License, or
1179 + * (at your option) any later version.
1181 + * Rygel is distributed in the hope that it will be useful,
1182 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1183 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1184 + * GNU Lesser General Public License for more details.
1186 + * You should have received a copy of the GNU Lesser General Public License
1187 + * along with this program; if not, write to the Free Software Foundation,
1188 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1192 +#include <glib-object.h>
1193 +#include <rygel-server.h>
1194 +#include <sqlite3.h>
1195 +#include <stdlib.h>
1196 +#include <string.h>
1197 +#include <gio/gio.h>
1198 +#include <glib/gi18n-lib.h>
1201 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
1202 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
1203 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
1204 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
1205 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
1206 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
1208 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
1209 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
1210 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
1212 +#define RYGEL_LMS_TYPE_ALL_IMAGES (rygel_lms_all_images_get_type ())
1213 +#define RYGEL_LMS_ALL_IMAGES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALL_IMAGES, RygelLMSAllImages))
1214 +#define RYGEL_LMS_ALL_IMAGES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALL_IMAGES, RygelLMSAllImagesClass))
1215 +#define RYGEL_LMS_IS_ALL_IMAGES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALL_IMAGES))
1216 +#define RYGEL_LMS_IS_ALL_IMAGES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALL_IMAGES))
1217 +#define RYGEL_LMS_ALL_IMAGES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALL_IMAGES, RygelLMSAllImagesClass))
1219 +typedef struct _RygelLMSAllImages RygelLMSAllImages;
1220 +typedef struct _RygelLMSAllImagesClass RygelLMSAllImagesClass;
1221 +typedef struct _RygelLMSAllImagesPrivate RygelLMSAllImagesPrivate;
1222 +#define _g_free0(var) (var = (g_free (var), NULL))
1223 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
1225 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
1226 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
1227 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
1228 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
1229 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
1230 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
1232 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
1233 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
1235 +struct _RygelLMSCategoryContainer {
1236 + RygelMediaContainer parent_instance;
1237 + RygelLMSCategoryContainerPrivate * priv;
1238 + sqlite3_stmt* stmt_all;
1239 + sqlite3_stmt* stmt_find_object;
1240 + sqlite3_stmt* stmt_added;
1241 + sqlite3_stmt* stmt_removed;
1242 + gchar* child_prefix;
1243 + gchar* ref_prefix;
1246 +struct _RygelLMSCategoryContainerClass {
1247 + RygelMediaContainerClass parent_class;
1248 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
1249 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
1250 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
1251 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
1252 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
1255 +struct _RygelLMSAllImages {
1256 + RygelLMSCategoryContainer parent_instance;
1257 + RygelLMSAllImagesPrivate * priv;
1260 +struct _RygelLMSAllImagesClass {
1261 + RygelLMSCategoryContainerClass parent_class;
1265 +static gpointer rygel_lms_all_images_parent_class = NULL;
1267 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
1268 +GType rygel_lms_all_images_get_type (void) G_GNUC_CONST;
1270 + RYGEL_LMS_ALL_IMAGES_DUMMY_PROPERTY
1272 +#define RYGEL_LMS_ALL_IMAGES_SQL_ALL "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
1273 +"_profile, dlna_mime " "FROM images, files " "WHERE dtime = 0 AND images.id = files.id " "LIMIT ? OFFSET ?;"
1274 +#define RYGEL_LMS_ALL_IMAGES_SQL_COUNT "SELECT count(images.id) " "FROM images, files " "WHERE dtime = 0 AND images.id = files.id;"
1275 +#define RYGEL_LMS_ALL_IMAGES_SQL_FIND_OBJECT "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
1276 +"_profile, dlna_mime " "FROM images, files " "WHERE dtime = 0 AND files.id = ? AND images.id = files.id;"
1277 +#define RYGEL_LMS_ALL_IMAGES_SQL_ADDED "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
1278 +"_profile, dlna_mime " "FROM images, files " "WHERE dtime = 0 AND images.id = files.id " "AND update_id > ? AND update_id <= ?;"
1279 +#define RYGEL_LMS_ALL_IMAGES_SQL_REMOVED "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
1280 +"_profile, dlna_mime " "FROM images, files " "WHERE dtime <> 0 AND images.id = files.id " "AND update_id > ? AND update_id <= ?;"
1281 +static RygelMediaObject* rygel_lms_all_images_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
1282 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id);
1283 +gpointer rygel_lms_database_ref (gpointer instance);
1284 +void rygel_lms_database_unref (gpointer instance);
1285 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
1286 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
1287 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
1288 +gpointer rygel_lms_value_get_database (const GValue* value);
1289 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
1290 +RygelLMSAllImages* rygel_lms_all_images_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
1291 +RygelLMSAllImages* rygel_lms_all_images_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
1292 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
1295 +static RygelMediaObject* rygel_lms_all_images_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
1296 + RygelLMSAllImages * self;
1297 + RygelMediaObject* result = NULL;
1299 + sqlite3_stmt* _tmp0_ = NULL;
1301 + gchar* path = NULL;
1302 + sqlite3_stmt* _tmp2_ = NULL;
1303 + const gchar* _tmp3_ = NULL;
1304 + gchar* _tmp4_ = NULL;
1305 + gchar* mime_type = NULL;
1306 + sqlite3_stmt* _tmp5_ = NULL;
1307 + const gchar* _tmp6_ = NULL;
1308 + gchar* _tmp7_ = NULL;
1309 + gboolean _tmp8_ = FALSE;
1310 + const gchar* _tmp9_ = NULL;
1311 + gchar* title = NULL;
1312 + sqlite3_stmt* _tmp15_ = NULL;
1313 + const gchar* _tmp16_ = NULL;
1314 + gchar* _tmp17_ = NULL;
1315 + RygelImageItem* image = NULL;
1317 + gchar* _tmp19_ = NULL;
1318 + gchar* _tmp20_ = NULL;
1319 + RygelImageItem* _tmp21_ = NULL;
1320 + RygelImageItem* _tmp22_ = NULL;
1321 + sqlite3_stmt* _tmp23_ = NULL;
1322 + const gchar* _tmp24_ = NULL;
1323 + GTimeVal tv = {0};
1324 + sqlite3_stmt* _tmp25_ = NULL;
1326 + GTimeVal _tmp27_ = {0};
1327 + gchar* _tmp28_ = NULL;
1328 + gchar* _tmp29_ = NULL;
1329 + sqlite3_stmt* _tmp30_ = NULL;
1331 + sqlite3_stmt* _tmp32_ = NULL;
1333 + sqlite3_stmt* _tmp34_ = NULL;
1335 + const gchar* _tmp36_ = NULL;
1336 + sqlite3_stmt* _tmp37_ = NULL;
1337 + const gchar* _tmp38_ = NULL;
1338 + GFile* file = NULL;
1339 + const gchar* _tmp39_ = NULL;
1340 + GFile* _tmp40_ = NULL;
1341 + gchar* _tmp41_ = NULL;
1342 + gchar* _tmp42_ = NULL;
1343 + self = (RygelLMSAllImages*) base;
1344 + g_return_val_if_fail (statement != NULL, NULL);
1345 + _tmp0_ = statement;
1346 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
1348 + _tmp2_ = statement;
1349 + _tmp3_ = sqlite3_column_text (_tmp2_, 6);
1350 + _tmp4_ = g_strdup (_tmp3_);
1352 + _tmp5_ = statement;
1353 + _tmp6_ = sqlite3_column_text (_tmp5_, 9);
1354 + _tmp7_ = g_strdup (_tmp6_);
1355 + mime_type = _tmp7_;
1356 + _tmp9_ = mime_type;
1357 + if (_tmp9_ == NULL) {
1360 + const gchar* _tmp10_ = NULL;
1363 + _tmp10_ = mime_type;
1364 + _tmp11_ = strlen (_tmp10_);
1365 + _tmp12_ = _tmp11_;
1366 + _tmp8_ = _tmp12_ == 0;
1370 + const gchar* _tmp14_ = NULL;
1373 + g_debug ("rygel-lms-all-images.vala:62: Image item %d (%s) has no MIME type", _tmp13_, _tmp14_);
1375 + _tmp15_ = statement;
1376 + _tmp16_ = sqlite3_column_text (_tmp15_, 1);
1377 + _tmp17_ = g_strdup (_tmp16_);
1380 + _tmp19_ = rygel_lms_category_container_build_child_id ((RygelLMSCategoryContainer*) self, _tmp18_);
1381 + _tmp20_ = _tmp19_;
1382 + _tmp21_ = rygel_image_item_new (_tmp20_, (RygelMediaContainer*) self, title, RYGEL_IMAGE_ITEM_UPNP_CLASS);
1383 + _tmp22_ = _tmp21_;
1384 + _g_free0 (_tmp20_);
1386 + _tmp23_ = statement;
1387 + _tmp24_ = sqlite3_column_text (_tmp23_, 2);
1388 + rygel_media_object_set_creator ((RygelMediaObject*) image, _tmp24_);
1389 + _tmp25_ = statement;
1390 + _tmp26_ = sqlite3_column_int (_tmp25_, 3);
1391 + _tmp27_.tv_sec = (glong) _tmp26_;
1392 + _tmp27_.tv_usec = (glong) 0;
1394 + _tmp28_ = g_time_val_to_iso8601 (&tv);
1395 + _tmp29_ = _tmp28_;
1396 + rygel_media_object_set_date ((RygelMediaObject*) image, _tmp29_);
1397 + _g_free0 (_tmp29_);
1398 + _tmp30_ = statement;
1399 + _tmp31_ = sqlite3_column_int (_tmp30_, 4);
1400 + rygel_visual_item_set_width ((RygelVisualItem*) image, _tmp31_);
1401 + _tmp32_ = statement;
1402 + _tmp33_ = sqlite3_column_int (_tmp32_, 5);
1403 + rygel_visual_item_set_height ((RygelVisualItem*) image, _tmp33_);
1404 + _tmp34_ = statement;
1405 + _tmp35_ = sqlite3_column_int (_tmp34_, 7);
1406 + rygel_media_file_item_set_size ((RygelMediaFileItem*) image, (gint64) _tmp35_);
1407 + _tmp36_ = mime_type;
1408 + rygel_media_file_item_set_mime_type ((RygelMediaFileItem*) image, _tmp36_);
1409 + _tmp37_ = statement;
1410 + _tmp38_ = sqlite3_column_text (_tmp37_, 8);
1411 + rygel_media_file_item_set_dlna_profile ((RygelMediaFileItem*) image, _tmp38_);
1413 + _tmp40_ = g_file_new_for_path (_tmp39_);
1415 + _tmp41_ = g_file_get_uri (file);
1416 + _tmp42_ = _tmp41_;
1417 + rygel_media_object_add_uri ((RygelMediaObject*) image, _tmp42_);
1418 + _g_free0 (_tmp42_);
1419 + result = (RygelMediaObject*) image;
1420 + _g_object_unref0 (file);
1422 + _g_free0 (mime_type);
1428 +RygelLMSAllImages* rygel_lms_all_images_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
1429 + RygelLMSAllImages * self = NULL;
1430 + RygelMediaContainer* _tmp0_ = NULL;
1431 + const gchar* _tmp1_ = NULL;
1432 + RygelLMSDatabase* _tmp2_ = NULL;
1433 + g_return_val_if_fail (parent != NULL, NULL);
1434 + g_return_val_if_fail (lms_db != NULL, NULL);
1436 + _tmp1_ = _ ("All");
1438 + self = (RygelLMSAllImages*) rygel_lms_category_container_construct (object_type, "all", _tmp0_, _tmp1_, _tmp2_, RYGEL_LMS_ALL_IMAGES_SQL_ALL, RYGEL_LMS_ALL_IMAGES_SQL_FIND_OBJECT, RYGEL_LMS_ALL_IMAGES_SQL_COUNT, RYGEL_LMS_ALL_IMAGES_SQL_ADDED, RYGEL_LMS_ALL_IMAGES_SQL_REMOVED);
1443 +RygelLMSAllImages* rygel_lms_all_images_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
1444 + return rygel_lms_all_images_construct (RYGEL_LMS_TYPE_ALL_IMAGES, parent, lms_db);
1448 +static void rygel_lms_all_images_class_init (RygelLMSAllImagesClass * klass) {
1449 + rygel_lms_all_images_parent_class = g_type_class_peek_parent (klass);
1450 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_all_images_real_object_from_statement;
1454 +static void rygel_lms_all_images_instance_init (RygelLMSAllImages * self) {
1458 +GType rygel_lms_all_images_get_type (void) {
1459 + static volatile gsize rygel_lms_all_images_type_id__volatile = 0;
1460 + if (g_once_init_enter (&rygel_lms_all_images_type_id__volatile)) {
1461 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSAllImagesClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_all_images_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSAllImages), 0, (GInstanceInitFunc) rygel_lms_all_images_instance_init, NULL };
1462 + GType rygel_lms_all_images_type_id;
1463 + rygel_lms_all_images_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSAllImages", &g_define_type_info, 0);
1464 + g_once_init_leave (&rygel_lms_all_images_type_id__volatile, rygel_lms_all_images_type_id);
1466 + return rygel_lms_all_images_type_id__volatile;
1471 diff --git a/src/plugins/lms/rygel-lms-all-music.c b/src/plugins/lms/rygel-lms-all-music.c
1472 new file mode 100644
1473 index 0000000..ee6118f
1475 +++ b/src/plugins/lms/rygel-lms-all-music.c
1477 +/* rygel-lms-all-music.c generated by valac 0.28.0, the Vala compiler
1478 + * generated from rygel-lms-all-music.vala, do not modify */
1481 + * Copyright (C) 2013 Intel Corporation.
1483 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
1485 + * This file is part of Rygel.
1487 + * Rygel is free software; you can redistribute it and/or modify
1488 + * it under the terms of the GNU Lesser General Public License as published by
1489 + * the Free Software Foundation; either version 2 of the License, or
1490 + * (at your option) any later version.
1492 + * Rygel is distributed in the hope that it will be useful,
1493 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1494 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1495 + * GNU Lesser General Public License for more details.
1497 + * You should have received a copy of the GNU Lesser General Public License
1498 + * along with this program; if not, write to the Free Software Foundation,
1499 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1503 +#include <glib-object.h>
1504 +#include <rygel-server.h>
1505 +#include <sqlite3.h>
1506 +#include <stdlib.h>
1507 +#include <string.h>
1508 +#include <gio/gio.h>
1509 +#include <glib/gi18n-lib.h>
1512 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
1513 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
1514 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
1515 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
1516 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
1517 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
1519 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
1520 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
1521 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
1523 +#define RYGEL_LMS_TYPE_ALL_MUSIC (rygel_lms_all_music_get_type ())
1524 +#define RYGEL_LMS_ALL_MUSIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALL_MUSIC, RygelLMSAllMusic))
1525 +#define RYGEL_LMS_ALL_MUSIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALL_MUSIC, RygelLMSAllMusicClass))
1526 +#define RYGEL_LMS_IS_ALL_MUSIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALL_MUSIC))
1527 +#define RYGEL_LMS_IS_ALL_MUSIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALL_MUSIC))
1528 +#define RYGEL_LMS_ALL_MUSIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALL_MUSIC, RygelLMSAllMusicClass))
1530 +typedef struct _RygelLMSAllMusic RygelLMSAllMusic;
1531 +typedef struct _RygelLMSAllMusicClass RygelLMSAllMusicClass;
1532 +typedef struct _RygelLMSAllMusicPrivate RygelLMSAllMusicPrivate;
1533 +#define _g_free0(var) (var = (g_free (var), NULL))
1534 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
1536 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
1537 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
1538 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
1539 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
1540 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
1541 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
1543 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
1544 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
1546 +struct _RygelLMSCategoryContainer {
1547 + RygelMediaContainer parent_instance;
1548 + RygelLMSCategoryContainerPrivate * priv;
1549 + sqlite3_stmt* stmt_all;
1550 + sqlite3_stmt* stmt_find_object;
1551 + sqlite3_stmt* stmt_added;
1552 + sqlite3_stmt* stmt_removed;
1553 + gchar* child_prefix;
1554 + gchar* ref_prefix;
1557 +struct _RygelLMSCategoryContainerClass {
1558 + RygelMediaContainerClass parent_class;
1559 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
1560 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
1561 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
1562 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
1563 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
1566 +struct _RygelLMSAllMusic {
1567 + RygelLMSCategoryContainer parent_instance;
1568 + RygelLMSAllMusicPrivate * priv;
1571 +struct _RygelLMSAllMusicClass {
1572 + RygelLMSCategoryContainerClass parent_class;
1576 +static gpointer rygel_lms_all_music_parent_class = NULL;
1578 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
1579 +GType rygel_lms_all_music_get_type (void) G_GNUC_CONST;
1581 + RYGEL_LMS_ALL_MUSIC_DUMMY_PROPERTY
1583 +#define RYGEL_LMS_ALL_MUSIC_SQL_ALL_TEMPLATE "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
1584 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
1585 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name, " "files.mtime, " "audio_genres.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "LEFT JOIN audio_genres " "ON audios.genre_id = audio_genres.id " "WHERE dtime = 0 AND audios.id = files.id %s " "LIMIT ? OFFSET ?;"
1586 +#define RYGEL_LMS_ALL_MUSIC_SQL_COUNT "SELECT COUNT(audios.id) " "FROM audios, files " "WHERE dtime = 0 AND audios.id = files.id;"
1587 +#define RYGEL_LMS_ALL_MUSIC_SQL_COUNT_WITH_FILTER_TEMPLATE "SELECT COUNT(audios.id), audios.title as title, " "audio_artists.name as artist " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "WHERE dtime = 0 AND audios.id = files.id %s;"
1588 +#define RYGEL_LMS_ALL_MUSIC_SQL_FIND_OBJECT "SELECT files.id, files.path, files.size, " "audios.title, audios.trackno, audios.length, audios.channels, audios.s" \
1589 +"ampling_rate, audios.bitrate, audios.dlna_profile, audios.dlna_mime, " "audio_artists.name, " "audio_albums.name, " "files.mtime, " "audio_genres.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "LEFT JOIN audio_genres " "ON audios.genre_id = audio_genres.id " "WHERE dtime = 0 AND files.id = ? AND audios.id = files.id;"
1590 +#define RYGEL_LMS_ALL_MUSIC_SQL_ADDED "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
1591 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
1592 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name, " "files.mtime, " "audio_genres.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "LEFT JOIN audio_genres " "ON audios.genre_id = audio_genres.id " "WHERE dtime = 0 AND audios.id = files.id " "AND update_id > ? AND update_id <= ?;"
1593 +#define RYGEL_LMS_ALL_MUSIC_SQL_REMOVED "SELECT files.id, files.path, files.size, " "audios.title as title, audios.trackno, audios.length, audios.channels," \
1594 +" audios.sampling_rate, audios.bitrate, audios.dlna_profile, audios.dln" \
1595 +"a_mime, " "audio_artists.name as artist, " "audio_albums.name, " "files.mtime, " "audio_genres.name " "FROM audios, files " "LEFT JOIN audio_artists " "ON audios.artist_id = audio_artists.id " "LEFT JOIN audio_albums " "ON audios.album_id = audio_albums.id " "LEFT JOIN audio_genres " "ON audios.genre_id = audio_genres.id " "WHERE dtime <> 0 AND audios.id = files.id " "AND update_id > ? AND update_id <= ?;"
1596 +static gchar* rygel_lms_all_music_real_get_sql_all_with_filter (RygelLMSCategoryContainer* base, const gchar* filter);
1597 +const gchar* rygel_lms_category_container_get_sql_all (RygelLMSCategoryContainer* self);
1598 +static gchar* rygel_lms_all_music_real_get_sql_count_with_filter (RygelLMSCategoryContainer* base, const gchar* filter);
1599 +const gchar* rygel_lms_category_container_get_sql_count (RygelLMSCategoryContainer* self);
1600 +static RygelMediaObject* rygel_lms_all_music_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
1601 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id);
1602 +gpointer rygel_lms_database_ref (gpointer instance);
1603 +void rygel_lms_database_unref (gpointer instance);
1604 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
1605 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
1606 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
1607 +gpointer rygel_lms_value_get_database (const GValue* value);
1608 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
1609 +RygelLMSAllMusic* rygel_lms_all_music_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
1610 +RygelLMSAllMusic* rygel_lms_all_music_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
1611 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
1614 +static gchar* rygel_lms_all_music_real_get_sql_all_with_filter (RygelLMSCategoryContainer* base, const gchar* filter) {
1615 + RygelLMSAllMusic * self;
1616 + gchar* result = NULL;
1617 + const gchar* _tmp0_ = NULL;
1620 + gchar* filter_str = NULL;
1621 + const gchar* _tmp6_ = NULL;
1622 + gchar* _tmp7_ = NULL;
1623 + const gchar* _tmp8_ = NULL;
1624 + gchar* _tmp9_ = NULL;
1625 + self = (RygelLMSAllMusic*) base;
1626 + g_return_val_if_fail (filter != NULL, NULL);
1628 + _tmp1_ = strlen (_tmp0_);
1630 + if (_tmp2_ == 0) {
1631 + const gchar* _tmp3_ = NULL;
1632 + const gchar* _tmp4_ = NULL;
1633 + gchar* _tmp5_ = NULL;
1634 + _tmp3_ = rygel_lms_category_container_get_sql_all ((RygelLMSCategoryContainer*) self);
1636 + _tmp5_ = g_strdup (_tmp4_);
1641 + _tmp7_ = g_strdup_printf ("AND %s", _tmp6_);
1642 + filter_str = _tmp7_;
1643 + _tmp8_ = filter_str;
1644 + _tmp9_ = g_strdup_printf (RYGEL_LMS_ALL_MUSIC_SQL_ALL_TEMPLATE, _tmp8_);
1646 + _g_free0 (filter_str);
1651 +static gchar* rygel_lms_all_music_real_get_sql_count_with_filter (RygelLMSCategoryContainer* base, const gchar* filter) {
1652 + RygelLMSAllMusic * self;
1653 + gchar* result = NULL;
1654 + const gchar* _tmp0_ = NULL;
1657 + gchar* filter_str = NULL;
1658 + const gchar* _tmp6_ = NULL;
1659 + gchar* _tmp7_ = NULL;
1660 + const gchar* _tmp8_ = NULL;
1661 + gchar* _tmp9_ = NULL;
1662 + self = (RygelLMSAllMusic*) base;
1663 + g_return_val_if_fail (filter != NULL, NULL);
1665 + _tmp1_ = strlen (_tmp0_);
1667 + if (_tmp2_ == 0) {
1668 + const gchar* _tmp3_ = NULL;
1669 + const gchar* _tmp4_ = NULL;
1670 + gchar* _tmp5_ = NULL;
1671 + _tmp3_ = rygel_lms_category_container_get_sql_count ((RygelLMSCategoryContainer*) self);
1673 + _tmp5_ = g_strdup (_tmp4_);
1678 + _tmp7_ = g_strdup_printf ("AND %s", _tmp6_);
1679 + filter_str = _tmp7_;
1680 + _tmp8_ = filter_str;
1681 + _tmp9_ = g_strdup_printf (RYGEL_LMS_ALL_MUSIC_SQL_COUNT_WITH_FILTER_TEMPLATE, _tmp8_);
1683 + _g_free0 (filter_str);
1688 +static RygelMediaObject* rygel_lms_all_music_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
1689 + RygelLMSAllMusic * self;
1690 + RygelMediaObject* result = NULL;
1692 + sqlite3_stmt* _tmp0_ = NULL;
1694 + gchar* path = NULL;
1695 + sqlite3_stmt* _tmp2_ = NULL;
1696 + const gchar* _tmp3_ = NULL;
1697 + gchar* _tmp4_ = NULL;
1698 + gchar* mime_type = NULL;
1699 + sqlite3_stmt* _tmp5_ = NULL;
1700 + const gchar* _tmp6_ = NULL;
1701 + gchar* _tmp7_ = NULL;
1702 + gboolean _tmp8_ = FALSE;
1703 + const gchar* _tmp9_ = NULL;
1704 + gchar* title = NULL;
1705 + sqlite3_stmt* _tmp15_ = NULL;
1706 + const gchar* _tmp16_ = NULL;
1707 + gchar* _tmp17_ = NULL;
1708 + gchar* song_id = NULL;
1710 + gchar* _tmp19_ = NULL;
1711 + RygelMusicItem* song = NULL;
1712 + RygelMusicItem* _tmp20_ = NULL;
1713 + sqlite3_stmt* _tmp21_ = NULL;
1715 + sqlite3_stmt* _tmp23_ = NULL;
1717 + sqlite3_stmt* _tmp25_ = NULL;
1719 + sqlite3_stmt* _tmp27_ = NULL;
1721 + sqlite3_stmt* _tmp29_ = NULL;
1723 + sqlite3_stmt* _tmp31_ = NULL;
1725 + sqlite3_stmt* _tmp33_ = NULL;
1726 + const gchar* _tmp34_ = NULL;
1727 + const gchar* _tmp35_ = NULL;
1728 + sqlite3_stmt* _tmp36_ = NULL;
1729 + const gchar* _tmp37_ = NULL;
1730 + sqlite3_stmt* _tmp38_ = NULL;
1731 + const gchar* _tmp39_ = NULL;
1732 + GTimeVal tv = {0};
1733 + sqlite3_stmt* _tmp40_ = NULL;
1735 + GTimeVal _tmp42_ = {0};
1736 + gchar* _tmp43_ = NULL;
1737 + gchar* _tmp44_ = NULL;
1738 + sqlite3_stmt* _tmp45_ = NULL;
1739 + const gchar* _tmp46_ = NULL;
1740 + GFile* file = NULL;
1741 + const gchar* _tmp47_ = NULL;
1742 + GFile* _tmp48_ = NULL;
1743 + gchar* _tmp49_ = NULL;
1744 + gchar* _tmp50_ = NULL;
1745 + self = (RygelLMSAllMusic*) base;
1746 + g_return_val_if_fail (statement != NULL, NULL);
1747 + _tmp0_ = statement;
1748 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
1750 + _tmp2_ = statement;
1751 + _tmp3_ = sqlite3_column_text (_tmp2_, 1);
1752 + _tmp4_ = g_strdup (_tmp3_);
1754 + _tmp5_ = statement;
1755 + _tmp6_ = sqlite3_column_text (_tmp5_, 10);
1756 + _tmp7_ = g_strdup (_tmp6_);
1757 + mime_type = _tmp7_;
1758 + _tmp9_ = mime_type;
1759 + if (_tmp9_ == NULL) {
1762 + const gchar* _tmp10_ = NULL;
1765 + _tmp10_ = mime_type;
1766 + _tmp11_ = strlen (_tmp10_);
1767 + _tmp12_ = _tmp11_;
1768 + _tmp8_ = _tmp12_ == 0;
1772 + const gchar* _tmp14_ = NULL;
1775 + g_debug ("rygel-lms-all-music.vala:130: Music item %d (%s) has no MIME type", _tmp13_, _tmp14_);
1777 + _tmp15_ = statement;
1778 + _tmp16_ = sqlite3_column_text (_tmp15_, 3);
1779 + _tmp17_ = g_strdup (_tmp16_);
1782 + _tmp19_ = rygel_lms_category_container_build_child_id ((RygelLMSCategoryContainer*) self, _tmp18_);
1783 + song_id = _tmp19_;
1784 + _tmp20_ = rygel_music_item_new (song_id, (RygelMediaContainer*) self, title, RYGEL_MUSIC_ITEM_UPNP_CLASS);
1786 + _tmp21_ = statement;
1787 + _tmp22_ = sqlite3_column_int (_tmp21_, 2);
1788 + rygel_media_file_item_set_size ((RygelMediaFileItem*) song, (gint64) _tmp22_);
1789 + _tmp23_ = statement;
1790 + _tmp24_ = sqlite3_column_int (_tmp23_, 4);
1791 + rygel_music_item_set_track_number (song, _tmp24_);
1792 + _tmp25_ = statement;
1793 + _tmp26_ = sqlite3_column_int (_tmp25_, 5);
1794 + rygel_audio_item_set_duration ((RygelAudioItem*) song, (glong) _tmp26_);
1795 + _tmp27_ = statement;
1796 + _tmp28_ = sqlite3_column_int (_tmp27_, 6);
1797 + rygel_audio_item_set_channels ((RygelAudioItem*) song, _tmp28_);
1798 + _tmp29_ = statement;
1799 + _tmp30_ = sqlite3_column_int (_tmp29_, 7);
1800 + rygel_audio_item_set_sample_freq ((RygelAudioItem*) song, _tmp30_);
1801 + _tmp31_ = statement;
1802 + _tmp32_ = sqlite3_column_int (_tmp31_, 8);
1803 + rygel_audio_item_set_bitrate ((RygelAudioItem*) song, _tmp32_);
1804 + _tmp33_ = statement;
1805 + _tmp34_ = sqlite3_column_text (_tmp33_, 9);
1806 + rygel_media_file_item_set_dlna_profile ((RygelMediaFileItem*) song, _tmp34_);
1807 + _tmp35_ = mime_type;
1808 + rygel_media_file_item_set_mime_type ((RygelMediaFileItem*) song, _tmp35_);
1809 + _tmp36_ = statement;
1810 + _tmp37_ = sqlite3_column_text (_tmp36_, 11);
1811 + rygel_media_object_set_artist ((RygelMediaObject*) song, _tmp37_);
1812 + _tmp38_ = statement;
1813 + _tmp39_ = sqlite3_column_text (_tmp38_, 12);
1814 + rygel_audio_item_set_album ((RygelAudioItem*) song, _tmp39_);
1815 + _tmp40_ = statement;
1816 + _tmp41_ = sqlite3_column_int (_tmp40_, 13);
1817 + _tmp42_.tv_sec = (glong) _tmp41_;
1818 + _tmp42_.tv_usec = (glong) 0;
1820 + _tmp43_ = g_time_val_to_iso8601 (&tv);
1821 + _tmp44_ = _tmp43_;
1822 + rygel_media_object_set_date ((RygelMediaObject*) song, _tmp44_);
1823 + _g_free0 (_tmp44_);
1824 + _tmp45_ = statement;
1825 + _tmp46_ = sqlite3_column_text (_tmp45_, 14);
1826 + rygel_media_object_set_genre ((RygelMediaObject*) song, _tmp46_);
1828 + _tmp48_ = g_file_new_for_path (_tmp47_);
1830 + _tmp49_ = g_file_get_uri (file);
1831 + _tmp50_ = _tmp49_;
1832 + rygel_media_object_add_uri ((RygelMediaObject*) song, _tmp50_);
1833 + _g_free0 (_tmp50_);
1834 + result = (RygelMediaObject*) song;
1835 + _g_object_unref0 (file);
1836 + _g_free0 (song_id);
1838 + _g_free0 (mime_type);
1844 +RygelLMSAllMusic* rygel_lms_all_music_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
1845 + RygelLMSAllMusic * self = NULL;
1846 + RygelMediaContainer* _tmp0_ = NULL;
1847 + const gchar* _tmp1_ = NULL;
1848 + RygelLMSDatabase* _tmp2_ = NULL;
1849 + gchar* _tmp3_ = NULL;
1850 + gchar* _tmp4_ = NULL;
1851 + g_return_val_if_fail (parent != NULL, NULL);
1852 + g_return_val_if_fail (lms_db != NULL, NULL);
1854 + _tmp1_ = _ ("All");
1856 + _tmp3_ = g_strdup_printf (RYGEL_LMS_ALL_MUSIC_SQL_ALL_TEMPLATE, "");
1858 + self = (RygelLMSAllMusic*) rygel_lms_category_container_construct (object_type, "all", _tmp0_, _tmp1_, _tmp2_, _tmp4_, RYGEL_LMS_ALL_MUSIC_SQL_FIND_OBJECT, RYGEL_LMS_ALL_MUSIC_SQL_COUNT, RYGEL_LMS_ALL_MUSIC_SQL_ADDED, RYGEL_LMS_ALL_MUSIC_SQL_REMOVED);
1859 + _g_free0 (_tmp4_);
1864 +RygelLMSAllMusic* rygel_lms_all_music_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
1865 + return rygel_lms_all_music_construct (RYGEL_LMS_TYPE_ALL_MUSIC, parent, lms_db);
1869 +static void rygel_lms_all_music_class_init (RygelLMSAllMusicClass * klass) {
1870 + rygel_lms_all_music_parent_class = g_type_class_peek_parent (klass);
1871 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_all_with_filter = rygel_lms_all_music_real_get_sql_all_with_filter;
1872 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_count_with_filter = rygel_lms_all_music_real_get_sql_count_with_filter;
1873 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_all_music_real_object_from_statement;
1877 +static void rygel_lms_all_music_instance_init (RygelLMSAllMusic * self) {
1881 +GType rygel_lms_all_music_get_type (void) {
1882 + static volatile gsize rygel_lms_all_music_type_id__volatile = 0;
1883 + if (g_once_init_enter (&rygel_lms_all_music_type_id__volatile)) {
1884 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSAllMusicClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_all_music_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSAllMusic), 0, (GInstanceInitFunc) rygel_lms_all_music_instance_init, NULL };
1885 + GType rygel_lms_all_music_type_id;
1886 + rygel_lms_all_music_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSAllMusic", &g_define_type_info, 0);
1887 + g_once_init_leave (&rygel_lms_all_music_type_id__volatile, rygel_lms_all_music_type_id);
1889 + return rygel_lms_all_music_type_id__volatile;
1894 diff --git a/src/plugins/lms/rygel-lms-all-videos.c b/src/plugins/lms/rygel-lms-all-videos.c
1895 new file mode 100644
1896 index 0000000..51ba52c
1898 +++ b/src/plugins/lms/rygel-lms-all-videos.c
1900 +/* rygel-lms-all-videos.c generated by valac 0.28.0, the Vala compiler
1901 + * generated from rygel-lms-all-videos.vala, do not modify */
1904 + * Copyright (C) 2013 Intel Corporation.
1906 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
1908 + * This file is part of Rygel.
1910 + * Rygel is free software; you can redistribute it and/or modify
1911 + * it under the terms of the GNU Lesser General Public License as published by
1912 + * the Free Software Foundation; either version 2 of the License, or
1913 + * (at your option) any later version.
1915 + * Rygel is distributed in the hope that it will be useful,
1916 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1917 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1918 + * GNU Lesser General Public License for more details.
1920 + * You should have received a copy of the GNU Lesser General Public License
1921 + * along with this program; if not, write to the Free Software Foundation,
1922 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1926 +#include <glib-object.h>
1927 +#include <rygel-server.h>
1928 +#include <sqlite3.h>
1929 +#include <stdlib.h>
1930 +#include <string.h>
1931 +#include <gio/gio.h>
1934 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
1935 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
1936 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
1937 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
1938 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
1939 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
1941 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
1942 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
1943 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
1945 +#define RYGEL_LMS_TYPE_ALL_VIDEOS (rygel_lms_all_videos_get_type ())
1946 +#define RYGEL_LMS_ALL_VIDEOS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALL_VIDEOS, RygelLMSAllVideos))
1947 +#define RYGEL_LMS_ALL_VIDEOS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALL_VIDEOS, RygelLMSAllVideosClass))
1948 +#define RYGEL_LMS_IS_ALL_VIDEOS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALL_VIDEOS))
1949 +#define RYGEL_LMS_IS_ALL_VIDEOS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALL_VIDEOS))
1950 +#define RYGEL_LMS_ALL_VIDEOS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALL_VIDEOS, RygelLMSAllVideosClass))
1952 +typedef struct _RygelLMSAllVideos RygelLMSAllVideos;
1953 +typedef struct _RygelLMSAllVideosClass RygelLMSAllVideosClass;
1954 +typedef struct _RygelLMSAllVideosPrivate RygelLMSAllVideosPrivate;
1955 +#define _g_free0(var) (var = (g_free (var), NULL))
1957 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
1958 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
1959 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
1960 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
1961 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
1962 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
1964 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
1965 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
1966 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
1967 +#define _sqlite3_finalize0(var) ((var == NULL) ? NULL : (var = (sqlite3_finalize (var), NULL)))
1968 +#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
1970 +struct _RygelLMSCategoryContainer {
1971 + RygelMediaContainer parent_instance;
1972 + RygelLMSCategoryContainerPrivate * priv;
1973 + sqlite3_stmt* stmt_all;
1974 + sqlite3_stmt* stmt_find_object;
1975 + sqlite3_stmt* stmt_added;
1976 + sqlite3_stmt* stmt_removed;
1977 + gchar* child_prefix;
1978 + gchar* ref_prefix;
1981 +struct _RygelLMSCategoryContainerClass {
1982 + RygelMediaContainerClass parent_class;
1983 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
1984 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
1985 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
1986 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
1987 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
1990 +struct _RygelLMSAllVideos {
1991 + RygelLMSCategoryContainer parent_instance;
1992 + RygelLMSAllVideosPrivate * priv;
1995 +struct _RygelLMSAllVideosClass {
1996 + RygelLMSCategoryContainerClass parent_class;
2000 + RYGEL_LMS_DATABASE_ERROR_OPEN,
2001 + RYGEL_LMS_DATABASE_ERROR_PREPARE,
2002 + RYGEL_LMS_DATABASE_ERROR_BIND,
2003 + RYGEL_LMS_DATABASE_ERROR_STEP,
2004 + RYGEL_LMS_DATABASE_ERROR_NOT_FOUND
2005 +} RygelLMSDatabaseError;
2006 +#define RYGEL_LMS_DATABASE_ERROR rygel_lms_database_error_quark ()
2008 +static gpointer rygel_lms_all_videos_parent_class = NULL;
2010 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
2011 +GType rygel_lms_all_videos_get_type (void) G_GNUC_CONST;
2013 + RYGEL_LMS_ALL_VIDEOS_DUMMY_PROPERTY
2015 +#define RYGEL_LMS_ALL_VIDEOS_SQL_ALL "SELECT videos.id, title, artist, length, path, mtime, size, dlna_profi" \
2016 +"le, dlna_mime " "FROM videos, files " "WHERE dtime = 0 AND videos.id = files.id " "LIMIT ? OFFSET ?;"
2017 +#define RYGEL_LMS_ALL_VIDEOS_SQL_COUNT "SELECT count(videos.id) " "FROM videos, files " "WHERE dtime = 0 AND videos.id = files.id;"
2018 +#define RYGEL_LMS_ALL_VIDEOS_SQL_FIND_OBJECT "SELECT videos.id, title, artist, length, path, mtime, size, dlna_profi" \
2019 +"le, dlna_mime " "FROM videos, files " "WHERE dtime = 0 AND files.id = ? AND videos.id = files.id;"
2020 +#define RYGEL_LMS_ALL_VIDEOS_SQL_ADDED "SELECT videos.id, title, artist, length, path, mtime, size, dlna_profi" \
2021 +"le, dlna_mime " "FROM videos, files " "WHERE dtime = 0 AND videos.id = files.id " "AND update_id > ? AND update_id <= ?;"
2022 +#define RYGEL_LMS_ALL_VIDEOS_SQL_REMOVED "SELECT videos.id, title, artist, length, path, mtime, size, dlna_profi" \
2023 +"le, dlna_mime " "FROM videos, files " "WHERE dtime <> 0 AND videos.id = files.id " "AND update_id > ? AND update_id <= ?;"
2024 +static RygelMediaObject* rygel_lms_all_videos_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
2025 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id);
2026 +gpointer rygel_lms_database_ref (gpointer instance);
2027 +void rygel_lms_database_unref (gpointer instance);
2028 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
2029 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
2030 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
2031 +gpointer rygel_lms_value_get_database (const GValue* value);
2032 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
2033 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self);
2034 +GQuark rygel_lms_database_error_quark (void);
2035 +sqlite3_stmt* rygel_lms_database_prepare (RygelLMSDatabase* self, const gchar* query_string, GError** error);
2036 +void rygel_lms_database_find_object (const gchar* id, sqlite3_stmt* stmt, GError** error);
2037 +RygelLMSAllVideos* rygel_lms_all_videos_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2038 +RygelLMSAllVideos* rygel_lms_all_videos_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2039 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
2042 +static RygelMediaObject* rygel_lms_all_videos_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
2043 + RygelLMSAllVideos * self;
2044 + RygelMediaObject* result = NULL;
2046 + sqlite3_stmt* _tmp0_ = NULL;
2048 + gchar* mime_type = NULL;
2049 + sqlite3_stmt* _tmp2_ = NULL;
2050 + const gchar* _tmp3_ = NULL;
2051 + gchar* _tmp4_ = NULL;
2052 + gchar* path = NULL;
2053 + sqlite3_stmt* _tmp5_ = NULL;
2054 + const gchar* _tmp6_ = NULL;
2055 + gchar* _tmp7_ = NULL;
2056 + GFile* file = NULL;
2057 + const gchar* _tmp8_ = NULL;
2058 + GFile* _tmp9_ = NULL;
2059 + gboolean _tmp10_ = FALSE;
2060 + const gchar* _tmp11_ = NULL;
2061 + gchar* title = NULL;
2062 + sqlite3_stmt* _tmp17_ = NULL;
2063 + const gchar* _tmp18_ = NULL;
2064 + gchar* _tmp19_ = NULL;
2065 + RygelVideoItem* video = NULL;
2067 + gchar* _tmp21_ = NULL;
2068 + gchar* _tmp22_ = NULL;
2069 + const gchar* _tmp23_ = NULL;
2070 + RygelVideoItem* _tmp24_ = NULL;
2071 + RygelVideoItem* _tmp25_ = NULL;
2072 + RygelVideoItem* _tmp26_ = NULL;
2073 + sqlite3_stmt* _tmp27_ = NULL;
2074 + const gchar* _tmp28_ = NULL;
2075 + RygelVideoItem* _tmp29_ = NULL;
2076 + sqlite3_stmt* _tmp30_ = NULL;
2078 + GTimeVal tv = {0};
2079 + sqlite3_stmt* _tmp32_ = NULL;
2081 + GTimeVal _tmp34_ = {0};
2082 + RygelVideoItem* _tmp35_ = NULL;
2083 + gchar* _tmp36_ = NULL;
2084 + gchar* _tmp37_ = NULL;
2085 + RygelVideoItem* _tmp38_ = NULL;
2086 + sqlite3_stmt* _tmp39_ = NULL;
2088 + RygelVideoItem* _tmp41_ = NULL;
2089 + sqlite3_stmt* _tmp42_ = NULL;
2090 + const gchar* _tmp43_ = NULL;
2091 + RygelVideoItem* _tmp44_ = NULL;
2092 + const gchar* _tmp45_ = NULL;
2093 + RygelVideoItem* _tmp46_ = NULL;
2094 + GFile* _tmp47_ = NULL;
2095 + gchar* _tmp48_ = NULL;
2096 + gchar* _tmp49_ = NULL;
2097 + gchar* video_data = NULL;
2098 + gchar* _tmp50_ = NULL;
2099 + GError * _inner_error_ = NULL;
2100 + self = (RygelLMSAllVideos*) base;
2101 + g_return_val_if_fail (statement != NULL, NULL);
2102 + _tmp0_ = statement;
2103 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
2105 + _tmp2_ = statement;
2106 + _tmp3_ = sqlite3_column_text (_tmp2_, 8);
2107 + _tmp4_ = g_strdup (_tmp3_);
2108 + mime_type = _tmp4_;
2109 + _tmp5_ = statement;
2110 + _tmp6_ = sqlite3_column_text (_tmp5_, 4);
2111 + _tmp7_ = g_strdup (_tmp6_);
2114 + _tmp9_ = g_file_new_for_path (_tmp8_);
2116 + _tmp11_ = mime_type;
2117 + if (_tmp11_ == NULL) {
2120 + const gchar* _tmp12_ = NULL;
2123 + _tmp12_ = mime_type;
2124 + _tmp13_ = strlen (_tmp12_);
2125 + _tmp14_ = _tmp13_;
2126 + _tmp10_ = _tmp14_ == 0;
2130 + const gchar* _tmp16_ = NULL;
2133 + g_debug ("rygel-lms-all-videos.vala:75: Video item %d (%s) has no MIME type", _tmp15_, _tmp16_);
2135 + _tmp17_ = statement;
2136 + _tmp18_ = sqlite3_column_text (_tmp17_, 1);
2137 + _tmp19_ = g_strdup (_tmp18_);
2140 + _tmp21_ = rygel_lms_category_container_build_child_id ((RygelLMSCategoryContainer*) self, _tmp20_);
2141 + _tmp22_ = _tmp21_;
2143 + _tmp24_ = rygel_video_item_new (_tmp22_, (RygelMediaContainer*) self, _tmp23_, RYGEL_VIDEO_ITEM_UPNP_CLASS);
2144 + _tmp25_ = _tmp24_;
2145 + _g_free0 (_tmp22_);
2148 + _tmp27_ = statement;
2149 + _tmp28_ = sqlite3_column_text (_tmp27_, 2);
2150 + rygel_media_object_set_creator ((RygelMediaObject*) _tmp26_, _tmp28_);
2152 + _tmp30_ = statement;
2153 + _tmp31_ = sqlite3_column_int (_tmp30_, 3);
2154 + rygel_audio_item_set_duration ((RygelAudioItem*) _tmp29_, (glong) _tmp31_);
2155 + _tmp32_ = statement;
2156 + _tmp33_ = sqlite3_column_int (_tmp32_, 5);
2157 + _tmp34_.tv_sec = (glong) _tmp33_;
2158 + _tmp34_.tv_usec = (glong) 0;
2161 + _tmp36_ = g_time_val_to_iso8601 (&tv);
2162 + _tmp37_ = _tmp36_;
2163 + rygel_media_object_set_date ((RygelMediaObject*) _tmp35_, _tmp37_);
2164 + _g_free0 (_tmp37_);
2166 + _tmp39_ = statement;
2167 + _tmp40_ = sqlite3_column_int (_tmp39_, 6);
2168 + rygel_media_file_item_set_size ((RygelMediaFileItem*) _tmp38_, (gint64) _tmp40_);
2170 + _tmp42_ = statement;
2171 + _tmp43_ = sqlite3_column_text (_tmp42_, 7);
2172 + rygel_media_file_item_set_dlna_profile ((RygelMediaFileItem*) _tmp41_, _tmp43_);
2174 + _tmp45_ = mime_type;
2175 + rygel_media_file_item_set_mime_type ((RygelMediaFileItem*) _tmp44_, _tmp45_);
2178 + _tmp48_ = g_file_get_uri (_tmp47_);
2179 + _tmp49_ = _tmp48_;
2180 + rygel_media_object_add_uri ((RygelMediaObject*) _tmp46_, _tmp49_);
2181 + _g_free0 (_tmp49_);
2182 + _tmp50_ = g_strdup ("select videos_videos.bitrate + videos_audios.bitrate, width, height, c" \
2183 +"hannels, sampling_rate " "from videos, videos_audios, videos_videos where videos.id = ? " "and videos.id = videos_audios.video_id and videos.id = videos_videos.v" \
2185 + video_data = _tmp50_;
2187 + sqlite3_stmt* stmt = NULL;
2188 + RygelLMSDatabase* _tmp51_ = NULL;
2189 + RygelLMSDatabase* _tmp52_ = NULL;
2190 + const gchar* _tmp53_ = NULL;
2191 + sqlite3_stmt* _tmp54_ = NULL;
2193 + gchar* _tmp56_ = NULL;
2194 + gchar* _tmp57_ = NULL;
2195 + sqlite3_stmt* _tmp58_ = NULL;
2196 + RygelVideoItem* _tmp59_ = NULL;
2197 + sqlite3_stmt* _tmp60_ = NULL;
2199 + RygelVideoItem* _tmp62_ = NULL;
2200 + sqlite3_stmt* _tmp63_ = NULL;
2202 + RygelVideoItem* _tmp65_ = NULL;
2203 + sqlite3_stmt* _tmp66_ = NULL;
2205 + RygelVideoItem* _tmp68_ = NULL;
2206 + sqlite3_stmt* _tmp69_ = NULL;
2208 + RygelVideoItem* _tmp71_ = NULL;
2209 + sqlite3_stmt* _tmp72_ = NULL;
2211 + _tmp51_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
2212 + _tmp52_ = _tmp51_;
2213 + _tmp53_ = video_data;
2214 + _tmp54_ = rygel_lms_database_prepare (_tmp52_, _tmp53_, &_inner_error_);
2216 + if (G_UNLIKELY (_inner_error_ != NULL)) {
2217 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
2218 + goto __catch10_rygel_lms_database_error;
2220 + _g_free0 (video_data);
2221 + _g_object_unref0 (video);
2223 + _g_object_unref0 (file);
2225 + _g_free0 (mime_type);
2226 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
2227 + g_clear_error (&_inner_error_);
2231 + _tmp56_ = g_strdup_printf ("%d", _tmp55_);
2232 + _tmp57_ = _tmp56_;
2234 + rygel_lms_database_find_object (_tmp57_, _tmp58_, &_inner_error_);
2235 + _g_free0 (_tmp57_);
2236 + if (G_UNLIKELY (_inner_error_ != NULL)) {
2237 + _sqlite3_finalize0 (stmt);
2238 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
2239 + goto __catch10_rygel_lms_database_error;
2241 + _sqlite3_finalize0 (stmt);
2242 + _g_free0 (video_data);
2243 + _g_object_unref0 (video);
2245 + _g_object_unref0 (file);
2247 + _g_free0 (mime_type);
2248 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
2249 + g_clear_error (&_inner_error_);
2254 + _tmp61_ = sqlite3_column_int (_tmp60_, 0);
2255 + rygel_audio_item_set_bitrate ((RygelAudioItem*) _tmp59_, _tmp61_ / 8);
2258 + _tmp64_ = sqlite3_column_int (_tmp63_, 1);
2259 + rygel_visual_item_set_width ((RygelVisualItem*) _tmp62_, _tmp64_);
2262 + _tmp67_ = sqlite3_column_int (_tmp66_, 2);
2263 + rygel_visual_item_set_height ((RygelVisualItem*) _tmp65_, _tmp67_);
2266 + _tmp70_ = sqlite3_column_int (_tmp69_, 3);
2267 + rygel_audio_item_set_channels ((RygelAudioItem*) _tmp68_, _tmp70_);
2270 + _tmp73_ = sqlite3_column_int (_tmp72_, 4);
2271 + rygel_audio_item_set_sample_freq ((RygelAudioItem*) _tmp71_, _tmp73_);
2272 + _sqlite3_finalize0 (stmt);
2275 + __catch10_rygel_lms_database_error:
2278 + GError* _tmp74_ = NULL;
2279 + const gchar* _tmp75_ = NULL;
2280 + e = _inner_error_;
2281 + _inner_error_ = NULL;
2283 + _tmp75_ = _tmp74_->message;
2284 + g_warning ("rygel-lms-all-videos.vala:105: Query failed: %s", _tmp75_);
2285 + _g_error_free0 (e);
2288 + if (G_UNLIKELY (_inner_error_ != NULL)) {
2289 + _g_free0 (video_data);
2290 + _g_object_unref0 (video);
2292 + _g_object_unref0 (file);
2294 + _g_free0 (mime_type);
2295 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
2296 + g_clear_error (&_inner_error_);
2299 + result = (RygelMediaObject*) video;
2300 + _g_free0 (video_data);
2302 + _g_object_unref0 (file);
2304 + _g_free0 (mime_type);
2309 +RygelLMSAllVideos* rygel_lms_all_videos_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
2310 + RygelLMSAllVideos * self = NULL;
2311 + const gchar* _tmp0_ = NULL;
2312 + RygelMediaContainer* _tmp1_ = NULL;
2313 + const gchar* _tmp2_ = NULL;
2314 + RygelLMSDatabase* _tmp3_ = NULL;
2315 + g_return_val_if_fail (id != NULL, NULL);
2316 + g_return_val_if_fail (parent != NULL, NULL);
2317 + g_return_val_if_fail (title != NULL, NULL);
2318 + g_return_val_if_fail (lms_db != NULL, NULL);
2323 + self = (RygelLMSAllVideos*) rygel_lms_category_container_construct (object_type, _tmp0_, _tmp1_, _tmp2_, _tmp3_, RYGEL_LMS_ALL_VIDEOS_SQL_ALL, RYGEL_LMS_ALL_VIDEOS_SQL_FIND_OBJECT, RYGEL_LMS_ALL_VIDEOS_SQL_COUNT, RYGEL_LMS_ALL_VIDEOS_SQL_ADDED, RYGEL_LMS_ALL_VIDEOS_SQL_REMOVED);
2328 +RygelLMSAllVideos* rygel_lms_all_videos_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
2329 + return rygel_lms_all_videos_construct (RYGEL_LMS_TYPE_ALL_VIDEOS, id, parent, title, lms_db);
2333 +static void rygel_lms_all_videos_class_init (RygelLMSAllVideosClass * klass) {
2334 + rygel_lms_all_videos_parent_class = g_type_class_peek_parent (klass);
2335 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_all_videos_real_object_from_statement;
2339 +static void rygel_lms_all_videos_instance_init (RygelLMSAllVideos * self) {
2343 +GType rygel_lms_all_videos_get_type (void) {
2344 + static volatile gsize rygel_lms_all_videos_type_id__volatile = 0;
2345 + if (g_once_init_enter (&rygel_lms_all_videos_type_id__volatile)) {
2346 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSAllVideosClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_all_videos_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSAllVideos), 0, (GInstanceInitFunc) rygel_lms_all_videos_instance_init, NULL };
2347 + GType rygel_lms_all_videos_type_id;
2348 + rygel_lms_all_videos_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSAllVideos", &g_define_type_info, 0);
2349 + g_once_init_leave (&rygel_lms_all_videos_type_id__volatile, rygel_lms_all_videos_type_id);
2351 + return rygel_lms_all_videos_type_id__volatile;
2356 diff --git a/src/plugins/lms/rygel-lms-artist.c b/src/plugins/lms/rygel-lms-artist.c
2357 new file mode 100644
2358 index 0000000..e686ea4
2360 +++ b/src/plugins/lms/rygel-lms-artist.c
2362 +/* rygel-lms-artist.c generated by valac 0.28.0, the Vala compiler
2363 + * generated from rygel-lms-artist.vala, do not modify */
2366 + * Copyright (C) 2013 Intel Corporation.
2368 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
2370 + * This file is part of Rygel.
2372 + * Rygel is free software; you can redistribute it and/or modify
2373 + * it under the terms of the GNU Lesser General Public License as published by
2374 + * the Free Software Foundation; either version 2 of the License, or
2375 + * (at your option) any later version.
2377 + * Rygel is distributed in the hope that it will be useful,
2378 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
2379 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2380 + * GNU Lesser General Public License for more details.
2382 + * You should have received a copy of the GNU Lesser General Public License
2383 + * along with this program; if not, write to the Free Software Foundation,
2384 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2388 +#include <glib-object.h>
2389 +#include <rygel-server.h>
2390 +#include <sqlite3.h>
2391 +#include <stdlib.h>
2392 +#include <string.h>
2395 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
2396 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
2397 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
2398 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
2399 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
2400 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
2402 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
2403 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
2404 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
2406 +#define RYGEL_LMS_TYPE_ARTIST (rygel_lms_artist_get_type ())
2407 +#define RYGEL_LMS_ARTIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ARTIST, RygelLMSArtist))
2408 +#define RYGEL_LMS_ARTIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ARTIST, RygelLMSArtistClass))
2409 +#define RYGEL_LMS_IS_ARTIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ARTIST))
2410 +#define RYGEL_LMS_IS_ARTIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ARTIST))
2411 +#define RYGEL_LMS_ARTIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ARTIST, RygelLMSArtistClass))
2413 +typedef struct _RygelLMSArtist RygelLMSArtist;
2414 +typedef struct _RygelLMSArtistClass RygelLMSArtistClass;
2415 +typedef struct _RygelLMSArtistPrivate RygelLMSArtistPrivate;
2417 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
2418 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
2419 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
2420 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
2421 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
2422 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
2424 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
2425 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
2427 +#define RYGEL_LMS_TYPE_ALBUM (rygel_lms_album_get_type ())
2428 +#define RYGEL_LMS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbum))
2429 +#define RYGEL_LMS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbumClass))
2430 +#define RYGEL_LMS_IS_ALBUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALBUM))
2431 +#define RYGEL_LMS_IS_ALBUM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALBUM))
2432 +#define RYGEL_LMS_ALBUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALBUM, RygelLMSAlbumClass))
2434 +typedef struct _RygelLMSAlbum RygelLMSAlbum;
2435 +typedef struct _RygelLMSAlbumClass RygelLMSAlbumClass;
2436 +#define _g_free0(var) (var = (g_free (var), NULL))
2438 +struct _RygelLMSCategoryContainer {
2439 + RygelMediaContainer parent_instance;
2440 + RygelLMSCategoryContainerPrivate * priv;
2441 + sqlite3_stmt* stmt_all;
2442 + sqlite3_stmt* stmt_find_object;
2443 + sqlite3_stmt* stmt_added;
2444 + sqlite3_stmt* stmt_removed;
2445 + gchar* child_prefix;
2446 + gchar* ref_prefix;
2449 +struct _RygelLMSCategoryContainerClass {
2450 + RygelMediaContainerClass parent_class;
2451 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
2452 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
2453 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
2454 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
2455 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
2458 +struct _RygelLMSArtist {
2459 + RygelLMSCategoryContainer parent_instance;
2460 + RygelLMSArtistPrivate * priv;
2463 +struct _RygelLMSArtistClass {
2464 + RygelLMSCategoryContainerClass parent_class;
2468 +static gpointer rygel_lms_artist_parent_class = NULL;
2470 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
2471 +GType rygel_lms_artist_get_type (void) G_GNUC_CONST;
2473 + RYGEL_LMS_ARTIST_DUMMY_PROPERTY
2475 +#define RYGEL_LMS_ARTIST_SQL_ALL_TEMPLATE "SELECT audio_albums.id, audio_albums.name " "FROM audio_albums " "WHERE audio_albums.artist_id = %s " "LIMIT ? OFFSET ?;"
2476 +#define RYGEL_LMS_ARTIST_SQL_COUNT_TEMPLATE "SELECT COUNT(audio_albums.id) " "FROM audio_albums " "WHERE audio_albums.artist_id = %s"
2477 +#define RYGEL_LMS_ARTIST_SQL_FIND_OBJECT_TEMPLATE "SELECT audio_albums.id, audio_albums.name " "FROM audio_albums " "WHERE audio_albums.id = ? AND audio_albums.artist_id = %s;"
2478 +static gchar* rygel_lms_artist_get_sql_all (const gchar* id);
2479 +static gchar* rygel_lms_artist_get_sql_find_object (const gchar* id);
2480 +static gchar* rygel_lms_artist_get_sql_count (const gchar* id);
2481 +static RygelMediaObject* rygel_lms_artist_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
2482 +gpointer rygel_lms_database_ref (gpointer instance);
2483 +void rygel_lms_database_unref (gpointer instance);
2484 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
2485 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
2486 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
2487 +gpointer rygel_lms_value_get_database (const GValue* value);
2488 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
2489 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self);
2490 +RygelLMSAlbum* rygel_lms_album_new (const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2491 +RygelLMSAlbum* rygel_lms_album_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2492 +GType rygel_lms_album_get_type (void) G_GNUC_CONST;
2493 +RygelLMSArtist* rygel_lms_artist_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2494 +RygelLMSArtist* rygel_lms_artist_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2495 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
2498 +static gchar* rygel_lms_artist_get_sql_all (const gchar* id) {
2499 + gchar* result = NULL;
2500 + const gchar* _tmp0_ = NULL;
2501 + gchar* _tmp1_ = NULL;
2502 + g_return_val_if_fail (id != NULL, NULL);
2504 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ARTIST_SQL_ALL_TEMPLATE, _tmp0_);
2510 +static gchar* rygel_lms_artist_get_sql_find_object (const gchar* id) {
2511 + gchar* result = NULL;
2512 + const gchar* _tmp0_ = NULL;
2513 + gchar* _tmp1_ = NULL;
2514 + g_return_val_if_fail (id != NULL, NULL);
2516 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ARTIST_SQL_FIND_OBJECT_TEMPLATE, _tmp0_);
2522 +static gchar* rygel_lms_artist_get_sql_count (const gchar* id) {
2523 + gchar* result = NULL;
2524 + const gchar* _tmp0_ = NULL;
2525 + gchar* _tmp1_ = NULL;
2526 + g_return_val_if_fail (id != NULL, NULL);
2528 + _tmp1_ = g_strdup_printf (RYGEL_LMS_ARTIST_SQL_COUNT_TEMPLATE, _tmp0_);
2534 +static RygelMediaObject* rygel_lms_artist_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
2535 + RygelLMSArtist * self;
2536 + RygelMediaObject* result = NULL;
2537 + gchar* db_id = NULL;
2538 + sqlite3_stmt* _tmp0_ = NULL;
2540 + gchar* _tmp2_ = NULL;
2541 + gchar* title = NULL;
2542 + sqlite3_stmt* _tmp3_ = NULL;
2543 + const gchar* _tmp4_ = NULL;
2544 + gchar* _tmp5_ = NULL;
2545 + RygelLMSDatabase* _tmp6_ = NULL;
2546 + RygelLMSDatabase* _tmp7_ = NULL;
2547 + RygelLMSAlbum* _tmp8_ = NULL;
2548 + self = (RygelLMSArtist*) base;
2549 + g_return_val_if_fail (statement != NULL, NULL);
2550 + _tmp0_ = statement;
2551 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
2552 + _tmp2_ = g_strdup_printf ("%d", _tmp1_);
2554 + _tmp3_ = statement;
2555 + _tmp4_ = sqlite3_column_text (_tmp3_, 1);
2556 + _tmp5_ = g_strdup (_tmp4_);
2558 + _tmp6_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
2560 + _tmp8_ = rygel_lms_album_new (db_id, (RygelMediaContainer*) self, title, _tmp7_);
2561 + result = (RygelMediaObject*) _tmp8_;
2568 +RygelLMSArtist* rygel_lms_artist_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
2569 + RygelLMSArtist * self = NULL;
2570 + const gchar* _tmp0_ = NULL;
2571 + RygelMediaContainer* _tmp1_ = NULL;
2572 + const gchar* _tmp2_ = NULL;
2573 + RygelLMSDatabase* _tmp3_ = NULL;
2574 + const gchar* _tmp4_ = NULL;
2575 + gchar* _tmp5_ = NULL;
2576 + gchar* _tmp6_ = NULL;
2577 + const gchar* _tmp7_ = NULL;
2578 + gchar* _tmp8_ = NULL;
2579 + gchar* _tmp9_ = NULL;
2580 + const gchar* _tmp10_ = NULL;
2581 + gchar* _tmp11_ = NULL;
2582 + gchar* _tmp12_ = NULL;
2583 + g_return_val_if_fail (id != NULL, NULL);
2584 + g_return_val_if_fail (parent != NULL, NULL);
2585 + g_return_val_if_fail (title != NULL, NULL);
2586 + g_return_val_if_fail (lms_db != NULL, NULL);
2592 + _tmp5_ = rygel_lms_artist_get_sql_all (_tmp4_);
2595 + _tmp8_ = rygel_lms_artist_get_sql_find_object (_tmp7_);
2598 + _tmp11_ = rygel_lms_artist_get_sql_count (_tmp10_);
2599 + _tmp12_ = _tmp11_;
2600 + self = (RygelLMSArtist*) rygel_lms_category_container_construct (object_type, _tmp0_, _tmp1_, _tmp2_, _tmp3_, _tmp6_, _tmp9_, _tmp12_, NULL, NULL);
2601 + _g_free0 (_tmp12_);
2602 + _g_free0 (_tmp9_);
2603 + _g_free0 (_tmp6_);
2608 +RygelLMSArtist* rygel_lms_artist_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
2609 + return rygel_lms_artist_construct (RYGEL_LMS_TYPE_ARTIST, id, parent, title, lms_db);
2613 +static void rygel_lms_artist_class_init (RygelLMSArtistClass * klass) {
2614 + rygel_lms_artist_parent_class = g_type_class_peek_parent (klass);
2615 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_artist_real_object_from_statement;
2619 +static void rygel_lms_artist_instance_init (RygelLMSArtist * self) {
2623 +GType rygel_lms_artist_get_type (void) {
2624 + static volatile gsize rygel_lms_artist_type_id__volatile = 0;
2625 + if (g_once_init_enter (&rygel_lms_artist_type_id__volatile)) {
2626 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSArtistClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_artist_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSArtist), 0, (GInstanceInitFunc) rygel_lms_artist_instance_init, NULL };
2627 + GType rygel_lms_artist_type_id;
2628 + rygel_lms_artist_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSArtist", &g_define_type_info, 0);
2629 + g_once_init_leave (&rygel_lms_artist_type_id__volatile, rygel_lms_artist_type_id);
2631 + return rygel_lms_artist_type_id__volatile;
2636 diff --git a/src/plugins/lms/rygel-lms-artists.c b/src/plugins/lms/rygel-lms-artists.c
2637 new file mode 100644
2638 index 0000000..3ac85bc
2640 +++ b/src/plugins/lms/rygel-lms-artists.c
2642 +/* rygel-lms-artists.c generated by valac 0.28.0, the Vala compiler
2643 + * generated from rygel-lms-artists.vala, do not modify */
2646 + * Copyright (C) 2013 Intel Corporation.
2648 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
2650 + * This file is part of Rygel.
2652 + * Rygel is free software; you can redistribute it and/or modify
2653 + * it under the terms of the GNU Lesser General Public License as published by
2654 + * the Free Software Foundation; either version 2 of the License, or
2655 + * (at your option) any later version.
2657 + * Rygel is distributed in the hope that it will be useful,
2658 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
2659 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2660 + * GNU Lesser General Public License for more details.
2662 + * You should have received a copy of the GNU Lesser General Public License
2663 + * along with this program; if not, write to the Free Software Foundation,
2664 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2668 +#include <glib-object.h>
2669 +#include <rygel-server.h>
2670 +#include <sqlite3.h>
2671 +#include <stdlib.h>
2672 +#include <string.h>
2675 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
2676 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
2677 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
2678 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
2679 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
2680 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
2682 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
2683 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
2684 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
2686 +#define RYGEL_LMS_TYPE_ARTISTS (rygel_lms_artists_get_type ())
2687 +#define RYGEL_LMS_ARTISTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ARTISTS, RygelLMSArtists))
2688 +#define RYGEL_LMS_ARTISTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ARTISTS, RygelLMSArtistsClass))
2689 +#define RYGEL_LMS_IS_ARTISTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ARTISTS))
2690 +#define RYGEL_LMS_IS_ARTISTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ARTISTS))
2691 +#define RYGEL_LMS_ARTISTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ARTISTS, RygelLMSArtistsClass))
2693 +typedef struct _RygelLMSArtists RygelLMSArtists;
2694 +typedef struct _RygelLMSArtistsClass RygelLMSArtistsClass;
2695 +typedef struct _RygelLMSArtistsPrivate RygelLMSArtistsPrivate;
2697 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
2698 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
2699 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
2700 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
2701 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
2702 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
2704 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
2705 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
2707 +#define RYGEL_LMS_TYPE_ARTIST (rygel_lms_artist_get_type ())
2708 +#define RYGEL_LMS_ARTIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ARTIST, RygelLMSArtist))
2709 +#define RYGEL_LMS_ARTIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ARTIST, RygelLMSArtistClass))
2710 +#define RYGEL_LMS_IS_ARTIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ARTIST))
2711 +#define RYGEL_LMS_IS_ARTIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ARTIST))
2712 +#define RYGEL_LMS_ARTIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ARTIST, RygelLMSArtistClass))
2714 +typedef struct _RygelLMSArtist RygelLMSArtist;
2715 +typedef struct _RygelLMSArtistClass RygelLMSArtistClass;
2716 +#define _g_free0(var) (var = (g_free (var), NULL))
2718 +struct _RygelLMSCategoryContainer {
2719 + RygelMediaContainer parent_instance;
2720 + RygelLMSCategoryContainerPrivate * priv;
2721 + sqlite3_stmt* stmt_all;
2722 + sqlite3_stmt* stmt_find_object;
2723 + sqlite3_stmt* stmt_added;
2724 + sqlite3_stmt* stmt_removed;
2725 + gchar* child_prefix;
2726 + gchar* ref_prefix;
2729 +struct _RygelLMSCategoryContainerClass {
2730 + RygelMediaContainerClass parent_class;
2731 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
2732 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
2733 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
2734 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
2735 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
2738 +struct _RygelLMSArtists {
2739 + RygelLMSCategoryContainer parent_instance;
2740 + RygelLMSArtistsPrivate * priv;
2743 +struct _RygelLMSArtistsClass {
2744 + RygelLMSCategoryContainerClass parent_class;
2748 +static gpointer rygel_lms_artists_parent_class = NULL;
2750 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
2751 +GType rygel_lms_artists_get_type (void) G_GNUC_CONST;
2753 + RYGEL_LMS_ARTISTS_DUMMY_PROPERTY
2755 +#define RYGEL_LMS_ARTISTS_SQL_ALL "SELECT audio_artists.id, audio_artists.name " "FROM audio_artists " "LIMIT ? OFFSET ?;"
2756 +#define RYGEL_LMS_ARTISTS_SQL_COUNT "SELECT COUNT(audio_artists.id) " "FROM audio_artists;"
2757 +#define RYGEL_LMS_ARTISTS_SQL_FIND_OBJECT "SELECT audio_artists.id, audio_artists.name " "FROM audio_artists " "WHERE audio_artists.id = ?;"
2758 +static RygelMediaObject* rygel_lms_artists_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
2759 +gpointer rygel_lms_database_ref (gpointer instance);
2760 +void rygel_lms_database_unref (gpointer instance);
2761 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
2762 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
2763 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
2764 +gpointer rygel_lms_value_get_database (const GValue* value);
2765 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
2766 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self);
2767 +RygelLMSArtist* rygel_lms_artist_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2768 +RygelLMSArtist* rygel_lms_artist_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2769 +GType rygel_lms_artist_get_type (void) G_GNUC_CONST;
2770 +RygelLMSArtists* rygel_lms_artists_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2771 +RygelLMSArtists* rygel_lms_artists_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
2772 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
2775 +static RygelMediaObject* rygel_lms_artists_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
2776 + RygelLMSArtists * self;
2777 + RygelMediaObject* result = NULL;
2778 + gchar* db_id = NULL;
2779 + sqlite3_stmt* _tmp0_ = NULL;
2781 + gchar* _tmp2_ = NULL;
2782 + gchar* title = NULL;
2783 + sqlite3_stmt* _tmp3_ = NULL;
2784 + const gchar* _tmp4_ = NULL;
2785 + gchar* _tmp5_ = NULL;
2786 + RygelLMSDatabase* _tmp6_ = NULL;
2787 + RygelLMSDatabase* _tmp7_ = NULL;
2788 + RygelLMSArtist* _tmp8_ = NULL;
2789 + self = (RygelLMSArtists*) base;
2790 + g_return_val_if_fail (statement != NULL, NULL);
2791 + _tmp0_ = statement;
2792 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
2793 + _tmp2_ = g_strdup_printf ("%d", _tmp1_);
2795 + _tmp3_ = statement;
2796 + _tmp4_ = sqlite3_column_text (_tmp3_, 1);
2797 + _tmp5_ = g_strdup (_tmp4_);
2799 + _tmp6_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
2801 + _tmp8_ = rygel_lms_artist_new (db_id, (RygelMediaContainer*) self, title, _tmp7_);
2802 + result = (RygelMediaObject*) _tmp8_;
2809 +RygelLMSArtists* rygel_lms_artists_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
2810 + RygelLMSArtists * self = NULL;
2811 + const gchar* _tmp0_ = NULL;
2812 + RygelMediaContainer* _tmp1_ = NULL;
2813 + const gchar* _tmp2_ = NULL;
2814 + RygelLMSDatabase* _tmp3_ = NULL;
2815 + g_return_val_if_fail (id != NULL, NULL);
2816 + g_return_val_if_fail (parent != NULL, NULL);
2817 + g_return_val_if_fail (title != NULL, NULL);
2818 + g_return_val_if_fail (lms_db != NULL, NULL);
2823 + self = (RygelLMSArtists*) rygel_lms_category_container_construct (object_type, _tmp0_, _tmp1_, _tmp2_, _tmp3_, RYGEL_LMS_ARTISTS_SQL_ALL, RYGEL_LMS_ARTISTS_SQL_FIND_OBJECT, RYGEL_LMS_ARTISTS_SQL_COUNT, NULL, NULL);
2828 +RygelLMSArtists* rygel_lms_artists_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
2829 + return rygel_lms_artists_construct (RYGEL_LMS_TYPE_ARTISTS, id, parent, title, lms_db);
2833 +static void rygel_lms_artists_class_init (RygelLMSArtistsClass * klass) {
2834 + rygel_lms_artists_parent_class = g_type_class_peek_parent (klass);
2835 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_artists_real_object_from_statement;
2839 +static void rygel_lms_artists_instance_init (RygelLMSArtists * self) {
2843 +GType rygel_lms_artists_get_type (void) {
2844 + static volatile gsize rygel_lms_artists_type_id__volatile = 0;
2845 + if (g_once_init_enter (&rygel_lms_artists_type_id__volatile)) {
2846 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSArtistsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_artists_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSArtists), 0, (GInstanceInitFunc) rygel_lms_artists_instance_init, NULL };
2847 + GType rygel_lms_artists_type_id;
2848 + rygel_lms_artists_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSArtists", &g_define_type_info, 0);
2849 + g_once_init_leave (&rygel_lms_artists_type_id__volatile, rygel_lms_artists_type_id);
2851 + return rygel_lms_artists_type_id__volatile;
2856 diff --git a/src/plugins/lms/rygel-lms-category-container.c b/src/plugins/lms/rygel-lms-category-container.c
2857 new file mode 100644
2858 index 0000000..21692d0
2860 +++ b/src/plugins/lms/rygel-lms-category-container.c
2862 +/* rygel-lms-category-container.c generated by valac 0.28.0, the Vala compiler
2863 + * generated from rygel-lms-category-container.vala, do not modify */
2866 + * Copyright (C) 2009,2010 Jens Georg <mail@jensge.org>,
2867 + * (C) 2013 Intel Corporation.
2869 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
2871 + * This file is part of Rygel.
2873 + * Rygel is free software; you can redistribute it and/or modify
2874 + * it under the terms of the GNU Lesser General Public License as published by
2875 + * the Free Software Foundation; either version 2 of the License, or
2876 + * (at your option) any later version.
2878 + * Rygel is distributed in the hope that it will be useful,
2879 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
2880 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2881 + * GNU Lesser General Public License for more details.
2883 + * You should have received a copy of the GNU Lesser General Public License
2884 + * along with this program; if not, write to the Free Software Foundation,
2885 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2889 +#include <glib-object.h>
2890 +#include <rygel-server.h>
2891 +#include <sqlite3.h>
2892 +#include <stdlib.h>
2893 +#include <string.h>
2895 +#include <libgupnp-av/gupnp-av.h>
2896 +#include <gio/gio.h>
2899 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
2900 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
2901 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
2902 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
2903 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
2904 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
2906 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
2907 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
2908 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
2910 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
2911 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
2912 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
2913 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
2914 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
2915 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
2917 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
2918 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
2919 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
2920 +#define _g_free0(var) (var = (g_free (var), NULL))
2921 +#define _sqlite3_finalize0(var) ((var == NULL) ? NULL : (var = (sqlite3_finalize (var), NULL)))
2922 +#define __vala_GValue_free0(var) ((var == NULL) ? NULL : (var = (_vala_GValue_free (var), NULL)))
2924 +#define RYGEL_LMS_TYPE_SQL_OPERATOR (rygel_lms_sql_operator_get_type ())
2925 +#define RYGEL_LMS_SQL_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperator))
2926 +#define RYGEL_LMS_SQL_OPERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperatorClass))
2927 +#define RYGEL_LMS_IS_SQL_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR))
2928 +#define RYGEL_LMS_IS_SQL_OPERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_SQL_OPERATOR))
2929 +#define RYGEL_LMS_SQL_OPERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperatorClass))
2931 +typedef struct _RygelLMSSqlOperator RygelLMSSqlOperator;
2932 +typedef struct _RygelLMSSqlOperatorClass RygelLMSSqlOperatorClass;
2934 +#define RYGEL_LMS_TYPE_SQL_FUNCTION (rygel_lms_sql_function_get_type ())
2935 +#define RYGEL_LMS_SQL_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_SQL_FUNCTION, RygelLMSSqlFunction))
2936 +#define RYGEL_LMS_SQL_FUNCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_SQL_FUNCTION, RygelLMSSqlFunctionClass))
2937 +#define RYGEL_LMS_IS_SQL_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_SQL_FUNCTION))
2938 +#define RYGEL_LMS_IS_SQL_FUNCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_SQL_FUNCTION))
2939 +#define RYGEL_LMS_SQL_FUNCTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_SQL_FUNCTION, RygelLMSSqlFunctionClass))
2941 +typedef struct _RygelLMSSqlFunction RygelLMSSqlFunction;
2942 +typedef struct _RygelLMSSqlFunctionClass RygelLMSSqlFunctionClass;
2943 +#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
2944 +#define _rygel_search_expression_unref0(var) ((var == NULL) ? NULL : (var = (rygel_search_expression_unref (var), NULL)))
2945 +#define _g_value_array_free0(var) ((var == NULL) ? NULL : (var = (g_value_array_free (var), NULL)))
2946 +typedef struct _RygelLmsCategoryContainerSearchData RygelLmsCategoryContainerSearchData;
2947 +typedef struct _RygelLmsCategoryContainerGetChildrenData RygelLmsCategoryContainerGetChildrenData;
2948 +typedef struct _RygelLmsCategoryContainerFindObjectData RygelLmsCategoryContainerFindObjectData;
2949 +typedef struct _RygelLmsCategoryContainerAddChildData RygelLmsCategoryContainerAddChildData;
2950 +typedef struct _RygelLmsCategoryContainerRemoveChildData RygelLmsCategoryContainerRemoveChildData;
2953 + RYGEL_LMS_CATEGORY_CONTAINER_ERROR_SQLITE_ERROR,
2954 + RYGEL_LMS_CATEGORY_CONTAINER_ERROR_GENERAL_ERROR,
2955 + RYGEL_LMS_CATEGORY_CONTAINER_ERROR_INVALID_TYPE,
2956 + RYGEL_LMS_CATEGORY_CONTAINER_ERROR_UNSUPPORTED_SEARCH
2957 +} RygelLMSCategoryContainerError;
2958 +#define RYGEL_LMS_CATEGORY_CONTAINER_ERROR rygel_lms_category_container_error_quark ()
2959 +struct _RygelLMSCategoryContainer {
2960 + RygelMediaContainer parent_instance;
2961 + RygelLMSCategoryContainerPrivate * priv;
2962 + sqlite3_stmt* stmt_all;
2963 + sqlite3_stmt* stmt_find_object;
2964 + sqlite3_stmt* stmt_added;
2965 + sqlite3_stmt* stmt_removed;
2966 + gchar* child_prefix;
2967 + gchar* ref_prefix;
2970 +struct _RygelLMSCategoryContainerClass {
2971 + RygelMediaContainerClass parent_class;
2972 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
2973 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
2974 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
2975 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
2976 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
2979 +struct _RygelLMSCategoryContainerPrivate {
2980 + GeeArrayList* _search_classes;
2981 + RygelLMSDatabase* _lms_db;
2984 + gchar* _sql_find_object;
2985 + gchar* _sql_count;
2986 + gchar* _sql_added;
2987 + gchar* _sql_removed;
2991 + RYGEL_LMS_DATABASE_ERROR_OPEN,
2992 + RYGEL_LMS_DATABASE_ERROR_PREPARE,
2993 + RYGEL_LMS_DATABASE_ERROR_BIND,
2994 + RYGEL_LMS_DATABASE_ERROR_STEP,
2995 + RYGEL_LMS_DATABASE_ERROR_NOT_FOUND
2996 +} RygelLMSDatabaseError;
2997 +#define RYGEL_LMS_DATABASE_ERROR rygel_lms_database_error_quark ()
2998 +struct _RygelLmsCategoryContainerSearchData {
3000 + GObject* _source_object_;
3001 + GAsyncResult* _res_;
3002 + GSimpleAsyncResult* _async_result;
3003 + RygelLMSCategoryContainer* self;
3004 + RygelSearchExpression* expression;
3007 + guint total_matches;
3008 + gchar* sort_criteria;
3009 + GCancellable* cancellable;
3010 + RygelMediaObjects* result;
3011 + GValueArray* args;
3012 + GValueArray* _tmp0_;
3014 + RygelSearchExpression* _tmp1_;
3015 + GValueArray* _tmp2_;
3017 + const gchar* _tmp4_;
3018 + GValueArray* _tmp5_;
3020 + RygelSearchExpression* _tmp7_;
3021 + RygelSearchExpression* _tmp8_;
3024 + const gchar* _tmp11_;
3027 + const gchar* _tmp14_;
3028 + GValueArray* _tmp15_;
3029 + const gchar* _tmp16_;
3032 + RygelMediaObjects* _tmp19_;
3035 + const gchar* _tmp21_;
3036 + RygelMediaObjects* _tmp22_;
3037 + RygelSearchExpression* _tmp23_;
3040 + const gchar* _tmp26_;
3041 + GCancellable* _tmp27_;
3043 + RygelMediaObjects* _tmp29_;
3044 + RygelMediaObjects* _tmp30_;
3045 + GError * _inner_error_;
3048 +struct _RygelLmsCategoryContainerGetChildrenData {
3050 + GObject* _source_object_;
3051 + GAsyncResult* _res_;
3052 + GSimpleAsyncResult* _async_result;
3053 + RygelLMSCategoryContainer* self;
3056 + gchar* sort_criteria;
3057 + GCancellable* cancellable;
3058 + RygelMediaObjects* result;
3059 + RygelMediaObjects* retval;
3060 + RygelMediaObjects* _tmp0_;
3061 + sqlite3_stmt* _tmp1_;
3064 + const gchar* _tmp4_;
3066 + sqlite3_stmt* _tmp6_;
3068 + RygelMediaObjects* _tmp8_;
3069 + sqlite3_stmt* _tmp9_;
3070 + RygelMediaObject* _tmp10_;
3071 + RygelMediaObject* _tmp11_;
3072 + GError * _inner_error_;
3075 +struct _RygelLmsCategoryContainerFindObjectData {
3077 + GObject* _source_object_;
3078 + GAsyncResult* _res_;
3079 + GSimpleAsyncResult* _async_result;
3080 + RygelLMSCategoryContainer* self;
3082 + GCancellable* cancellable;
3083 + RygelMediaObject* result;
3084 + const gchar* _tmp0_;
3085 + const gchar* _tmp1_;
3087 + RygelMediaObject* object;
3089 + const gchar* _tmp3_;
3090 + const gchar* _tmp4_;
3095 + const gchar* _tmp8_;
3098 + const gchar* _tmp11_;
3101 + const gchar* _tmp14_;
3102 + sqlite3_stmt* _tmp15_;
3103 + RygelMediaObject* child;
3104 + sqlite3_stmt* _tmp16_;
3105 + RygelMediaObject* _tmp17_;
3107 + RygelMediaObject* _tmp19_;
3108 + RygelMediaObject* _tmp20_;
3109 + RygelLMSCategoryContainer* container;
3110 + RygelMediaObject* _tmp21_;
3111 + RygelLMSCategoryContainer* _tmp22_;
3112 + RygelMediaObject* _tmp23_;
3113 + RygelLMSCategoryContainer* _tmp24_;
3114 + const gchar* _tmp25_;
3115 + GCancellable* _tmp26_;
3116 + RygelMediaObject* _tmp27_;
3117 + RygelMediaObject* _tmp28_;
3118 + RygelMediaObject* _tmp29_;
3119 + RygelMediaObject* _tmp30_;
3120 + RygelMediaContainer* _tmp31_;
3121 + RygelMediaContainer* _tmp32_;
3123 + const gchar* _tmp33_;
3124 + const gchar* _tmp34_;
3125 + const gchar* _tmp35_;
3127 + const gchar* _tmp37_;
3128 + GError * _inner_error_;
3131 +struct _RygelLmsCategoryContainerAddChildData {
3133 + GObject* _source_object_;
3134 + GAsyncResult* _res_;
3135 + GSimpleAsyncResult* _async_result;
3136 + RygelLMSCategoryContainer* self;
3137 + RygelMediaObject* object;
3140 +struct _RygelLmsCategoryContainerRemoveChildData {
3142 + GObject* _source_object_;
3143 + GAsyncResult* _res_;
3144 + GSimpleAsyncResult* _async_result;
3145 + RygelLMSCategoryContainer* self;
3146 + RygelMediaObject* object;
3150 +static gpointer rygel_lms_category_container_parent_class = NULL;
3151 +static RygelTrackableContainerIface* rygel_lms_category_container_rygel_trackable_container_parent_iface = NULL;
3152 +static RygelSearchableContainerIface* rygel_lms_category_container_rygel_searchable_container_parent_iface = NULL;
3154 +GQuark rygel_lms_category_container_error_quark (void);
3155 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
3156 +gpointer rygel_lms_database_ref (gpointer instance);
3157 +void rygel_lms_database_unref (gpointer instance);
3158 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
3159 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
3160 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
3161 +gpointer rygel_lms_value_get_database (const GValue* value);
3162 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
3163 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerPrivate))
3165 + RYGEL_LMS_CATEGORY_CONTAINER_DUMMY_PROPERTY,
3166 + RYGEL_LMS_CATEGORY_CONTAINER_SEARCH_CLASSES,
3167 + RYGEL_LMS_CATEGORY_CONTAINER_LMS_DB,
3168 + RYGEL_LMS_CATEGORY_CONTAINER_DB_ID,
3169 + RYGEL_LMS_CATEGORY_CONTAINER_SQL_ALL,
3170 + RYGEL_LMS_CATEGORY_CONTAINER_SQL_FIND_OBJECT,
3171 + RYGEL_LMS_CATEGORY_CONTAINER_SQL_COUNT,
3172 + RYGEL_LMS_CATEGORY_CONTAINER_SQL_ADDED,
3173 + RYGEL_LMS_CATEGORY_CONTAINER_SQL_REMOVED
3175 +RygelMediaObject* rygel_lms_category_container_object_from_statement (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
3176 +static RygelMediaObject* rygel_lms_category_container_real_object_from_statement (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
3177 +gchar* rygel_lms_category_container_get_sql_all_with_filter (RygelLMSCategoryContainer* self, const gchar* filter);
3178 +static gchar* rygel_lms_category_container_real_get_sql_all_with_filter (RygelLMSCategoryContainer* self, const gchar* filter);
3179 +const gchar* rygel_lms_category_container_get_sql_all (RygelLMSCategoryContainer* self);
3180 +gchar* rygel_lms_category_container_get_sql_count_with_filter (RygelLMSCategoryContainer* self, const gchar* filter);
3181 +static gchar* rygel_lms_category_container_real_get_sql_count_with_filter (RygelLMSCategoryContainer* self, const gchar* filter);
3182 +const gchar* rygel_lms_category_container_get_sql_count (RygelLMSCategoryContainer* self);
3183 +static gchar* rygel_lms_category_container_map_operand_to_column (const gchar* operand, gchar** collate, gboolean for_sort, GError** error);
3184 +static gchar* rygel_lms_category_container_relational_expression_to_sql (RygelRelationalExpression* exp, GValueArray* args, GError** error);
3185 +static void _vala_GValue_free (GValue* self);
3186 +GType rygel_lms_sql_operator_get_type (void) G_GNUC_CONST;
3187 +RygelLMSSqlOperator* rygel_lms_sql_operator_new_from_search_criteria_op (GUPnPSearchCriteriaOp op, const gchar* arg, const gchar* collate);
3188 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct_from_search_criteria_op (GType object_type, GUPnPSearchCriteriaOp op, const gchar* arg, const gchar* collate);
3189 +RygelLMSSqlFunction* rygel_lms_sql_function_new (const gchar* name, const gchar* arg);
3190 +RygelLMSSqlFunction* rygel_lms_sql_function_construct (GType object_type, const gchar* name, const gchar* arg);
3191 +GType rygel_lms_sql_function_get_type (void) G_GNUC_CONST;
3192 +RygelLMSSqlOperator* rygel_lms_sql_operator_new (const gchar* name, const gchar* arg, const gchar* collate);
3193 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct (GType object_type, const gchar* name, const gchar* arg, const gchar* collate);
3194 +gchar* rygel_lms_sql_operator_to_string (RygelLMSSqlOperator* self);
3195 +static gchar* rygel_lms_category_container_logical_expression_to_sql (RygelLogicalExpression* expression, GValueArray* args, GError** error);
3196 +static gchar* rygel_lms_category_container_search_expression_to_sql (RygelSearchExpression* expression, GValueArray* args, GError** error);
3197 +guint rygel_lms_category_container_get_child_count_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
3198 +static guint rygel_lms_category_container_real_get_child_count_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
3199 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self);
3200 +GQuark rygel_lms_database_error_quark (void);
3201 +sqlite3_stmt* rygel_lms_database_prepare_and_init (RygelLMSDatabase* self, const gchar* query, GValue* arguments, int arguments_length1, GError** error);
3202 +RygelMediaObjects* rygel_lms_category_container_get_children_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
3203 +static RygelMediaObjects* rygel_lms_category_container_real_get_children_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
3204 +gboolean rygel_lms_database_get_children_step (sqlite3_stmt* stmt, GError** error);
3205 +static void rygel_lms_category_container_real_search_data_free (gpointer _data);
3206 +static void rygel_lms_category_container_real_search (RygelSearchableContainer* base, RygelSearchExpression* expression, guint offset, guint max_count, const gchar* sort_criteria, GCancellable* cancellable, GAsyncReadyCallback _callback_, gpointer _user_data_);
3207 +static gboolean rygel_lms_category_container_real_search_co (RygelLmsCategoryContainerSearchData* _data_);
3208 +static void rygel_lms_category_container_search_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
3209 +static void rygel_lms_category_container_real_get_children_data_free (gpointer _data);
3210 +static void rygel_lms_category_container_real_get_children (RygelMediaContainer* base, guint offset, guint max_count, const gchar* sort_criteria, GCancellable* cancellable, GAsyncReadyCallback _callback_, gpointer _user_data_);
3211 +static gboolean rygel_lms_category_container_real_get_children_co (RygelLmsCategoryContainerGetChildrenData* _data_);
3212 +void rygel_lms_database_get_children_init (sqlite3_stmt* stmt, guint offset, guint max_count, const gchar* sort_criteria, GError** error);
3213 +static void rygel_lms_category_container_real_find_object_data_free (gpointer _data);
3214 +static void rygel_lms_category_container_real_find_object (RygelMediaContainer* base, const gchar* id, GCancellable* cancellable, GAsyncReadyCallback _callback_, gpointer _user_data_);
3215 +static gboolean rygel_lms_category_container_real_find_object_co (RygelLmsCategoryContainerFindObjectData* _data_);
3216 +void rygel_lms_database_find_object (const gchar* id, sqlite3_stmt* stmt, GError** error);
3217 +static void rygel_lms_category_container_find_object_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
3218 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id);
3219 +gchar* rygel_lms_category_container_build_reference_id (RygelLMSCategoryContainer* self, gint db_id);
3220 +static void rygel_lms_category_container_real_add_child_data_free (gpointer _data);
3221 +static void rygel_lms_category_container_real_add_child (RygelTrackableContainer* base, RygelMediaObject* object, GAsyncReadyCallback _callback_, gpointer _user_data_);
3222 +static gboolean rygel_lms_category_container_real_add_child_co (RygelLmsCategoryContainerAddChildData* _data_);
3223 +static void rygel_lms_category_container_real_remove_child_data_free (gpointer _data);
3224 +static void rygel_lms_category_container_real_remove_child (RygelTrackableContainer* base, RygelMediaObject* object, GAsyncReadyCallback _callback_, gpointer _user_data_);
3225 +static gboolean rygel_lms_category_container_real_remove_child_co (RygelLmsCategoryContainerRemoveChildData* _data_);
3226 +static void rygel_lms_category_container_on_db_updated (RygelLMSCategoryContainer* self, guint64 old_id, guint64 new_id);
3227 +sqlite3_stmt* rygel_lms_database_prepare (RygelLMSDatabase* self, const gchar* query_string, GError** error);
3228 +void rygel_lms_database_get_children_with_update_id_init (sqlite3_stmt* stmt, guint64 old_id, guint64 new_id, GError** error);
3229 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
3230 +static void rygel_lms_category_container_set_lms_db (RygelLMSCategoryContainer* self, RygelLMSDatabase* value);
3231 +const gchar* rygel_lms_category_container_get_db_id (RygelLMSCategoryContainer* self);
3232 +static void rygel_lms_category_container_set_db_id (RygelLMSCategoryContainer* self, const gchar* value);
3233 +static void rygel_lms_category_container_set_sql_all (RygelLMSCategoryContainer* self, const gchar* value);
3234 +const gchar* rygel_lms_category_container_get_sql_find_object (RygelLMSCategoryContainer* self);
3235 +static void rygel_lms_category_container_set_sql_find_object (RygelLMSCategoryContainer* self, const gchar* value);
3236 +static void rygel_lms_category_container_set_sql_count (RygelLMSCategoryContainer* self, const gchar* value);
3237 +const gchar* rygel_lms_category_container_get_sql_added (RygelLMSCategoryContainer* self);
3238 +static void rygel_lms_category_container_set_sql_added (RygelLMSCategoryContainer* self, const gchar* value);
3239 +const gchar* rygel_lms_category_container_get_sql_removed (RygelLMSCategoryContainer* self);
3240 +static void rygel_lms_category_container_set_sql_removed (RygelLMSCategoryContainer* self, const gchar* value);
3241 +static GObject * rygel_lms_category_container_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
3242 +static void _rygel_lms_category_container_on_db_updated_rygel_lms_database_db_updated (RygelLMSDatabase* _sender, guint64 old_update_id, guint64 new_update_id, gpointer self);
3243 +static void rygel_lms_category_container_finalize (GObject* obj);
3244 +static void _vala_rygel_lms_category_container_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
3245 +static void _vala_rygel_lms_category_container_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
3248 +GQuark rygel_lms_category_container_error_quark (void) {
3249 + return g_quark_from_static_string ("rygel_lms_category_container_error-quark");
3253 +static RygelMediaObject* rygel_lms_category_container_real_object_from_statement (RygelLMSCategoryContainer* self, sqlite3_stmt* statement) {
3254 + g_critical ("Type `%s' does not implement abstract method `rygel_lms_category_container_object_from_statement'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
3259 +RygelMediaObject* rygel_lms_category_container_object_from_statement (RygelLMSCategoryContainer* self, sqlite3_stmt* statement) {
3260 + g_return_val_if_fail (self != NULL, NULL);
3261 + return RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS (self)->object_from_statement (self, statement);
3265 +static gchar* rygel_lms_category_container_real_get_sql_all_with_filter (RygelLMSCategoryContainer* self, const gchar* filter) {
3266 + gchar* result = NULL;
3267 + const gchar* _tmp0_ = NULL;
3268 + gchar* _tmp1_ = NULL;
3269 + g_return_val_if_fail (filter != NULL, NULL);
3270 + _tmp0_ = self->priv->_sql_all;
3271 + _tmp1_ = g_strdup (_tmp0_);
3277 +gchar* rygel_lms_category_container_get_sql_all_with_filter (RygelLMSCategoryContainer* self, const gchar* filter) {
3278 + g_return_val_if_fail (self != NULL, NULL);
3279 + return RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS (self)->get_sql_all_with_filter (self, filter);
3283 +static gchar* rygel_lms_category_container_real_get_sql_count_with_filter (RygelLMSCategoryContainer* self, const gchar* filter) {
3284 + gchar* result = NULL;
3285 + const gchar* _tmp0_ = NULL;
3286 + gchar* _tmp1_ = NULL;
3287 + g_return_val_if_fail (filter != NULL, NULL);
3288 + _tmp0_ = self->priv->_sql_count;
3289 + _tmp1_ = g_strdup (_tmp0_);
3295 +gchar* rygel_lms_category_container_get_sql_count_with_filter (RygelLMSCategoryContainer* self, const gchar* filter) {
3296 + g_return_val_if_fail (self != NULL, NULL);
3297 + return RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS (self)->get_sql_count_with_filter (self, filter);
3301 +static gchar* rygel_lms_category_container_map_operand_to_column (const gchar* operand, gchar** collate, gboolean for_sort, GError** error) {
3302 + gchar* _vala_collate = NULL;
3303 + gchar* result = NULL;
3304 + gchar* column = NULL;
3305 + gboolean use_collation = FALSE;
3306 + const gchar* _tmp0_ = NULL;
3307 + const gchar* _tmp1_ = NULL;
3308 + GQuark _tmp3_ = 0U;
3309 + static GQuark _tmp2_label0 = 0;
3310 + static GQuark _tmp2_label1 = 0;
3311 + static GQuark _tmp2_label2 = 0;
3312 + gboolean _tmp11_ = FALSE;
3313 + GError * _inner_error_ = NULL;
3314 + g_return_val_if_fail (operand != NULL, NULL);
3316 + use_collation = FALSE;
3319 + _tmp3_ = (NULL == _tmp1_) ? 0 : g_quark_from_string (_tmp1_);
3320 + if (_tmp3_ == ((0 != _tmp2_label0) ? _tmp2_label0 : (_tmp2_label0 = g_quark_from_static_string ("dc:title")))) {
3324 + gchar* _tmp4_ = NULL;
3325 + _tmp4_ = g_strdup ("title");
3326 + _g_free0 (column);
3328 + use_collation = TRUE;
3332 + } else if (_tmp3_ == ((0 != _tmp2_label1) ? _tmp2_label1 : (_tmp2_label1 = g_quark_from_static_string ("upnp:artist")))) {
3336 + gchar* _tmp5_ = NULL;
3337 + _tmp5_ = g_strdup ("artist");
3338 + _g_free0 (column);
3340 + use_collation = TRUE;
3344 + } else if (_tmp3_ == ((0 != _tmp2_label2) ? _tmp2_label2 : (_tmp2_label2 = g_quark_from_static_string ("dc:creator")))) {
3348 + gchar* _tmp6_ = NULL;
3349 + _tmp6_ = g_strdup ("creator");
3350 + _g_free0 (column);
3352 + use_collation = TRUE;
3360 + gchar* message = NULL;
3361 + const gchar* _tmp7_ = NULL;
3362 + gchar* _tmp8_ = NULL;
3363 + const gchar* _tmp9_ = NULL;
3364 + GError* _tmp10_ = NULL;
3366 + _tmp8_ = g_strdup_printf ("Unsupported column %s", _tmp7_);
3369 + _tmp10_ = g_error_new_literal (RYGEL_LMS_CATEGORY_CONTAINER_ERROR, RYGEL_LMS_CATEGORY_CONTAINER_ERROR_UNSUPPORTED_SEARCH, _tmp9_);
3370 + _inner_error_ = _tmp10_;
3371 + g_propagate_error (error, _inner_error_);
3372 + _g_free0 (message);
3373 + _g_free0 (column);
3378 + _tmp11_ = use_collation;
3380 + gchar* _tmp12_ = NULL;
3381 + _tmp12_ = g_strdup ("COLLATE CASEFOLD");
3382 + _g_free0 (_vala_collate);
3383 + _vala_collate = _tmp12_;
3385 + gchar* _tmp13_ = NULL;
3386 + _tmp13_ = g_strdup ("");
3387 + _g_free0 (_vala_collate);
3388 + _vala_collate = _tmp13_;
3392 + *collate = _vala_collate;
3394 + _g_free0 (_vala_collate);
3400 +static void _vala_GValue_free (GValue* self) {
3401 + g_value_unset (self);
3406 +static gchar* rygel_lms_category_container_relational_expression_to_sql (RygelRelationalExpression* exp, GValueArray* args, GError** error) {
3407 + gchar* result = NULL;
3409 + gchar* collate = NULL;
3410 + gchar* column = NULL;
3411 + RygelRelationalExpression* _tmp0_ = NULL;
3412 + gconstpointer _tmp1_ = NULL;
3413 + gchar* _tmp2_ = NULL;
3414 + gchar* _tmp3_ = NULL;
3415 + RygelLMSSqlOperator* operator = NULL;
3416 + RygelRelationalExpression* _tmp4_ = NULL;
3417 + gconstpointer _tmp5_ = NULL;
3418 + GValue* _tmp40_ = NULL;
3419 + RygelLMSSqlOperator* _tmp44_ = NULL;
3420 + gchar* _tmp45_ = NULL;
3421 + GError * _inner_error_ = NULL;
3422 + g_return_val_if_fail (exp != NULL, NULL);
3423 + g_return_val_if_fail (args != NULL, NULL);
3427 + _tmp1_ = ((RygelSearchExpression*) _tmp0_)->operand1;
3428 + _tmp3_ = rygel_lms_category_container_map_operand_to_column ((const gchar*) _tmp1_, &_tmp2_, FALSE, &_inner_error_);
3429 + _g_free0 (collate);
3432 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3433 + g_propagate_error (error, _inner_error_);
3434 + _g_free0 (collate);
3435 + __vala_GValue_free0 (v);
3439 + _tmp5_ = ((RygelSearchExpression*) _tmp4_)->op;
3440 + switch ((GUPnPSearchCriteriaOp) ((gintptr) _tmp5_)) {
3441 + case GUPNP_SEARCH_CRITERIA_OP_EXISTS:
3443 + gchar* sql_function = NULL;
3444 + RygelRelationalExpression* _tmp6_ = NULL;
3445 + gconstpointer _tmp7_ = NULL;
3446 + const gchar* _tmp10_ = NULL;
3447 + const gchar* _tmp11_ = NULL;
3448 + const gchar* _tmp12_ = NULL;
3449 + gchar* _tmp13_ = NULL;
3451 + _tmp7_ = ((RygelSearchExpression*) _tmp6_)->operand2;
3452 + if (g_strcmp0 ((const gchar*) _tmp7_, "true") == 0) {
3453 + gchar* _tmp8_ = NULL;
3454 + _tmp8_ = g_strdup ("%s IS NOT NULL AND %s != ''");
3455 + _g_free0 (sql_function);
3456 + sql_function = _tmp8_;
3458 + gchar* _tmp9_ = NULL;
3459 + _tmp9_ = g_strdup ("%s IS NULL OR %s = ''");
3460 + _g_free0 (sql_function);
3461 + sql_function = _tmp9_;
3463 + _tmp10_ = sql_function;
3466 + _tmp13_ = g_strdup_printf (_tmp10_, _tmp11_, _tmp12_);
3468 + _g_free0 (sql_function);
3469 + _g_object_unref0 (operator);
3470 + _g_free0 (column);
3471 + _g_free0 (collate);
3472 + __vala_GValue_free0 (v);
3475 + case GUPNP_SEARCH_CRITERIA_OP_EQ:
3476 + case GUPNP_SEARCH_CRITERIA_OP_NEQ:
3477 + case GUPNP_SEARCH_CRITERIA_OP_LESS:
3478 + case GUPNP_SEARCH_CRITERIA_OP_LEQ:
3479 + case GUPNP_SEARCH_CRITERIA_OP_GREATER:
3480 + case GUPNP_SEARCH_CRITERIA_OP_GEQ:
3482 + RygelRelationalExpression* _tmp14_ = NULL;
3483 + gconstpointer _tmp15_ = NULL;
3484 + GValue* _tmp16_ = NULL;
3485 + RygelRelationalExpression* _tmp17_ = NULL;
3486 + gconstpointer _tmp18_ = NULL;
3487 + const gchar* _tmp19_ = NULL;
3488 + const gchar* _tmp20_ = NULL;
3489 + RygelLMSSqlOperator* _tmp21_ = NULL;
3491 + _tmp15_ = ((RygelSearchExpression*) _tmp14_)->operand2;
3492 + _tmp16_ = g_new0 (GValue, 1);
3493 + g_value_init (_tmp16_, G_TYPE_STRING);
3494 + g_value_set_string (_tmp16_, (const gchar*) _tmp15_);
3495 + __vala_GValue_free0 (v);
3498 + _tmp18_ = ((RygelSearchExpression*) _tmp17_)->op;
3500 + _tmp20_ = collate;
3501 + _tmp21_ = rygel_lms_sql_operator_new_from_search_criteria_op ((GUPnPSearchCriteriaOp) ((gintptr) _tmp18_), _tmp19_, _tmp20_);
3502 + _g_object_unref0 (operator);
3503 + operator = _tmp21_;
3506 + case GUPNP_SEARCH_CRITERIA_OP_CONTAINS:
3508 + const gchar* _tmp22_ = NULL;
3509 + RygelLMSSqlFunction* _tmp23_ = NULL;
3510 + RygelRelationalExpression* _tmp24_ = NULL;
3511 + gconstpointer _tmp25_ = NULL;
3512 + GValue* _tmp26_ = NULL;
3514 + _tmp23_ = rygel_lms_sql_function_new ("contains", _tmp22_);
3515 + _g_object_unref0 (operator);
3516 + operator = (RygelLMSSqlOperator*) _tmp23_;
3518 + _tmp25_ = ((RygelSearchExpression*) _tmp24_)->operand2;
3519 + _tmp26_ = g_new0 (GValue, 1);
3520 + g_value_init (_tmp26_, G_TYPE_STRING);
3521 + g_value_set_string (_tmp26_, (const gchar*) _tmp25_);
3522 + __vala_GValue_free0 (v);
3526 + case GUPNP_SEARCH_CRITERIA_OP_DOES_NOT_CONTAIN:
3528 + const gchar* _tmp27_ = NULL;
3529 + RygelLMSSqlFunction* _tmp28_ = NULL;
3530 + RygelRelationalExpression* _tmp29_ = NULL;
3531 + gconstpointer _tmp30_ = NULL;
3532 + GValue* _tmp31_ = NULL;
3534 + _tmp28_ = rygel_lms_sql_function_new ("NOT contains", _tmp27_);
3535 + _g_object_unref0 (operator);
3536 + operator = (RygelLMSSqlOperator*) _tmp28_;
3538 + _tmp30_ = ((RygelSearchExpression*) _tmp29_)->operand2;
3539 + _tmp31_ = g_new0 (GValue, 1);
3540 + g_value_init (_tmp31_, G_TYPE_STRING);
3541 + g_value_set_string (_tmp31_, (const gchar*) _tmp30_);
3542 + __vala_GValue_free0 (v);
3546 + case GUPNP_SEARCH_CRITERIA_OP_DERIVED_FROM:
3548 + const gchar* _tmp32_ = NULL;
3549 + RygelLMSSqlOperator* _tmp33_ = NULL;
3550 + RygelRelationalExpression* _tmp34_ = NULL;
3551 + gconstpointer _tmp35_ = NULL;
3552 + gchar* _tmp36_ = NULL;
3553 + GValue* _tmp37_ = NULL;
3555 + _tmp33_ = rygel_lms_sql_operator_new ("LIKE", _tmp32_, "");
3556 + _g_object_unref0 (operator);
3557 + operator = _tmp33_;
3559 + _tmp35_ = ((RygelSearchExpression*) _tmp34_)->operand2;
3560 + _tmp36_ = g_strdup_printf ("%s%%", (const gchar*) _tmp35_);
3561 + _tmp37_ = g_new0 (GValue, 1);
3562 + g_value_init (_tmp37_, G_TYPE_STRING);
3563 + g_value_take_string (_tmp37_, _tmp36_);
3564 + __vala_GValue_free0 (v);
3570 + RygelRelationalExpression* _tmp38_ = NULL;
3571 + gconstpointer _tmp39_ = NULL;
3573 + _tmp39_ = ((RygelSearchExpression*) _tmp38_)->op;
3574 + g_warning ("rygel-lms-category-container.vala:148: Unsupported op %d", (gint) ((GUPnPSearchCriteriaOp) ((gintptr) _tmp39_)));
3576 + _g_object_unref0 (operator);
3577 + _g_free0 (column);
3578 + _g_free0 (collate);
3579 + __vala_GValue_free0 (v);
3584 + if (_tmp40_ != NULL) {
3585 + GValueArray* _tmp41_ = NULL;
3586 + GValue* _tmp42_ = NULL;
3587 + GValue _tmp43_ = {0};
3590 + _tmp43_ = *_tmp42_;
3591 + g_value_array_append (_tmp41_, &_tmp43_);
3593 + _tmp44_ = operator;
3594 + _tmp45_ = rygel_lms_sql_operator_to_string (_tmp44_);
3596 + _g_object_unref0 (operator);
3597 + _g_free0 (column);
3598 + _g_free0 (collate);
3599 + __vala_GValue_free0 (v);
3604 +static gchar* rygel_lms_category_container_logical_expression_to_sql (RygelLogicalExpression* expression, GValueArray* args, GError** error) {
3605 + gchar* result = NULL;
3606 + gchar* left_sql_string = NULL;
3607 + RygelLogicalExpression* _tmp0_ = NULL;
3608 + gconstpointer _tmp1_ = NULL;
3609 + GValueArray* _tmp2_ = NULL;
3610 + gchar* _tmp3_ = NULL;
3611 + gchar* right_sql_string = NULL;
3612 + RygelLogicalExpression* _tmp4_ = NULL;
3613 + gconstpointer _tmp5_ = NULL;
3614 + GValueArray* _tmp6_ = NULL;
3615 + gchar* _tmp7_ = NULL;
3616 + const gchar* operator_sql_string = NULL;
3617 + RygelLogicalExpression* _tmp8_ = NULL;
3618 + gconstpointer _tmp9_ = NULL;
3619 + const gchar* _tmp10_ = NULL;
3620 + const gchar* _tmp11_ = NULL;
3621 + const gchar* _tmp12_ = NULL;
3622 + gchar* _tmp13_ = NULL;
3623 + GError * _inner_error_ = NULL;
3624 + g_return_val_if_fail (expression != NULL, NULL);
3625 + g_return_val_if_fail (args != NULL, NULL);
3626 + _tmp0_ = expression;
3627 + _tmp1_ = ((RygelSearchExpression*) _tmp0_)->operand1;
3629 + _tmp3_ = rygel_lms_category_container_search_expression_to_sql ((RygelSearchExpression*) _tmp1_, _tmp2_, &_inner_error_);
3630 + left_sql_string = _tmp3_;
3631 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3632 + g_propagate_error (error, _inner_error_);
3635 + _tmp4_ = expression;
3636 + _tmp5_ = ((RygelSearchExpression*) _tmp4_)->operand2;
3638 + _tmp7_ = rygel_lms_category_container_search_expression_to_sql ((RygelSearchExpression*) _tmp5_, _tmp6_, &_inner_error_);
3639 + right_sql_string = _tmp7_;
3640 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3641 + g_propagate_error (error, _inner_error_);
3642 + _g_free0 (left_sql_string);
3645 + operator_sql_string = "OR";
3646 + _tmp8_ = expression;
3647 + _tmp9_ = ((RygelSearchExpression*) _tmp8_)->op;
3648 + if (((RygelLogicalOperator) ((gintptr) _tmp9_)) == RYGEL_LOGICAL_OPERATOR_AND) {
3649 + operator_sql_string = "AND";
3651 + _tmp10_ = left_sql_string;
3652 + _tmp11_ = operator_sql_string;
3653 + _tmp12_ = right_sql_string;
3654 + _tmp13_ = g_strdup_printf ("(%s %s %s)", _tmp10_, _tmp11_, _tmp12_);
3656 + _g_free0 (right_sql_string);
3657 + _g_free0 (left_sql_string);
3662 +static gchar* rygel_lms_category_container_search_expression_to_sql (RygelSearchExpression* expression, GValueArray* args, GError** error) {
3663 + gchar* result = NULL;
3664 + RygelSearchExpression* _tmp0_ = NULL;
3665 + RygelSearchExpression* _tmp2_ = NULL;
3666 + GError * _inner_error_ = NULL;
3667 + g_return_val_if_fail (args != NULL, NULL);
3668 + _tmp0_ = expression;
3669 + if (_tmp0_ == NULL) {
3670 + gchar* _tmp1_ = NULL;
3671 + _tmp1_ = g_strdup ("");
3675 + _tmp2_ = expression;
3676 + if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, RYGEL_TYPE_LOGICAL_EXPRESSION)) {
3677 + gchar* _tmp3_ = NULL;
3678 + RygelSearchExpression* _tmp4_ = NULL;
3679 + GValueArray* _tmp5_ = NULL;
3680 + gchar* _tmp6_ = NULL;
3681 + gchar* _tmp7_ = NULL;
3682 + _tmp4_ = expression;
3684 + _tmp6_ = rygel_lms_category_container_logical_expression_to_sql (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, RYGEL_TYPE_LOGICAL_EXPRESSION) ? ((RygelLogicalExpression*) _tmp4_) : NULL, _tmp5_, &_inner_error_);
3686 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3687 + g_propagate_error (error, _inner_error_);
3693 + _g_free0 (_tmp3_);
3696 + gchar* _tmp8_ = NULL;
3697 + RygelSearchExpression* _tmp9_ = NULL;
3698 + GValueArray* _tmp10_ = NULL;
3699 + gchar* _tmp11_ = NULL;
3700 + gchar* _tmp12_ = NULL;
3701 + _tmp9_ = expression;
3703 + _tmp11_ = rygel_lms_category_container_relational_expression_to_sql (G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, RYGEL_TYPE_RELATIONAL_EXPRESSION) ? ((RygelRelationalExpression*) _tmp9_) : NULL, _tmp10_, &_inner_error_);
3705 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3706 + g_propagate_error (error, _inner_error_);
3712 + _g_free0 (_tmp8_);
3718 +static guint rygel_lms_category_container_real_get_child_count_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args) {
3719 + guint result = 0U;
3720 + gchar* query = NULL;
3721 + const gchar* _tmp0_ = NULL;
3722 + gchar* _tmp1_ = NULL;
3723 + GError * _inner_error_ = NULL;
3724 + g_return_val_if_fail (where_filter != NULL, 0U);
3725 + g_return_val_if_fail (args != NULL, 0U);
3726 + _tmp0_ = where_filter;
3727 + _tmp1_ = rygel_lms_category_container_get_sql_count_with_filter (self, _tmp0_);
3730 + sqlite3_stmt* stmt = NULL;
3731 + RygelLMSDatabase* _tmp2_ = NULL;
3732 + const gchar* _tmp3_ = NULL;
3733 + GValueArray* _tmp4_ = NULL;
3734 + GValue* _tmp5_ = NULL;
3735 + gint _tmp5__length1 = 0;
3736 + sqlite3_stmt* _tmp6_ = NULL;
3737 + sqlite3_stmt* _tmp7_ = NULL;
3739 + sqlite3_stmt* _tmp9_ = NULL;
3741 + _tmp2_ = self->priv->_lms_db;
3744 + _tmp5_ = _tmp4_->values;
3745 + _tmp5__length1 = (gint) _tmp4_->n_values;
3746 + _tmp6_ = rygel_lms_database_prepare_and_init (_tmp2_, _tmp3_, _tmp5_, _tmp5__length1, &_inner_error_);
3748 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3749 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
3750 + goto __catch2_rygel_lms_database_error;
3753 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
3754 + g_clear_error (&_inner_error_);
3758 + _tmp8_ = sqlite3_step (_tmp7_);
3759 + if (_tmp8_ != SQLITE_ROW) {
3760 + result = (guint) 0;
3761 + _sqlite3_finalize0 (stmt);
3766 + _tmp10_ = sqlite3_column_int (_tmp9_, 0);
3767 + result = (guint) _tmp10_;
3768 + _sqlite3_finalize0 (stmt);
3773 + __catch2_rygel_lms_database_error:
3776 + GError* _tmp11_ = NULL;
3777 + const gchar* _tmp12_ = NULL;
3778 + e = _inner_error_;
3779 + _inner_error_ = NULL;
3781 + _tmp12_ = _tmp11_->message;
3782 + g_warning ("rygel-lms-category-container.vala:209: Query failed: %s", _tmp12_);
3783 + result = (guint) 0;
3784 + _g_error_free0 (e);
3790 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
3791 + g_clear_error (&_inner_error_);
3796 +guint rygel_lms_category_container_get_child_count_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args) {
3797 + g_return_val_if_fail (self != NULL, 0U);
3798 + return RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS (self)->get_child_count_with_filter (self, where_filter, args);
3802 +static RygelMediaObjects* rygel_lms_category_container_real_get_children_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count) {
3803 + RygelMediaObjects* result = NULL;
3804 + RygelMediaObjects* children = NULL;
3805 + RygelMediaObjects* _tmp0_ = NULL;
3807 + guint _tmp1_ = 0U;
3808 + GValue _tmp2_ = {0};
3809 + GValueArray* _tmp3_ = NULL;
3810 + GValue _tmp4_ = {0};
3811 + guint _tmp5_ = 0U;
3812 + GValue _tmp6_ = {0};
3813 + GValueArray* _tmp7_ = NULL;
3814 + GValue _tmp8_ = {0};
3815 + gchar* query = NULL;
3816 + const gchar* _tmp9_ = NULL;
3817 + gchar* _tmp10_ = NULL;
3818 + GError * _inner_error_ = NULL;
3819 + g_return_val_if_fail (where_filter != NULL, NULL);
3820 + g_return_val_if_fail (args != NULL, NULL);
3821 + g_return_val_if_fail (sort_criteria != NULL, NULL);
3822 + _tmp0_ = rygel_media_objects_new ();
3823 + children = _tmp0_;
3824 + _tmp1_ = max_count;
3825 + g_value_init (&_tmp2_, G_TYPE_UINT);
3826 + g_value_set_uint (&_tmp2_, _tmp1_);
3830 + g_value_array_append (_tmp3_, &_tmp4_);
3832 + g_value_init (&_tmp6_, G_TYPE_UINT);
3833 + g_value_set_uint (&_tmp6_, _tmp5_);
3834 + G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
3838 + g_value_array_append (_tmp7_, &_tmp8_);
3839 + _tmp9_ = where_filter;
3840 + _tmp10_ = rygel_lms_category_container_get_sql_all_with_filter (self, _tmp9_);
3843 + sqlite3_stmt* stmt = NULL;
3844 + RygelLMSDatabase* _tmp11_ = NULL;
3845 + const gchar* _tmp12_ = NULL;
3846 + GValueArray* _tmp13_ = NULL;
3847 + GValue* _tmp14_ = NULL;
3848 + gint _tmp14__length1 = 0;
3849 + sqlite3_stmt* _tmp15_ = NULL;
3850 + _tmp11_ = self->priv->_lms_db;
3853 + _tmp14_ = _tmp13_->values;
3854 + _tmp14__length1 = (gint) _tmp13_->n_values;
3855 + _tmp15_ = rygel_lms_database_prepare_and_init (_tmp11_, _tmp12_, _tmp14_, _tmp14__length1, &_inner_error_);
3857 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3858 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
3859 + goto __catch3_rygel_lms_database_error;
3862 + G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
3863 + _g_object_unref0 (children);
3864 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
3865 + g_clear_error (&_inner_error_);
3869 + gboolean _tmp16_ = FALSE;
3870 + sqlite3_stmt* _tmp17_ = NULL;
3871 + gboolean _tmp18_ = FALSE;
3872 + RygelMediaObjects* _tmp19_ = NULL;
3873 + sqlite3_stmt* _tmp20_ = NULL;
3874 + RygelMediaObject* _tmp21_ = NULL;
3875 + RygelMediaObject* _tmp22_ = NULL;
3877 + _tmp18_ = rygel_lms_database_get_children_step (_tmp17_, &_inner_error_);
3878 + _tmp16_ = _tmp18_;
3879 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3880 + _sqlite3_finalize0 (stmt);
3881 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
3882 + goto __catch3_rygel_lms_database_error;
3884 + _sqlite3_finalize0 (stmt);
3886 + G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
3887 + _g_object_unref0 (children);
3888 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
3889 + g_clear_error (&_inner_error_);
3895 + _tmp19_ = children;
3897 + _tmp21_ = rygel_lms_category_container_object_from_statement (self, _tmp20_);
3898 + _tmp22_ = _tmp21_;
3899 + gee_abstract_collection_add ((GeeAbstractCollection*) _tmp19_, _tmp22_);
3900 + _g_object_unref0 (_tmp22_);
3902 + _sqlite3_finalize0 (stmt);
3905 + __catch3_rygel_lms_database_error:
3908 + GError* _tmp23_ = NULL;
3909 + const gchar* _tmp24_ = NULL;
3910 + e = _inner_error_;
3911 + _inner_error_ = NULL;
3913 + _tmp24_ = _tmp23_->message;
3914 + g_warning ("rygel-lms-category-container.vala:232: Query failed: %s", _tmp24_);
3915 + _g_error_free0 (e);
3918 + if (G_UNLIKELY (_inner_error_ != NULL)) {
3920 + G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
3921 + _g_object_unref0 (children);
3922 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
3923 + g_clear_error (&_inner_error_);
3926 + result = children;
3928 + G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
3933 +RygelMediaObjects* rygel_lms_category_container_get_children_with_filter (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count) {
3934 + g_return_val_if_fail (self != NULL, NULL);
3935 + return RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS (self)->get_children_with_filter (self, where_filter, args, sort_criteria, offset, max_count);
3939 +static void rygel_lms_category_container_real_search_data_free (gpointer _data) {
3940 + RygelLmsCategoryContainerSearchData* _data_;
3942 + _rygel_search_expression_unref0 (_data_->expression);
3943 + _g_free0 (_data_->sort_criteria);
3944 + _g_object_unref0 (_data_->cancellable);
3945 + _g_object_unref0 (_data_->result);
3946 + _g_object_unref0 (_data_->self);
3947 + g_slice_free (RygelLmsCategoryContainerSearchData, _data_);
3951 +static gpointer _g_object_ref0 (gpointer self) {
3952 + return self ? g_object_ref (self) : NULL;
3956 +static gpointer _rygel_search_expression_ref0 (gpointer self) {
3957 + return self ? rygel_search_expression_ref (self) : NULL;
3961 +static void rygel_lms_category_container_real_search (RygelSearchableContainer* base, RygelSearchExpression* expression, guint offset, guint max_count, const gchar* sort_criteria, GCancellable* cancellable, GAsyncReadyCallback _callback_, gpointer _user_data_) {
3962 + RygelLMSCategoryContainer * self;
3963 + RygelLmsCategoryContainerSearchData* _data_;
3964 + RygelLMSCategoryContainer* _tmp0_ = NULL;
3965 + RygelSearchExpression* _tmp1_ = NULL;
3966 + RygelSearchExpression* _tmp2_ = NULL;
3967 + guint _tmp3_ = 0U;
3968 + guint _tmp4_ = 0U;
3969 + const gchar* _tmp5_ = NULL;
3970 + gchar* _tmp6_ = NULL;
3971 + GCancellable* _tmp7_ = NULL;
3972 + GCancellable* _tmp8_ = NULL;
3973 + self = (RygelLMSCategoryContainer*) base;
3974 + _data_ = g_slice_new0 (RygelLmsCategoryContainerSearchData);
3975 + _data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, rygel_lms_category_container_real_search);
3976 + g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, rygel_lms_category_container_real_search_data_free);
3977 + _tmp0_ = _g_object_ref0 (self);
3978 + _data_->self = _tmp0_;
3979 + _tmp1_ = expression;
3980 + _tmp2_ = _rygel_search_expression_ref0 (_tmp1_);
3981 + _rygel_search_expression_unref0 (_data_->expression);
3982 + _data_->expression = _tmp2_;
3984 + _data_->offset = _tmp3_;
3985 + _tmp4_ = max_count;
3986 + _data_->max_count = _tmp4_;
3987 + _tmp5_ = sort_criteria;
3988 + _tmp6_ = g_strdup (_tmp5_);
3989 + _g_free0 (_data_->sort_criteria);
3990 + _data_->sort_criteria = _tmp6_;
3991 + _tmp7_ = cancellable;
3992 + _tmp8_ = _g_object_ref0 (_tmp7_);
3993 + _g_object_unref0 (_data_->cancellable);
3994 + _data_->cancellable = _tmp8_;
3995 + rygel_lms_category_container_real_search_co (_data_);
3999 +static RygelMediaObjects* rygel_lms_category_container_real_search_finish (RygelSearchableContainer* base, GAsyncResult* _res_, guint* total_matches, GError** error) {
4000 + RygelMediaObjects* result;
4001 + RygelLmsCategoryContainerSearchData* _data_;
4002 + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
4005 + _data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
4006 + if (total_matches) {
4007 + *total_matches = _data_->total_matches;
4009 + result = _data_->result;
4010 + _data_->result = NULL;
4015 +static void rygel_lms_category_container_search_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
4016 + RygelLmsCategoryContainerSearchData* _data_;
4017 + _data_ = _user_data_;
4018 + _data_->_source_object_ = source_object;
4019 + _data_->_res_ = _res_;
4020 + rygel_lms_category_container_real_search_co (_data_);
4024 +static gboolean rygel_lms_category_container_real_search_co (RygelLmsCategoryContainerSearchData* _data_) {
4025 + switch (_data_->_state_) {
4031 + g_assert_not_reached ();
4034 + g_debug ("rygel-lms-category-container.vala:245: search()");
4036 + _data_->_tmp0_ = NULL;
4037 + _data_->_tmp0_ = g_value_array_new ((guint) 0);
4038 + _data_->args = _data_->_tmp0_;
4039 + _data_->_tmp1_ = NULL;
4040 + _data_->_tmp1_ = _data_->expression;
4041 + _data_->_tmp2_ = NULL;
4042 + _data_->_tmp2_ = _data_->args;
4043 + _data_->_tmp3_ = NULL;
4044 + _data_->_tmp3_ = rygel_lms_category_container_search_expression_to_sql (_data_->_tmp1_, _data_->_tmp2_, &_data_->_inner_error_);
4045 + _data_->filter = _data_->_tmp3_;
4046 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4047 + _g_value_array_free0 (_data_->args);
4048 + goto __catch4_g_error;
4050 + _data_->_tmp4_ = NULL;
4051 + _data_->_tmp4_ = _data_->filter;
4052 + _data_->_tmp5_ = NULL;
4053 + _data_->_tmp5_ = _data_->args;
4054 + _data_->_tmp6_ = 0U;
4055 + _data_->_tmp6_ = rygel_lms_category_container_get_child_count_with_filter (_data_->self, _data_->_tmp4_, _data_->_tmp5_);
4056 + _data_->total_matches = _data_->_tmp6_;
4057 + _data_->_tmp7_ = NULL;
4058 + _data_->_tmp7_ = _data_->expression;
4059 + if (_data_->_tmp7_ != NULL) {
4060 + _data_->_tmp8_ = NULL;
4061 + _data_->_tmp8_ = _data_->expression;
4062 + _data_->_tmp9_ = NULL;
4063 + _data_->_tmp9_ = rygel_search_expression_to_string (_data_->_tmp8_);
4064 + _data_->_tmp10_ = NULL;
4065 + _data_->_tmp10_ = _data_->_tmp9_;
4066 + g_debug ("rygel-lms-category-container.vala:253: Original search: %s", _data_->_tmp10_);
4067 + _g_free0 (_data_->_tmp10_);
4068 + _data_->_tmp11_ = NULL;
4069 + _data_->_tmp11_ = _data_->filter;
4070 + g_debug ("rygel-lms-category-container.vala:254: Parsed search expression: %s", _data_->_tmp11_);
4071 + _data_->_tmp12_ = 0U;
4072 + _data_->_tmp12_ = _data_->total_matches;
4073 + g_debug ("rygel-lms-category-container.vala:255: Filtered cild count is %u", _data_->_tmp12_);
4075 + _data_->_tmp13_ = 0U;
4076 + _data_->_tmp13_ = _data_->max_count;
4077 + if (_data_->_tmp13_ == ((guint) 0)) {
4078 + _data_->max_count = G_MAXUINT;
4080 + _data_->_tmp14_ = NULL;
4081 + _data_->_tmp14_ = _data_->filter;
4082 + _data_->_tmp15_ = NULL;
4083 + _data_->_tmp15_ = _data_->args;
4084 + _data_->_tmp16_ = NULL;
4085 + _data_->_tmp16_ = _data_->sort_criteria;
4086 + _data_->_tmp17_ = 0U;
4087 + _data_->_tmp17_ = _data_->offset;
4088 + _data_->_tmp18_ = 0U;
4089 + _data_->_tmp18_ = _data_->max_count;
4090 + _data_->_tmp19_ = NULL;
4091 + _data_->_tmp19_ = rygel_lms_category_container_get_children_with_filter (_data_->self, _data_->_tmp14_, _data_->_tmp15_, _data_->_tmp16_, _data_->_tmp17_, _data_->_tmp18_);
4092 + _data_->result = _data_->_tmp19_;
4093 + _g_free0 (_data_->filter);
4094 + _g_value_array_free0 (_data_->args);
4095 + if (_data_->_state_ == 0) {
4096 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4098 + g_simple_async_result_complete (_data_->_async_result);
4100 + g_object_unref (_data_->_async_result);
4106 + _data_->e = _data_->_inner_error_;
4107 + _data_->_inner_error_ = NULL;
4108 + _data_->_tmp20_ = NULL;
4109 + _data_->_tmp20_ = _data_->e;
4110 + _data_->_tmp21_ = NULL;
4111 + _data_->_tmp21_ = _data_->_tmp20_->message;
4112 + g_debug ("rygel-lms-category-container.vala:267: Falling back to simple_search" \
4113 +"(): %s", _data_->_tmp21_);
4114 + _data_->_tmp23_ = NULL;
4115 + _data_->_tmp23_ = _data_->expression;
4116 + _data_->_tmp24_ = 0U;
4117 + _data_->_tmp24_ = _data_->offset;
4118 + _data_->_tmp25_ = 0U;
4119 + _data_->_tmp25_ = _data_->max_count;
4120 + _data_->_tmp26_ = NULL;
4121 + _data_->_tmp26_ = _data_->sort_criteria;
4122 + _data_->_tmp27_ = NULL;
4123 + _data_->_tmp27_ = _data_->cancellable;
4124 + _data_->_tmp28_ = 0U;
4125 + _data_->_state_ = 1;
4126 + rygel_searchable_container_simple_search ((RygelSearchableContainer*) _data_->self, _data_->_tmp23_, _data_->_tmp24_, _data_->_tmp25_, _data_->_tmp26_, _data_->_tmp27_, rygel_lms_category_container_search_ready, _data_);
4129 + _data_->_tmp29_ = NULL;
4130 + _data_->_tmp29_ = rygel_searchable_container_simple_search_finish ((RygelSearchableContainer*) _data_->self, _data_->_res_, &_data_->_tmp28_, &_data_->_inner_error_);
4131 + _data_->total_matches = _data_->_tmp28_;
4132 + _data_->_tmp22_ = _data_->_tmp29_;
4133 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4134 + _g_error_free0 (_data_->e);
4137 + _data_->_tmp30_ = NULL;
4138 + _data_->_tmp30_ = _data_->_tmp22_;
4139 + _data_->_tmp22_ = NULL;
4140 + _data_->result = _data_->_tmp30_;
4141 + _g_object_unref0 (_data_->_tmp22_);
4142 + _g_error_free0 (_data_->e);
4143 + if (_data_->_state_ == 0) {
4144 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4146 + g_simple_async_result_complete (_data_->_async_result);
4148 + g_object_unref (_data_->_async_result);
4152 + g_simple_async_result_set_from_error (_data_->_async_result, _data_->_inner_error_);
4153 + g_error_free (_data_->_inner_error_);
4154 + if (_data_->_state_ == 0) {
4155 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4157 + g_simple_async_result_complete (_data_->_async_result);
4159 + g_object_unref (_data_->_async_result);
4161 + if (_data_->_state_ == 0) {
4162 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4164 + g_simple_async_result_complete (_data_->_async_result);
4166 + g_object_unref (_data_->_async_result);
4171 +static void rygel_lms_category_container_real_get_children_data_free (gpointer _data) {
4172 + RygelLmsCategoryContainerGetChildrenData* _data_;
4174 + _g_free0 (_data_->sort_criteria);
4175 + _g_object_unref0 (_data_->cancellable);
4176 + _g_object_unref0 (_data_->result);
4177 + _g_object_unref0 (_data_->self);
4178 + g_slice_free (RygelLmsCategoryContainerGetChildrenData, _data_);
4182 +static void rygel_lms_category_container_real_get_children (RygelMediaContainer* base, guint offset, guint max_count, const gchar* sort_criteria, GCancellable* cancellable, GAsyncReadyCallback _callback_, gpointer _user_data_) {
4183 + RygelLMSCategoryContainer * self;
4184 + RygelLmsCategoryContainerGetChildrenData* _data_;
4185 + RygelLMSCategoryContainer* _tmp0_ = NULL;
4186 + guint _tmp1_ = 0U;
4187 + guint _tmp2_ = 0U;
4188 + const gchar* _tmp3_ = NULL;
4189 + gchar* _tmp4_ = NULL;
4190 + GCancellable* _tmp5_ = NULL;
4191 + GCancellable* _tmp6_ = NULL;
4192 + self = (RygelLMSCategoryContainer*) base;
4193 + _data_ = g_slice_new0 (RygelLmsCategoryContainerGetChildrenData);
4194 + _data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, rygel_lms_category_container_real_get_children);
4195 + g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, rygel_lms_category_container_real_get_children_data_free);
4196 + _tmp0_ = _g_object_ref0 (self);
4197 + _data_->self = _tmp0_;
4199 + _data_->offset = _tmp1_;
4200 + _tmp2_ = max_count;
4201 + _data_->max_count = _tmp2_;
4202 + _tmp3_ = sort_criteria;
4203 + _tmp4_ = g_strdup (_tmp3_);
4204 + _g_free0 (_data_->sort_criteria);
4205 + _data_->sort_criteria = _tmp4_;
4206 + _tmp5_ = cancellable;
4207 + _tmp6_ = _g_object_ref0 (_tmp5_);
4208 + _g_object_unref0 (_data_->cancellable);
4209 + _data_->cancellable = _tmp6_;
4210 + rygel_lms_category_container_real_get_children_co (_data_);
4214 +static RygelMediaObjects* rygel_lms_category_container_real_get_children_finish (RygelMediaContainer* base, GAsyncResult* _res_, GError** error) {
4215 + RygelMediaObjects* result;
4216 + RygelLmsCategoryContainerGetChildrenData* _data_;
4217 + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
4220 + _data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
4221 + result = _data_->result;
4222 + _data_->result = NULL;
4227 +static gboolean rygel_lms_category_container_real_get_children_co (RygelLmsCategoryContainerGetChildrenData* _data_) {
4228 + switch (_data_->_state_) {
4232 + g_assert_not_reached ();
4235 + _data_->_tmp0_ = NULL;
4236 + _data_->_tmp0_ = rygel_media_objects_new ();
4237 + _data_->retval = _data_->_tmp0_;
4238 + _data_->_tmp1_ = NULL;
4239 + _data_->_tmp1_ = _data_->self->stmt_all;
4240 + _data_->_tmp2_ = 0U;
4241 + _data_->_tmp2_ = _data_->offset;
4242 + _data_->_tmp3_ = 0U;
4243 + _data_->_tmp3_ = _data_->max_count;
4244 + _data_->_tmp4_ = NULL;
4245 + _data_->_tmp4_ = _data_->sort_criteria;
4246 + rygel_lms_database_get_children_init (_data_->_tmp1_, _data_->_tmp2_, _data_->_tmp3_, _data_->_tmp4_, &_data_->_inner_error_);
4247 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4248 + g_simple_async_result_set_from_error (_data_->_async_result, _data_->_inner_error_);
4249 + g_error_free (_data_->_inner_error_);
4250 + _g_object_unref0 (_data_->retval);
4251 + if (_data_->_state_ == 0) {
4252 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4254 + g_simple_async_result_complete (_data_->_async_result);
4256 + g_object_unref (_data_->_async_result);
4260 + _data_->_tmp6_ = NULL;
4261 + _data_->_tmp6_ = _data_->self->stmt_all;
4262 + _data_->_tmp7_ = FALSE;
4263 + _data_->_tmp7_ = rygel_lms_database_get_children_step (_data_->_tmp6_, &_data_->_inner_error_);
4264 + _data_->_tmp5_ = _data_->_tmp7_;
4265 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4266 + g_simple_async_result_set_from_error (_data_->_async_result, _data_->_inner_error_);
4267 + g_error_free (_data_->_inner_error_);
4268 + _g_object_unref0 (_data_->retval);
4269 + if (_data_->_state_ == 0) {
4270 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4272 + g_simple_async_result_complete (_data_->_async_result);
4274 + g_object_unref (_data_->_async_result);
4277 + if (!_data_->_tmp5_) {
4280 + _data_->_tmp8_ = NULL;
4281 + _data_->_tmp8_ = _data_->retval;
4282 + _data_->_tmp9_ = NULL;
4283 + _data_->_tmp9_ = _data_->self->stmt_all;
4284 + _data_->_tmp10_ = NULL;
4285 + _data_->_tmp10_ = rygel_lms_category_container_object_from_statement (_data_->self, _data_->_tmp9_);
4286 + _data_->_tmp11_ = NULL;
4287 + _data_->_tmp11_ = _data_->_tmp10_;
4288 + gee_abstract_collection_add ((GeeAbstractCollection*) _data_->_tmp8_, _data_->_tmp11_);
4289 + _g_object_unref0 (_data_->_tmp11_);
4291 + _data_->result = _data_->retval;
4292 + if (_data_->_state_ == 0) {
4293 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4295 + g_simple_async_result_complete (_data_->_async_result);
4297 + g_object_unref (_data_->_async_result);
4299 + _g_object_unref0 (_data_->retval);
4300 + if (_data_->_state_ == 0) {
4301 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4303 + g_simple_async_result_complete (_data_->_async_result);
4305 + g_object_unref (_data_->_async_result);
4310 +static void rygel_lms_category_container_real_find_object_data_free (gpointer _data) {
4311 + RygelLmsCategoryContainerFindObjectData* _data_;
4313 + _g_free0 (_data_->id);
4314 + _g_object_unref0 (_data_->cancellable);
4315 + _g_object_unref0 (_data_->result);
4316 + _g_object_unref0 (_data_->self);
4317 + g_slice_free (RygelLmsCategoryContainerFindObjectData, _data_);
4321 +static void rygel_lms_category_container_real_find_object (RygelMediaContainer* base, const gchar* id, GCancellable* cancellable, GAsyncReadyCallback _callback_, gpointer _user_data_) {
4322 + RygelLMSCategoryContainer * self;
4323 + RygelLmsCategoryContainerFindObjectData* _data_;
4324 + RygelLMSCategoryContainer* _tmp0_ = NULL;
4325 + const gchar* _tmp1_ = NULL;
4326 + gchar* _tmp2_ = NULL;
4327 + GCancellable* _tmp3_ = NULL;
4328 + GCancellable* _tmp4_ = NULL;
4329 + self = (RygelLMSCategoryContainer*) base;
4330 + _data_ = g_slice_new0 (RygelLmsCategoryContainerFindObjectData);
4331 + _data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, rygel_lms_category_container_real_find_object);
4332 + g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, rygel_lms_category_container_real_find_object_data_free);
4333 + _tmp0_ = _g_object_ref0 (self);
4334 + _data_->self = _tmp0_;
4336 + _tmp2_ = g_strdup (_tmp1_);
4337 + _g_free0 (_data_->id);
4338 + _data_->id = _tmp2_;
4339 + _tmp3_ = cancellable;
4340 + _tmp4_ = _g_object_ref0 (_tmp3_);
4341 + _g_object_unref0 (_data_->cancellable);
4342 + _data_->cancellable = _tmp4_;
4343 + rygel_lms_category_container_real_find_object_co (_data_);
4347 +static RygelMediaObject* rygel_lms_category_container_real_find_object_finish (RygelMediaContainer* base, GAsyncResult* _res_, GError** error) {
4348 + RygelMediaObject* result;
4349 + RygelLmsCategoryContainerFindObjectData* _data_;
4350 + if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
4353 + _data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
4354 + result = _data_->result;
4355 + _data_->result = NULL;
4360 +static glong string_strnlen (gchar* str, glong maxlen) {
4361 + glong result = 0L;
4362 + gchar* end = NULL;
4363 + gchar* _tmp0_ = NULL;
4364 + glong _tmp1_ = 0L;
4365 + gchar* _tmp2_ = NULL;
4366 + gchar* _tmp3_ = NULL;
4369 + _tmp2_ = memchr (_tmp0_, 0, (gsize) _tmp1_);
4372 + if (_tmp3_ == NULL) {
4373 + glong _tmp4_ = 0L;
4378 + gchar* _tmp5_ = NULL;
4379 + gchar* _tmp6_ = NULL;
4382 + result = (glong) (_tmp5_ - _tmp6_);
4388 +static gchar* string_substring (const gchar* self, glong offset, glong len) {
4389 + gchar* result = NULL;
4390 + glong string_length = 0L;
4391 + gboolean _tmp0_ = FALSE;
4392 + glong _tmp1_ = 0L;
4393 + glong _tmp8_ = 0L;
4394 + glong _tmp14_ = 0L;
4395 + glong _tmp17_ = 0L;
4396 + glong _tmp18_ = 0L;
4397 + glong _tmp19_ = 0L;
4398 + glong _tmp20_ = 0L;
4399 + glong _tmp21_ = 0L;
4400 + gchar* _tmp22_ = NULL;
4401 + g_return_val_if_fail (self != NULL, NULL);
4403 + if (_tmp1_ >= ((glong) 0)) {
4404 + glong _tmp2_ = 0L;
4406 + _tmp0_ = _tmp2_ >= ((glong) 0);
4411 + glong _tmp3_ = 0L;
4412 + glong _tmp4_ = 0L;
4413 + glong _tmp5_ = 0L;
4416 + _tmp5_ = string_strnlen ((gchar*) self, _tmp3_ + _tmp4_);
4417 + string_length = _tmp5_;
4421 + _tmp6_ = strlen (self);
4423 + string_length = (glong) _tmp7_;
4426 + if (_tmp8_ < ((glong) 0)) {
4427 + glong _tmp9_ = 0L;
4428 + glong _tmp10_ = 0L;
4429 + glong _tmp11_ = 0L;
4430 + _tmp9_ = string_length;
4432 + offset = _tmp9_ + _tmp10_;
4434 + g_return_val_if_fail (_tmp11_ >= ((glong) 0), NULL);
4436 + glong _tmp12_ = 0L;
4437 + glong _tmp13_ = 0L;
4439 + _tmp13_ = string_length;
4440 + g_return_val_if_fail (_tmp12_ <= _tmp13_, NULL);
4443 + if (_tmp14_ < ((glong) 0)) {
4444 + glong _tmp15_ = 0L;
4445 + glong _tmp16_ = 0L;
4446 + _tmp15_ = string_length;
4448 + len = _tmp15_ - _tmp16_;
4452 + _tmp19_ = string_length;
4453 + g_return_val_if_fail ((_tmp17_ + _tmp18_) <= _tmp19_, NULL);
4456 + _tmp22_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) _tmp21_);
4462 +static gint string_index_of_char (const gchar* self, gunichar c, gint start_index) {
4464 + gchar* _result_ = NULL;
4466 + gunichar _tmp1_ = 0U;
4467 + gchar* _tmp2_ = NULL;
4468 + gchar* _tmp3_ = NULL;
4469 + g_return_val_if_fail (self != NULL, 0);
4470 + _tmp0_ = start_index;
4472 + _tmp2_ = g_utf8_strchr (((gchar*) self) + _tmp0_, (gssize) (-1), _tmp1_);
4473 + _result_ = _tmp2_;
4474 + _tmp3_ = _result_;
4475 + if (_tmp3_ != NULL) {
4476 + gchar* _tmp4_ = NULL;
4477 + _tmp4_ = _result_;
4478 + result = (gint) (_tmp4_ - ((gchar*) self));
4487 +static gchar* string_slice (const gchar* self, glong start, glong end) {
4488 + gchar* result = NULL;
4489 + glong string_length = 0L;
4492 + glong _tmp2_ = 0L;
4493 + glong _tmp5_ = 0L;
4494 + gboolean _tmp8_ = FALSE;
4495 + glong _tmp9_ = 0L;
4496 + gboolean _tmp12_ = FALSE;
4497 + glong _tmp13_ = 0L;
4498 + glong _tmp16_ = 0L;
4499 + glong _tmp17_ = 0L;
4500 + glong _tmp18_ = 0L;
4501 + glong _tmp19_ = 0L;
4502 + glong _tmp20_ = 0L;
4503 + gchar* _tmp21_ = NULL;
4504 + g_return_val_if_fail (self != NULL, NULL);
4505 + _tmp0_ = strlen (self);
4507 + string_length = (glong) _tmp1_;
4509 + if (_tmp2_ < ((glong) 0)) {
4510 + glong _tmp3_ = 0L;
4511 + glong _tmp4_ = 0L;
4512 + _tmp3_ = string_length;
4514 + start = _tmp3_ + _tmp4_;
4517 + if (_tmp5_ < ((glong) 0)) {
4518 + glong _tmp6_ = 0L;
4519 + glong _tmp7_ = 0L;
4520 + _tmp6_ = string_length;
4522 + end = _tmp6_ + _tmp7_;
4525 + if (_tmp9_ >= ((glong) 0)) {
4526 + glong _tmp10_ = 0L;
4527 + glong _tmp11_ = 0L;
4529 + _tmp11_ = string_length;
4530 + _tmp8_ = _tmp10_ <= _tmp11_;
4534 + g_return_val_if_fail (_tmp8_, NULL);
4536 + if (_tmp13_ >= ((glong) 0)) {
4537 + glong _tmp14_ = 0L;
4538 + glong _tmp15_ = 0L;
4540 + _tmp15_ = string_length;
4541 + _tmp12_ = _tmp14_ <= _tmp15_;
4545 + g_return_val_if_fail (_tmp12_, NULL);
4548 + g_return_val_if_fail (_tmp16_ <= _tmp17_, NULL);
4552 + _tmp21_ = g_strndup (((gchar*) self) + _tmp18_, (gsize) (_tmp19_ - _tmp20_));
4558 +static void rygel_lms_category_container_find_object_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
4559 + RygelLmsCategoryContainerFindObjectData* _data_;
4560 + _data_ = _user_data_;
4561 + _data_->_source_object_ = source_object;
4562 + _data_->_res_ = _res_;
4563 + rygel_lms_category_container_real_find_object_co (_data_);
4567 +static gboolean rygel_lms_category_container_real_find_object_co (RygelLmsCategoryContainerFindObjectData* _data_) {
4568 + switch (_data_->_state_) {
4574 + g_assert_not_reached ();
4577 + _data_->_tmp0_ = NULL;
4578 + _data_->_tmp0_ = _data_->id;
4579 + _data_->_tmp1_ = NULL;
4580 + _data_->_tmp1_ = _data_->self->child_prefix;
4581 + _data_->_tmp2_ = FALSE;
4582 + _data_->_tmp2_ = g_str_has_prefix (_data_->_tmp0_, _data_->_tmp1_);
4583 + if (!_data_->_tmp2_) {
4584 + _data_->result = NULL;
4585 + if (_data_->_state_ == 0) {
4586 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4588 + g_simple_async_result_complete (_data_->_async_result);
4590 + g_object_unref (_data_->_async_result);
4593 + _data_->object = NULL;
4594 + _data_->_tmp3_ = NULL;
4595 + _data_->_tmp3_ = _data_->id;
4596 + _data_->_tmp4_ = NULL;
4597 + _data_->_tmp4_ = _data_->self->child_prefix;
4598 + _data_->_tmp5_ = 0;
4599 + _data_->_tmp5_ = strlen (_data_->_tmp4_);
4600 + _data_->_tmp6_ = 0;
4601 + _data_->_tmp6_ = _data_->_tmp5_;
4602 + _data_->_tmp7_ = NULL;
4603 + _data_->_tmp7_ = string_substring (_data_->_tmp3_, (glong) _data_->_tmp6_, (glong) (-1));
4604 + _data_->real_id = _data_->_tmp7_;
4605 + _data_->_tmp8_ = NULL;
4606 + _data_->_tmp8_ = _data_->real_id;
4607 + _data_->_tmp9_ = 0;
4608 + _data_->_tmp9_ = string_index_of_char (_data_->_tmp8_, (gunichar) ':', 0);
4609 + _data_->index = _data_->_tmp9_;
4610 + _data_->_tmp10_ = 0;
4611 + _data_->_tmp10_ = _data_->index;
4612 + if (_data_->_tmp10_ > 0) {
4613 + _data_->_tmp11_ = NULL;
4614 + _data_->_tmp11_ = _data_->real_id;
4615 + _data_->_tmp12_ = 0;
4616 + _data_->_tmp12_ = _data_->index;
4617 + _data_->_tmp13_ = NULL;
4618 + _data_->_tmp13_ = string_slice (_data_->_tmp11_, (glong) 0, (glong) _data_->_tmp12_);
4619 + _g_free0 (_data_->real_id);
4620 + _data_->real_id = _data_->_tmp13_;
4623 + _data_->_tmp14_ = NULL;
4624 + _data_->_tmp14_ = _data_->real_id;
4625 + _data_->_tmp15_ = NULL;
4626 + _data_->_tmp15_ = _data_->self->stmt_find_object;
4627 + rygel_lms_database_find_object (_data_->_tmp14_, _data_->_tmp15_, &_data_->_inner_error_);
4628 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4629 + if (_data_->_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4630 + goto __catch5_rygel_lms_database_error;
4632 + _g_free0 (_data_->real_id);
4633 + _g_object_unref0 (_data_->object);
4634 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _data_->_inner_error_->message, g_quark_to_string (_data_->_inner_error_->domain), _data_->_inner_error_->code);
4635 + g_clear_error (&_data_->_inner_error_);
4638 + _data_->_tmp16_ = NULL;
4639 + _data_->_tmp16_ = _data_->self->stmt_find_object;
4640 + _data_->_tmp17_ = NULL;
4641 + _data_->_tmp17_ = rygel_lms_category_container_object_from_statement (_data_->self, _data_->_tmp16_);
4642 + _data_->child = _data_->_tmp17_;
4643 + _data_->_tmp18_ = 0;
4644 + _data_->_tmp18_ = _data_->index;
4645 + if (_data_->_tmp18_ < 0) {
4646 + _data_->_tmp19_ = NULL;
4647 + _data_->_tmp19_ = _data_->child;
4648 + _data_->_tmp20_ = NULL;
4649 + _data_->_tmp20_ = _g_object_ref0 (_data_->_tmp19_);
4650 + _g_object_unref0 (_data_->object);
4651 + _data_->object = _data_->_tmp20_;
4653 + _data_->_tmp21_ = NULL;
4654 + _data_->_tmp21_ = _data_->child;
4655 + _data_->_tmp22_ = NULL;
4656 + _data_->_tmp22_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_data_->_tmp21_, RYGEL_LMS_TYPE_CATEGORY_CONTAINER) ? ((RygelLMSCategoryContainer*) _data_->_tmp21_) : NULL);
4657 + _data_->container = _data_->_tmp22_;
4658 + _data_->_tmp24_ = NULL;
4659 + _data_->_tmp24_ = _data_->container;
4660 + _data_->_tmp25_ = NULL;
4661 + _data_->_tmp25_ = _data_->id;
4662 + _data_->_tmp26_ = NULL;
4663 + _data_->_tmp26_ = _data_->cancellable;
4664 + _data_->_state_ = 1;
4665 + rygel_media_container_find_object ((RygelMediaContainer*) _data_->_tmp24_, _data_->_tmp25_, _data_->_tmp26_, rygel_lms_category_container_find_object_ready, _data_);
4668 + _data_->_tmp27_ = NULL;
4669 + _data_->_tmp27_ = rygel_media_container_find_object_finish ((RygelMediaContainer*) _data_->_tmp24_, _data_->_res_, &_data_->_inner_error_);
4670 + _data_->_tmp23_ = _data_->_tmp27_;
4671 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4672 + _g_object_unref0 (_data_->container);
4673 + _g_object_unref0 (_data_->child);
4674 + if (_data_->_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4675 + goto __catch5_rygel_lms_database_error;
4679 + _data_->_tmp28_ = NULL;
4680 + _data_->_tmp28_ = _data_->_tmp23_;
4681 + _data_->_tmp23_ = NULL;
4682 + _g_object_unref0 (_data_->object);
4683 + _data_->object = _data_->_tmp28_;
4684 + _data_->_tmp29_ = NULL;
4685 + _data_->_tmp29_ = _data_->object;
4686 + _data_->_tmp30_ = NULL;
4687 + _data_->_tmp30_ = _data_->object;
4688 + _data_->_tmp31_ = NULL;
4689 + _data_->_tmp31_ = rygel_media_object_get_parent (_data_->_tmp30_);
4690 + _data_->_tmp32_ = NULL;
4691 + _data_->_tmp32_ = _data_->_tmp31_;
4692 + rygel_media_object_set_parent_ref (_data_->_tmp29_, _data_->_tmp32_);
4693 + _g_object_unref0 (_data_->_tmp23_);
4694 + _g_object_unref0 (_data_->container);
4696 + _g_object_unref0 (_data_->child);
4699 + __catch5_rygel_lms_database_error:
4701 + _data_->e = _data_->_inner_error_;
4702 + _data_->_inner_error_ = NULL;
4703 + _data_->_tmp33_ = NULL;
4704 + _data_->_tmp33_ = _data_->id;
4705 + _data_->_tmp34_ = NULL;
4706 + _data_->_tmp34_ = rygel_media_object_get_id ((RygelMediaObject*) _data_->self);
4707 + _data_->_tmp35_ = NULL;
4708 + _data_->_tmp35_ = _data_->_tmp34_;
4709 + _data_->_tmp36_ = NULL;
4710 + _data_->_tmp36_ = _data_->e;
4711 + _data_->_tmp37_ = NULL;
4712 + _data_->_tmp37_ = _data_->_tmp36_->message;
4713 + g_debug ("rygel-lms-category-container.vala:328: find_object %s in %s: %s", _data_->_tmp33_, _data_->_tmp35_, _data_->_tmp37_);
4714 + _g_error_free0 (_data_->e);
4717 + if (G_UNLIKELY (_data_->_inner_error_ != NULL)) {
4718 + g_simple_async_result_set_from_error (_data_->_async_result, _data_->_inner_error_);
4719 + g_error_free (_data_->_inner_error_);
4720 + _g_free0 (_data_->real_id);
4721 + _g_object_unref0 (_data_->object);
4722 + if (_data_->_state_ == 0) {
4723 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4725 + g_simple_async_result_complete (_data_->_async_result);
4727 + g_object_unref (_data_->_async_result);
4730 + _data_->result = _data_->object;
4731 + _g_free0 (_data_->real_id);
4732 + if (_data_->_state_ == 0) {
4733 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4735 + g_simple_async_result_complete (_data_->_async_result);
4737 + g_object_unref (_data_->_async_result);
4739 + _g_free0 (_data_->real_id);
4740 + _g_object_unref0 (_data_->object);
4741 + if (_data_->_state_ == 0) {
4742 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4744 + g_simple_async_result_complete (_data_->_async_result);
4746 + g_object_unref (_data_->_async_result);
4751 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id) {
4752 + gchar* result = NULL;
4753 + const gchar* _tmp0_ = NULL;
4755 + gchar* _tmp2_ = NULL;
4756 + g_return_val_if_fail (self != NULL, NULL);
4757 + _tmp0_ = self->child_prefix;
4759 + _tmp2_ = g_strdup_printf ("%s%d", _tmp0_, _tmp1_);
4765 +gchar* rygel_lms_category_container_build_reference_id (RygelLMSCategoryContainer* self, gint db_id) {
4766 + gchar* result = NULL;
4767 + const gchar* _tmp0_ = NULL;
4769 + gchar* _tmp2_ = NULL;
4770 + g_return_val_if_fail (self != NULL, NULL);
4771 + _tmp0_ = self->ref_prefix;
4773 + _tmp2_ = g_strdup_printf ("%s%d", _tmp0_, _tmp1_);
4779 +static void rygel_lms_category_container_real_add_child_data_free (gpointer _data) {
4780 + RygelLmsCategoryContainerAddChildData* _data_;
4782 + _g_object_unref0 (_data_->object);
4783 + _g_object_unref0 (_data_->self);
4784 + g_slice_free (RygelLmsCategoryContainerAddChildData, _data_);
4788 +static void rygel_lms_category_container_real_add_child (RygelTrackableContainer* base, RygelMediaObject* object, GAsyncReadyCallback _callback_, gpointer _user_data_) {
4789 + RygelLMSCategoryContainer * self;
4790 + RygelLmsCategoryContainerAddChildData* _data_;
4791 + RygelLMSCategoryContainer* _tmp0_ = NULL;
4792 + RygelMediaObject* _tmp1_ = NULL;
4793 + RygelMediaObject* _tmp2_ = NULL;
4794 + self = (RygelLMSCategoryContainer*) base;
4795 + _data_ = g_slice_new0 (RygelLmsCategoryContainerAddChildData);
4796 + _data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, rygel_lms_category_container_real_add_child);
4797 + g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, rygel_lms_category_container_real_add_child_data_free);
4798 + _tmp0_ = _g_object_ref0 (self);
4799 + _data_->self = _tmp0_;
4801 + _tmp2_ = _g_object_ref0 (_tmp1_);
4802 + _g_object_unref0 (_data_->object);
4803 + _data_->object = _tmp2_;
4804 + rygel_lms_category_container_real_add_child_co (_data_);
4808 +static void rygel_lms_category_container_real_add_child_finish (RygelTrackableContainer* base, GAsyncResult* _res_) {
4809 + RygelLmsCategoryContainerAddChildData* _data_;
4810 + _data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
4814 +static gboolean rygel_lms_category_container_real_add_child_co (RygelLmsCategoryContainerAddChildData* _data_) {
4815 + switch (_data_->_state_) {
4819 + g_assert_not_reached ();
4822 + if (_data_->_state_ == 0) {
4823 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4825 + g_simple_async_result_complete (_data_->_async_result);
4827 + g_object_unref (_data_->_async_result);
4832 +static void rygel_lms_category_container_real_remove_child_data_free (gpointer _data) {
4833 + RygelLmsCategoryContainerRemoveChildData* _data_;
4835 + _g_object_unref0 (_data_->object);
4836 + _g_object_unref0 (_data_->self);
4837 + g_slice_free (RygelLmsCategoryContainerRemoveChildData, _data_);
4841 +static void rygel_lms_category_container_real_remove_child (RygelTrackableContainer* base, RygelMediaObject* object, GAsyncReadyCallback _callback_, gpointer _user_data_) {
4842 + RygelLMSCategoryContainer * self;
4843 + RygelLmsCategoryContainerRemoveChildData* _data_;
4844 + RygelLMSCategoryContainer* _tmp0_ = NULL;
4845 + RygelMediaObject* _tmp1_ = NULL;
4846 + RygelMediaObject* _tmp2_ = NULL;
4847 + self = (RygelLMSCategoryContainer*) base;
4848 + _data_ = g_slice_new0 (RygelLmsCategoryContainerRemoveChildData);
4849 + _data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, rygel_lms_category_container_real_remove_child);
4850 + g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, rygel_lms_category_container_real_remove_child_data_free);
4851 + _tmp0_ = _g_object_ref0 (self);
4852 + _data_->self = _tmp0_;
4854 + _tmp2_ = _g_object_ref0 (_tmp1_);
4855 + _g_object_unref0 (_data_->object);
4856 + _data_->object = _tmp2_;
4857 + rygel_lms_category_container_real_remove_child_co (_data_);
4861 +static void rygel_lms_category_container_real_remove_child_finish (RygelTrackableContainer* base, GAsyncResult* _res_) {
4862 + RygelLmsCategoryContainerRemoveChildData* _data_;
4863 + _data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
4867 +static gboolean rygel_lms_category_container_real_remove_child_co (RygelLmsCategoryContainerRemoveChildData* _data_) {
4868 + switch (_data_->_state_) {
4872 + g_assert_not_reached ();
4875 + if (_data_->_state_ == 0) {
4876 + g_simple_async_result_complete_in_idle (_data_->_async_result);
4878 + g_simple_async_result_complete (_data_->_async_result);
4880 + g_object_unref (_data_->_async_result);
4885 +static void rygel_lms_category_container_on_db_updated (RygelLMSCategoryContainer* self, guint64 old_id, guint64 new_id) {
4886 + GError * _inner_error_ = NULL;
4887 + g_return_if_fail (self != NULL);
4889 + sqlite3_stmt* stmt_count = NULL;
4890 + RygelLMSDatabase* _tmp0_ = NULL;
4891 + const gchar* _tmp1_ = NULL;
4892 + sqlite3_stmt* _tmp2_ = NULL;
4893 + sqlite3_stmt* _tmp3_ = NULL;
4895 + sqlite3_stmt* _tmp7_ = NULL;
4896 + guint64 _tmp8_ = 0ULL;
4897 + guint64 _tmp9_ = 0ULL;
4898 + sqlite3_stmt* _tmp16_ = NULL;
4899 + guint64 _tmp17_ = 0ULL;
4900 + guint64 _tmp18_ = 0ULL;
4901 + _tmp0_ = self->priv->_lms_db;
4902 + _tmp1_ = self->priv->_sql_count;
4903 + _tmp2_ = rygel_lms_database_prepare (_tmp0_, _tmp1_, &_inner_error_);
4904 + stmt_count = _tmp2_;
4905 + if (G_UNLIKELY (_inner_error_ != NULL)) {
4906 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4907 + goto __catch6_rygel_lms_database_error;
4909 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
4910 + g_clear_error (&_inner_error_);
4913 + _tmp3_ = stmt_count;
4914 + _tmp4_ = sqlite3_step (_tmp3_);
4915 + if (_tmp4_ == SQLITE_ROW) {
4916 + sqlite3_stmt* _tmp5_ = NULL;
4918 + _tmp5_ = stmt_count;
4919 + _tmp6_ = sqlite3_column_int (_tmp5_, 0);
4920 + rygel_media_container_set_child_count ((RygelMediaContainer*) self, _tmp6_);
4922 + _tmp7_ = self->stmt_added;
4925 + rygel_lms_database_get_children_with_update_id_init (_tmp7_, _tmp8_, _tmp9_, &_inner_error_);
4926 + if (G_UNLIKELY (_inner_error_ != NULL)) {
4927 + _sqlite3_finalize0 (stmt_count);
4928 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4929 + goto __catch6_rygel_lms_database_error;
4931 + _sqlite3_finalize0 (stmt_count);
4932 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
4933 + g_clear_error (&_inner_error_);
4937 + gboolean _tmp10_ = FALSE;
4938 + sqlite3_stmt* _tmp11_ = NULL;
4939 + gboolean _tmp12_ = FALSE;
4940 + sqlite3_stmt* _tmp13_ = NULL;
4941 + RygelMediaObject* _tmp14_ = NULL;
4942 + RygelMediaObject* _tmp15_ = NULL;
4943 + _tmp11_ = self->stmt_added;
4944 + _tmp12_ = rygel_lms_database_get_children_step (_tmp11_, &_inner_error_);
4945 + _tmp10_ = _tmp12_;
4946 + if (G_UNLIKELY (_inner_error_ != NULL)) {
4947 + _sqlite3_finalize0 (stmt_count);
4948 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4949 + goto __catch6_rygel_lms_database_error;
4951 + _sqlite3_finalize0 (stmt_count);
4952 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
4953 + g_clear_error (&_inner_error_);
4959 + _tmp13_ = self->stmt_added;
4960 + _tmp14_ = rygel_lms_category_container_object_from_statement (self, _tmp13_);
4961 + _tmp15_ = _tmp14_;
4962 + rygel_trackable_container_add_child_tracked ((RygelTrackableContainer*) self, _tmp15_, NULL, NULL);
4963 + _g_object_unref0 (_tmp15_);
4965 + _tmp16_ = self->stmt_removed;
4968 + rygel_lms_database_get_children_with_update_id_init (_tmp16_, _tmp17_, _tmp18_, &_inner_error_);
4969 + if (G_UNLIKELY (_inner_error_ != NULL)) {
4970 + _sqlite3_finalize0 (stmt_count);
4971 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4972 + goto __catch6_rygel_lms_database_error;
4974 + _sqlite3_finalize0 (stmt_count);
4975 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
4976 + g_clear_error (&_inner_error_);
4980 + gboolean _tmp19_ = FALSE;
4981 + sqlite3_stmt* _tmp20_ = NULL;
4982 + gboolean _tmp21_ = FALSE;
4983 + sqlite3_stmt* _tmp22_ = NULL;
4984 + RygelMediaObject* _tmp23_ = NULL;
4985 + RygelMediaObject* _tmp24_ = NULL;
4986 + _tmp20_ = self->stmt_removed;
4987 + _tmp21_ = rygel_lms_database_get_children_step (_tmp20_, &_inner_error_);
4988 + _tmp19_ = _tmp21_;
4989 + if (G_UNLIKELY (_inner_error_ != NULL)) {
4990 + _sqlite3_finalize0 (stmt_count);
4991 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
4992 + goto __catch6_rygel_lms_database_error;
4994 + _sqlite3_finalize0 (stmt_count);
4995 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
4996 + g_clear_error (&_inner_error_);
5002 + _tmp22_ = self->stmt_removed;
5003 + _tmp23_ = rygel_lms_category_container_object_from_statement (self, _tmp22_);
5004 + _tmp24_ = _tmp23_;
5005 + rygel_trackable_container_remove_child_tracked ((RygelTrackableContainer*) self, _tmp24_, NULL, NULL);
5006 + _g_object_unref0 (_tmp24_);
5008 + _sqlite3_finalize0 (stmt_count);
5011 + __catch6_rygel_lms_database_error:
5014 + GError* _tmp25_ = NULL;
5015 + const gchar* _tmp26_ = NULL;
5016 + e = _inner_error_;
5017 + _inner_error_ = NULL;
5019 + _tmp26_ = _tmp25_->message;
5020 + g_warning ("rygel-lms-category-container.vala:372: Can't perform container update:" \
5022 + _g_error_free0 (e);
5025 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5026 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5027 + g_clear_error (&_inner_error_);
5033 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed) {
5034 + RygelLMSCategoryContainer * self = NULL;
5035 + RygelMediaContainer* _tmp0_ = NULL;
5036 + const gchar* _tmp1_ = NULL;
5037 + const gchar* _tmp2_ = NULL;
5038 + const gchar* _tmp3_ = NULL;
5039 + gchar* _tmp4_ = NULL;
5040 + gchar* _tmp5_ = NULL;
5041 + const gchar* _tmp6_ = NULL;
5042 + RygelMediaContainer* _tmp7_ = NULL;
5043 + const gchar* _tmp8_ = NULL;
5044 + RygelLMSDatabase* _tmp9_ = NULL;
5045 + const gchar* _tmp10_ = NULL;
5046 + const gchar* _tmp11_ = NULL;
5047 + const gchar* _tmp12_ = NULL;
5048 + const gchar* _tmp13_ = NULL;
5049 + const gchar* _tmp14_ = NULL;
5050 + g_return_val_if_fail (db_id != NULL, NULL);
5051 + g_return_val_if_fail (parent != NULL, NULL);
5052 + g_return_val_if_fail (title != NULL, NULL);
5053 + g_return_val_if_fail (lms_db != NULL, NULL);
5054 + g_return_val_if_fail (sql_all != NULL, NULL);
5055 + g_return_val_if_fail (sql_find_object != NULL, NULL);
5056 + g_return_val_if_fail (sql_count != NULL, NULL);
5058 + _tmp1_ = rygel_media_object_get_id ((RygelMediaObject*) _tmp0_);
5061 + _tmp4_ = g_strdup_printf ("%s:%s", _tmp2_, _tmp3_);
5067 + _tmp10_ = sql_all;
5068 + _tmp11_ = sql_find_object;
5069 + _tmp12_ = sql_count;
5070 + _tmp13_ = sql_added;
5071 + _tmp14_ = sql_removed;
5072 + self = (RygelLMSCategoryContainer*) g_object_new (object_type, "id", _tmp5_, "db-id", _tmp6_, "parent", _tmp7_, "title", _tmp8_, "lms-db", _tmp9_, "sql-all", _tmp10_, "sql-find-object", _tmp11_, "sql-count", _tmp12_, "sql-added", _tmp13_, "sql-removed", _tmp14_, NULL);
5073 + _g_free0 (_tmp5_);
5078 +static GeeArrayList* rygel_lms_category_container_real_get_search_classes (RygelSearchableContainer* base) {
5079 + GeeArrayList* result;
5080 + RygelLMSCategoryContainer* self;
5081 + GeeArrayList* _tmp0_ = NULL;
5082 + self = (RygelLMSCategoryContainer*) base;
5083 + _tmp0_ = self->priv->_search_classes;
5089 +static void rygel_lms_category_container_real_set_search_classes (RygelSearchableContainer* base, GeeArrayList* value) {
5090 + RygelLMSCategoryContainer* self;
5091 + GeeArrayList* _tmp0_ = NULL;
5092 + GeeArrayList* _tmp1_ = NULL;
5093 + self = (RygelLMSCategoryContainer*) base;
5095 + _tmp1_ = _g_object_ref0 (_tmp0_);
5096 + _g_object_unref0 (self->priv->_search_classes);
5097 + self->priv->_search_classes = _tmp1_;
5098 + g_object_notify ((GObject *) self, "search-classes");
5102 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self) {
5103 + RygelLMSDatabase* result;
5104 + RygelLMSDatabase* _tmp0_ = NULL;
5105 + g_return_val_if_fail (self != NULL, NULL);
5106 + _tmp0_ = self->priv->_lms_db;
5112 +static void rygel_lms_category_container_set_lms_db (RygelLMSCategoryContainer* self, RygelLMSDatabase* value) {
5113 + RygelLMSDatabase* _tmp0_ = NULL;
5114 + g_return_if_fail (self != NULL);
5116 + self->priv->_lms_db = _tmp0_;
5117 + g_object_notify ((GObject *) self, "lms-db");
5121 +const gchar* rygel_lms_category_container_get_db_id (RygelLMSCategoryContainer* self) {
5122 + const gchar* result;
5123 + const gchar* _tmp0_ = NULL;
5124 + g_return_val_if_fail (self != NULL, NULL);
5125 + _tmp0_ = self->priv->_db_id;
5131 +static void rygel_lms_category_container_set_db_id (RygelLMSCategoryContainer* self, const gchar* value) {
5132 + const gchar* _tmp0_ = NULL;
5133 + gchar* _tmp1_ = NULL;
5134 + g_return_if_fail (self != NULL);
5136 + _tmp1_ = g_strdup (_tmp0_);
5137 + _g_free0 (self->priv->_db_id);
5138 + self->priv->_db_id = _tmp1_;
5139 + g_object_notify ((GObject *) self, "db-id");
5143 +const gchar* rygel_lms_category_container_get_sql_all (RygelLMSCategoryContainer* self) {
5144 + const gchar* result;
5145 + const gchar* _tmp0_ = NULL;
5146 + g_return_val_if_fail (self != NULL, NULL);
5147 + _tmp0_ = self->priv->_sql_all;
5153 +static void rygel_lms_category_container_set_sql_all (RygelLMSCategoryContainer* self, const gchar* value) {
5154 + const gchar* _tmp0_ = NULL;
5155 + gchar* _tmp1_ = NULL;
5156 + g_return_if_fail (self != NULL);
5158 + _tmp1_ = g_strdup (_tmp0_);
5159 + _g_free0 (self->priv->_sql_all);
5160 + self->priv->_sql_all = _tmp1_;
5161 + g_object_notify ((GObject *) self, "sql-all");
5165 +const gchar* rygel_lms_category_container_get_sql_find_object (RygelLMSCategoryContainer* self) {
5166 + const gchar* result;
5167 + const gchar* _tmp0_ = NULL;
5168 + g_return_val_if_fail (self != NULL, NULL);
5169 + _tmp0_ = self->priv->_sql_find_object;
5175 +static void rygel_lms_category_container_set_sql_find_object (RygelLMSCategoryContainer* self, const gchar* value) {
5176 + const gchar* _tmp0_ = NULL;
5177 + gchar* _tmp1_ = NULL;
5178 + g_return_if_fail (self != NULL);
5180 + _tmp1_ = g_strdup (_tmp0_);
5181 + _g_free0 (self->priv->_sql_find_object);
5182 + self->priv->_sql_find_object = _tmp1_;
5183 + g_object_notify ((GObject *) self, "sql-find-object");
5187 +const gchar* rygel_lms_category_container_get_sql_count (RygelLMSCategoryContainer* self) {
5188 + const gchar* result;
5189 + const gchar* _tmp0_ = NULL;
5190 + g_return_val_if_fail (self != NULL, NULL);
5191 + _tmp0_ = self->priv->_sql_count;
5197 +static void rygel_lms_category_container_set_sql_count (RygelLMSCategoryContainer* self, const gchar* value) {
5198 + const gchar* _tmp0_ = NULL;
5199 + gchar* _tmp1_ = NULL;
5200 + g_return_if_fail (self != NULL);
5202 + _tmp1_ = g_strdup (_tmp0_);
5203 + _g_free0 (self->priv->_sql_count);
5204 + self->priv->_sql_count = _tmp1_;
5205 + g_object_notify ((GObject *) self, "sql-count");
5209 +const gchar* rygel_lms_category_container_get_sql_added (RygelLMSCategoryContainer* self) {
5210 + const gchar* result;
5211 + const gchar* _tmp0_ = NULL;
5212 + g_return_val_if_fail (self != NULL, NULL);
5213 + _tmp0_ = self->priv->_sql_added;
5219 +static void rygel_lms_category_container_set_sql_added (RygelLMSCategoryContainer* self, const gchar* value) {
5220 + const gchar* _tmp0_ = NULL;
5221 + gchar* _tmp1_ = NULL;
5222 + g_return_if_fail (self != NULL);
5224 + _tmp1_ = g_strdup (_tmp0_);
5225 + _g_free0 (self->priv->_sql_added);
5226 + self->priv->_sql_added = _tmp1_;
5227 + g_object_notify ((GObject *) self, "sql-added");
5231 +const gchar* rygel_lms_category_container_get_sql_removed (RygelLMSCategoryContainer* self) {
5232 + const gchar* result;
5233 + const gchar* _tmp0_ = NULL;
5234 + g_return_val_if_fail (self != NULL, NULL);
5235 + _tmp0_ = self->priv->_sql_removed;
5241 +static void rygel_lms_category_container_set_sql_removed (RygelLMSCategoryContainer* self, const gchar* value) {
5242 + const gchar* _tmp0_ = NULL;
5243 + gchar* _tmp1_ = NULL;
5244 + g_return_if_fail (self != NULL);
5246 + _tmp1_ = g_strdup (_tmp0_);
5247 + _g_free0 (self->priv->_sql_removed);
5248 + self->priv->_sql_removed = _tmp1_;
5249 + g_object_notify ((GObject *) self, "sql-removed");
5253 +static void _rygel_lms_category_container_on_db_updated_rygel_lms_database_db_updated (RygelLMSDatabase* _sender, guint64 old_update_id, guint64 new_update_id, gpointer self) {
5254 + rygel_lms_category_container_on_db_updated ((RygelLMSCategoryContainer*) self, old_update_id, new_update_id);
5258 +static GObject * rygel_lms_category_container_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
5260 + GObjectClass * parent_class;
5261 + RygelLMSCategoryContainer * self;
5262 + GeeArrayList* _tmp0_ = NULL;
5263 + GeeArrayList* _tmp1_ = NULL;
5264 + const gchar* _tmp2_ = NULL;
5265 + const gchar* _tmp3_ = NULL;
5266 + gchar* _tmp4_ = NULL;
5268 + const gchar* _tmp5_ = NULL;
5269 + const gchar* _tmp6_ = NULL;
5271 + const gchar* _tmp8_ = NULL;
5272 + const gchar* _tmp9_ = NULL;
5274 + gchar* _tmp11_ = NULL;
5275 + gchar* _tmp12_ = NULL;
5276 + gchar* _tmp13_ = NULL;
5277 + GError * _inner_error_ = NULL;
5278 + parent_class = G_OBJECT_CLASS (rygel_lms_category_container_parent_class);
5279 + obj = parent_class->constructor (type, n_construct_properties, construct_properties);
5280 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer);
5281 + _tmp0_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL);
5283 + rygel_searchable_container_set_search_classes ((RygelSearchableContainer*) self, _tmp1_);
5284 + _g_object_unref0 (_tmp1_);
5285 + _tmp2_ = rygel_media_object_get_id ((RygelMediaObject*) self);
5287 + _tmp4_ = g_strdup_printf ("%s:", _tmp3_);
5288 + _g_free0 (self->child_prefix);
5289 + self->child_prefix = _tmp4_;
5290 + _tmp5_ = rygel_media_object_get_id ((RygelMediaObject*) self);
5292 + _tmp7_ = string_index_of_char (_tmp6_, (gunichar) ':', 0);
5294 + _tmp8_ = rygel_media_object_get_id ((RygelMediaObject*) self);
5297 + _tmp11_ = string_slice (_tmp9_, (glong) 0, (glong) _tmp10_);
5298 + _tmp12_ = _tmp11_;
5299 + _tmp13_ = g_strconcat (_tmp12_, ":all:", NULL);
5300 + _g_free0 (self->ref_prefix);
5301 + self->ref_prefix = _tmp13_;
5302 + _g_free0 (_tmp12_);
5304 + sqlite3_stmt* _tmp14_ = NULL;
5305 + RygelLMSDatabase* _tmp15_ = NULL;
5306 + const gchar* _tmp16_ = NULL;
5307 + sqlite3_stmt* _tmp17_ = NULL;
5308 + sqlite3_stmt* _tmp18_ = NULL;
5309 + sqlite3_stmt* _tmp19_ = NULL;
5310 + RygelLMSDatabase* _tmp20_ = NULL;
5311 + const gchar* _tmp21_ = NULL;
5312 + sqlite3_stmt* _tmp22_ = NULL;
5313 + sqlite3_stmt* _tmp23_ = NULL;
5314 + sqlite3_stmt* stmt_count = NULL;
5315 + RygelLMSDatabase* _tmp24_ = NULL;
5316 + const gchar* _tmp25_ = NULL;
5317 + sqlite3_stmt* _tmp26_ = NULL;
5318 + sqlite3_stmt* _tmp27_ = NULL;
5320 + gboolean _tmp31_ = FALSE;
5321 + const gchar* _tmp32_ = NULL;
5322 + _tmp15_ = self->priv->_lms_db;
5323 + _tmp16_ = self->priv->_sql_all;
5324 + _tmp17_ = rygel_lms_database_prepare (_tmp15_, _tmp16_, &_inner_error_);
5325 + _tmp14_ = _tmp17_;
5326 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5327 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
5328 + goto __catch7_rygel_lms_database_error;
5330 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5331 + g_clear_error (&_inner_error_);
5333 + _tmp18_ = _tmp14_;
5335 + _sqlite3_finalize0 (self->stmt_all);
5336 + self->stmt_all = _tmp18_;
5337 + _tmp20_ = self->priv->_lms_db;
5338 + _tmp21_ = self->priv->_sql_find_object;
5339 + _tmp22_ = rygel_lms_database_prepare (_tmp20_, _tmp21_, &_inner_error_);
5340 + _tmp19_ = _tmp22_;
5341 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5342 + _sqlite3_finalize0 (_tmp14_);
5343 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
5344 + goto __catch7_rygel_lms_database_error;
5346 + _sqlite3_finalize0 (_tmp14_);
5347 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5348 + g_clear_error (&_inner_error_);
5350 + _tmp23_ = _tmp19_;
5352 + _sqlite3_finalize0 (self->stmt_find_object);
5353 + self->stmt_find_object = _tmp23_;
5354 + _tmp24_ = self->priv->_lms_db;
5355 + _tmp25_ = self->priv->_sql_count;
5356 + _tmp26_ = rygel_lms_database_prepare (_tmp24_, _tmp25_, &_inner_error_);
5357 + stmt_count = _tmp26_;
5358 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5359 + _sqlite3_finalize0 (_tmp19_);
5360 + _sqlite3_finalize0 (_tmp14_);
5361 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
5362 + goto __catch7_rygel_lms_database_error;
5364 + _sqlite3_finalize0 (_tmp19_);
5365 + _sqlite3_finalize0 (_tmp14_);
5366 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5367 + g_clear_error (&_inner_error_);
5369 + _tmp27_ = stmt_count;
5370 + _tmp28_ = sqlite3_step (_tmp27_);
5371 + if (_tmp28_ == SQLITE_ROW) {
5372 + sqlite3_stmt* _tmp29_ = NULL;
5374 + _tmp29_ = stmt_count;
5375 + _tmp30_ = sqlite3_column_int (_tmp29_, 0);
5376 + rygel_media_container_set_child_count ((RygelMediaContainer*) self, _tmp30_);
5378 + _tmp32_ = self->priv->_sql_added;
5379 + if (_tmp32_ != NULL) {
5380 + const gchar* _tmp33_ = NULL;
5381 + _tmp33_ = self->priv->_sql_removed;
5382 + _tmp31_ = _tmp33_ != NULL;
5387 + sqlite3_stmt* _tmp34_ = NULL;
5388 + RygelLMSDatabase* _tmp35_ = NULL;
5389 + const gchar* _tmp36_ = NULL;
5390 + sqlite3_stmt* _tmp37_ = NULL;
5391 + sqlite3_stmt* _tmp38_ = NULL;
5392 + sqlite3_stmt* _tmp39_ = NULL;
5393 + RygelLMSDatabase* _tmp40_ = NULL;
5394 + const gchar* _tmp41_ = NULL;
5395 + sqlite3_stmt* _tmp42_ = NULL;
5396 + sqlite3_stmt* _tmp43_ = NULL;
5397 + RygelLMSDatabase* _tmp44_ = NULL;
5398 + _tmp35_ = self->priv->_lms_db;
5399 + _tmp36_ = self->priv->_sql_added;
5400 + _tmp37_ = rygel_lms_database_prepare (_tmp35_, _tmp36_, &_inner_error_);
5401 + _tmp34_ = _tmp37_;
5402 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5403 + _sqlite3_finalize0 (stmt_count);
5404 + _sqlite3_finalize0 (_tmp19_);
5405 + _sqlite3_finalize0 (_tmp14_);
5406 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
5407 + goto __catch7_rygel_lms_database_error;
5409 + _sqlite3_finalize0 (stmt_count);
5410 + _sqlite3_finalize0 (_tmp19_);
5411 + _sqlite3_finalize0 (_tmp14_);
5412 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5413 + g_clear_error (&_inner_error_);
5415 + _tmp38_ = _tmp34_;
5417 + _sqlite3_finalize0 (self->stmt_added);
5418 + self->stmt_added = _tmp38_;
5419 + _tmp40_ = self->priv->_lms_db;
5420 + _tmp41_ = self->priv->_sql_removed;
5421 + _tmp42_ = rygel_lms_database_prepare (_tmp40_, _tmp41_, &_inner_error_);
5422 + _tmp39_ = _tmp42_;
5423 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5424 + _sqlite3_finalize0 (_tmp34_);
5425 + _sqlite3_finalize0 (stmt_count);
5426 + _sqlite3_finalize0 (_tmp19_);
5427 + _sqlite3_finalize0 (_tmp14_);
5428 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
5429 + goto __catch7_rygel_lms_database_error;
5431 + _sqlite3_finalize0 (_tmp34_);
5432 + _sqlite3_finalize0 (stmt_count);
5433 + _sqlite3_finalize0 (_tmp19_);
5434 + _sqlite3_finalize0 (_tmp14_);
5435 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5436 + g_clear_error (&_inner_error_);
5438 + _tmp43_ = _tmp39_;
5440 + _sqlite3_finalize0 (self->stmt_removed);
5441 + self->stmt_removed = _tmp43_;
5442 + _tmp44_ = self->priv->_lms_db;
5443 + g_signal_connect_object (_tmp44_, "db-updated", (GCallback) _rygel_lms_category_container_on_db_updated_rygel_lms_database_db_updated, self, 0);
5444 + _sqlite3_finalize0 (_tmp39_);
5445 + _sqlite3_finalize0 (_tmp34_);
5447 + _sqlite3_finalize0 (stmt_count);
5448 + _sqlite3_finalize0 (_tmp19_);
5449 + _sqlite3_finalize0 (_tmp14_);
5452 + __catch7_rygel_lms_database_error:
5455 + const gchar* _tmp45_ = NULL;
5456 + const gchar* _tmp46_ = NULL;
5457 + GError* _tmp47_ = NULL;
5458 + const gchar* _tmp48_ = NULL;
5459 + e = _inner_error_;
5460 + _inner_error_ = NULL;
5461 + _tmp45_ = rygel_media_object_get_title ((RygelMediaObject*) self);
5462 + _tmp46_ = _tmp45_;
5464 + _tmp48_ = _tmp47_->message;
5465 + g_warning ("rygel-lms-category-container.vala:424: Container %s: %s", _tmp46_, _tmp48_);
5466 + _g_error_free0 (e);
5469 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5470 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5471 + g_clear_error (&_inner_error_);
5477 +static void rygel_lms_category_container_class_init (RygelLMSCategoryContainerClass * klass) {
5478 + rygel_lms_category_container_parent_class = g_type_class_peek_parent (klass);
5479 + g_type_class_add_private (klass, sizeof (RygelLMSCategoryContainerPrivate));
5480 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_category_container_real_object_from_statement;
5481 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_all_with_filter = rygel_lms_category_container_real_get_sql_all_with_filter;
5482 + ((RygelLMSCategoryContainerClass *) klass)->get_sql_count_with_filter = rygel_lms_category_container_real_get_sql_count_with_filter;
5483 + ((RygelLMSCategoryContainerClass *) klass)->get_child_count_with_filter = rygel_lms_category_container_real_get_child_count_with_filter;
5484 + ((RygelLMSCategoryContainerClass *) klass)->get_children_with_filter = rygel_lms_category_container_real_get_children_with_filter;
5485 + ((RygelMediaContainerClass *) klass)->get_children = rygel_lms_category_container_real_get_children;
5486 + ((RygelMediaContainerClass *) klass)->get_children_finish = rygel_lms_category_container_real_get_children_finish;
5487 + ((RygelMediaContainerClass *) klass)->find_object = rygel_lms_category_container_real_find_object;
5488 + ((RygelMediaContainerClass *) klass)->find_object_finish = rygel_lms_category_container_real_find_object_finish;
5489 + G_OBJECT_CLASS (klass)->get_property = _vala_rygel_lms_category_container_get_property;
5490 + G_OBJECT_CLASS (klass)->set_property = _vala_rygel_lms_category_container_set_property;
5491 + G_OBJECT_CLASS (klass)->constructor = rygel_lms_category_container_constructor;
5492 + G_OBJECT_CLASS (klass)->finalize = rygel_lms_category_container_finalize;
5493 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_SEARCH_CLASSES, g_param_spec_object ("search-classes", "search-classes", "search-classes", GEE_TYPE_ARRAY_LIST, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
5494 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_LMS_DB, rygel_lms_param_spec_database ("lms-db", "lms-db", "lms-db", RYGEL_LMS_TYPE_DATABASE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5495 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_DB_ID, g_param_spec_string ("db-id", "db-id", "db-id", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5496 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_SQL_ALL, g_param_spec_string ("sql-all", "sql-all", "sql-all", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5497 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_SQL_FIND_OBJECT, g_param_spec_string ("sql-find-object", "sql-find-object", "sql-find-object", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5498 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_SQL_COUNT, g_param_spec_string ("sql-count", "sql-count", "sql-count", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5499 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_SQL_ADDED, g_param_spec_string ("sql-added", "sql-added", "sql-added", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5500 + g_object_class_install_property (G_OBJECT_CLASS (klass), RYGEL_LMS_CATEGORY_CONTAINER_SQL_REMOVED, g_param_spec_string ("sql-removed", "sql-removed", "sql-removed", NULL, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
5504 +static void rygel_lms_category_container_rygel_trackable_container_interface_init (RygelTrackableContainerIface * iface) {
5505 + rygel_lms_category_container_rygel_trackable_container_parent_iface = g_type_interface_peek_parent (iface);
5506 + iface->add_child = (void (*)(RygelTrackableContainer*, RygelMediaObject*)) rygel_lms_category_container_real_add_child;
5507 + iface->add_child_finish = rygel_lms_category_container_real_add_child_finish;
5508 + iface->remove_child = (void (*)(RygelTrackableContainer*, RygelMediaObject*)) rygel_lms_category_container_real_remove_child;
5509 + iface->remove_child_finish = rygel_lms_category_container_real_remove_child_finish;
5513 +static void rygel_lms_category_container_rygel_searchable_container_interface_init (RygelSearchableContainerIface * iface) {
5514 + rygel_lms_category_container_rygel_searchable_container_parent_iface = g_type_interface_peek_parent (iface);
5515 + iface->search = (RygelMediaObjects* (*)(RygelSearchableContainer*, RygelSearchExpression*, guint, guint, guint*, const gchar*, GCancellable*, GError**)) rygel_lms_category_container_real_search;
5516 + iface->search_finish = rygel_lms_category_container_real_search_finish;
5517 + iface->get_search_classes = rygel_lms_category_container_real_get_search_classes;
5518 + iface->set_search_classes = rygel_lms_category_container_real_set_search_classes;
5522 +static void rygel_lms_category_container_instance_init (RygelLMSCategoryContainer * self) {
5523 + self->priv = RYGEL_LMS_CATEGORY_CONTAINER_GET_PRIVATE (self);
5527 +static void rygel_lms_category_container_finalize (GObject* obj) {
5528 + RygelLMSCategoryContainer * self;
5529 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer);
5530 + _g_object_unref0 (self->priv->_search_classes);
5531 + _g_free0 (self->priv->_db_id);
5532 + _g_free0 (self->priv->_sql_all);
5533 + _g_free0 (self->priv->_sql_find_object);
5534 + _g_free0 (self->priv->_sql_count);
5535 + _g_free0 (self->priv->_sql_added);
5536 + _g_free0 (self->priv->_sql_removed);
5537 + _sqlite3_finalize0 (self->stmt_all);
5538 + _sqlite3_finalize0 (self->stmt_find_object);
5539 + _sqlite3_finalize0 (self->stmt_added);
5540 + _sqlite3_finalize0 (self->stmt_removed);
5541 + _g_free0 (self->child_prefix);
5542 + _g_free0 (self->ref_prefix);
5543 + G_OBJECT_CLASS (rygel_lms_category_container_parent_class)->finalize (obj);
5547 +GType rygel_lms_category_container_get_type (void) {
5548 + static volatile gsize rygel_lms_category_container_type_id__volatile = 0;
5549 + if (g_once_init_enter (&rygel_lms_category_container_type_id__volatile)) {
5550 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSCategoryContainerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_category_container_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSCategoryContainer), 0, (GInstanceInitFunc) rygel_lms_category_container_instance_init, NULL };
5551 + static const GInterfaceInfo rygel_trackable_container_info = { (GInterfaceInitFunc) rygel_lms_category_container_rygel_trackable_container_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
5552 + static const GInterfaceInfo rygel_searchable_container_info = { (GInterfaceInitFunc) rygel_lms_category_container_rygel_searchable_container_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
5553 + GType rygel_lms_category_container_type_id;
5554 + rygel_lms_category_container_type_id = g_type_register_static (RYGEL_TYPE_MEDIA_CONTAINER, "RygelLMSCategoryContainer", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
5555 + g_type_add_interface_static (rygel_lms_category_container_type_id, RYGEL_TYPE_TRACKABLE_CONTAINER, &rygel_trackable_container_info);
5556 + g_type_add_interface_static (rygel_lms_category_container_type_id, RYGEL_TYPE_SEARCHABLE_CONTAINER, &rygel_searchable_container_info);
5557 + g_once_init_leave (&rygel_lms_category_container_type_id__volatile, rygel_lms_category_container_type_id);
5559 + return rygel_lms_category_container_type_id__volatile;
5563 +static void _vala_rygel_lms_category_container_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
5564 + RygelLMSCategoryContainer * self;
5565 + self = G_TYPE_CHECK_INSTANCE_CAST (object, RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer);
5566 + switch (property_id) {
5567 + case RYGEL_LMS_CATEGORY_CONTAINER_SEARCH_CLASSES:
5568 + g_value_set_object (value, rygel_searchable_container_get_search_classes ((RygelSearchableContainer*) self));
5570 + case RYGEL_LMS_CATEGORY_CONTAINER_LMS_DB:
5571 + rygel_lms_value_set_database (value, rygel_lms_category_container_get_lms_db (self));
5573 + case RYGEL_LMS_CATEGORY_CONTAINER_DB_ID:
5574 + g_value_set_string (value, rygel_lms_category_container_get_db_id (self));
5576 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_ALL:
5577 + g_value_set_string (value, rygel_lms_category_container_get_sql_all (self));
5579 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_FIND_OBJECT:
5580 + g_value_set_string (value, rygel_lms_category_container_get_sql_find_object (self));
5582 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_COUNT:
5583 + g_value_set_string (value, rygel_lms_category_container_get_sql_count (self));
5585 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_ADDED:
5586 + g_value_set_string (value, rygel_lms_category_container_get_sql_added (self));
5588 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_REMOVED:
5589 + g_value_set_string (value, rygel_lms_category_container_get_sql_removed (self));
5592 + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
5598 +static void _vala_rygel_lms_category_container_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
5599 + RygelLMSCategoryContainer * self;
5600 + self = G_TYPE_CHECK_INSTANCE_CAST (object, RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer);
5601 + switch (property_id) {
5602 + case RYGEL_LMS_CATEGORY_CONTAINER_SEARCH_CLASSES:
5603 + rygel_searchable_container_set_search_classes ((RygelSearchableContainer*) self, g_value_get_object (value));
5605 + case RYGEL_LMS_CATEGORY_CONTAINER_LMS_DB:
5606 + rygel_lms_category_container_set_lms_db (self, rygel_lms_value_get_database (value));
5608 + case RYGEL_LMS_CATEGORY_CONTAINER_DB_ID:
5609 + rygel_lms_category_container_set_db_id (self, g_value_get_string (value));
5611 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_ALL:
5612 + rygel_lms_category_container_set_sql_all (self, g_value_get_string (value));
5614 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_FIND_OBJECT:
5615 + rygel_lms_category_container_set_sql_find_object (self, g_value_get_string (value));
5617 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_COUNT:
5618 + rygel_lms_category_container_set_sql_count (self, g_value_get_string (value));
5620 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_ADDED:
5621 + rygel_lms_category_container_set_sql_added (self, g_value_get_string (value));
5623 + case RYGEL_LMS_CATEGORY_CONTAINER_SQL_REMOVED:
5624 + rygel_lms_category_container_set_sql_removed (self, g_value_get_string (value));
5627 + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
5634 diff --git a/src/plugins/lms/rygel-lms-database.c b/src/plugins/lms/rygel-lms-database.c
5635 new file mode 100644
5636 index 0000000..687ef64
5638 +++ b/src/plugins/lms/rygel-lms-database.c
5640 +/* rygel-lms-database.c generated by valac 0.28.0, the Vala compiler
5641 + * generated from rygel-lms-database.vala, do not modify */
5644 + * Copyright (C) 2009,2011 Jens Georg <mail@jensge.org>,
5645 + * (C) 2013 Intel Corporation.
5647 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
5649 + * This file is part of Rygel.
5651 + * Rygel is free software; you can redistribute it and/or modify
5652 + * it under the terms of the GNU Lesser General Public License as published by
5653 + * the Free Software Foundation; either version 2 of the License, or
5654 + * (at your option) any later version.
5656 + * Rygel is distributed in the hope that it will be useful,
5657 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
5658 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5659 + * GNU Lesser General Public License for more details.
5661 + * You should have received a copy of the GNU Lesser General Public License
5662 + * along with this program; if not, write to the Free Software Foundation,
5663 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
5667 +#include <glib-object.h>
5668 +#include <sqlite3.h>
5669 +#include <gio/gio.h>
5670 +#include <stdlib.h>
5671 +#include <string.h>
5672 +#include <glib/gi18n-lib.h>
5673 +#include <gobject/gvaluecollector.h>
5676 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
5677 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
5678 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
5679 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
5680 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
5681 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
5683 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
5684 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
5685 +typedef struct _RygelLMSDatabasePrivate RygelLMSDatabasePrivate;
5687 +#define RYGEL_LMS_TYPE_DBUS (rygel_lms_dbus_get_type ())
5688 +#define RYGEL_LMS_DBUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DBUS, RygelLMSDBus))
5689 +#define RYGEL_LMS_IS_DBUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DBUS))
5690 +#define RYGEL_LMS_DBUS_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), RYGEL_LMS_TYPE_DBUS, RygelLMSDBusIface))
5692 +typedef struct _RygelLMSDBus RygelLMSDBus;
5693 +typedef struct _RygelLMSDBusIface RygelLMSDBusIface;
5695 +#define RYGEL_LMS_TYPE_DBUS_PROXY (rygel_lms_dbus_proxy_get_type ())
5696 +#define _sqlite3_close0(var) ((var == NULL) ? NULL : (var = (sqlite3_close (var), NULL)))
5697 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
5698 +#define _g_free0(var) (var = (g_free (var), NULL))
5699 +#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
5700 +#define _rygel_lms_database_unref0(var) ((var == NULL) ? NULL : (var = (rygel_lms_database_unref (var), NULL)))
5701 +#define _g_variant_unref0(var) ((var == NULL) ? NULL : (var = (g_variant_unref (var), NULL)))
5702 +#define _g_variant_iter_free0(var) ((var == NULL) ? NULL : (var = (g_variant_iter_free (var), NULL)))
5703 +#define _sqlite3_finalize0(var) ((var == NULL) ? NULL : (var = (sqlite3_finalize (var), NULL)))
5704 +typedef struct _RygelLMSParamSpecDatabase RygelLMSParamSpecDatabase;
5705 +#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
5706 +#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
5707 +#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
5708 +#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
5711 + RYGEL_LMS_DATABASE_ERROR_OPEN,
5712 + RYGEL_LMS_DATABASE_ERROR_PREPARE,
5713 + RYGEL_LMS_DATABASE_ERROR_BIND,
5714 + RYGEL_LMS_DATABASE_ERROR_STEP,
5715 + RYGEL_LMS_DATABASE_ERROR_NOT_FOUND
5716 +} RygelLMSDatabaseError;
5717 +#define RYGEL_LMS_DATABASE_ERROR rygel_lms_database_error_quark ()
5718 +struct _RygelLMSDatabase {
5719 + GTypeInstance parent_instance;
5720 + volatile int ref_count;
5721 + RygelLMSDatabasePrivate * priv;
5724 +struct _RygelLMSDatabaseClass {
5725 + GTypeClass parent_class;
5726 + void (*finalize) (RygelLMSDatabase *self);
5729 +struct _RygelLMSDBusIface {
5730 + GTypeInterface parent_iface;
5731 + gchar* (*get_data_base_path) (RygelLMSDBus* self);
5732 + guint64 (*get_update_id) (RygelLMSDBus* self);
5735 +struct _RygelLMSDatabasePrivate {
5737 + RygelLMSDBus* lms_proxy;
5738 + guint64 update_id;
5741 +struct _RygelLMSParamSpecDatabase {
5742 + GParamSpec parent_instance;
5746 +static gpointer rygel_lms_database_parent_class = NULL;
5748 +GQuark rygel_lms_database_error_quark (void);
5749 +gint rygel_lms_utf8_collate_str (guint8* a, int a_length1, guint8* b, int b_length1);
5750 +gpointer rygel_lms_database_ref (gpointer instance);
5751 +void rygel_lms_database_unref (gpointer instance);
5752 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
5753 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
5754 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
5755 +gpointer rygel_lms_value_get_database (const GValue* value);
5756 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
5757 +GType rygel_lms_dbus_get_type (void) G_GNUC_CONST;
5758 +GType rygel_lms_dbus_proxy_get_type (void) G_GNUC_CONST;
5759 +guint rygel_lms_dbus_register_object (void* object, GDBusConnection* connection, const gchar* path, GError** error);
5760 +#define RYGEL_LMS_DATABASE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabasePrivate))
5762 + RYGEL_LMS_DATABASE_DUMMY_PROPERTY
5764 +static void rygel_lms_database_utf8_contains (sqlite3_context* context, sqlite3_value** args, int args_length1);
5765 +static gint rygel_lms_database_utf8_collate (gint alen, void* a, gint blen, void* b);
5766 +RygelLMSDatabase* rygel_lms_database_new (GError** error);
5767 +RygelLMSDatabase* rygel_lms_database_construct (GType object_type, GError** error);
5768 +gchar* rygel_lms_dbus_get_data_base_path (RygelLMSDBus* self);
5769 +guint64 rygel_lms_dbus_get_update_id (RygelLMSDBus* self);
5770 +static void rygel_lms_database_on_lms_properties_changed (RygelLMSDatabase* self, GDBusProxy* lms_proxy, GVariant* changed, gchar** invalidated, int invalidated_length1);
5771 +static void _rygel_lms_database_on_lms_properties_changed_g_dbus_proxy_g_properties_changed (GDBusProxy* _sender, GVariant* changed_properties, gchar** invalidated_properties, gpointer self);
5772 +static void _rygel_lms_database_utf8_contains_sqlite_user_func_callback (sqlite3_context* context, int values_length1, sqlite3_value** values);
5773 +static gint _rygel_lms_database_utf8_collate_sqlite_compare_callback (gpointer self, gint alen, void* a, gint blen, void* b);
5774 +static gchar* _variant_get1 (GVariant* value);
5775 +static guint64 _variant_get2 (GVariant* value);
5776 +static guint64 _variant_get3 (GVariant* value);
5777 +sqlite3_stmt* rygel_lms_database_prepare (RygelLMSDatabase* self, const gchar* query_string, GError** error);
5778 +sqlite3_stmt* rygel_lms_database_prepare_and_init (RygelLMSDatabase* self, const gchar* query, GValue* arguments, int arguments_length1, GError** error);
5779 +void rygel_lms_database_find_object (const gchar* id, sqlite3_stmt* stmt, GError** error);
5780 +void rygel_lms_database_get_children_init (sqlite3_stmt* stmt, guint offset, guint max_count, const gchar* sort_criteria, GError** error);
5781 +void rygel_lms_database_get_children_with_update_id_init (sqlite3_stmt* stmt, guint64 old_id, guint64 new_id, GError** error);
5782 +gboolean rygel_lms_database_get_children_step (sqlite3_stmt* stmt, GError** error);
5783 +static void g_cclosure_user_marshal_VOID__UINT64_UINT64 (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
5784 +static void rygel_lms_database_finalize (RygelLMSDatabase* obj);
5785 +static gint _vala_array_length (gpointer array);
5788 +GQuark rygel_lms_database_error_quark (void) {
5789 + return g_quark_from_static_string ("rygel_lms_database_error-quark");
5794 + * Function to implement the custom SQL function 'contains'
5796 +static void rygel_lms_database_utf8_contains (sqlite3_context* context, sqlite3_value** args, int args_length1) {
5797 + sqlite3_value** _tmp0_ = NULL;
5798 + gint _tmp0__length1 = 0;
5799 + gboolean _tmp1_ = FALSE;
5800 + sqlite3_value** _tmp2_ = NULL;
5801 + gint _tmp2__length1 = 0;
5802 + sqlite3_value* _tmp3_ = NULL;
5803 + const gchar* _tmp4_ = NULL;
5804 + gchar* pattern = NULL;
5805 + sqlite3_value** _tmp9_ = NULL;
5806 + gint _tmp9__length1 = 0;
5807 + sqlite3_value* _tmp10_ = NULL;
5808 + const gchar* _tmp11_ = NULL;
5809 + gchar* _tmp12_ = NULL;
5810 + const gchar* _tmp13_ = NULL;
5811 + sqlite3_value** _tmp14_ = NULL;
5812 + gint _tmp14__length1 = 0;
5813 + sqlite3_value* _tmp15_ = NULL;
5814 + const gchar* _tmp16_ = NULL;
5815 + gboolean _tmp17_ = FALSE;
5816 + g_return_if_fail (context != NULL);
5818 + _tmp0__length1 = args_length1;
5819 + _vala_return_if_fail (_tmp0__length1 == 2, "args.length == 2");
5821 + _tmp2__length1 = args_length1;
5822 + _tmp3_ = _tmp2_[0];
5823 + _tmp4_ = sqlite3_value_text (_tmp3_);
5824 + if (_tmp4_ == NULL) {
5827 + sqlite3_value** _tmp5_ = NULL;
5828 + gint _tmp5__length1 = 0;
5829 + sqlite3_value* _tmp6_ = NULL;
5830 + const gchar* _tmp7_ = NULL;
5832 + _tmp5__length1 = args_length1;
5833 + _tmp6_ = _tmp5_[1];
5834 + _tmp7_ = sqlite3_value_text (_tmp6_);
5835 + _tmp1_ = _tmp7_ == NULL;
5838 + sqlite3_context* _tmp8_ = NULL;
5840 + sqlite3_result_int (_tmp8_, 0);
5844 + _tmp9__length1 = args_length1;
5845 + _tmp10_ = _tmp9_[1];
5846 + _tmp11_ = sqlite3_value_text (_tmp10_);
5847 + _tmp12_ = g_regex_escape_string (_tmp11_, -1);
5848 + pattern = _tmp12_;
5849 + _tmp13_ = pattern;
5851 + _tmp14__length1 = args_length1;
5852 + _tmp15_ = _tmp14_[0];
5853 + _tmp16_ = sqlite3_value_text (_tmp15_);
5854 + _tmp17_ = g_regex_match_simple (_tmp13_, _tmp16_, G_REGEX_CASELESS, 0);
5856 + sqlite3_context* _tmp18_ = NULL;
5857 + _tmp18_ = context;
5858 + sqlite3_result_int (_tmp18_, 1);
5860 + sqlite3_context* _tmp19_ = NULL;
5861 + _tmp19_ = context;
5862 + sqlite3_result_int (_tmp19_, 0);
5864 + _g_free0 (pattern);
5869 + * Function to implement the custom SQLite collation 'CASEFOLD'.
5871 + * Uses utf8 case-fold to compare the strings.
5873 +static gint rygel_lms_database_utf8_collate (gint alen, void* a, gint blen, void* b) {
5875 + guint8* _a = NULL;
5876 + void* _tmp0_ = NULL;
5877 + gint _a_length1 = 0;
5878 + gint __a_size_ = 0;
5881 + guint8* _b = NULL;
5882 + void* _tmp3_ = NULL;
5883 + gint _b_length1 = 0;
5884 + gint __b_size_ = 0;
5889 + _a = (guint8*) _tmp0_;
5891 + __a_size_ = _a_length1;
5893 + _a_length1 = _tmp1_;
5894 + _tmp2_ = _a_length1;
5896 + _b = (guint8*) _tmp3_;
5898 + __b_size_ = _b_length1;
5900 + _b_length1 = _tmp4_;
5901 + _tmp5_ = _b_length1;
5902 + _tmp6_ = rygel_lms_utf8_collate_str (_a, _a_length1, _b, _b_length1);
5908 +static void _rygel_lms_database_on_lms_properties_changed_g_dbus_proxy_g_properties_changed (GDBusProxy* _sender, GVariant* changed_properties, gchar** invalidated_properties, gpointer self) {
5909 + rygel_lms_database_on_lms_properties_changed ((RygelLMSDatabase*) self, _sender, changed_properties, invalidated_properties, _vala_array_length (invalidated_properties));
5913 +static void _rygel_lms_database_utf8_contains_sqlite_user_func_callback (sqlite3_context* context, int values_length1, sqlite3_value** values) {
5914 + rygel_lms_database_utf8_contains (context, values, values_length1);
5918 +static gint _rygel_lms_database_utf8_collate_sqlite_compare_callback (gpointer self, gint alen, void* a, gint blen, void* b) {
5920 + result = rygel_lms_database_utf8_collate (alen, a, blen, b);
5925 +RygelLMSDatabase* rygel_lms_database_construct (GType object_type, GError** error) {
5926 + RygelLMSDatabase* self = NULL;
5927 + gchar* db_path = NULL;
5928 + const gchar* _tmp17_ = NULL;
5929 + sqlite3* _tmp18_ = NULL;
5930 + sqlite3* _tmp19_ = NULL;
5932 + sqlite3* _tmp25_ = NULL;
5933 + sqlite3* _tmp26_ = NULL;
5934 + GError * _inner_error_ = NULL;
5935 + self = (RygelLMSDatabase*) g_type_create_instance (object_type);
5937 + RygelLMSDBus* _tmp0_ = NULL;
5938 + RygelLMSDBus* _tmp1_ = NULL;
5939 + RygelLMSDBus* _tmp2_ = NULL;
5940 + RygelLMSDBus* _tmp3_ = NULL;
5941 + gchar* _tmp4_ = NULL;
5942 + gchar* _tmp5_ = NULL;
5943 + const gchar* _tmp6_ = NULL;
5944 + RygelLMSDBus* _tmp7_ = NULL;
5945 + guint64 _tmp8_ = 0ULL;
5946 + guint64 _tmp9_ = 0ULL;
5947 + guint64 _tmp10_ = 0ULL;
5948 + RygelLMSDBus* _tmp11_ = NULL;
5949 + _tmp1_ = g_initable_new (RYGEL_LMS_TYPE_DBUS_PROXY, NULL, &_inner_error_, "g-flags", 0, "g-name", "org.lightmediascanner", "g-bus-type", G_BUS_TYPE_SESSION, "g-object-path", "/org/lightmediascanner/Scanner1", "g-interface-name", "org.lightmediascanner.Scanner1", "g-interface-info", g_type_get_qdata (RYGEL_LMS_TYPE_DBUS, g_quark_from_static_string ("vala-dbus-interface-info")), NULL);
5950 + _tmp0_ = (RygelLMSDBus*) _tmp1_;
5951 + if (G_UNLIKELY (_inner_error_ != NULL)) {
5952 + if (_inner_error_->domain == G_IO_ERROR) {
5953 + goto __catch11_g_io_error;
5955 + _g_free0 (db_path);
5956 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
5957 + g_clear_error (&_inner_error_);
5962 + _g_object_unref0 (self->priv->lms_proxy);
5963 + self->priv->lms_proxy = _tmp2_;
5964 + _tmp3_ = self->priv->lms_proxy;
5965 + _tmp4_ = rygel_lms_dbus_get_data_base_path (_tmp3_);
5967 + _g_free0 (db_path);
5970 + g_debug ("rygel-lms-database.vala:94: Got db path %s from LMS over dbus", _tmp6_);
5971 + _tmp7_ = self->priv->lms_proxy;
5972 + _tmp8_ = rygel_lms_dbus_get_update_id (_tmp7_);
5974 + self->priv->update_id = _tmp9_;
5975 + _tmp10_ = self->priv->update_id;
5976 + g_debug ("rygel-lms-database.vala:96: Got updated id %lld from LMS over dbus", _tmp10_);
5977 + _tmp11_ = self->priv->lms_proxy;
5978 + g_signal_connect ((GDBusProxy*) _tmp11_, "g-properties-changed", (GCallback) _rygel_lms_database_on_lms_properties_changed_g_dbus_proxy_g_properties_changed, self);
5979 + _g_object_unref0 (_tmp0_);
5982 + __catch11_g_io_error:
5985 + GError* _tmp12_ = NULL;
5986 + const gchar* _tmp13_ = NULL;
5987 + const gchar* _tmp14_ = NULL;
5988 + gchar* _tmp15_ = NULL;
5989 + const gchar* _tmp16_ = NULL;
5990 + e = _inner_error_;
5991 + _inner_error_ = NULL;
5993 + _tmp13_ = _tmp12_->message;
5994 + g_warning ("rygel-lms-database.vala:100: Couldn't get LMS Dbus proxy: %s", _tmp13_);
5995 + _tmp14_ = g_get_user_config_dir ();
5996 + _tmp15_ = g_strconcat (_tmp14_, "/lightmediascannerd/db.sqlite3", NULL);
5997 + _g_free0 (db_path);
5998 + db_path = _tmp15_;
5999 + _tmp16_ = db_path;
6000 + g_debug ("rygel-lms-database.vala:103: Using default sqlite database location %s", _tmp16_);
6001 + _g_error_free0 (e);
6004 + if (G_UNLIKELY (_inner_error_ != NULL)) {
6005 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6006 + g_propagate_error (error, _inner_error_);
6007 + _g_free0 (db_path);
6008 + _rygel_lms_database_unref0 (self);
6011 + _g_free0 (db_path);
6012 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6013 + g_clear_error (&_inner_error_);
6017 + _tmp17_ = db_path;
6018 + sqlite3_open (_tmp17_, &_tmp18_);
6019 + _sqlite3_close0 (self->priv->db);
6020 + self->priv->db = _tmp18_;
6021 + _tmp19_ = self->priv->db;
6022 + _tmp20_ = sqlite3_errcode (_tmp19_);
6023 + if (_tmp20_ != SQLITE_OK) {
6024 + const gchar* _tmp21_ = NULL;
6025 + sqlite3* _tmp22_ = NULL;
6027 + GError* _tmp24_ = NULL;
6028 + _tmp21_ = db_path;
6029 + _tmp22_ = self->priv->db;
6030 + _tmp23_ = sqlite3_errcode (_tmp22_);
6031 + _tmp24_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_OPEN, "Failed to open '%s': %d", _tmp21_, _tmp23_);
6032 + _inner_error_ = _tmp24_;
6033 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6034 + g_propagate_error (error, _inner_error_);
6035 + _g_free0 (db_path);
6036 + _rygel_lms_database_unref0 (self);
6039 + _g_free0 (db_path);
6040 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6041 + g_clear_error (&_inner_error_);
6045 + _tmp25_ = self->priv->db;
6046 + sqlite3_create_function (_tmp25_, "contains", 2, SQLITE_UTF8, NULL, _rygel_lms_database_utf8_contains_sqlite_user_func_callback, NULL, NULL);
6047 + _tmp26_ = self->priv->db;
6048 + sqlite3_create_collation (_tmp26_, "CASEFOLD", SQLITE_UTF8, NULL, (int (*)(void *, int, const void *, int, const void *)) _rygel_lms_database_utf8_collate_sqlite_compare_callback);
6049 + _g_free0 (db_path);
6054 +RygelLMSDatabase* rygel_lms_database_new (GError** error) {
6055 + return rygel_lms_database_construct (RYGEL_LMS_TYPE_DATABASE, error);
6059 +static gchar* _variant_get1 (GVariant* value) {
6060 + return g_variant_dup_string (value, NULL);
6064 +static guint64 _variant_get2 (GVariant* value) {
6065 + return g_variant_get_uint64 (value);
6069 +static guint64 _variant_get3 (GVariant* value) {
6070 + return g_variant_get_uint64 (value);
6074 +static void rygel_lms_database_on_lms_properties_changed (RygelLMSDatabase* self, GDBusProxy* lms_proxy, GVariant* changed, gchar** invalidated, int invalidated_length1) {
6075 + GVariant* _tmp0_ = NULL;
6076 + const GVariantType* _tmp1_ = NULL;
6077 + const GVariantType* _tmp2_ = NULL;
6078 + gboolean _tmp3_ = FALSE;
6079 + g_return_if_fail (self != NULL);
6080 + g_return_if_fail (lms_proxy != NULL);
6081 + g_return_if_fail (changed != NULL);
6083 + _tmp1_ = g_variant_get_type (_tmp0_);
6084 + _tmp2_ = G_VARIANT_TYPE_VARDICT;
6085 + _tmp3_ = g_variant_type_equal (_tmp1_, _tmp2_);
6090 + GVariantIter* _changed_prop_it = NULL;
6091 + GVariant* _tmp4_ = NULL;
6092 + GVariantIter* _tmp5_ = NULL;
6093 + GVariant* changed_prop = NULL;
6095 + _tmp5_ = g_variant_iter_new (_tmp4_);
6096 + _changed_prop_it = _tmp5_;
6098 + GVariantIter* _tmp6_ = NULL;
6099 + GVariant* _tmp7_ = NULL;
6100 + GVariant* _tmp8_ = NULL;
6101 + gchar* key = NULL;
6102 + GVariant* _tmp9_ = NULL;
6103 + GVariant* _tmp10_ = NULL;
6104 + GVariant* _tmp11_ = NULL;
6105 + gchar* _tmp12_ = NULL;
6106 + gchar* _tmp13_ = NULL;
6107 + GVariant* value = NULL;
6108 + GVariant* _tmp14_ = NULL;
6109 + GVariant* _tmp15_ = NULL;
6110 + GVariant* _tmp16_ = NULL;
6111 + GVariant* _tmp17_ = NULL;
6112 + GVariant* _tmp18_ = NULL;
6113 + const gchar* _tmp19_ = NULL;
6114 + GVariant* _tmp20_ = NULL;
6115 + gchar* _tmp21_ = NULL;
6116 + gchar* _tmp22_ = NULL;
6117 + const gchar* _tmp23_ = NULL;
6118 + const gchar* _tmp24_ = NULL;
6119 + GQuark _tmp26_ = 0U;
6120 + static GQuark _tmp25_label0 = 0;
6121 + _tmp6_ = _changed_prop_it;
6122 + _tmp7_ = g_variant_iter_next_value (_tmp6_);
6123 + _g_variant_unref0 (changed_prop);
6124 + changed_prop = _tmp7_;
6125 + _tmp8_ = changed_prop;
6126 + if (!(_tmp8_ != NULL)) {
6129 + _tmp9_ = changed_prop;
6130 + _tmp10_ = g_variant_get_child_value (_tmp9_, (gsize) 0);
6131 + _tmp11_ = _tmp10_;
6132 + _tmp12_ = _variant_get1 (_tmp11_);
6133 + _tmp13_ = _tmp12_;
6134 + _g_variant_unref0 (_tmp11_);
6136 + _tmp14_ = changed_prop;
6137 + _tmp15_ = g_variant_get_child_value (_tmp14_, (gsize) 1);
6138 + _tmp16_ = _tmp15_;
6139 + _tmp17_ = g_variant_get_child_value (_tmp16_, (gsize) 0);
6140 + _tmp18_ = _tmp17_;
6141 + _g_variant_unref0 (_tmp16_);
6145 + _tmp21_ = g_variant_print (_tmp20_, TRUE);
6146 + _tmp22_ = _tmp21_;
6147 + g_debug ("rygel-lms-database.vala:138: LMS property %s changed value to %s", _tmp19_, _tmp22_);
6148 + _g_free0 (_tmp22_);
6150 + _tmp24_ = _tmp23_;
6151 + _tmp26_ = (NULL == _tmp24_) ? 0 : g_quark_from_string (_tmp24_);
6152 + if (_tmp26_ == ((0 != _tmp25_label0) ? _tmp25_label0 : (_tmp25_label0 = g_quark_from_static_string ("UpdateID")))) {
6156 + guint64 _tmp27_ = 0ULL;
6157 + GVariant* _tmp28_ = NULL;
6158 + guint64 _tmp29_ = 0ULL;
6159 + GVariant* _tmp30_ = NULL;
6160 + guint64 _tmp31_ = 0ULL;
6161 + _tmp27_ = self->priv->update_id;
6163 + _tmp29_ = _variant_get2 (_tmp28_);
6164 + g_signal_emit_by_name (self, "db-updated", _tmp27_, _tmp29_);
6166 + _tmp31_ = _variant_get3 (_tmp30_);
6167 + self->priv->update_id = _tmp31_;
6172 + _g_variant_unref0 (value);
6175 + _g_variant_unref0 (changed_prop);
6176 + _g_variant_iter_free0 (_changed_prop_it);
6181 +sqlite3_stmt* rygel_lms_database_prepare (RygelLMSDatabase* self, const gchar* query_string, GError** error) {
6182 + sqlite3_stmt* result = NULL;
6183 + sqlite3_stmt* statement = NULL;
6185 + sqlite3* _tmp0_ = NULL;
6186 + const gchar* _tmp1_ = NULL;
6187 + sqlite3_stmt* _tmp2_ = NULL;
6190 + GError * _inner_error_ = NULL;
6191 + g_return_val_if_fail (self != NULL, NULL);
6192 + g_return_val_if_fail (query_string != NULL, NULL);
6193 + _tmp0_ = self->priv->db;
6194 + _tmp1_ = query_string;
6195 + _tmp3_ = sqlite3_prepare_v2 (_tmp0_, _tmp1_, -1, &_tmp2_, NULL);
6196 + _sqlite3_finalize0 (statement);
6197 + statement = _tmp2_;
6200 + if (_tmp4_ != SQLITE_OK) {
6201 + const gchar* _tmp5_ = NULL;
6203 + GError* _tmp7_ = NULL;
6204 + _tmp5_ = query_string;
6206 + _tmp7_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_PREPARE, "Unable to create statement '%s': %d", _tmp5_, _tmp6_);
6207 + _inner_error_ = _tmp7_;
6208 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6209 + g_propagate_error (error, _inner_error_);
6210 + _sqlite3_finalize0 (statement);
6213 + _sqlite3_finalize0 (statement);
6214 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6215 + g_clear_error (&_inner_error_);
6219 + result = statement;
6224 +sqlite3_stmt* rygel_lms_database_prepare_and_init (RygelLMSDatabase* self, const gchar* query, GValue* arguments, int arguments_length1, GError** error) {
6225 + sqlite3_stmt* result = NULL;
6226 + sqlite3_stmt* statement = NULL;
6228 + sqlite3* _tmp0_ = NULL;
6229 + const gchar* _tmp1_ = NULL;
6230 + sqlite3_stmt* _tmp2_ = NULL;
6233 + GError * _inner_error_ = NULL;
6234 + g_return_val_if_fail (self != NULL, NULL);
6235 + g_return_val_if_fail (query != NULL, NULL);
6236 + _tmp0_ = self->priv->db;
6238 + _tmp3_ = sqlite3_prepare_v2 (_tmp0_, _tmp1_, -1, &_tmp2_, NULL);
6239 + _sqlite3_finalize0 (statement);
6240 + statement = _tmp2_;
6243 + if (_tmp4_ != SQLITE_OK) {
6244 + const gchar* _tmp5_ = NULL;
6246 + GError* _tmp7_ = NULL;
6249 + _tmp7_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_PREPARE, "Unable to create statement '%s': %d", _tmp5_, _tmp6_);
6250 + _inner_error_ = _tmp7_;
6251 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6252 + g_propagate_error (error, _inner_error_);
6253 + _sqlite3_finalize0 (statement);
6256 + _sqlite3_finalize0 (statement);
6257 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6258 + g_clear_error (&_inner_error_);
6266 + gboolean _tmp8_ = FALSE;
6270 + GValue* _tmp11_ = NULL;
6271 + gint _tmp11__length1 = 0;
6272 + gint sqlite_err = 0;
6273 + GValue current_value = {0};
6274 + GValue* _tmp12_ = NULL;
6275 + gint _tmp12__length1 = 0;
6277 + GValue _tmp14_ = {0};
6278 + gboolean _tmp15_ = FALSE;
6286 + _tmp11_ = arguments;
6287 + _tmp11__length1 = arguments_length1;
6288 + if (!(_tmp10_ <= _tmp11__length1)) {
6291 + _tmp12_ = arguments;
6292 + _tmp12__length1 = arguments_length1;
6294 + _tmp14_ = _tmp12_[_tmp13_ - 1];
6295 + current_value = _tmp14_;
6296 + _tmp15_ = G_VALUE_HOLDS (¤t_value, G_TYPE_INT);
6298 + sqlite3_stmt* _tmp16_ = NULL;
6303 + _tmp16_ = statement;
6305 + _tmp18_ = g_value_get_int (¤t_value);
6306 + _tmp19_ = sqlite3_bind_int (_tmp16_, _tmp17_, _tmp18_);
6307 + sqlite_err = _tmp19_;
6308 + _tmp20_ = sqlite_err;
6309 + if (_tmp20_ != SQLITE_OK) {
6311 + GError* _tmp22_ = NULL;
6312 + _tmp21_ = sqlite_err;
6313 + _tmp22_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp21_);
6314 + _inner_error_ = _tmp22_;
6315 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6316 + g_propagate_error (error, _inner_error_);
6317 + _sqlite3_finalize0 (statement);
6320 + _sqlite3_finalize0 (statement);
6321 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6322 + g_clear_error (&_inner_error_);
6327 + gboolean _tmp23_ = FALSE;
6328 + _tmp23_ = G_VALUE_HOLDS (¤t_value, G_TYPE_INT64);
6330 + sqlite3_stmt* _tmp24_ = NULL;
6332 + gint64 _tmp26_ = 0LL;
6335 + _tmp24_ = statement;
6337 + _tmp26_ = g_value_get_int64 (¤t_value);
6338 + _tmp27_ = sqlite3_bind_int64 (_tmp24_, _tmp25_, _tmp26_);
6339 + sqlite_err = _tmp27_;
6340 + _tmp28_ = sqlite_err;
6341 + if (_tmp28_ != SQLITE_OK) {
6343 + GError* _tmp30_ = NULL;
6344 + _tmp29_ = sqlite_err;
6345 + _tmp30_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp29_);
6346 + _inner_error_ = _tmp30_;
6347 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6348 + g_propagate_error (error, _inner_error_);
6349 + _sqlite3_finalize0 (statement);
6352 + _sqlite3_finalize0 (statement);
6353 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6354 + g_clear_error (&_inner_error_);
6359 + gboolean _tmp31_ = FALSE;
6360 + _tmp31_ = G_VALUE_HOLDS (¤t_value, G_TYPE_UINT64);
6362 + sqlite3_stmt* _tmp32_ = NULL;
6364 + guint64 _tmp34_ = 0ULL;
6367 + _tmp32_ = statement;
6369 + _tmp34_ = g_value_get_uint64 (¤t_value);
6370 + _tmp35_ = sqlite3_bind_int64 (_tmp32_, _tmp33_, (gint64) _tmp34_);
6371 + sqlite_err = _tmp35_;
6372 + _tmp36_ = sqlite_err;
6373 + if (_tmp36_ != SQLITE_OK) {
6375 + GError* _tmp38_ = NULL;
6376 + _tmp37_ = sqlite_err;
6377 + _tmp38_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp37_);
6378 + _inner_error_ = _tmp38_;
6379 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6380 + g_propagate_error (error, _inner_error_);
6381 + _sqlite3_finalize0 (statement);
6384 + _sqlite3_finalize0 (statement);
6385 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6386 + g_clear_error (&_inner_error_);
6391 + gboolean _tmp39_ = FALSE;
6392 + _tmp39_ = G_VALUE_HOLDS (¤t_value, G_TYPE_LONG);
6394 + sqlite3_stmt* _tmp40_ = NULL;
6396 + glong _tmp42_ = 0L;
6399 + _tmp40_ = statement;
6401 + _tmp42_ = g_value_get_long (¤t_value);
6402 + _tmp43_ = sqlite3_bind_int64 (_tmp40_, _tmp41_, (gint64) _tmp42_);
6403 + sqlite_err = _tmp43_;
6404 + _tmp44_ = sqlite_err;
6405 + if (_tmp44_ != SQLITE_OK) {
6407 + GError* _tmp46_ = NULL;
6408 + _tmp45_ = sqlite_err;
6409 + _tmp46_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp45_);
6410 + _inner_error_ = _tmp46_;
6411 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6412 + g_propagate_error (error, _inner_error_);
6413 + _sqlite3_finalize0 (statement);
6416 + _sqlite3_finalize0 (statement);
6417 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6418 + g_clear_error (&_inner_error_);
6423 + gboolean _tmp47_ = FALSE;
6424 + _tmp47_ = G_VALUE_HOLDS (¤t_value, G_TYPE_UINT);
6426 + sqlite3_stmt* _tmp48_ = NULL;
6428 + guint _tmp50_ = 0U;
6431 + _tmp48_ = statement;
6433 + _tmp50_ = g_value_get_uint (¤t_value);
6434 + _tmp51_ = sqlite3_bind_int64 (_tmp48_, _tmp49_, (gint64) _tmp50_);
6435 + sqlite_err = _tmp51_;
6436 + _tmp52_ = sqlite_err;
6437 + if (_tmp52_ != SQLITE_OK) {
6439 + GError* _tmp54_ = NULL;
6440 + _tmp53_ = sqlite_err;
6441 + _tmp54_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp53_);
6442 + _inner_error_ = _tmp54_;
6443 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6444 + g_propagate_error (error, _inner_error_);
6445 + _sqlite3_finalize0 (statement);
6448 + _sqlite3_finalize0 (statement);
6449 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6450 + g_clear_error (&_inner_error_);
6455 + gboolean _tmp55_ = FALSE;
6456 + _tmp55_ = G_VALUE_HOLDS (¤t_value, G_TYPE_STRING);
6458 + sqlite3_stmt* _tmp56_ = NULL;
6460 + const gchar* _tmp58_ = NULL;
6461 + gchar* _tmp59_ = NULL;
6462 + GDestroyNotify _tmp60_ = NULL;
6465 + _tmp56_ = statement;
6467 + _tmp58_ = g_value_get_string (¤t_value);
6468 + _tmp59_ = g_strdup (_tmp58_);
6470 + _tmp61_ = sqlite3_bind_text (_tmp56_, _tmp57_, _tmp59_, -1, _tmp60_);
6471 + sqlite_err = _tmp61_;
6472 + _tmp62_ = sqlite_err;
6473 + if (_tmp62_ != SQLITE_OK) {
6475 + GError* _tmp64_ = NULL;
6476 + _tmp63_ = sqlite_err;
6477 + _tmp64_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp63_);
6478 + _inner_error_ = _tmp64_;
6479 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6480 + g_propagate_error (error, _inner_error_);
6481 + _sqlite3_finalize0 (statement);
6484 + _sqlite3_finalize0 (statement);
6485 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6486 + g_clear_error (&_inner_error_);
6491 + gboolean _tmp65_ = FALSE;
6492 + _tmp65_ = G_VALUE_HOLDS (¤t_value, G_TYPE_POINTER);
6494 + void* _tmp66_ = NULL;
6495 + _tmp66_ = g_value_peek_pointer (¤t_value);
6496 + if (_tmp66_ == NULL) {
6497 + sqlite3_stmt* _tmp67_ = NULL;
6501 + _tmp67_ = statement;
6503 + _tmp69_ = sqlite3_bind_null (_tmp67_, _tmp68_);
6504 + sqlite_err = _tmp69_;
6505 + _tmp70_ = sqlite_err;
6506 + if (_tmp70_ != SQLITE_OK) {
6508 + GError* _tmp72_ = NULL;
6509 + _tmp71_ = sqlite_err;
6510 + _tmp72_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind value %d", _tmp71_);
6511 + _inner_error_ = _tmp72_;
6512 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6513 + g_propagate_error (error, _inner_error_);
6514 + _sqlite3_finalize0 (statement);
6517 + _sqlite3_finalize0 (statement);
6518 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6519 + g_clear_error (&_inner_error_);
6524 + g_assert_not_reached ();
6528 + GType _tmp73_ = 0UL;
6529 + const gchar* _tmp74_ = NULL;
6530 + const gchar* _tmp75_ = NULL;
6531 + _tmp73_ = G_VALUE_TYPE (¤t_value);
6533 + _tmp74_ = _ ("Unsupported type %s");
6534 + _tmp75_ = g_type_name (type);
6535 + g_warning (_tmp74_, _tmp75_);
6536 + g_assert_not_reached ();
6547 + result = statement;
6552 +void rygel_lms_database_find_object (const gchar* id, sqlite3_stmt* stmt, GError** error) {
6553 + sqlite3_stmt* _tmp0_ = NULL;
6555 + gint integer_id = 0;
6556 + const gchar* _tmp2_ = NULL;
6558 + gint sqlite_err = 0;
6559 + sqlite3_stmt* _tmp4_ = NULL;
6563 + sqlite3_stmt* _tmp10_ = NULL;
6566 + GError * _inner_error_ = NULL;
6567 + g_return_if_fail (id != NULL);
6568 + g_return_if_fail (stmt != NULL);
6570 + _tmp1_ = sqlite3_reset (_tmp0_);
6572 + _tmp3_ = atoi (_tmp2_);
6573 + integer_id = _tmp3_;
6575 + _tmp5_ = integer_id;
6576 + _tmp6_ = sqlite3_bind_int (_tmp4_, 1, _tmp5_);
6577 + sqlite_err = _tmp6_;
6578 + _tmp7_ = sqlite_err;
6579 + if (_tmp7_ != SQLITE_OK) {
6581 + GError* _tmp9_ = NULL;
6582 + _tmp8_ = sqlite_err;
6583 + _tmp9_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind id %d", _tmp8_);
6584 + _inner_error_ = _tmp9_;
6585 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6586 + g_propagate_error (error, _inner_error_);
6589 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6590 + g_clear_error (&_inner_error_);
6595 + _tmp11_ = sqlite3_step (_tmp10_);
6596 + sqlite_err = _tmp11_;
6597 + _tmp12_ = sqlite_err;
6598 + if (_tmp12_ != SQLITE_ROW) {
6599 + const gchar* _tmp13_ = NULL;
6600 + GError* _tmp14_ = NULL;
6602 + _tmp14_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_STEP, "Unable to find id %s", _tmp13_);
6603 + _inner_error_ = _tmp14_;
6604 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6605 + g_propagate_error (error, _inner_error_);
6608 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6609 + g_clear_error (&_inner_error_);
6616 +void rygel_lms_database_get_children_init (sqlite3_stmt* stmt, guint offset, guint max_count, const gchar* sort_criteria, GError** error) {
6617 + gint sqlite_err = 0;
6618 + sqlite3_stmt* _tmp0_ = NULL;
6620 + sqlite3_stmt* _tmp2_ = NULL;
6621 + guint _tmp3_ = 0U;
6624 + sqlite3_stmt* _tmp8_ = NULL;
6625 + guint _tmp9_ = 0U;
6628 + GError * _inner_error_ = NULL;
6629 + g_return_if_fail (stmt != NULL);
6630 + g_return_if_fail (sort_criteria != NULL);
6632 + _tmp1_ = sqlite3_reset (_tmp0_);
6634 + _tmp3_ = max_count;
6635 + _tmp4_ = sqlite3_bind_int (_tmp2_, 1, (gint) _tmp3_);
6636 + sqlite_err = _tmp4_;
6637 + _tmp5_ = sqlite_err;
6638 + if (_tmp5_ != SQLITE_OK) {
6640 + GError* _tmp7_ = NULL;
6641 + _tmp6_ = sqlite_err;
6642 + _tmp7_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind max_count %d", _tmp6_);
6643 + _inner_error_ = _tmp7_;
6644 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6645 + g_propagate_error (error, _inner_error_);
6648 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6649 + g_clear_error (&_inner_error_);
6655 + _tmp10_ = sqlite3_bind_int (_tmp8_, 2, (gint) _tmp9_);
6656 + sqlite_err = _tmp10_;
6657 + _tmp11_ = sqlite_err;
6658 + if (_tmp11_ != SQLITE_OK) {
6660 + GError* _tmp13_ = NULL;
6661 + _tmp12_ = sqlite_err;
6662 + _tmp13_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind offset %d", _tmp12_);
6663 + _inner_error_ = _tmp13_;
6664 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6665 + g_propagate_error (error, _inner_error_);
6668 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6669 + g_clear_error (&_inner_error_);
6676 +void rygel_lms_database_get_children_with_update_id_init (sqlite3_stmt* stmt, guint64 old_id, guint64 new_id, GError** error) {
6677 + gint sqlite_err = 0;
6678 + sqlite3_stmt* _tmp0_ = NULL;
6680 + guint64 _tmp2_ = 0ULL;
6681 + guint64 _tmp3_ = 0ULL;
6683 + sqlite3_stmt* _tmp12_ = NULL;
6684 + guint64 _tmp13_ = 0ULL;
6687 + GError * _inner_error_ = NULL;
6688 + g_return_if_fail (stmt != NULL);
6690 + _tmp1_ = sqlite3_reset (_tmp0_);
6693 + if (_tmp2_ < _tmp3_) {
6694 + sqlite3_stmt* _tmp4_ = NULL;
6697 + _tmp5_ = sqlite3_bind_int64 (_tmp4_, 1, (gint64) 0);
6698 + sqlite_err = _tmp5_;
6700 + sqlite3_stmt* _tmp6_ = NULL;
6701 + guint64 _tmp7_ = 0ULL;
6705 + _tmp8_ = sqlite3_bind_int64 (_tmp6_, 1, (gint64) _tmp7_);
6706 + sqlite_err = _tmp8_;
6708 + _tmp9_ = sqlite_err;
6709 + if (_tmp9_ != SQLITE_OK) {
6711 + GError* _tmp11_ = NULL;
6712 + _tmp10_ = sqlite_err;
6713 + _tmp11_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind old_id %d", _tmp10_);
6714 + _inner_error_ = _tmp11_;
6715 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6716 + g_propagate_error (error, _inner_error_);
6719 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6720 + g_clear_error (&_inner_error_);
6726 + _tmp14_ = sqlite3_bind_int64 (_tmp12_, 2, (gint64) _tmp13_);
6727 + sqlite_err = _tmp14_;
6728 + _tmp15_ = sqlite_err;
6729 + if (_tmp15_ != SQLITE_OK) {
6731 + GError* _tmp17_ = NULL;
6732 + _tmp16_ = sqlite_err;
6733 + _tmp17_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_BIND, "Unable to bind new_id %d", _tmp16_);
6734 + _inner_error_ = _tmp17_;
6735 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6736 + g_propagate_error (error, _inner_error_);
6739 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6740 + g_clear_error (&_inner_error_);
6747 +gboolean rygel_lms_database_get_children_step (sqlite3_stmt* stmt, GError** error) {
6748 + gboolean result = FALSE;
6749 + gboolean retval = FALSE;
6750 + gint sqlite_err = 0;
6751 + sqlite3_stmt* _tmp0_ = NULL;
6754 + gboolean _tmp3_ = FALSE;
6755 + gboolean _tmp4_ = FALSE;
6756 + GError * _inner_error_ = NULL;
6757 + g_return_val_if_fail (stmt != NULL, FALSE);
6759 + _tmp1_ = sqlite3_step (_tmp0_);
6760 + sqlite_err = _tmp1_;
6761 + _tmp2_ = sqlite_err;
6762 + retval = _tmp2_ == SQLITE_ROW;
6766 + _tmp5_ = sqlite_err;
6767 + _tmp3_ = _tmp5_ != SQLITE_DONE;
6773 + GError* _tmp7_ = NULL;
6774 + _tmp6_ = sqlite_err;
6775 + _tmp7_ = g_error_new (RYGEL_LMS_DATABASE_ERROR, RYGEL_LMS_DATABASE_ERROR_STEP, "Error iterating through rows %d", _tmp6_);
6776 + _inner_error_ = _tmp7_;
6777 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
6778 + g_propagate_error (error, _inner_error_);
6781 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
6782 + g_clear_error (&_inner_error_);
6791 +static void g_cclosure_user_marshal_VOID__UINT64_UINT64 (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
6792 + typedef void (*GMarshalFunc_VOID__UINT64_UINT64) (gpointer data1, guint64 arg_1, guint64 arg_2, gpointer data2);
6793 + register GMarshalFunc_VOID__UINT64_UINT64 callback;
6794 + register GCClosure * cc;
6795 + register gpointer data1;
6796 + register gpointer data2;
6797 + cc = (GCClosure *) closure;
6798 + g_return_if_fail (n_param_values == 3);
6799 + if (G_CCLOSURE_SWAP_DATA (closure)) {
6800 + data1 = closure->data;
6801 + data2 = param_values->data[0].v_pointer;
6803 + data1 = param_values->data[0].v_pointer;
6804 + data2 = closure->data;
6806 + callback = (GMarshalFunc_VOID__UINT64_UINT64) (marshal_data ? marshal_data : cc->callback);
6807 + callback (data1, g_value_get_uint64 (param_values + 1), g_value_get_uint64 (param_values + 2), data2);
6811 +static void rygel_lms_value_database_init (GValue* value) {
6812 + value->data[0].v_pointer = NULL;
6816 +static void rygel_lms_value_database_free_value (GValue* value) {
6817 + if (value->data[0].v_pointer) {
6818 + rygel_lms_database_unref (value->data[0].v_pointer);
6823 +static void rygel_lms_value_database_copy_value (const GValue* src_value, GValue* dest_value) {
6824 + if (src_value->data[0].v_pointer) {
6825 + dest_value->data[0].v_pointer = rygel_lms_database_ref (src_value->data[0].v_pointer);
6827 + dest_value->data[0].v_pointer = NULL;
6832 +static gpointer rygel_lms_value_database_peek_pointer (const GValue* value) {
6833 + return value->data[0].v_pointer;
6837 +static gchar* rygel_lms_value_database_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
6838 + if (collect_values[0].v_pointer) {
6839 + RygelLMSDatabase* object;
6840 + object = collect_values[0].v_pointer;
6841 + if (object->parent_instance.g_class == NULL) {
6842 + return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
6843 + } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
6844 + return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
6846 + value->data[0].v_pointer = rygel_lms_database_ref (object);
6848 + value->data[0].v_pointer = NULL;
6854 +static gchar* rygel_lms_value_database_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
6855 + RygelLMSDatabase** object_p;
6856 + object_p = collect_values[0].v_pointer;
6858 + return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
6860 + if (!value->data[0].v_pointer) {
6862 + } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
6863 + *object_p = value->data[0].v_pointer;
6865 + *object_p = rygel_lms_database_ref (value->data[0].v_pointer);
6871 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
6872 + RygelLMSParamSpecDatabase* spec;
6873 + g_return_val_if_fail (g_type_is_a (object_type, RYGEL_LMS_TYPE_DATABASE), NULL);
6874 + spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
6875 + G_PARAM_SPEC (spec)->value_type = object_type;
6876 + return G_PARAM_SPEC (spec);
6880 +gpointer rygel_lms_value_get_database (const GValue* value) {
6881 + g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_LMS_TYPE_DATABASE), NULL);
6882 + return value->data[0].v_pointer;
6886 +void rygel_lms_value_set_database (GValue* value, gpointer v_object) {
6887 + RygelLMSDatabase* old;
6888 + g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_LMS_TYPE_DATABASE));
6889 + old = value->data[0].v_pointer;
6891 + g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, RYGEL_LMS_TYPE_DATABASE));
6892 + g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
6893 + value->data[0].v_pointer = v_object;
6894 + rygel_lms_database_ref (value->data[0].v_pointer);
6896 + value->data[0].v_pointer = NULL;
6899 + rygel_lms_database_unref (old);
6904 +void rygel_lms_value_take_database (GValue* value, gpointer v_object) {
6905 + RygelLMSDatabase* old;
6906 + g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_LMS_TYPE_DATABASE));
6907 + old = value->data[0].v_pointer;
6909 + g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, RYGEL_LMS_TYPE_DATABASE));
6910 + g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
6911 + value->data[0].v_pointer = v_object;
6913 + value->data[0].v_pointer = NULL;
6916 + rygel_lms_database_unref (old);
6921 +static void rygel_lms_database_class_init (RygelLMSDatabaseClass * klass) {
6922 + rygel_lms_database_parent_class = g_type_class_peek_parent (klass);
6923 + ((RygelLMSDatabaseClass *) klass)->finalize = rygel_lms_database_finalize;
6924 + g_type_class_add_private (klass, sizeof (RygelLMSDatabasePrivate));
6925 + g_signal_new ("db_updated", RYGEL_LMS_TYPE_DATABASE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__UINT64_UINT64, G_TYPE_NONE, 2, G_TYPE_UINT64, G_TYPE_UINT64);
6929 +static void rygel_lms_database_instance_init (RygelLMSDatabase * self) {
6930 + self->priv = RYGEL_LMS_DATABASE_GET_PRIVATE (self);
6931 + self->ref_count = 1;
6935 +static void rygel_lms_database_finalize (RygelLMSDatabase* obj) {
6936 + RygelLMSDatabase * self;
6937 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase);
6938 + g_signal_handlers_destroy (self);
6939 + _sqlite3_close0 (self->priv->db);
6940 + _g_object_unref0 (self->priv->lms_proxy);
6944 +GType rygel_lms_database_get_type (void) {
6945 + static volatile gsize rygel_lms_database_type_id__volatile = 0;
6946 + if (g_once_init_enter (&rygel_lms_database_type_id__volatile)) {
6947 + static const GTypeValueTable g_define_type_value_table = { rygel_lms_value_database_init, rygel_lms_value_database_free_value, rygel_lms_value_database_copy_value, rygel_lms_value_database_peek_pointer, "p", rygel_lms_value_database_collect_value, "p", rygel_lms_value_database_lcopy_value };
6948 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSDatabaseClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_database_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSDatabase), 0, (GInstanceInitFunc) rygel_lms_database_instance_init, &g_define_type_value_table };
6949 + static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
6950 + GType rygel_lms_database_type_id;
6951 + rygel_lms_database_type_id = g_type_register_fundamental (g_type_fundamental_next (), "RygelLMSDatabase", &g_define_type_info, &g_define_type_fundamental_info, 0);
6952 + g_once_init_leave (&rygel_lms_database_type_id__volatile, rygel_lms_database_type_id);
6954 + return rygel_lms_database_type_id__volatile;
6958 +gpointer rygel_lms_database_ref (gpointer instance) {
6959 + RygelLMSDatabase* self;
6961 + g_atomic_int_inc (&self->ref_count);
6966 +void rygel_lms_database_unref (gpointer instance) {
6967 + RygelLMSDatabase* self;
6969 + if (g_atomic_int_dec_and_test (&self->ref_count)) {
6970 + RYGEL_LMS_DATABASE_GET_CLASS (self)->finalize (self);
6971 + g_type_free_instance ((GTypeInstance *) self);
6976 +static gint _vala_array_length (gpointer array) {
6980 + while (((gpointer*) array)[length]) {
6989 diff --git a/src/plugins/lms/rygel-lms-dbus-interfaces.c b/src/plugins/lms/rygel-lms-dbus-interfaces.c
6990 new file mode 100644
6991 index 0000000..b511b17
6993 +++ b/src/plugins/lms/rygel-lms-dbus-interfaces.c
6995 +/* rygel-lms-dbus-interfaces.c generated by valac 0.28.0, the Vala compiler
6996 + * generated from rygel-lms-dbus-interfaces.vala, do not modify */
6999 + * Copyright (C) 2014 Intel Corporation.
7001 + * Author: Alexander Kanavin <alex.kanavin@gmail.com>
7003 + * This file is part of Rygel.
7005 + * Rygel is free software; you can redistribute it and/or modify
7006 + * it under the terms of the GNU Lesser General Public License as published by
7007 + * the Free Software Foundation; either version 2 of the License, or
7008 + * (at your option) any later version.
7010 + * Rygel is distributed in the hope that it will be useful,
7011 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
7012 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7013 + * GNU Lesser General Public License for more details.
7015 + * You should have received a copy of the GNU Lesser General Public License
7016 + * along with this program; if not, write to the Free Software Foundation,
7017 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
7021 +#include <glib-object.h>
7022 +#include <gio/gio.h>
7023 +#include <stdlib.h>
7024 +#include <string.h>
7027 +#define RYGEL_LMS_TYPE_DBUS (rygel_lms_dbus_get_type ())
7028 +#define RYGEL_LMS_DBUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DBUS, RygelLMSDBus))
7029 +#define RYGEL_LMS_IS_DBUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DBUS))
7030 +#define RYGEL_LMS_DBUS_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), RYGEL_LMS_TYPE_DBUS, RygelLMSDBusIface))
7032 +typedef struct _RygelLMSDBus RygelLMSDBus;
7033 +typedef struct _RygelLMSDBusIface RygelLMSDBusIface;
7035 +#define RYGEL_LMS_TYPE_DBUS_PROXY (rygel_lms_dbus_proxy_get_type ())
7036 +typedef GDBusProxy RygelLMSDBusProxy;
7037 +typedef GDBusProxyClass RygelLMSDBusProxyClass;
7038 +#define _g_free0(var) (var = (g_free (var), NULL))
7040 +struct _RygelLMSDBusIface {
7041 + GTypeInterface parent_iface;
7042 + gchar* (*get_data_base_path) (RygelLMSDBus* self);
7043 + guint64 (*get_update_id) (RygelLMSDBus* self);
7048 +GType rygel_lms_dbus_get_type (void) G_GNUC_CONST;
7049 +GType rygel_lms_dbus_proxy_get_type (void) G_GNUC_CONST;
7050 +guint rygel_lms_dbus_register_object (void* object, GDBusConnection* connection, const gchar* path, GError** error);
7051 +gchar* rygel_lms_dbus_get_data_base_path (RygelLMSDBus* self);
7052 +guint64 rygel_lms_dbus_get_update_id (RygelLMSDBus* self);
7053 +static void rygel_lms_dbus_proxy_g_signal (GDBusProxy* proxy, const gchar* sender_name, const gchar* signal_name, GVariant* parameters);
7054 +static gchar* rygel_lms_dbus_dbus_proxy_get_data_base_path (RygelLMSDBus* self);
7055 +static guint64 rygel_lms_dbus_dbus_proxy_get_update_id (RygelLMSDBus* self);
7056 +static void rygel_lms_dbus_proxy_rygel_lms_dbus_interface_init (RygelLMSDBusIface* iface);
7057 +static void rygel_lms_dbus_dbus_interface_method_call (GDBusConnection* connection, const gchar* sender, const gchar* object_path, const gchar* interface_name, const gchar* method_name, GVariant* parameters, GDBusMethodInvocation* invocation, gpointer user_data);
7058 +static GVariant* rygel_lms_dbus_dbus_interface_get_property (GDBusConnection* connection, const gchar* sender, const gchar* object_path, const gchar* interface_name, const gchar* property_name, GError** error, gpointer user_data);
7059 +static GVariant* _dbus_rygel_lms_dbus_get_data_base_path (RygelLMSDBus* self);
7060 +static GVariant* _dbus_rygel_lms_dbus_get_update_id (RygelLMSDBus* self);
7061 +static gboolean rygel_lms_dbus_dbus_interface_set_property (GDBusConnection* connection, const gchar* sender, const gchar* object_path, const gchar* interface_name, const gchar* property_name, GVariant* value, GError** error, gpointer user_data);
7062 +static void _rygel_lms_dbus_unregister_object (gpointer user_data);
7064 +static const GDBusMethodInfo * const _rygel_lms_dbus_dbus_method_info[] = {NULL};
7065 +static const GDBusSignalInfo * const _rygel_lms_dbus_dbus_signal_info[] = {NULL};
7066 +static const GDBusPropertyInfo _rygel_lms_dbus_dbus_property_info_data_base_path = {-1, "DataBasePath", "s", G_DBUS_PROPERTY_INFO_FLAGS_READABLE};
7067 +static const GDBusPropertyInfo _rygel_lms_dbus_dbus_property_info_update_id = {-1, "UpdateID", "t", G_DBUS_PROPERTY_INFO_FLAGS_READABLE};
7068 +static const GDBusPropertyInfo * const _rygel_lms_dbus_dbus_property_info[] = {&_rygel_lms_dbus_dbus_property_info_data_base_path, &_rygel_lms_dbus_dbus_property_info_update_id, NULL};
7069 +static const GDBusInterfaceInfo _rygel_lms_dbus_dbus_interface_info = {-1, "org.lightmediascanner.Scanner1", (GDBusMethodInfo **) (&_rygel_lms_dbus_dbus_method_info), (GDBusSignalInfo **) (&_rygel_lms_dbus_dbus_signal_info), (GDBusPropertyInfo **) (&_rygel_lms_dbus_dbus_property_info)};
7070 +static const GDBusInterfaceVTable _rygel_lms_dbus_dbus_interface_vtable = {rygel_lms_dbus_dbus_interface_method_call, rygel_lms_dbus_dbus_interface_get_property, rygel_lms_dbus_dbus_interface_set_property};
7072 +gchar* rygel_lms_dbus_get_data_base_path (RygelLMSDBus* self) {
7073 + g_return_val_if_fail (self != NULL, NULL);
7074 + return RYGEL_LMS_DBUS_GET_INTERFACE (self)->get_data_base_path (self);
7078 +guint64 rygel_lms_dbus_get_update_id (RygelLMSDBus* self) {
7079 + g_return_val_if_fail (self != NULL, 0ULL);
7080 + return RYGEL_LMS_DBUS_GET_INTERFACE (self)->get_update_id (self);
7084 +static void rygel_lms_dbus_base_init (RygelLMSDBusIface * iface) {
7085 + static gboolean initialized = FALSE;
7086 + if (!initialized) {
7087 + initialized = TRUE;
7092 +GType rygel_lms_dbus_get_type (void) {
7093 + static volatile gsize rygel_lms_dbus_type_id__volatile = 0;
7094 + if (g_once_init_enter (&rygel_lms_dbus_type_id__volatile)) {
7095 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSDBusIface), (GBaseInitFunc) rygel_lms_dbus_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
7096 + GType rygel_lms_dbus_type_id;
7097 + rygel_lms_dbus_type_id = g_type_register_static (G_TYPE_INTERFACE, "RygelLMSDBus", &g_define_type_info, 0);
7098 + g_type_interface_add_prerequisite (rygel_lms_dbus_type_id, G_TYPE_DBUS_PROXY);
7099 + g_type_set_qdata (rygel_lms_dbus_type_id, g_quark_from_static_string ("vala-dbus-proxy-type"), (void*) rygel_lms_dbus_proxy_get_type);
7100 + g_type_set_qdata (rygel_lms_dbus_type_id, g_quark_from_static_string ("vala-dbus-interface-name"), "org.lightmediascanner.Scanner1");
7101 + g_type_set_qdata (rygel_lms_dbus_type_id, g_quark_from_static_string ("vala-dbus-interface-info"), (void*) (&_rygel_lms_dbus_dbus_interface_info));
7102 + g_type_set_qdata (rygel_lms_dbus_type_id, g_quark_from_static_string ("vala-dbus-register-object"), (void*) rygel_lms_dbus_register_object);
7103 + g_once_init_leave (&rygel_lms_dbus_type_id__volatile, rygel_lms_dbus_type_id);
7105 + return rygel_lms_dbus_type_id__volatile;
7109 +G_DEFINE_TYPE_EXTENDED (RygelLMSDBusProxy, rygel_lms_dbus_proxy, G_TYPE_DBUS_PROXY, 0, G_IMPLEMENT_INTERFACE (RYGEL_LMS_TYPE_DBUS, rygel_lms_dbus_proxy_rygel_lms_dbus_interface_init) )
7110 +static void rygel_lms_dbus_proxy_class_init (RygelLMSDBusProxyClass* klass) {
7111 + G_DBUS_PROXY_CLASS (klass)->g_signal = rygel_lms_dbus_proxy_g_signal;
7115 +static void rygel_lms_dbus_proxy_g_signal (GDBusProxy* proxy, const gchar* sender_name, const gchar* signal_name, GVariant* parameters) {
7119 +static void rygel_lms_dbus_proxy_init (RygelLMSDBusProxy* self) {
7123 +static gchar* rygel_lms_dbus_dbus_proxy_get_data_base_path (RygelLMSDBus* self) {
7124 + GVariant *_inner_reply;
7126 + _inner_reply = g_dbus_proxy_get_cached_property ((GDBusProxy *) self, "DataBasePath");
7127 + if (!_inner_reply) {
7128 + GVariant *_arguments;
7130 + GVariantBuilder _arguments_builder;
7131 + g_variant_builder_init (&_arguments_builder, G_VARIANT_TYPE_TUPLE);
7132 + g_variant_builder_add_value (&_arguments_builder, g_variant_new_string ("org.lightmediascanner.Scanner1"));
7133 + g_variant_builder_add_value (&_arguments_builder, g_variant_new_string ("DataBasePath"));
7134 + _arguments = g_variant_builder_end (&_arguments_builder);
7135 + _reply = g_dbus_proxy_call_sync ((GDBusProxy *) self, "org.freedesktop.DBus.Properties.Get", _arguments, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
7139 + g_variant_get (_reply, "(v)", &_inner_reply);
7140 + g_variant_unref (_reply);
7142 + _result = g_variant_dup_string (_inner_reply, NULL);
7143 + g_variant_unref (_inner_reply);
7148 +static guint64 rygel_lms_dbus_dbus_proxy_get_update_id (RygelLMSDBus* self) {
7149 + GVariant *_inner_reply;
7151 + _inner_reply = g_dbus_proxy_get_cached_property ((GDBusProxy *) self, "UpdateID");
7152 + if (!_inner_reply) {
7153 + GVariant *_arguments;
7155 + GVariantBuilder _arguments_builder;
7156 + g_variant_builder_init (&_arguments_builder, G_VARIANT_TYPE_TUPLE);
7157 + g_variant_builder_add_value (&_arguments_builder, g_variant_new_string ("org.lightmediascanner.Scanner1"));
7158 + g_variant_builder_add_value (&_arguments_builder, g_variant_new_string ("UpdateID"));
7159 + _arguments = g_variant_builder_end (&_arguments_builder);
7160 + _reply = g_dbus_proxy_call_sync ((GDBusProxy *) self, "org.freedesktop.DBus.Properties.Get", _arguments, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL);
7164 + g_variant_get (_reply, "(v)", &_inner_reply);
7165 + g_variant_unref (_reply);
7167 + _result = g_variant_get_uint64 (_inner_reply);
7168 + g_variant_unref (_inner_reply);
7173 +static void rygel_lms_dbus_proxy_rygel_lms_dbus_interface_init (RygelLMSDBusIface* iface) {
7174 + iface->get_data_base_path = rygel_lms_dbus_dbus_proxy_get_data_base_path;
7175 + iface->get_update_id = rygel_lms_dbus_dbus_proxy_get_update_id;
7179 +static void rygel_lms_dbus_dbus_interface_method_call (GDBusConnection* connection, const gchar* sender, const gchar* object_path, const gchar* interface_name, const gchar* method_name, GVariant* parameters, GDBusMethodInvocation* invocation, gpointer user_data) {
7184 + g_object_unref (invocation);
7188 +static GVariant* _dbus_rygel_lms_dbus_get_data_base_path (RygelLMSDBus* self) {
7191 + result = rygel_lms_dbus_get_data_base_path (self);
7192 + _reply = g_variant_new_string (result);
7193 + _g_free0 (result);
7198 +static GVariant* _dbus_rygel_lms_dbus_get_update_id (RygelLMSDBus* self) {
7201 + result = rygel_lms_dbus_get_update_id (self);
7202 + _reply = g_variant_new_uint64 (result);
7207 +static GVariant* rygel_lms_dbus_dbus_interface_get_property (GDBusConnection* connection, const gchar* sender, const gchar* object_path, const gchar* interface_name, const gchar* property_name, GError** error, gpointer user_data) {
7212 + if (strcmp (property_name, "DataBasePath") == 0) {
7213 + return _dbus_rygel_lms_dbus_get_data_base_path (object);
7214 + } else if (strcmp (property_name, "UpdateID") == 0) {
7215 + return _dbus_rygel_lms_dbus_get_update_id (object);
7221 +static gboolean rygel_lms_dbus_dbus_interface_set_property (GDBusConnection* connection, const gchar* sender, const gchar* object_path, const gchar* interface_name, const gchar* property_name, GVariant* value, GError** error, gpointer user_data) {
7230 +guint rygel_lms_dbus_register_object (gpointer object, GDBusConnection* connection, const gchar* path, GError** error) {
7233 + data = g_new (gpointer, 3);
7234 + data[0] = g_object_ref (object);
7235 + data[1] = g_object_ref (connection);
7236 + data[2] = g_strdup (path);
7237 + result = g_dbus_connection_register_object (connection, path, (GDBusInterfaceInfo *) (&_rygel_lms_dbus_dbus_interface_info), &_rygel_lms_dbus_dbus_interface_vtable, data, _rygel_lms_dbus_unregister_object, error);
7245 +static void _rygel_lms_dbus_unregister_object (gpointer user_data) {
7248 + g_object_unref (data[0]);
7249 + g_object_unref (data[1]);
7256 diff --git a/src/plugins/lms/rygel-lms-image-root.c b/src/plugins/lms/rygel-lms-image-root.c
7257 new file mode 100644
7258 index 0000000..5ef358a
7260 +++ b/src/plugins/lms/rygel-lms-image-root.c
7262 +/* rygel-lms-image-root.c generated by valac 0.28.0, the Vala compiler
7263 + * generated from rygel-lms-image-root.vala, do not modify */
7266 + * Copyright (C) 2013 Intel Corporation.
7268 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
7270 + * This file is part of Rygel.
7272 + * Rygel is free software; you can redistribute it and/or modify
7273 + * it under the terms of the GNU Lesser General Public License as published by
7274 + * the Free Software Foundation; either version 2 of the License, or
7275 + * (at your option) any later version.
7277 + * Rygel is distributed in the hope that it will be useful,
7278 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
7279 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7280 + * GNU Lesser General Public License for more details.
7282 + * You should have received a copy of the GNU Lesser General Public License
7283 + * along with this program; if not, write to the Free Software Foundation,
7284 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
7288 +#include <glib-object.h>
7289 +#include <rygel-server.h>
7290 +#include <stdlib.h>
7291 +#include <string.h>
7294 +#define RYGEL_LMS_TYPE_IMAGE_ROOT (rygel_lms_image_root_get_type ())
7295 +#define RYGEL_LMS_IMAGE_ROOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_IMAGE_ROOT, RygelLMSImageRoot))
7296 +#define RYGEL_LMS_IMAGE_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_IMAGE_ROOT, RygelLMSImageRootClass))
7297 +#define RYGEL_LMS_IS_IMAGE_ROOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_IMAGE_ROOT))
7298 +#define RYGEL_LMS_IS_IMAGE_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_IMAGE_ROOT))
7299 +#define RYGEL_LMS_IMAGE_ROOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_IMAGE_ROOT, RygelLMSImageRootClass))
7301 +typedef struct _RygelLMSImageRoot RygelLMSImageRoot;
7302 +typedef struct _RygelLMSImageRootClass RygelLMSImageRootClass;
7303 +typedef struct _RygelLMSImageRootPrivate RygelLMSImageRootPrivate;
7305 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
7306 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
7307 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
7308 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
7309 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
7310 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
7312 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
7313 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
7315 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
7316 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
7317 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
7318 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
7319 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
7320 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
7322 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
7323 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
7325 +#define RYGEL_LMS_TYPE_ALL_IMAGES (rygel_lms_all_images_get_type ())
7326 +#define RYGEL_LMS_ALL_IMAGES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALL_IMAGES, RygelLMSAllImages))
7327 +#define RYGEL_LMS_ALL_IMAGES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALL_IMAGES, RygelLMSAllImagesClass))
7328 +#define RYGEL_LMS_IS_ALL_IMAGES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALL_IMAGES))
7329 +#define RYGEL_LMS_IS_ALL_IMAGES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALL_IMAGES))
7330 +#define RYGEL_LMS_ALL_IMAGES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALL_IMAGES, RygelLMSAllImagesClass))
7332 +typedef struct _RygelLMSAllImages RygelLMSAllImages;
7333 +typedef struct _RygelLMSAllImagesClass RygelLMSAllImagesClass;
7334 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
7336 +#define RYGEL_LMS_TYPE_IMAGE_YEARS (rygel_lms_image_years_get_type ())
7337 +#define RYGEL_LMS_IMAGE_YEARS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_IMAGE_YEARS, RygelLMSImageYears))
7338 +#define RYGEL_LMS_IMAGE_YEARS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_IMAGE_YEARS, RygelLMSImageYearsClass))
7339 +#define RYGEL_LMS_IS_IMAGE_YEARS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_IMAGE_YEARS))
7340 +#define RYGEL_LMS_IS_IMAGE_YEARS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_IMAGE_YEARS))
7341 +#define RYGEL_LMS_IMAGE_YEARS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_IMAGE_YEARS, RygelLMSImageYearsClass))
7343 +typedef struct _RygelLMSImageYears RygelLMSImageYears;
7344 +typedef struct _RygelLMSImageYearsClass RygelLMSImageYearsClass;
7346 +struct _RygelLMSImageRoot {
7347 + RygelSimpleContainer parent_instance;
7348 + RygelLMSImageRootPrivate * priv;
7351 +struct _RygelLMSImageRootClass {
7352 + RygelSimpleContainerClass parent_class;
7356 +static gpointer rygel_lms_image_root_parent_class = NULL;
7358 +GType rygel_lms_image_root_get_type (void) G_GNUC_CONST;
7360 + RYGEL_LMS_IMAGE_ROOT_DUMMY_PROPERTY
7362 +gpointer rygel_lms_database_ref (gpointer instance);
7363 +void rygel_lms_database_unref (gpointer instance);
7364 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
7365 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
7366 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
7367 +gpointer rygel_lms_value_get_database (const GValue* value);
7368 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
7369 +RygelLMSImageRoot* rygel_lms_image_root_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
7370 +RygelLMSImageRoot* rygel_lms_image_root_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
7371 +RygelLMSAllImages* rygel_lms_all_images_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
7372 +RygelLMSAllImages* rygel_lms_all_images_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
7373 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
7374 +GType rygel_lms_all_images_get_type (void) G_GNUC_CONST;
7375 +RygelLMSImageYears* rygel_lms_image_years_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
7376 +RygelLMSImageYears* rygel_lms_image_years_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
7377 +GType rygel_lms_image_years_get_type (void) G_GNUC_CONST;
7380 +RygelLMSImageRoot* rygel_lms_image_root_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
7381 + RygelLMSImageRoot * self = NULL;
7382 + const gchar* _tmp0_ = NULL;
7383 + RygelMediaContainer* _tmp1_ = NULL;
7384 + const gchar* _tmp2_ = NULL;
7385 + RygelLMSDatabase* _tmp3_ = NULL;
7386 + RygelLMSAllImages* _tmp4_ = NULL;
7387 + RygelLMSAllImages* _tmp5_ = NULL;
7388 + RygelLMSDatabase* _tmp6_ = NULL;
7389 + RygelLMSImageYears* _tmp7_ = NULL;
7390 + RygelLMSImageYears* _tmp8_ = NULL;
7391 + g_return_val_if_fail (id != NULL, NULL);
7392 + g_return_val_if_fail (parent != NULL, NULL);
7393 + g_return_val_if_fail (title != NULL, NULL);
7394 + g_return_val_if_fail (lms_db != NULL, NULL);
7398 + self = (RygelLMSImageRoot*) rygel_simple_container_construct (object_type, _tmp0_, _tmp1_, _tmp2_);
7400 + _tmp4_ = rygel_lms_all_images_new ((RygelMediaContainer*) self, _tmp3_);
7402 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp5_);
7403 + _g_object_unref0 (_tmp5_);
7405 + _tmp7_ = rygel_lms_image_years_new ((RygelMediaContainer*) self, _tmp6_);
7407 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp8_);
7408 + _g_object_unref0 (_tmp8_);
7413 +RygelLMSImageRoot* rygel_lms_image_root_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
7414 + return rygel_lms_image_root_construct (RYGEL_LMS_TYPE_IMAGE_ROOT, id, parent, title, lms_db);
7418 +static void rygel_lms_image_root_class_init (RygelLMSImageRootClass * klass) {
7419 + rygel_lms_image_root_parent_class = g_type_class_peek_parent (klass);
7423 +static void rygel_lms_image_root_instance_init (RygelLMSImageRoot * self) {
7427 +GType rygel_lms_image_root_get_type (void) {
7428 + static volatile gsize rygel_lms_image_root_type_id__volatile = 0;
7429 + if (g_once_init_enter (&rygel_lms_image_root_type_id__volatile)) {
7430 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSImageRootClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_image_root_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSImageRoot), 0, (GInstanceInitFunc) rygel_lms_image_root_instance_init, NULL };
7431 + GType rygel_lms_image_root_type_id;
7432 + rygel_lms_image_root_type_id = g_type_register_static (RYGEL_TYPE_SIMPLE_CONTAINER, "RygelLMSImageRoot", &g_define_type_info, 0);
7433 + g_once_init_leave (&rygel_lms_image_root_type_id__volatile, rygel_lms_image_root_type_id);
7435 + return rygel_lms_image_root_type_id__volatile;
7440 diff --git a/src/plugins/lms/rygel-lms-image-year.c b/src/plugins/lms/rygel-lms-image-year.c
7441 new file mode 100644
7442 index 0000000..5eb2721
7444 +++ b/src/plugins/lms/rygel-lms-image-year.c
7446 +/* rygel-lms-image-year.c generated by valac 0.28.0, the Vala compiler
7447 + * generated from rygel-lms-image-year.vala, do not modify */
7450 + * Copyright (C) 2013 Intel Corporation.
7452 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
7454 + * This file is part of Rygel.
7456 + * Rygel is free software; you can redistribute it and/or modify
7457 + * it under the terms of the GNU Lesser General Public License as published by
7458 + * the Free Software Foundation; either version 2 of the License, or
7459 + * (at your option) any later version.
7461 + * Rygel is distributed in the hope that it will be useful,
7462 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
7463 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7464 + * GNU Lesser General Public License for more details.
7466 + * You should have received a copy of the GNU Lesser General Public License
7467 + * along with this program; if not, write to the Free Software Foundation,
7468 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
7472 +#include <glib-object.h>
7473 +#include <rygel-server.h>
7474 +#include <sqlite3.h>
7475 +#include <stdlib.h>
7476 +#include <string.h>
7477 +#include <gio/gio.h>
7480 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
7481 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
7482 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
7483 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
7484 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
7485 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
7487 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
7488 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
7489 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
7491 +#define RYGEL_LMS_TYPE_IMAGE_YEAR (rygel_lms_image_year_get_type ())
7492 +#define RYGEL_LMS_IMAGE_YEAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_IMAGE_YEAR, RygelLMSImageYear))
7493 +#define RYGEL_LMS_IMAGE_YEAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_IMAGE_YEAR, RygelLMSImageYearClass))
7494 +#define RYGEL_LMS_IS_IMAGE_YEAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_IMAGE_YEAR))
7495 +#define RYGEL_LMS_IS_IMAGE_YEAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_IMAGE_YEAR))
7496 +#define RYGEL_LMS_IMAGE_YEAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_IMAGE_YEAR, RygelLMSImageYearClass))
7498 +typedef struct _RygelLMSImageYear RygelLMSImageYear;
7499 +typedef struct _RygelLMSImageYearClass RygelLMSImageYearClass;
7500 +typedef struct _RygelLMSImageYearPrivate RygelLMSImageYearPrivate;
7501 +#define _g_free0(var) (var = (g_free (var), NULL))
7502 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
7504 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
7505 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
7506 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
7507 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
7508 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
7509 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
7511 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
7512 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
7514 +struct _RygelLMSCategoryContainer {
7515 + RygelMediaContainer parent_instance;
7516 + RygelLMSCategoryContainerPrivate * priv;
7517 + sqlite3_stmt* stmt_all;
7518 + sqlite3_stmt* stmt_find_object;
7519 + sqlite3_stmt* stmt_added;
7520 + sqlite3_stmt* stmt_removed;
7521 + gchar* child_prefix;
7522 + gchar* ref_prefix;
7525 +struct _RygelLMSCategoryContainerClass {
7526 + RygelMediaContainerClass parent_class;
7527 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
7528 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
7529 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
7530 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
7531 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
7534 +struct _RygelLMSImageYear {
7535 + RygelLMSCategoryContainer parent_instance;
7536 + RygelLMSImageYearPrivate * priv;
7539 +struct _RygelLMSImageYearClass {
7540 + RygelLMSCategoryContainerClass parent_class;
7544 +static gpointer rygel_lms_image_year_parent_class = NULL;
7546 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
7547 +GType rygel_lms_image_year_get_type (void) G_GNUC_CONST;
7549 + RYGEL_LMS_IMAGE_YEAR_DUMMY_PROPERTY
7551 +#define RYGEL_LMS_IMAGE_YEAR_SQL_ALL_TEMPLATE "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
7552 +"_profile, dlna_mime, strftime('%Y', date, 'unixepoch') as year " "FROM images, files " "WHERE dtime = 0 AND images.id = files.id AND year = '%s' " "LIMIT ? OFFSET ?;"
7553 +#define RYGEL_LMS_IMAGE_YEAR_SQL_COUNT_TEMPLATE "SELECT count(images.id), strftime('%Y', date, 'unixepoch') as year " "FROM images, files " "WHERE dtime = 0 AND images.id = files.id AND year = '%s';"
7554 +#define RYGEL_LMS_IMAGE_YEAR_SQL_FIND_OBJECT_TEMPLATE "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
7555 +"_profile, dlna_mime, strftime('%Y', date, 'unixepoch') as year " "FROM images, files " "WHERE dtime = 0 AND files.id = ? AND images.id = files.id AND year = '" \
7557 +#define RYGEL_LMS_IMAGE_YEAR_SQL_ADDED_TEMPLATE "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
7558 +"_profile, dlna_mime, strftime('%Y', date, 'unixepoch') as year " "FROM images, files " "WHERE dtime = 0 AND images.id = files.id AND year = '%s' " "AND update_id > ? AND update_id <= ?;"
7559 +#define RYGEL_LMS_IMAGE_YEAR_SQL_REMOVED_TEMPLATE "SELECT images.id, title, artist, date, width, height, path, size, dlna" \
7560 +"_profile, dlna_mime, strftime('%Y', date, 'unixepoch') as year " "FROM images, files " "WHERE dtime <> 0 AND images.id = files.id AND year = '%s' " "AND update_id > ? AND update_id <= ?;"
7561 +static RygelMediaObject* rygel_lms_image_year_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
7562 +gchar* rygel_lms_category_container_build_child_id (RygelLMSCategoryContainer* self, gint db_id);
7563 +gchar* rygel_lms_category_container_build_reference_id (RygelLMSCategoryContainer* self, gint db_id);
7564 +static gchar* rygel_lms_image_year_get_sql_all (const gchar* year);
7565 +static gchar* rygel_lms_image_year_get_sql_find_object (const gchar* year);
7566 +static gchar* rygel_lms_image_year_get_sql_count (const gchar* year);
7567 +static gchar* rygel_lms_image_year_get_sql_added (const gchar* year);
7568 +static gchar* rygel_lms_image_year_get_sql_removed (const gchar* year);
7569 +gpointer rygel_lms_database_ref (gpointer instance);
7570 +void rygel_lms_database_unref (gpointer instance);
7571 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
7572 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
7573 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
7574 +gpointer rygel_lms_value_get_database (const GValue* value);
7575 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
7576 +RygelLMSImageYear* rygel_lms_image_year_new (RygelMediaContainer* parent, const gchar* year, RygelLMSDatabase* lms_db);
7577 +RygelLMSImageYear* rygel_lms_image_year_construct (GType object_type, RygelMediaContainer* parent, const gchar* year, RygelLMSDatabase* lms_db);
7578 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
7581 +static RygelMediaObject* rygel_lms_image_year_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
7582 + RygelLMSImageYear * self;
7583 + RygelMediaObject* result = NULL;
7585 + sqlite3_stmt* _tmp0_ = NULL;
7587 + gchar* path = NULL;
7588 + sqlite3_stmt* _tmp2_ = NULL;
7589 + const gchar* _tmp3_ = NULL;
7590 + gchar* _tmp4_ = NULL;
7591 + gchar* mime_type = NULL;
7592 + sqlite3_stmt* _tmp5_ = NULL;
7593 + const gchar* _tmp6_ = NULL;
7594 + gchar* _tmp7_ = NULL;
7595 + gboolean _tmp8_ = FALSE;
7596 + const gchar* _tmp9_ = NULL;
7597 + gchar* title = NULL;
7598 + sqlite3_stmt* _tmp15_ = NULL;
7599 + const gchar* _tmp16_ = NULL;
7600 + gchar* _tmp17_ = NULL;
7601 + RygelImageItem* image = NULL;
7603 + gchar* _tmp19_ = NULL;
7604 + gchar* _tmp20_ = NULL;
7605 + RygelImageItem* _tmp21_ = NULL;
7606 + RygelImageItem* _tmp22_ = NULL;
7608 + gchar* _tmp24_ = NULL;
7609 + gchar* _tmp25_ = NULL;
7610 + sqlite3_stmt* _tmp26_ = NULL;
7611 + const gchar* _tmp27_ = NULL;
7612 + GTimeVal tv = {0};
7613 + sqlite3_stmt* _tmp28_ = NULL;
7615 + GTimeVal _tmp30_ = {0};
7616 + gchar* _tmp31_ = NULL;
7617 + gchar* _tmp32_ = NULL;
7618 + sqlite3_stmt* _tmp33_ = NULL;
7620 + sqlite3_stmt* _tmp35_ = NULL;
7622 + sqlite3_stmt* _tmp37_ = NULL;
7624 + const gchar* _tmp39_ = NULL;
7625 + sqlite3_stmt* _tmp40_ = NULL;
7626 + const gchar* _tmp41_ = NULL;
7627 + GFile* file = NULL;
7628 + const gchar* _tmp42_ = NULL;
7629 + GFile* _tmp43_ = NULL;
7630 + gchar* _tmp44_ = NULL;
7631 + gchar* _tmp45_ = NULL;
7632 + self = (RygelLMSImageYear*) base;
7633 + g_return_val_if_fail (statement != NULL, NULL);
7634 + _tmp0_ = statement;
7635 + _tmp1_ = sqlite3_column_int (_tmp0_, 0);
7637 + _tmp2_ = statement;
7638 + _tmp3_ = sqlite3_column_text (_tmp2_, 6);
7639 + _tmp4_ = g_strdup (_tmp3_);
7641 + _tmp5_ = statement;
7642 + _tmp6_ = sqlite3_column_text (_tmp5_, 9);
7643 + _tmp7_ = g_strdup (_tmp6_);
7644 + mime_type = _tmp7_;
7645 + _tmp9_ = mime_type;
7646 + if (_tmp9_ == NULL) {
7649 + const gchar* _tmp10_ = NULL;
7652 + _tmp10_ = mime_type;
7653 + _tmp11_ = strlen (_tmp10_);
7654 + _tmp12_ = _tmp11_;
7655 + _tmp8_ = _tmp12_ == 0;
7659 + const gchar* _tmp14_ = NULL;
7662 + g_debug ("rygel-lms-image-year.vala:62: Image item %d (%s) has no MIME type", _tmp13_, _tmp14_);
7664 + _tmp15_ = statement;
7665 + _tmp16_ = sqlite3_column_text (_tmp15_, 1);
7666 + _tmp17_ = g_strdup (_tmp16_);
7669 + _tmp19_ = rygel_lms_category_container_build_child_id ((RygelLMSCategoryContainer*) self, _tmp18_);
7670 + _tmp20_ = _tmp19_;
7671 + _tmp21_ = rygel_image_item_new (_tmp20_, (RygelMediaContainer*) self, title, RYGEL_IMAGE_ITEM_UPNP_CLASS);
7672 + _tmp22_ = _tmp21_;
7673 + _g_free0 (_tmp20_);
7676 + _tmp24_ = rygel_lms_category_container_build_reference_id ((RygelLMSCategoryContainer*) self, _tmp23_);
7677 + _tmp25_ = _tmp24_;
7678 + rygel_media_object_set_ref_id ((RygelMediaObject*) image, _tmp25_);
7679 + _g_free0 (_tmp25_);
7680 + _tmp26_ = statement;
7681 + _tmp27_ = sqlite3_column_text (_tmp26_, 2);
7682 + rygel_media_object_set_creator ((RygelMediaObject*) image, _tmp27_);
7683 + _tmp28_ = statement;
7684 + _tmp29_ = sqlite3_column_int (_tmp28_, 3);
7685 + _tmp30_.tv_sec = (glong) _tmp29_;
7686 + _tmp30_.tv_usec = (glong) 0;
7688 + _tmp31_ = g_time_val_to_iso8601 (&tv);
7689 + _tmp32_ = _tmp31_;
7690 + rygel_media_object_set_date ((RygelMediaObject*) image, _tmp32_);
7691 + _g_free0 (_tmp32_);
7692 + _tmp33_ = statement;
7693 + _tmp34_ = sqlite3_column_int (_tmp33_, 4);
7694 + rygel_visual_item_set_width ((RygelVisualItem*) image, _tmp34_);
7695 + _tmp35_ = statement;
7696 + _tmp36_ = sqlite3_column_int (_tmp35_, 5);
7697 + rygel_visual_item_set_height ((RygelVisualItem*) image, _tmp36_);
7698 + _tmp37_ = statement;
7699 + _tmp38_ = sqlite3_column_int (_tmp37_, 7);
7700 + rygel_media_file_item_set_size ((RygelMediaFileItem*) image, (gint64) _tmp38_);
7701 + _tmp39_ = mime_type;
7702 + rygel_media_file_item_set_mime_type ((RygelMediaFileItem*) image, _tmp39_);
7703 + _tmp40_ = statement;
7704 + _tmp41_ = sqlite3_column_text (_tmp40_, 8);
7705 + rygel_media_file_item_set_dlna_profile ((RygelMediaFileItem*) image, _tmp41_);
7707 + _tmp43_ = g_file_new_for_path (_tmp42_);
7709 + _tmp44_ = g_file_get_uri (file);
7710 + _tmp45_ = _tmp44_;
7711 + rygel_media_object_add_uri ((RygelMediaObject*) image, _tmp45_);
7712 + _g_free0 (_tmp45_);
7713 + result = (RygelMediaObject*) image;
7714 + _g_object_unref0 (file);
7716 + _g_free0 (mime_type);
7722 +static gchar* rygel_lms_image_year_get_sql_all (const gchar* year) {
7723 + gchar* result = NULL;
7724 + const gchar* _tmp0_ = NULL;
7725 + gchar* _tmp1_ = NULL;
7726 + g_return_val_if_fail (year != NULL, NULL);
7728 + _tmp1_ = g_strdup_printf (RYGEL_LMS_IMAGE_YEAR_SQL_ALL_TEMPLATE, _tmp0_);
7734 +static gchar* rygel_lms_image_year_get_sql_find_object (const gchar* year) {
7735 + gchar* result = NULL;
7736 + const gchar* _tmp0_ = NULL;
7737 + gchar* _tmp1_ = NULL;
7738 + g_return_val_if_fail (year != NULL, NULL);
7740 + _tmp1_ = g_strdup_printf (RYGEL_LMS_IMAGE_YEAR_SQL_FIND_OBJECT_TEMPLATE, _tmp0_);
7746 +static gchar* rygel_lms_image_year_get_sql_count (const gchar* year) {
7747 + gchar* result = NULL;
7748 + const gchar* _tmp0_ = NULL;
7749 + gchar* _tmp1_ = NULL;
7750 + g_return_val_if_fail (year != NULL, NULL);
7752 + _tmp1_ = g_strdup_printf (RYGEL_LMS_IMAGE_YEAR_SQL_COUNT_TEMPLATE, _tmp0_);
7758 +static gchar* rygel_lms_image_year_get_sql_added (const gchar* year) {
7759 + gchar* result = NULL;
7760 + const gchar* _tmp0_ = NULL;
7761 + gchar* _tmp1_ = NULL;
7762 + g_return_val_if_fail (year != NULL, NULL);
7764 + _tmp1_ = g_strdup_printf (RYGEL_LMS_IMAGE_YEAR_SQL_ADDED_TEMPLATE, _tmp0_);
7770 +static gchar* rygel_lms_image_year_get_sql_removed (const gchar* year) {
7771 + gchar* result = NULL;
7772 + const gchar* _tmp0_ = NULL;
7773 + gchar* _tmp1_ = NULL;
7774 + g_return_val_if_fail (year != NULL, NULL);
7776 + _tmp1_ = g_strdup_printf (RYGEL_LMS_IMAGE_YEAR_SQL_REMOVED_TEMPLATE, _tmp0_);
7782 +RygelLMSImageYear* rygel_lms_image_year_construct (GType object_type, RygelMediaContainer* parent, const gchar* year, RygelLMSDatabase* lms_db) {
7783 + RygelLMSImageYear * self = NULL;
7784 + const gchar* _tmp0_ = NULL;
7785 + gchar* _tmp1_ = NULL;
7786 + gchar* _tmp2_ = NULL;
7787 + RygelMediaContainer* _tmp3_ = NULL;
7788 + const gchar* _tmp4_ = NULL;
7789 + RygelLMSDatabase* _tmp5_ = NULL;
7790 + const gchar* _tmp6_ = NULL;
7791 + gchar* _tmp7_ = NULL;
7792 + gchar* _tmp8_ = NULL;
7793 + const gchar* _tmp9_ = NULL;
7794 + gchar* _tmp10_ = NULL;
7795 + gchar* _tmp11_ = NULL;
7796 + const gchar* _tmp12_ = NULL;
7797 + gchar* _tmp13_ = NULL;
7798 + gchar* _tmp14_ = NULL;
7799 + const gchar* _tmp15_ = NULL;
7800 + gchar* _tmp16_ = NULL;
7801 + gchar* _tmp17_ = NULL;
7802 + const gchar* _tmp18_ = NULL;
7803 + gchar* _tmp19_ = NULL;
7804 + gchar* _tmp20_ = NULL;
7805 + g_return_val_if_fail (parent != NULL, NULL);
7806 + g_return_val_if_fail (year != NULL, NULL);
7807 + g_return_val_if_fail (lms_db != NULL, NULL);
7809 + _tmp1_ = g_strdup_printf ("%s", _tmp0_);
7815 + _tmp7_ = rygel_lms_image_year_get_sql_all (_tmp6_);
7818 + _tmp10_ = rygel_lms_image_year_get_sql_find_object (_tmp9_);
7819 + _tmp11_ = _tmp10_;
7821 + _tmp13_ = rygel_lms_image_year_get_sql_count (_tmp12_);
7822 + _tmp14_ = _tmp13_;
7824 + _tmp16_ = rygel_lms_image_year_get_sql_added (_tmp15_);
7825 + _tmp17_ = _tmp16_;
7827 + _tmp19_ = rygel_lms_image_year_get_sql_removed (_tmp18_);
7828 + _tmp20_ = _tmp19_;
7829 + self = (RygelLMSImageYear*) rygel_lms_category_container_construct (object_type, _tmp2_, _tmp3_, _tmp4_, _tmp5_, _tmp8_, _tmp11_, _tmp14_, _tmp17_, _tmp20_);
7830 + _g_free0 (_tmp20_);
7831 + _g_free0 (_tmp17_);
7832 + _g_free0 (_tmp14_);
7833 + _g_free0 (_tmp11_);
7834 + _g_free0 (_tmp8_);
7835 + _g_free0 (_tmp2_);
7840 +RygelLMSImageYear* rygel_lms_image_year_new (RygelMediaContainer* parent, const gchar* year, RygelLMSDatabase* lms_db) {
7841 + return rygel_lms_image_year_construct (RYGEL_LMS_TYPE_IMAGE_YEAR, parent, year, lms_db);
7845 +static void rygel_lms_image_year_class_init (RygelLMSImageYearClass * klass) {
7846 + rygel_lms_image_year_parent_class = g_type_class_peek_parent (klass);
7847 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_image_year_real_object_from_statement;
7851 +static void rygel_lms_image_year_instance_init (RygelLMSImageYear * self) {
7855 +GType rygel_lms_image_year_get_type (void) {
7856 + static volatile gsize rygel_lms_image_year_type_id__volatile = 0;
7857 + if (g_once_init_enter (&rygel_lms_image_year_type_id__volatile)) {
7858 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSImageYearClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_image_year_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSImageYear), 0, (GInstanceInitFunc) rygel_lms_image_year_instance_init, NULL };
7859 + GType rygel_lms_image_year_type_id;
7860 + rygel_lms_image_year_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSImageYear", &g_define_type_info, 0);
7861 + g_once_init_leave (&rygel_lms_image_year_type_id__volatile, rygel_lms_image_year_type_id);
7863 + return rygel_lms_image_year_type_id__volatile;
7868 diff --git a/src/plugins/lms/rygel-lms-image-years.c b/src/plugins/lms/rygel-lms-image-years.c
7869 new file mode 100644
7870 index 0000000..35033a0
7872 +++ b/src/plugins/lms/rygel-lms-image-years.c
7874 +/* rygel-lms-image-years.c generated by valac 0.28.0, the Vala compiler
7875 + * generated from rygel-lms-image-years.vala, do not modify */
7878 + * Copyright (C) 2013 Intel Corporation.
7880 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
7882 + * This file is part of Rygel.
7884 + * Rygel is free software; you can redistribute it and/or modify
7885 + * it under the terms of the GNU Lesser General Public License as published by
7886 + * the Free Software Foundation; either version 2 of the License, or
7887 + * (at your option) any later version.
7889 + * Rygel is distributed in the hope that it will be useful,
7890 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
7891 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7892 + * GNU Lesser General Public License for more details.
7894 + * You should have received a copy of the GNU Lesser General Public License
7895 + * along with this program; if not, write to the Free Software Foundation,
7896 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
7900 +#include <glib-object.h>
7901 +#include <rygel-server.h>
7902 +#include <sqlite3.h>
7903 +#include <stdlib.h>
7904 +#include <string.h>
7905 +#include <glib/gi18n-lib.h>
7908 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
7909 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
7910 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
7911 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
7912 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
7913 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
7915 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
7916 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
7917 +typedef struct _RygelLMSCategoryContainerPrivate RygelLMSCategoryContainerPrivate;
7919 +#define RYGEL_LMS_TYPE_IMAGE_YEARS (rygel_lms_image_years_get_type ())
7920 +#define RYGEL_LMS_IMAGE_YEARS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_IMAGE_YEARS, RygelLMSImageYears))
7921 +#define RYGEL_LMS_IMAGE_YEARS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_IMAGE_YEARS, RygelLMSImageYearsClass))
7922 +#define RYGEL_LMS_IS_IMAGE_YEARS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_IMAGE_YEARS))
7923 +#define RYGEL_LMS_IS_IMAGE_YEARS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_IMAGE_YEARS))
7924 +#define RYGEL_LMS_IMAGE_YEARS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_IMAGE_YEARS, RygelLMSImageYearsClass))
7926 +typedef struct _RygelLMSImageYears RygelLMSImageYears;
7927 +typedef struct _RygelLMSImageYearsClass RygelLMSImageYearsClass;
7928 +typedef struct _RygelLMSImageYearsPrivate RygelLMSImageYearsPrivate;
7930 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
7931 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
7932 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
7933 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
7934 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
7935 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
7937 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
7938 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
7940 +#define RYGEL_LMS_TYPE_IMAGE_YEAR (rygel_lms_image_year_get_type ())
7941 +#define RYGEL_LMS_IMAGE_YEAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_IMAGE_YEAR, RygelLMSImageYear))
7942 +#define RYGEL_LMS_IMAGE_YEAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_IMAGE_YEAR, RygelLMSImageYearClass))
7943 +#define RYGEL_LMS_IS_IMAGE_YEAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_IMAGE_YEAR))
7944 +#define RYGEL_LMS_IS_IMAGE_YEAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_IMAGE_YEAR))
7945 +#define RYGEL_LMS_IMAGE_YEAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_IMAGE_YEAR, RygelLMSImageYearClass))
7947 +typedef struct _RygelLMSImageYear RygelLMSImageYear;
7948 +typedef struct _RygelLMSImageYearClass RygelLMSImageYearClass;
7950 +struct _RygelLMSCategoryContainer {
7951 + RygelMediaContainer parent_instance;
7952 + RygelLMSCategoryContainerPrivate * priv;
7953 + sqlite3_stmt* stmt_all;
7954 + sqlite3_stmt* stmt_find_object;
7955 + sqlite3_stmt* stmt_added;
7956 + sqlite3_stmt* stmt_removed;
7957 + gchar* child_prefix;
7958 + gchar* ref_prefix;
7961 +struct _RygelLMSCategoryContainerClass {
7962 + RygelMediaContainerClass parent_class;
7963 + RygelMediaObject* (*object_from_statement) (RygelLMSCategoryContainer* self, sqlite3_stmt* statement);
7964 + gchar* (*get_sql_all_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
7965 + gchar* (*get_sql_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* filter);
7966 + guint (*get_child_count_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args);
7967 + RygelMediaObjects* (*get_children_with_filter) (RygelLMSCategoryContainer* self, const gchar* where_filter, GValueArray* args, const gchar* sort_criteria, guint offset, guint max_count);
7970 +struct _RygelLMSImageYears {
7971 + RygelLMSCategoryContainer parent_instance;
7972 + RygelLMSImageYearsPrivate * priv;
7975 +struct _RygelLMSImageYearsClass {
7976 + RygelLMSCategoryContainerClass parent_class;
7980 +static gpointer rygel_lms_image_years_parent_class = NULL;
7982 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
7983 +GType rygel_lms_image_years_get_type (void) G_GNUC_CONST;
7985 + RYGEL_LMS_IMAGE_YEARS_DUMMY_PROPERTY
7987 +#define RYGEL_LMS_IMAGE_YEARS_SQL_ALL "SELECT DISTINCT(strftime('%Y', images.date, 'unixepoch')) as year " "FROM images " "LIMIT ? OFFSET ?;"
7988 +#define RYGEL_LMS_IMAGE_YEARS_SQL_COUNT "SELECT COUNT(DISTINCT(strftime('%Y', images.date, 'unixepoch'))) " "FROM images;"
7989 +#define RYGEL_LMS_IMAGE_YEARS_SQL_FIND_OBJECT "SELECT strftime('%Y', images.date, 'unixepoch') as year " "FROM images " "WHERE year = CAST(? AS TEXT)"
7990 +static RygelMediaObject* rygel_lms_image_years_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement);
7991 +gpointer rygel_lms_database_ref (gpointer instance);
7992 +void rygel_lms_database_unref (gpointer instance);
7993 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
7994 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
7995 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
7996 +gpointer rygel_lms_value_get_database (const GValue* value);
7997 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
7998 +RygelLMSDatabase* rygel_lms_category_container_get_lms_db (RygelLMSCategoryContainer* self);
7999 +RygelLMSImageYear* rygel_lms_image_year_new (RygelMediaContainer* parent, const gchar* year, RygelLMSDatabase* lms_db);
8000 +RygelLMSImageYear* rygel_lms_image_year_construct (GType object_type, RygelMediaContainer* parent, const gchar* year, RygelLMSDatabase* lms_db);
8001 +GType rygel_lms_image_year_get_type (void) G_GNUC_CONST;
8002 +RygelLMSImageYears* rygel_lms_image_years_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
8003 +RygelLMSImageYears* rygel_lms_image_years_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
8004 +RygelLMSCategoryContainer* rygel_lms_category_container_construct (GType object_type, const gchar* db_id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db, const gchar* sql_all, const gchar* sql_find_object, const gchar* sql_count, const gchar* sql_added, const gchar* sql_removed);
8007 +static RygelMediaObject* rygel_lms_image_years_real_object_from_statement (RygelLMSCategoryContainer* base, sqlite3_stmt* statement) {
8008 + RygelLMSImageYears * self;
8009 + RygelMediaObject* result = NULL;
8010 + sqlite3_stmt* _tmp0_ = NULL;
8011 + const gchar* _tmp1_ = NULL;
8012 + RygelLMSDatabase* _tmp2_ = NULL;
8013 + RygelLMSDatabase* _tmp3_ = NULL;
8014 + RygelLMSImageYear* _tmp4_ = NULL;
8015 + self = (RygelLMSImageYears*) base;
8016 + g_return_val_if_fail (statement != NULL, NULL);
8017 + _tmp0_ = statement;
8018 + _tmp1_ = sqlite3_column_text (_tmp0_, 0);
8019 + _tmp2_ = rygel_lms_category_container_get_lms_db ((RygelLMSCategoryContainer*) self);
8021 + _tmp4_ = rygel_lms_image_year_new ((RygelMediaContainer*) self, _tmp1_, _tmp3_);
8022 + result = (RygelMediaObject*) _tmp4_;
8027 +RygelLMSImageYears* rygel_lms_image_years_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
8028 + RygelLMSImageYears * self = NULL;
8029 + RygelMediaContainer* _tmp0_ = NULL;
8030 + const gchar* _tmp1_ = NULL;
8031 + RygelLMSDatabase* _tmp2_ = NULL;
8032 + g_return_val_if_fail (parent != NULL, NULL);
8033 + g_return_val_if_fail (lms_db != NULL, NULL);
8035 + _tmp1_ = _ ("Years");
8037 + self = (RygelLMSImageYears*) rygel_lms_category_container_construct (object_type, "years", _tmp0_, _tmp1_, _tmp2_, RYGEL_LMS_IMAGE_YEARS_SQL_ALL, RYGEL_LMS_IMAGE_YEARS_SQL_FIND_OBJECT, RYGEL_LMS_IMAGE_YEARS_SQL_COUNT, NULL, NULL);
8042 +RygelLMSImageYears* rygel_lms_image_years_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db) {
8043 + return rygel_lms_image_years_construct (RYGEL_LMS_TYPE_IMAGE_YEARS, parent, lms_db);
8047 +static void rygel_lms_image_years_class_init (RygelLMSImageYearsClass * klass) {
8048 + rygel_lms_image_years_parent_class = g_type_class_peek_parent (klass);
8049 + ((RygelLMSCategoryContainerClass *) klass)->object_from_statement = rygel_lms_image_years_real_object_from_statement;
8053 +static void rygel_lms_image_years_instance_init (RygelLMSImageYears * self) {
8057 +GType rygel_lms_image_years_get_type (void) {
8058 + static volatile gsize rygel_lms_image_years_type_id__volatile = 0;
8059 + if (g_once_init_enter (&rygel_lms_image_years_type_id__volatile)) {
8060 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSImageYearsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_image_years_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSImageYears), 0, (GInstanceInitFunc) rygel_lms_image_years_instance_init, NULL };
8061 + GType rygel_lms_image_years_type_id;
8062 + rygel_lms_image_years_type_id = g_type_register_static (RYGEL_LMS_TYPE_CATEGORY_CONTAINER, "RygelLMSImageYears", &g_define_type_info, 0);
8063 + g_once_init_leave (&rygel_lms_image_years_type_id__volatile, rygel_lms_image_years_type_id);
8065 + return rygel_lms_image_years_type_id__volatile;
8070 diff --git a/src/plugins/lms/rygel-lms-music-root.c b/src/plugins/lms/rygel-lms-music-root.c
8071 new file mode 100644
8072 index 0000000..753906d
8074 +++ b/src/plugins/lms/rygel-lms-music-root.c
8076 +/* rygel-lms-music-root.c generated by valac 0.28.0, the Vala compiler
8077 + * generated from rygel-lms-music-root.vala, do not modify */
8080 + * Copyright (C) 2013 Intel Corporation.
8082 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
8084 + * This file is part of Rygel.
8086 + * Rygel is free software; you can redistribute it and/or modify
8087 + * it under the terms of the GNU Lesser General Public License as published by
8088 + * the Free Software Foundation; either version 2 of the License, or
8089 + * (at your option) any later version.
8091 + * Rygel is distributed in the hope that it will be useful,
8092 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8093 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8094 + * GNU Lesser General Public License for more details.
8096 + * You should have received a copy of the GNU Lesser General Public License
8097 + * along with this program; if not, write to the Free Software Foundation,
8098 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
8102 +#include <glib-object.h>
8103 +#include <rygel-server.h>
8104 +#include <stdlib.h>
8105 +#include <string.h>
8106 +#include <glib/gi18n-lib.h>
8109 +#define RYGEL_LMS_TYPE_MUSIC_ROOT (rygel_lms_music_root_get_type ())
8110 +#define RYGEL_LMS_MUSIC_ROOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_MUSIC_ROOT, RygelLMSMusicRoot))
8111 +#define RYGEL_LMS_MUSIC_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_MUSIC_ROOT, RygelLMSMusicRootClass))
8112 +#define RYGEL_LMS_IS_MUSIC_ROOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_MUSIC_ROOT))
8113 +#define RYGEL_LMS_IS_MUSIC_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_MUSIC_ROOT))
8114 +#define RYGEL_LMS_MUSIC_ROOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_MUSIC_ROOT, RygelLMSMusicRootClass))
8116 +typedef struct _RygelLMSMusicRoot RygelLMSMusicRoot;
8117 +typedef struct _RygelLMSMusicRootClass RygelLMSMusicRootClass;
8118 +typedef struct _RygelLMSMusicRootPrivate RygelLMSMusicRootPrivate;
8120 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
8121 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
8122 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
8123 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
8124 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
8125 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
8127 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
8128 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
8130 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
8131 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
8132 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
8133 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
8134 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
8135 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
8137 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
8138 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
8140 +#define RYGEL_LMS_TYPE_ALL_MUSIC (rygel_lms_all_music_get_type ())
8141 +#define RYGEL_LMS_ALL_MUSIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALL_MUSIC, RygelLMSAllMusic))
8142 +#define RYGEL_LMS_ALL_MUSIC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALL_MUSIC, RygelLMSAllMusicClass))
8143 +#define RYGEL_LMS_IS_ALL_MUSIC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALL_MUSIC))
8144 +#define RYGEL_LMS_IS_ALL_MUSIC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALL_MUSIC))
8145 +#define RYGEL_LMS_ALL_MUSIC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALL_MUSIC, RygelLMSAllMusicClass))
8147 +typedef struct _RygelLMSAllMusic RygelLMSAllMusic;
8148 +typedef struct _RygelLMSAllMusicClass RygelLMSAllMusicClass;
8149 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
8151 +#define RYGEL_LMS_TYPE_ARTISTS (rygel_lms_artists_get_type ())
8152 +#define RYGEL_LMS_ARTISTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ARTISTS, RygelLMSArtists))
8153 +#define RYGEL_LMS_ARTISTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ARTISTS, RygelLMSArtistsClass))
8154 +#define RYGEL_LMS_IS_ARTISTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ARTISTS))
8155 +#define RYGEL_LMS_IS_ARTISTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ARTISTS))
8156 +#define RYGEL_LMS_ARTISTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ARTISTS, RygelLMSArtistsClass))
8158 +typedef struct _RygelLMSArtists RygelLMSArtists;
8159 +typedef struct _RygelLMSArtistsClass RygelLMSArtistsClass;
8161 +#define RYGEL_LMS_TYPE_ALBUMS (rygel_lms_albums_get_type ())
8162 +#define RYGEL_LMS_ALBUMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALBUMS, RygelLMSAlbums))
8163 +#define RYGEL_LMS_ALBUMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALBUMS, RygelLMSAlbumsClass))
8164 +#define RYGEL_LMS_IS_ALBUMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALBUMS))
8165 +#define RYGEL_LMS_IS_ALBUMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALBUMS))
8166 +#define RYGEL_LMS_ALBUMS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALBUMS, RygelLMSAlbumsClass))
8168 +typedef struct _RygelLMSAlbums RygelLMSAlbums;
8169 +typedef struct _RygelLMSAlbumsClass RygelLMSAlbumsClass;
8171 +struct _RygelLMSMusicRoot {
8172 + RygelSimpleContainer parent_instance;
8173 + RygelLMSMusicRootPrivate * priv;
8176 +struct _RygelLMSMusicRootClass {
8177 + RygelSimpleContainerClass parent_class;
8181 +static gpointer rygel_lms_music_root_parent_class = NULL;
8183 +GType rygel_lms_music_root_get_type (void) G_GNUC_CONST;
8185 + RYGEL_LMS_MUSIC_ROOT_DUMMY_PROPERTY
8187 +gpointer rygel_lms_database_ref (gpointer instance);
8188 +void rygel_lms_database_unref (gpointer instance);
8189 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
8190 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
8191 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
8192 +gpointer rygel_lms_value_get_database (const GValue* value);
8193 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
8194 +RygelLMSMusicRoot* rygel_lms_music_root_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8195 +RygelLMSMusicRoot* rygel_lms_music_root_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8196 +RygelLMSAllMusic* rygel_lms_all_music_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
8197 +RygelLMSAllMusic* rygel_lms_all_music_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
8198 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
8199 +GType rygel_lms_all_music_get_type (void) G_GNUC_CONST;
8200 +RygelLMSArtists* rygel_lms_artists_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8201 +RygelLMSArtists* rygel_lms_artists_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8202 +GType rygel_lms_artists_get_type (void) G_GNUC_CONST;
8203 +RygelLMSAlbums* rygel_lms_albums_new (RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
8204 +RygelLMSAlbums* rygel_lms_albums_construct (GType object_type, RygelMediaContainer* parent, RygelLMSDatabase* lms_db);
8205 +GType rygel_lms_albums_get_type (void) G_GNUC_CONST;
8208 +RygelLMSMusicRoot* rygel_lms_music_root_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
8209 + RygelLMSMusicRoot * self = NULL;
8210 + const gchar* _tmp0_ = NULL;
8211 + RygelMediaContainer* _tmp1_ = NULL;
8212 + const gchar* _tmp2_ = NULL;
8213 + RygelLMSDatabase* _tmp3_ = NULL;
8214 + RygelLMSAllMusic* _tmp4_ = NULL;
8215 + RygelLMSAllMusic* _tmp5_ = NULL;
8216 + const gchar* _tmp6_ = NULL;
8217 + RygelLMSDatabase* _tmp7_ = NULL;
8218 + RygelLMSArtists* _tmp8_ = NULL;
8219 + RygelLMSArtists* _tmp9_ = NULL;
8220 + RygelLMSDatabase* _tmp10_ = NULL;
8221 + RygelLMSAlbums* _tmp11_ = NULL;
8222 + RygelLMSAlbums* _tmp12_ = NULL;
8223 + g_return_val_if_fail (id != NULL, NULL);
8224 + g_return_val_if_fail (parent != NULL, NULL);
8225 + g_return_val_if_fail (title != NULL, NULL);
8226 + g_return_val_if_fail (lms_db != NULL, NULL);
8230 + self = (RygelLMSMusicRoot*) rygel_simple_container_construct (object_type, _tmp0_, _tmp1_, _tmp2_);
8232 + _tmp4_ = rygel_lms_all_music_new ((RygelMediaContainer*) self, _tmp3_);
8234 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp5_);
8235 + _g_object_unref0 (_tmp5_);
8236 + _tmp6_ = _ ("Artists");
8238 + _tmp8_ = rygel_lms_artists_new ("artists", (RygelMediaContainer*) self, _tmp6_, _tmp7_);
8240 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp9_);
8241 + _g_object_unref0 (_tmp9_);
8243 + _tmp11_ = rygel_lms_albums_new ((RygelMediaContainer*) self, _tmp10_);
8244 + _tmp12_ = _tmp11_;
8245 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp12_);
8246 + _g_object_unref0 (_tmp12_);
8251 +RygelLMSMusicRoot* rygel_lms_music_root_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db) {
8252 + return rygel_lms_music_root_construct (RYGEL_LMS_TYPE_MUSIC_ROOT, id, parent, title, lms_db);
8256 +static void rygel_lms_music_root_class_init (RygelLMSMusicRootClass * klass) {
8257 + rygel_lms_music_root_parent_class = g_type_class_peek_parent (klass);
8261 +static void rygel_lms_music_root_instance_init (RygelLMSMusicRoot * self) {
8265 +GType rygel_lms_music_root_get_type (void) {
8266 + static volatile gsize rygel_lms_music_root_type_id__volatile = 0;
8267 + if (g_once_init_enter (&rygel_lms_music_root_type_id__volatile)) {
8268 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSMusicRootClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_music_root_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSMusicRoot), 0, (GInstanceInitFunc) rygel_lms_music_root_instance_init, NULL };
8269 + GType rygel_lms_music_root_type_id;
8270 + rygel_lms_music_root_type_id = g_type_register_static (RYGEL_TYPE_SIMPLE_CONTAINER, "RygelLMSMusicRoot", &g_define_type_info, 0);
8271 + g_once_init_leave (&rygel_lms_music_root_type_id__volatile, rygel_lms_music_root_type_id);
8273 + return rygel_lms_music_root_type_id__volatile;
8278 diff --git a/src/plugins/lms/rygel-lms-plugin-factory.c b/src/plugins/lms/rygel-lms-plugin-factory.c
8279 new file mode 100644
8280 index 0000000..de4a5ab
8282 +++ b/src/plugins/lms/rygel-lms-plugin-factory.c
8284 +/* rygel-lms-plugin-factory.c generated by valac 0.28.0, the Vala compiler
8285 + * generated from rygel-lms-plugin-factory.vala, do not modify */
8288 + * Copyright (C) 2013 Intel Corporation.
8290 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
8292 + * This file is part of Rygel.
8294 + * Rygel is free software; you can redistribute it and/or modify
8295 + * it under the terms of the GNU Lesser General Public License as published by
8296 + * the Free Software Foundation; either version 2 of the License, or
8297 + * (at your option) any later version.
8299 + * Rygel is distributed in the hope that it will be useful,
8300 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8301 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8302 + * GNU Lesser General Public License for more details.
8304 + * You should have received a copy of the GNU Lesser General Public License
8305 + * along with this program; if not, write to the Free Software Foundation,
8306 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
8310 +#include <glib-object.h>
8311 +#include <rygel-core.h>
8312 +#include <rygel-server.h>
8313 +#include <gobject/gvaluecollector.h>
8316 +#define RYGEL_LMS_TYPE_PLUGIN_FACTORY (rygel_lms_plugin_factory_get_type ())
8317 +#define RYGEL_LMS_PLUGIN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_PLUGIN_FACTORY, RygelLMSPluginFactory))
8318 +#define RYGEL_LMS_PLUGIN_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_PLUGIN_FACTORY, RygelLMSPluginFactoryClass))
8319 +#define RYGEL_LMS_IS_PLUGIN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_PLUGIN_FACTORY))
8320 +#define RYGEL_LMS_IS_PLUGIN_FACTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_PLUGIN_FACTORY))
8321 +#define RYGEL_LMS_PLUGIN_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_PLUGIN_FACTORY, RygelLMSPluginFactoryClass))
8323 +typedef struct _RygelLMSPluginFactory RygelLMSPluginFactory;
8324 +typedef struct _RygelLMSPluginFactoryClass RygelLMSPluginFactoryClass;
8325 +#define _rygel_lms_plugin_factory_unref0(var) ((var == NULL) ? NULL : (var = (rygel_lms_plugin_factory_unref (var), NULL)))
8326 +typedef struct _RygelLMSPluginFactoryPrivate RygelLMSPluginFactoryPrivate;
8327 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
8329 +#define RYGEL_LMS_TYPE_PLUGIN (rygel_lms_plugin_get_type ())
8330 +#define RYGEL_LMS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_PLUGIN, RygelLMSPlugin))
8331 +#define RYGEL_LMS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_PLUGIN, RygelLMSPluginClass))
8332 +#define RYGEL_LMS_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_PLUGIN))
8333 +#define RYGEL_LMS_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_PLUGIN))
8334 +#define RYGEL_LMS_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_PLUGIN, RygelLMSPluginClass))
8336 +typedef struct _RygelLMSPlugin RygelLMSPlugin;
8337 +typedef struct _RygelLMSPluginClass RygelLMSPluginClass;
8338 +typedef struct _RygelLMSParamSpecPluginFactory RygelLMSParamSpecPluginFactory;
8340 +struct _RygelLMSPluginFactory {
8341 + GTypeInstance parent_instance;
8342 + volatile int ref_count;
8343 + RygelLMSPluginFactoryPrivate * priv;
8346 +struct _RygelLMSPluginFactoryClass {
8347 + GTypeClass parent_class;
8348 + void (*finalize) (RygelLMSPluginFactory *self);
8351 +struct _RygelLMSPluginFactoryPrivate {
8352 + RygelPluginLoader* loader;
8355 +struct _RygelLMSParamSpecPluginFactory {
8356 + GParamSpec parent_instance;
8360 +extern RygelLMSPluginFactory* plugin_factory;
8361 +RygelLMSPluginFactory* plugin_factory = NULL;
8362 +static gpointer rygel_lms_plugin_factory_parent_class = NULL;
8364 +gpointer rygel_lms_plugin_factory_ref (gpointer instance);
8365 +void rygel_lms_plugin_factory_unref (gpointer instance);
8366 +GParamSpec* rygel_lms_param_spec_plugin_factory (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
8367 +void rygel_lms_value_set_plugin_factory (GValue* value, gpointer v_object);
8368 +void rygel_lms_value_take_plugin_factory (GValue* value, gpointer v_object);
8369 +gpointer rygel_lms_value_get_plugin_factory (const GValue* value);
8370 +GType rygel_lms_plugin_factory_get_type (void) G_GNUC_CONST;
8371 +void module_init (RygelPluginLoader* loader);
8372 +RygelLMSPluginFactory* rygel_lms_plugin_factory_new (RygelPluginLoader* loader);
8373 +RygelLMSPluginFactory* rygel_lms_plugin_factory_construct (GType object_type, RygelPluginLoader* loader);
8374 +#define RYGEL_LMS_PLUGIN_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_LMS_TYPE_PLUGIN_FACTORY, RygelLMSPluginFactoryPrivate))
8376 + RYGEL_LMS_PLUGIN_FACTORY_DUMMY_PROPERTY
8378 +RygelLMSPlugin* rygel_lms_plugin_new (void);
8379 +RygelLMSPlugin* rygel_lms_plugin_construct (GType object_type);
8380 +GType rygel_lms_plugin_get_type (void) G_GNUC_CONST;
8381 +static void rygel_lms_plugin_factory_finalize (RygelLMSPluginFactory* obj);
8384 +void module_init (RygelPluginLoader* loader) {
8385 + RygelPluginLoader* _tmp0_ = NULL;
8386 + RygelLMSPluginFactory* _tmp1_ = NULL;
8387 + g_return_if_fail (loader != NULL);
8389 + _tmp1_ = rygel_lms_plugin_factory_new (_tmp0_);
8390 + _rygel_lms_plugin_factory_unref0 (plugin_factory);
8391 + plugin_factory = _tmp1_;
8395 +static gpointer _g_object_ref0 (gpointer self) {
8396 + return self ? g_object_ref (self) : NULL;
8400 +RygelLMSPluginFactory* rygel_lms_plugin_factory_construct (GType object_type, RygelPluginLoader* loader) {
8401 + RygelLMSPluginFactory* self = NULL;
8402 + RygelPluginLoader* _tmp0_ = NULL;
8403 + RygelPluginLoader* _tmp1_ = NULL;
8404 + RygelPluginLoader* _tmp2_ = NULL;
8405 + RygelLMSPlugin* _tmp3_ = NULL;
8406 + RygelLMSPlugin* _tmp4_ = NULL;
8407 + g_return_val_if_fail (loader != NULL, NULL);
8408 + self = (RygelLMSPluginFactory*) g_type_create_instance (object_type);
8410 + _tmp1_ = _g_object_ref0 (_tmp0_);
8411 + _g_object_unref0 (self->priv->loader);
8412 + self->priv->loader = _tmp1_;
8413 + _tmp2_ = self->priv->loader;
8414 + _tmp3_ = rygel_lms_plugin_new ();
8416 + rygel_plugin_loader_add_plugin (_tmp2_, (RygelPlugin*) _tmp4_);
8417 + _g_object_unref0 (_tmp4_);
8422 +RygelLMSPluginFactory* rygel_lms_plugin_factory_new (RygelPluginLoader* loader) {
8423 + return rygel_lms_plugin_factory_construct (RYGEL_LMS_TYPE_PLUGIN_FACTORY, loader);
8427 +static void rygel_lms_value_plugin_factory_init (GValue* value) {
8428 + value->data[0].v_pointer = NULL;
8432 +static void rygel_lms_value_plugin_factory_free_value (GValue* value) {
8433 + if (value->data[0].v_pointer) {
8434 + rygel_lms_plugin_factory_unref (value->data[0].v_pointer);
8439 +static void rygel_lms_value_plugin_factory_copy_value (const GValue* src_value, GValue* dest_value) {
8440 + if (src_value->data[0].v_pointer) {
8441 + dest_value->data[0].v_pointer = rygel_lms_plugin_factory_ref (src_value->data[0].v_pointer);
8443 + dest_value->data[0].v_pointer = NULL;
8448 +static gpointer rygel_lms_value_plugin_factory_peek_pointer (const GValue* value) {
8449 + return value->data[0].v_pointer;
8453 +static gchar* rygel_lms_value_plugin_factory_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
8454 + if (collect_values[0].v_pointer) {
8455 + RygelLMSPluginFactory* object;
8456 + object = collect_values[0].v_pointer;
8457 + if (object->parent_instance.g_class == NULL) {
8458 + return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
8459 + } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
8460 + return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
8462 + value->data[0].v_pointer = rygel_lms_plugin_factory_ref (object);
8464 + value->data[0].v_pointer = NULL;
8470 +static gchar* rygel_lms_value_plugin_factory_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
8471 + RygelLMSPluginFactory** object_p;
8472 + object_p = collect_values[0].v_pointer;
8474 + return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
8476 + if (!value->data[0].v_pointer) {
8478 + } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
8479 + *object_p = value->data[0].v_pointer;
8481 + *object_p = rygel_lms_plugin_factory_ref (value->data[0].v_pointer);
8487 +GParamSpec* rygel_lms_param_spec_plugin_factory (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
8488 + RygelLMSParamSpecPluginFactory* spec;
8489 + g_return_val_if_fail (g_type_is_a (object_type, RYGEL_LMS_TYPE_PLUGIN_FACTORY), NULL);
8490 + spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
8491 + G_PARAM_SPEC (spec)->value_type = object_type;
8492 + return G_PARAM_SPEC (spec);
8496 +gpointer rygel_lms_value_get_plugin_factory (const GValue* value) {
8497 + g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_LMS_TYPE_PLUGIN_FACTORY), NULL);
8498 + return value->data[0].v_pointer;
8502 +void rygel_lms_value_set_plugin_factory (GValue* value, gpointer v_object) {
8503 + RygelLMSPluginFactory* old;
8504 + g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_LMS_TYPE_PLUGIN_FACTORY));
8505 + old = value->data[0].v_pointer;
8507 + g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, RYGEL_LMS_TYPE_PLUGIN_FACTORY));
8508 + g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
8509 + value->data[0].v_pointer = v_object;
8510 + rygel_lms_plugin_factory_ref (value->data[0].v_pointer);
8512 + value->data[0].v_pointer = NULL;
8515 + rygel_lms_plugin_factory_unref (old);
8520 +void rygel_lms_value_take_plugin_factory (GValue* value, gpointer v_object) {
8521 + RygelLMSPluginFactory* old;
8522 + g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, RYGEL_LMS_TYPE_PLUGIN_FACTORY));
8523 + old = value->data[0].v_pointer;
8525 + g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, RYGEL_LMS_TYPE_PLUGIN_FACTORY));
8526 + g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
8527 + value->data[0].v_pointer = v_object;
8529 + value->data[0].v_pointer = NULL;
8532 + rygel_lms_plugin_factory_unref (old);
8537 +static void rygel_lms_plugin_factory_class_init (RygelLMSPluginFactoryClass * klass) {
8538 + rygel_lms_plugin_factory_parent_class = g_type_class_peek_parent (klass);
8539 + ((RygelLMSPluginFactoryClass *) klass)->finalize = rygel_lms_plugin_factory_finalize;
8540 + g_type_class_add_private (klass, sizeof (RygelLMSPluginFactoryPrivate));
8544 +static void rygel_lms_plugin_factory_instance_init (RygelLMSPluginFactory * self) {
8545 + self->priv = RYGEL_LMS_PLUGIN_FACTORY_GET_PRIVATE (self);
8546 + self->ref_count = 1;
8550 +static void rygel_lms_plugin_factory_finalize (RygelLMSPluginFactory* obj) {
8551 + RygelLMSPluginFactory * self;
8552 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_PLUGIN_FACTORY, RygelLMSPluginFactory);
8553 + g_signal_handlers_destroy (self);
8554 + _g_object_unref0 (self->priv->loader);
8558 +GType rygel_lms_plugin_factory_get_type (void) {
8559 + static volatile gsize rygel_lms_plugin_factory_type_id__volatile = 0;
8560 + if (g_once_init_enter (&rygel_lms_plugin_factory_type_id__volatile)) {
8561 + static const GTypeValueTable g_define_type_value_table = { rygel_lms_value_plugin_factory_init, rygel_lms_value_plugin_factory_free_value, rygel_lms_value_plugin_factory_copy_value, rygel_lms_value_plugin_factory_peek_pointer, "p", rygel_lms_value_plugin_factory_collect_value, "p", rygel_lms_value_plugin_factory_lcopy_value };
8562 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSPluginFactoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_plugin_factory_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSPluginFactory), 0, (GInstanceInitFunc) rygel_lms_plugin_factory_instance_init, &g_define_type_value_table };
8563 + static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
8564 + GType rygel_lms_plugin_factory_type_id;
8565 + rygel_lms_plugin_factory_type_id = g_type_register_fundamental (g_type_fundamental_next (), "RygelLMSPluginFactory", &g_define_type_info, &g_define_type_fundamental_info, 0);
8566 + g_once_init_leave (&rygel_lms_plugin_factory_type_id__volatile, rygel_lms_plugin_factory_type_id);
8568 + return rygel_lms_plugin_factory_type_id__volatile;
8572 +gpointer rygel_lms_plugin_factory_ref (gpointer instance) {
8573 + RygelLMSPluginFactory* self;
8575 + g_atomic_int_inc (&self->ref_count);
8580 +void rygel_lms_plugin_factory_unref (gpointer instance) {
8581 + RygelLMSPluginFactory* self;
8583 + if (g_atomic_int_dec_and_test (&self->ref_count)) {
8584 + RYGEL_LMS_PLUGIN_FACTORY_GET_CLASS (self)->finalize (self);
8585 + g_type_free_instance ((GTypeInstance *) self);
8591 diff --git a/src/plugins/lms/rygel-lms-plugin.c b/src/plugins/lms/rygel-lms-plugin.c
8592 new file mode 100644
8593 index 0000000..980de64
8595 +++ b/src/plugins/lms/rygel-lms-plugin.c
8597 +/* rygel-lms-plugin.c generated by valac 0.28.0, the Vala compiler
8598 + * generated from rygel-lms-plugin.vala, do not modify */
8601 + * Copyright (C) 2013 Intel Corporation.
8603 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
8605 + * This file is part of Rygel.
8607 + * Rygel is free software; you can redistribute it and/or modify
8608 + * it under the terms of the GNU Lesser General Public License as published by
8609 + * the Free Software Foundation; either version 2 of the License, or
8610 + * (at your option) any later version.
8612 + * Rygel is distributed in the hope that it will be useful,
8613 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8614 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8615 + * GNU Lesser General Public License for more details.
8617 + * You should have received a copy of the GNU Lesser General Public License
8618 + * along with this program; if not, write to the Free Software Foundation,
8619 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
8623 +#include <glib-object.h>
8624 +#include <rygel-server.h>
8625 +#include <stdlib.h>
8626 +#include <string.h>
8627 +#include <rygel-core.h>
8630 +#define RYGEL_LMS_TYPE_PLUGIN (rygel_lms_plugin_get_type ())
8631 +#define RYGEL_LMS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_PLUGIN, RygelLMSPlugin))
8632 +#define RYGEL_LMS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_PLUGIN, RygelLMSPluginClass))
8633 +#define RYGEL_LMS_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_PLUGIN))
8634 +#define RYGEL_LMS_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_PLUGIN))
8635 +#define RYGEL_LMS_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_PLUGIN, RygelLMSPluginClass))
8637 +typedef struct _RygelLMSPlugin RygelLMSPlugin;
8638 +typedef struct _RygelLMSPluginClass RygelLMSPluginClass;
8639 +typedef struct _RygelLMSPluginPrivate RygelLMSPluginPrivate;
8641 +#define RYGEL_LMS_TYPE_ROOT_CONTAINER (rygel_lms_root_container_get_type ())
8642 +#define RYGEL_LMS_ROOT_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainer))
8643 +#define RYGEL_LMS_ROOT_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainerClass))
8644 +#define RYGEL_LMS_IS_ROOT_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ROOT_CONTAINER))
8645 +#define RYGEL_LMS_IS_ROOT_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ROOT_CONTAINER))
8646 +#define RYGEL_LMS_ROOT_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainerClass))
8648 +typedef struct _RygelLMSRootContainer RygelLMSRootContainer;
8649 +typedef struct _RygelLMSRootContainerClass RygelLMSRootContainerClass;
8650 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
8652 +struct _RygelLMSPlugin {
8653 + RygelMediaServerPlugin parent_instance;
8654 + RygelLMSPluginPrivate * priv;
8657 +struct _RygelLMSPluginClass {
8658 + RygelMediaServerPluginClass parent_class;
8662 +static gpointer rygel_lms_plugin_parent_class = NULL;
8663 +static RygelLMSRootContainer* rygel_lms_plugin_root;
8664 +static RygelLMSRootContainer* rygel_lms_plugin_root = NULL;
8666 +GType rygel_lms_plugin_get_type (void) G_GNUC_CONST;
8668 + RYGEL_LMS_PLUGIN_DUMMY_PROPERTY
8670 +GType rygel_lms_root_container_get_type (void) G_GNUC_CONST;
8671 +#define RYGEL_LMS_PLUGIN_NAME "LMS"
8672 +RygelLMSPlugin* rygel_lms_plugin_new (void);
8673 +RygelLMSPlugin* rygel_lms_plugin_construct (GType object_type);
8674 +RygelLMSRootContainer* rygel_lms_root_container_new (void);
8675 +RygelLMSRootContainer* rygel_lms_root_container_construct (GType object_type);
8676 +static void rygel_lms_plugin_finalize (GObject* obj);
8679 +RygelLMSPlugin* rygel_lms_plugin_construct (GType object_type) {
8680 + RygelLMSPlugin * self = NULL;
8681 + RygelLMSRootContainer* _tmp0_ = NULL;
8682 + RygelLMSRootContainer* _tmp2_ = NULL;
8683 + _tmp0_ = rygel_lms_plugin_root;
8684 + if (_tmp0_ == NULL) {
8685 + RygelLMSRootContainer* _tmp1_ = NULL;
8686 + _tmp1_ = rygel_lms_root_container_new ();
8687 + _g_object_unref0 (rygel_lms_plugin_root);
8688 + rygel_lms_plugin_root = _tmp1_;
8690 + _tmp2_ = rygel_lms_plugin_root;
8691 + self = (RygelLMSPlugin*) rygel_media_server_plugin_construct (object_type, (RygelMediaContainer*) _tmp2_, RYGEL_LMS_PLUGIN_NAME, NULL, RYGEL_PLUGIN_CAPABILITIES_TRACK_CHANGES);
8696 +RygelLMSPlugin* rygel_lms_plugin_new (void) {
8697 + return rygel_lms_plugin_construct (RYGEL_LMS_TYPE_PLUGIN);
8701 +static void rygel_lms_plugin_class_init (RygelLMSPluginClass * klass) {
8702 + rygel_lms_plugin_parent_class = g_type_class_peek_parent (klass);
8703 + G_OBJECT_CLASS (klass)->finalize = rygel_lms_plugin_finalize;
8707 +static void rygel_lms_plugin_instance_init (RygelLMSPlugin * self) {
8711 +static void rygel_lms_plugin_finalize (GObject* obj) {
8712 + RygelLMSPlugin * self;
8713 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_PLUGIN, RygelLMSPlugin);
8714 + G_OBJECT_CLASS (rygel_lms_plugin_parent_class)->finalize (obj);
8718 +GType rygel_lms_plugin_get_type (void) {
8719 + static volatile gsize rygel_lms_plugin_type_id__volatile = 0;
8720 + if (g_once_init_enter (&rygel_lms_plugin_type_id__volatile)) {
8721 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSPluginClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_plugin_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSPlugin), 0, (GInstanceInitFunc) rygel_lms_plugin_instance_init, NULL };
8722 + GType rygel_lms_plugin_type_id;
8723 + rygel_lms_plugin_type_id = g_type_register_static (RYGEL_TYPE_MEDIA_SERVER_PLUGIN, "RygelLMSPlugin", &g_define_type_info, 0);
8724 + g_once_init_leave (&rygel_lms_plugin_type_id__volatile, rygel_lms_plugin_type_id);
8726 + return rygel_lms_plugin_type_id__volatile;
8731 diff --git a/src/plugins/lms/rygel-lms-root-container.c b/src/plugins/lms/rygel-lms-root-container.c
8732 new file mode 100644
8733 index 0000000..625ed2f
8735 +++ b/src/plugins/lms/rygel-lms-root-container.c
8737 +/* rygel-lms-root-container.c generated by valac 0.28.0, the Vala compiler
8738 + * generated from rygel-lms-root-container.vala, do not modify */
8741 + * Copyright (C) 2013 Intel Corporation.
8743 + * Author: Jussi Kukkonen <jussi.kukkonen@intel.com>
8745 + * This file is part of Rygel.
8747 + * Rygel is free software; you can redistribute it and/or modify
8748 + * it under the terms of the GNU Lesser General Public License as published by
8749 + * the Free Software Foundation; either version 2 of the License, or
8750 + * (at your option) any later version.
8752 + * Rygel is distributed in the hope that it will be useful,
8753 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8754 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8755 + * GNU Lesser General Public License for more details.
8757 + * You should have received a copy of the GNU Lesser General Public License
8758 + * along with this program; if not, write to the Free Software Foundation,
8759 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
8763 +#include <glib-object.h>
8764 +#include <rygel-server.h>
8765 +#include <rygel-core.h>
8766 +#include <stdlib.h>
8767 +#include <string.h>
8768 +#include <glib/gi18n-lib.h>
8771 +#define RYGEL_LMS_TYPE_ROOT_CONTAINER (rygel_lms_root_container_get_type ())
8772 +#define RYGEL_LMS_ROOT_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainer))
8773 +#define RYGEL_LMS_ROOT_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainerClass))
8774 +#define RYGEL_LMS_IS_ROOT_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ROOT_CONTAINER))
8775 +#define RYGEL_LMS_IS_ROOT_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ROOT_CONTAINER))
8776 +#define RYGEL_LMS_ROOT_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainerClass))
8778 +typedef struct _RygelLMSRootContainer RygelLMSRootContainer;
8779 +typedef struct _RygelLMSRootContainerClass RygelLMSRootContainerClass;
8780 +typedef struct _RygelLMSRootContainerPrivate RygelLMSRootContainerPrivate;
8782 +#define RYGEL_LMS_TYPE_DATABASE (rygel_lms_database_get_type ())
8783 +#define RYGEL_LMS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabase))
8784 +#define RYGEL_LMS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
8785 +#define RYGEL_LMS_IS_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_DATABASE))
8786 +#define RYGEL_LMS_IS_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_DATABASE))
8787 +#define RYGEL_LMS_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_DATABASE, RygelLMSDatabaseClass))
8789 +typedef struct _RygelLMSDatabase RygelLMSDatabase;
8790 +typedef struct _RygelLMSDatabaseClass RygelLMSDatabaseClass;
8791 +#define _rygel_lms_database_unref0(var) ((var == NULL) ? NULL : (var = (rygel_lms_database_unref (var), NULL)))
8792 +#define _g_free0(var) (var = (g_free (var), NULL))
8793 +#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
8794 +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
8796 +#define RYGEL_LMS_TYPE_MUSIC_ROOT (rygel_lms_music_root_get_type ())
8797 +#define RYGEL_LMS_MUSIC_ROOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_MUSIC_ROOT, RygelLMSMusicRoot))
8798 +#define RYGEL_LMS_MUSIC_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_MUSIC_ROOT, RygelLMSMusicRootClass))
8799 +#define RYGEL_LMS_IS_MUSIC_ROOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_MUSIC_ROOT))
8800 +#define RYGEL_LMS_IS_MUSIC_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_MUSIC_ROOT))
8801 +#define RYGEL_LMS_MUSIC_ROOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_MUSIC_ROOT, RygelLMSMusicRootClass))
8803 +typedef struct _RygelLMSMusicRoot RygelLMSMusicRoot;
8804 +typedef struct _RygelLMSMusicRootClass RygelLMSMusicRootClass;
8806 +#define RYGEL_LMS_TYPE_CATEGORY_CONTAINER (rygel_lms_category_container_get_type ())
8807 +#define RYGEL_LMS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainer))
8808 +#define RYGEL_LMS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
8809 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
8810 +#define RYGEL_LMS_IS_CATEGORY_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_CATEGORY_CONTAINER))
8811 +#define RYGEL_LMS_CATEGORY_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_CATEGORY_CONTAINER, RygelLMSCategoryContainerClass))
8813 +typedef struct _RygelLMSCategoryContainer RygelLMSCategoryContainer;
8814 +typedef struct _RygelLMSCategoryContainerClass RygelLMSCategoryContainerClass;
8816 +#define RYGEL_LMS_TYPE_ALL_VIDEOS (rygel_lms_all_videos_get_type ())
8817 +#define RYGEL_LMS_ALL_VIDEOS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_ALL_VIDEOS, RygelLMSAllVideos))
8818 +#define RYGEL_LMS_ALL_VIDEOS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_ALL_VIDEOS, RygelLMSAllVideosClass))
8819 +#define RYGEL_LMS_IS_ALL_VIDEOS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_ALL_VIDEOS))
8820 +#define RYGEL_LMS_IS_ALL_VIDEOS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_ALL_VIDEOS))
8821 +#define RYGEL_LMS_ALL_VIDEOS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_ALL_VIDEOS, RygelLMSAllVideosClass))
8823 +typedef struct _RygelLMSAllVideos RygelLMSAllVideos;
8824 +typedef struct _RygelLMSAllVideosClass RygelLMSAllVideosClass;
8826 +#define RYGEL_LMS_TYPE_IMAGE_ROOT (rygel_lms_image_root_get_type ())
8827 +#define RYGEL_LMS_IMAGE_ROOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_IMAGE_ROOT, RygelLMSImageRoot))
8828 +#define RYGEL_LMS_IMAGE_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_IMAGE_ROOT, RygelLMSImageRootClass))
8829 +#define RYGEL_LMS_IS_IMAGE_ROOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_IMAGE_ROOT))
8830 +#define RYGEL_LMS_IS_IMAGE_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_IMAGE_ROOT))
8831 +#define RYGEL_LMS_IMAGE_ROOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_IMAGE_ROOT, RygelLMSImageRootClass))
8833 +typedef struct _RygelLMSImageRoot RygelLMSImageRoot;
8834 +typedef struct _RygelLMSImageRootClass RygelLMSImageRootClass;
8836 +struct _RygelLMSRootContainer {
8837 + RygelSimpleContainer parent_instance;
8838 + RygelLMSRootContainerPrivate * priv;
8841 +struct _RygelLMSRootContainerClass {
8842 + RygelSimpleContainerClass parent_class;
8845 +struct _RygelLMSRootContainerPrivate {
8846 + RygelLMSDatabase* lms_db;
8850 + RYGEL_LMS_DATABASE_ERROR_OPEN,
8851 + RYGEL_LMS_DATABASE_ERROR_PREPARE,
8852 + RYGEL_LMS_DATABASE_ERROR_BIND,
8853 + RYGEL_LMS_DATABASE_ERROR_STEP,
8854 + RYGEL_LMS_DATABASE_ERROR_NOT_FOUND
8855 +} RygelLMSDatabaseError;
8856 +#define RYGEL_LMS_DATABASE_ERROR rygel_lms_database_error_quark ()
8858 +static gpointer rygel_lms_root_container_parent_class = NULL;
8860 +GType rygel_lms_root_container_get_type (void) G_GNUC_CONST;
8861 +gpointer rygel_lms_database_ref (gpointer instance);
8862 +void rygel_lms_database_unref (gpointer instance);
8863 +GParamSpec* rygel_lms_param_spec_database (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
8864 +void rygel_lms_value_set_database (GValue* value, gpointer v_object);
8865 +void rygel_lms_value_take_database (GValue* value, gpointer v_object);
8866 +gpointer rygel_lms_value_get_database (const GValue* value);
8867 +GType rygel_lms_database_get_type (void) G_GNUC_CONST;
8868 +#define RYGEL_LMS_ROOT_CONTAINER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainerPrivate))
8870 + RYGEL_LMS_ROOT_CONTAINER_DUMMY_PROPERTY
8872 +RygelLMSRootContainer* rygel_lms_root_container_new (void);
8873 +RygelLMSRootContainer* rygel_lms_root_container_construct (GType object_type);
8874 +GQuark rygel_lms_database_error_quark (void);
8875 +RygelLMSDatabase* rygel_lms_database_new (GError** error);
8876 +RygelLMSDatabase* rygel_lms_database_construct (GType object_type, GError** error);
8877 +RygelLMSMusicRoot* rygel_lms_music_root_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8878 +RygelLMSMusicRoot* rygel_lms_music_root_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8879 +GType rygel_lms_music_root_get_type (void) G_GNUC_CONST;
8880 +RygelLMSAllVideos* rygel_lms_all_videos_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8881 +RygelLMSAllVideos* rygel_lms_all_videos_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8882 +GType rygel_lms_category_container_get_type (void) G_GNUC_CONST;
8883 +GType rygel_lms_all_videos_get_type (void) G_GNUC_CONST;
8884 +RygelLMSImageRoot* rygel_lms_image_root_new (const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8885 +RygelLMSImageRoot* rygel_lms_image_root_construct (GType object_type, const gchar* id, RygelMediaContainer* parent, const gchar* title, RygelLMSDatabase* lms_db);
8886 +GType rygel_lms_image_root_get_type (void) G_GNUC_CONST;
8887 +static void rygel_lms_root_container_finalize (GObject* obj);
8890 +RygelLMSRootContainer* rygel_lms_root_container_construct (GType object_type) {
8891 + RygelLMSRootContainer * self = NULL;
8892 + RygelMetaConfig* config = NULL;
8893 + RygelMetaConfig* _tmp0_ = NULL;
8894 + gchar* title = NULL;
8895 + const gchar* _tmp1_ = NULL;
8896 + gchar* _tmp2_ = NULL;
8897 + const gchar* _tmp6_ = NULL;
8898 + GError * _inner_error_ = NULL;
8899 + _tmp0_ = rygel_meta_config_get_default ();
8901 + _tmp1_ = _ ("Shared media");
8902 + _tmp2_ = g_strdup (_tmp1_);
8905 + gchar* _tmp3_ = NULL;
8906 + gchar* _tmp4_ = NULL;
8907 + gchar* _tmp5_ = NULL;
8908 + _tmp4_ = rygel_configuration_get_string ((RygelConfiguration*) config, "LightMediaScanner", "title", &_inner_error_);
8910 + if (G_UNLIKELY (_inner_error_ != NULL)) {
8911 + goto __catch0_g_error;
8917 + _g_free0 (_tmp3_);
8922 + GError* _error_ = NULL;
8923 + _error_ = _inner_error_;
8924 + _inner_error_ = NULL;
8925 + _g_error_free0 (_error_);
8928 + if (G_UNLIKELY (_inner_error_ != NULL)) {
8930 + _g_object_unref0 (config);
8931 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
8932 + g_clear_error (&_inner_error_);
8936 + self = (RygelLMSRootContainer*) rygel_simple_container_construct_root (object_type, _tmp6_);
8938 + RygelLMSDatabase* _tmp7_ = NULL;
8939 + RygelLMSDatabase* _tmp8_ = NULL;
8940 + RygelLMSDatabase* _tmp9_ = NULL;
8941 + const gchar* _tmp10_ = NULL;
8942 + RygelLMSDatabase* _tmp11_ = NULL;
8943 + RygelLMSMusicRoot* _tmp12_ = NULL;
8944 + RygelLMSMusicRoot* _tmp13_ = NULL;
8945 + const gchar* _tmp14_ = NULL;
8946 + RygelLMSDatabase* _tmp15_ = NULL;
8947 + RygelLMSAllVideos* _tmp16_ = NULL;
8948 + RygelLMSAllVideos* _tmp17_ = NULL;
8949 + const gchar* _tmp18_ = NULL;
8950 + RygelLMSDatabase* _tmp19_ = NULL;
8951 + RygelLMSImageRoot* _tmp20_ = NULL;
8952 + RygelLMSImageRoot* _tmp21_ = NULL;
8953 + _tmp8_ = rygel_lms_database_new (&_inner_error_);
8955 + if (G_UNLIKELY (_inner_error_ != NULL)) {
8956 + if (_inner_error_->domain == RYGEL_LMS_DATABASE_ERROR) {
8957 + goto __catch1_rygel_lms_database_error;
8960 + _g_object_unref0 (config);
8961 + g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
8962 + g_clear_error (&_inner_error_);
8967 + _rygel_lms_database_unref0 (self->priv->lms_db);
8968 + self->priv->lms_db = _tmp9_;
8969 + _tmp10_ = _ ("Music");
8970 + _tmp11_ = self->priv->lms_db;
8971 + _tmp12_ = rygel_lms_music_root_new ("music", (RygelMediaContainer*) self, _tmp10_, _tmp11_);
8972 + _tmp13_ = _tmp12_;
8973 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp13_);
8974 + _g_object_unref0 (_tmp13_);
8975 + _tmp14_ = _ ("Videos");
8976 + _tmp15_ = self->priv->lms_db;
8977 + _tmp16_ = rygel_lms_all_videos_new ("all-videos", (RygelMediaContainer*) self, _tmp14_, _tmp15_);
8978 + _tmp17_ = _tmp16_;
8979 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp17_);
8980 + _g_object_unref0 (_tmp17_);
8981 + _tmp18_ = _ ("Pictures");
8982 + _tmp19_ = self->priv->lms_db;
8983 + _tmp20_ = rygel_lms_image_root_new ("images", (RygelMediaContainer*) self, _tmp18_, _tmp19_);
8984 + _tmp21_ = _tmp20_;
8985 + rygel_simple_container_add_child_container ((RygelSimpleContainer*) self, (RygelMediaContainer*) _tmp21_);
8986 + _g_object_unref0 (_tmp21_);
8987 + _rygel_lms_database_unref0 (_tmp7_);
8990 + __catch1_rygel_lms_database_error:
8993 + GError* _tmp22_ = NULL;
8994 + const gchar* _tmp23_ = NULL;
8995 + e = _inner_error_;
8996 + _inner_error_ = NULL;
8998 + _tmp23_ = _tmp22_->message;
8999 + g_warning ("rygel-lms-root-container.vala:49: %s\n", _tmp23_);
9000 + _g_error_free0 (e);
9003 + if (G_UNLIKELY (_inner_error_ != NULL)) {
9005 + _g_object_unref0 (config);
9006 + g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
9007 + g_clear_error (&_inner_error_);
9011 + _g_object_unref0 (config);
9016 +RygelLMSRootContainer* rygel_lms_root_container_new (void) {
9017 + return rygel_lms_root_container_construct (RYGEL_LMS_TYPE_ROOT_CONTAINER);
9021 +static void rygel_lms_root_container_class_init (RygelLMSRootContainerClass * klass) {
9022 + rygel_lms_root_container_parent_class = g_type_class_peek_parent (klass);
9023 + g_type_class_add_private (klass, sizeof (RygelLMSRootContainerPrivate));
9024 + G_OBJECT_CLASS (klass)->finalize = rygel_lms_root_container_finalize;
9028 +static void rygel_lms_root_container_instance_init (RygelLMSRootContainer * self) {
9029 + self->priv = RYGEL_LMS_ROOT_CONTAINER_GET_PRIVATE (self);
9030 + self->priv->lms_db = NULL;
9034 +static void rygel_lms_root_container_finalize (GObject* obj) {
9035 + RygelLMSRootContainer * self;
9036 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_ROOT_CONTAINER, RygelLMSRootContainer);
9037 + _rygel_lms_database_unref0 (self->priv->lms_db);
9038 + G_OBJECT_CLASS (rygel_lms_root_container_parent_class)->finalize (obj);
9042 +GType rygel_lms_root_container_get_type (void) {
9043 + static volatile gsize rygel_lms_root_container_type_id__volatile = 0;
9044 + if (g_once_init_enter (&rygel_lms_root_container_type_id__volatile)) {
9045 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSRootContainerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_root_container_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSRootContainer), 0, (GInstanceInitFunc) rygel_lms_root_container_instance_init, NULL };
9046 + GType rygel_lms_root_container_type_id;
9047 + rygel_lms_root_container_type_id = g_type_register_static (RYGEL_TYPE_SIMPLE_CONTAINER, "RygelLMSRootContainer", &g_define_type_info, 0);
9048 + g_once_init_leave (&rygel_lms_root_container_type_id__volatile, rygel_lms_root_container_type_id);
9050 + return rygel_lms_root_container_type_id__volatile;
9055 diff --git a/src/plugins/lms/rygel-lms-sql-function.c b/src/plugins/lms/rygel-lms-sql-function.c
9056 new file mode 100644
9057 index 0000000..a56c7be
9059 +++ b/src/plugins/lms/rygel-lms-sql-function.c
9061 +/* rygel-lms-sql-function.c generated by valac 0.28.0, the Vala compiler
9062 + * generated from rygel-lms-sql-function.vala, do not modify */
9065 + * Copyright (C) 2010 Jens Georg <mail@jensge.org>.
9067 + * Author: Jens Georg <mail@jensge.org>
9069 + * This file is part of Rygel.
9071 + * Rygel is free software; you can redistribute it and/or modify
9072 + * it under the terms of the GNU Lesser General Public License as published by
9073 + * the Free Software Foundation; either version 2 of the License, or
9074 + * (at your option) any later version.
9076 + * Rygel is distributed in the hope that it will be useful,
9077 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9078 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9079 + * GNU Lesser General Public License for more details.
9081 + * You should have received a copy of the GNU Lesser General Public License
9082 + * along with this program; if not, write to the Free Software Foundation,
9083 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
9087 +#include <glib-object.h>
9088 +#include <stdlib.h>
9089 +#include <string.h>
9092 +#define RYGEL_LMS_TYPE_SQL_OPERATOR (rygel_lms_sql_operator_get_type ())
9093 +#define RYGEL_LMS_SQL_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperator))
9094 +#define RYGEL_LMS_SQL_OPERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperatorClass))
9095 +#define RYGEL_LMS_IS_SQL_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR))
9096 +#define RYGEL_LMS_IS_SQL_OPERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_SQL_OPERATOR))
9097 +#define RYGEL_LMS_SQL_OPERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperatorClass))
9099 +typedef struct _RygelLMSSqlOperator RygelLMSSqlOperator;
9100 +typedef struct _RygelLMSSqlOperatorClass RygelLMSSqlOperatorClass;
9101 +typedef struct _RygelLMSSqlOperatorPrivate RygelLMSSqlOperatorPrivate;
9103 +#define RYGEL_LMS_TYPE_SQL_FUNCTION (rygel_lms_sql_function_get_type ())
9104 +#define RYGEL_LMS_SQL_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_SQL_FUNCTION, RygelLMSSqlFunction))
9105 +#define RYGEL_LMS_SQL_FUNCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_SQL_FUNCTION, RygelLMSSqlFunctionClass))
9106 +#define RYGEL_LMS_IS_SQL_FUNCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_SQL_FUNCTION))
9107 +#define RYGEL_LMS_IS_SQL_FUNCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_SQL_FUNCTION))
9108 +#define RYGEL_LMS_SQL_FUNCTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_SQL_FUNCTION, RygelLMSSqlFunctionClass))
9110 +typedef struct _RygelLMSSqlFunction RygelLMSSqlFunction;
9111 +typedef struct _RygelLMSSqlFunctionClass RygelLMSSqlFunctionClass;
9112 +typedef struct _RygelLMSSqlFunctionPrivate RygelLMSSqlFunctionPrivate;
9114 +struct _RygelLMSSqlOperator {
9115 + GObject parent_instance;
9116 + RygelLMSSqlOperatorPrivate * priv;
9122 +struct _RygelLMSSqlOperatorClass {
9123 + GObjectClass parent_class;
9124 + gchar* (*to_string) (RygelLMSSqlOperator* self);
9127 +struct _RygelLMSSqlFunction {
9128 + RygelLMSSqlOperator parent_instance;
9129 + RygelLMSSqlFunctionPrivate * priv;
9132 +struct _RygelLMSSqlFunctionClass {
9133 + RygelLMSSqlOperatorClass parent_class;
9137 +static gpointer rygel_lms_sql_function_parent_class = NULL;
9139 +GType rygel_lms_sql_operator_get_type (void) G_GNUC_CONST;
9140 +GType rygel_lms_sql_function_get_type (void) G_GNUC_CONST;
9142 + RYGEL_LMS_SQL_FUNCTION_DUMMY_PROPERTY
9144 +RygelLMSSqlFunction* rygel_lms_sql_function_new (const gchar* name, const gchar* arg);
9145 +RygelLMSSqlFunction* rygel_lms_sql_function_construct (GType object_type, const gchar* name, const gchar* arg);
9146 +RygelLMSSqlOperator* rygel_lms_sql_operator_new (const gchar* name, const gchar* arg, const gchar* collate);
9147 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct (GType object_type, const gchar* name, const gchar* arg, const gchar* collate);
9148 +static gchar* rygel_lms_sql_function_real_to_string (RygelLMSSqlOperator* base);
9151 +RygelLMSSqlFunction* rygel_lms_sql_function_construct (GType object_type, const gchar* name, const gchar* arg) {
9152 + RygelLMSSqlFunction * self = NULL;
9153 + const gchar* _tmp0_ = NULL;
9154 + const gchar* _tmp1_ = NULL;
9155 + g_return_val_if_fail (name != NULL, NULL);
9156 + g_return_val_if_fail (arg != NULL, NULL);
9159 + self = (RygelLMSSqlFunction*) rygel_lms_sql_operator_construct (object_type, _tmp0_, _tmp1_, "");
9164 +RygelLMSSqlFunction* rygel_lms_sql_function_new (const gchar* name, const gchar* arg) {
9165 + return rygel_lms_sql_function_construct (RYGEL_LMS_TYPE_SQL_FUNCTION, name, arg);
9169 +static gchar* rygel_lms_sql_function_real_to_string (RygelLMSSqlOperator* base) {
9170 + RygelLMSSqlFunction * self;
9171 + gchar* result = NULL;
9172 + const gchar* _tmp0_ = NULL;
9173 + const gchar* _tmp1_ = NULL;
9174 + gchar* _tmp2_ = NULL;
9175 + self = (RygelLMSSqlFunction*) base;
9176 + _tmp0_ = ((RygelLMSSqlOperator*) self)->name;
9177 + _tmp1_ = ((RygelLMSSqlOperator*) self)->arg;
9178 + _tmp2_ = g_strdup_printf ("%s(%s,?)", _tmp0_, _tmp1_);
9184 +static void rygel_lms_sql_function_class_init (RygelLMSSqlFunctionClass * klass) {
9185 + rygel_lms_sql_function_parent_class = g_type_class_peek_parent (klass);
9186 + ((RygelLMSSqlOperatorClass *) klass)->to_string = rygel_lms_sql_function_real_to_string;
9190 +static void rygel_lms_sql_function_instance_init (RygelLMSSqlFunction * self) {
9194 +GType rygel_lms_sql_function_get_type (void) {
9195 + static volatile gsize rygel_lms_sql_function_type_id__volatile = 0;
9196 + if (g_once_init_enter (&rygel_lms_sql_function_type_id__volatile)) {
9197 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSSqlFunctionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_sql_function_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSSqlFunction), 0, (GInstanceInitFunc) rygel_lms_sql_function_instance_init, NULL };
9198 + GType rygel_lms_sql_function_type_id;
9199 + rygel_lms_sql_function_type_id = g_type_register_static (RYGEL_LMS_TYPE_SQL_OPERATOR, "RygelLMSSqlFunction", &g_define_type_info, 0);
9200 + g_once_init_leave (&rygel_lms_sql_function_type_id__volatile, rygel_lms_sql_function_type_id);
9202 + return rygel_lms_sql_function_type_id__volatile;
9207 diff --git a/src/plugins/lms/rygel-lms-sql-operator.c b/src/plugins/lms/rygel-lms-sql-operator.c
9208 new file mode 100644
9209 index 0000000..90db1a9
9211 +++ b/src/plugins/lms/rygel-lms-sql-operator.c
9213 +/* rygel-lms-sql-operator.c generated by valac 0.28.0, the Vala compiler
9214 + * generated from rygel-lms-sql-operator.vala, do not modify */
9217 + * Copyright (C) 2010 Jens Georg <mail@jensge.org>.
9219 + * Author: Jens Georg <mail@jensge.org>
9221 + * This file is part of Rygel.
9223 + * Rygel is free software; you can redistribute it and/or modify
9224 + * it under the terms of the GNU Lesser General Public License as published by
9225 + * the Free Software Foundation; either version 2 of the License, or
9226 + * (at your option) any later version.
9228 + * Rygel is distributed in the hope that it will be useful,
9229 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
9230 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9231 + * GNU Lesser General Public License for more details.
9233 + * You should have received a copy of the GNU Lesser General Public License
9234 + * along with this program; if not, write to the Free Software Foundation,
9235 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
9239 +#include <glib-object.h>
9240 +#include <stdlib.h>
9241 +#include <string.h>
9242 +#include <libgupnp-av/gupnp-av.h>
9245 +#define RYGEL_LMS_TYPE_SQL_OPERATOR (rygel_lms_sql_operator_get_type ())
9246 +#define RYGEL_LMS_SQL_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperator))
9247 +#define RYGEL_LMS_SQL_OPERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperatorClass))
9248 +#define RYGEL_LMS_IS_SQL_OPERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR))
9249 +#define RYGEL_LMS_IS_SQL_OPERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RYGEL_LMS_TYPE_SQL_OPERATOR))
9250 +#define RYGEL_LMS_SQL_OPERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperatorClass))
9252 +typedef struct _RygelLMSSqlOperator RygelLMSSqlOperator;
9253 +typedef struct _RygelLMSSqlOperatorClass RygelLMSSqlOperatorClass;
9254 +typedef struct _RygelLMSSqlOperatorPrivate RygelLMSSqlOperatorPrivate;
9255 +#define _g_free0(var) (var = (g_free (var), NULL))
9257 +struct _RygelLMSSqlOperator {
9258 + GObject parent_instance;
9259 + RygelLMSSqlOperatorPrivate * priv;
9265 +struct _RygelLMSSqlOperatorClass {
9266 + GObjectClass parent_class;
9267 + gchar* (*to_string) (RygelLMSSqlOperator* self);
9271 +static gpointer rygel_lms_sql_operator_parent_class = NULL;
9273 +GType rygel_lms_sql_operator_get_type (void) G_GNUC_CONST;
9275 + RYGEL_LMS_SQL_OPERATOR_DUMMY_PROPERTY
9277 +RygelLMSSqlOperator* rygel_lms_sql_operator_new (const gchar* name, const gchar* arg, const gchar* collate);
9278 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct (GType object_type, const gchar* name, const gchar* arg, const gchar* collate);
9279 +RygelLMSSqlOperator* rygel_lms_sql_operator_new_from_search_criteria_op (GUPnPSearchCriteriaOp op, const gchar* arg, const gchar* collate);
9280 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct_from_search_criteria_op (GType object_type, GUPnPSearchCriteriaOp op, const gchar* arg, const gchar* collate);
9281 +gchar* rygel_lms_sql_operator_to_string (RygelLMSSqlOperator* self);
9282 +static gchar* rygel_lms_sql_operator_real_to_string (RygelLMSSqlOperator* self);
9283 +static void rygel_lms_sql_operator_finalize (GObject* obj);
9286 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct (GType object_type, const gchar* name, const gchar* arg, const gchar* collate) {
9287 + RygelLMSSqlOperator * self = NULL;
9288 + const gchar* _tmp0_ = NULL;
9289 + gchar* _tmp1_ = NULL;
9290 + const gchar* _tmp2_ = NULL;
9291 + gchar* _tmp3_ = NULL;
9292 + const gchar* _tmp4_ = NULL;
9293 + gchar* _tmp5_ = NULL;
9294 + g_return_val_if_fail (name != NULL, NULL);
9295 + g_return_val_if_fail (arg != NULL, NULL);
9296 + g_return_val_if_fail (collate != NULL, NULL);
9297 + self = (RygelLMSSqlOperator*) g_object_new (object_type, NULL);
9299 + _tmp1_ = g_strdup (_tmp0_);
9300 + _g_free0 (self->name);
9301 + self->name = _tmp1_;
9303 + _tmp3_ = g_strdup (_tmp2_);
9304 + _g_free0 (self->arg);
9305 + self->arg = _tmp3_;
9307 + _tmp5_ = g_strdup (_tmp4_);
9308 + _g_free0 (self->collate);
9309 + self->collate = _tmp5_;
9314 +RygelLMSSqlOperator* rygel_lms_sql_operator_new (const gchar* name, const gchar* arg, const gchar* collate) {
9315 + return rygel_lms_sql_operator_construct (RYGEL_LMS_TYPE_SQL_OPERATOR, name, arg, collate);
9319 +RygelLMSSqlOperator* rygel_lms_sql_operator_construct_from_search_criteria_op (GType object_type, GUPnPSearchCriteriaOp op, const gchar* arg, const gchar* collate) {
9320 + RygelLMSSqlOperator * self = NULL;
9321 + gchar* sql = NULL;
9322 + GUPnPSearchCriteriaOp _tmp0_ = 0;
9323 + const gchar* _tmp7_ = NULL;
9324 + const gchar* _tmp8_ = NULL;
9325 + const gchar* _tmp9_ = NULL;
9326 + g_return_val_if_fail (arg != NULL, NULL);
9327 + g_return_val_if_fail (collate != NULL, NULL);
9331 + case GUPNP_SEARCH_CRITERIA_OP_EQ:
9333 + gchar* _tmp1_ = NULL;
9334 + _tmp1_ = g_strdup ("=");
9339 + case GUPNP_SEARCH_CRITERIA_OP_NEQ:
9341 + gchar* _tmp2_ = NULL;
9342 + _tmp2_ = g_strdup ("!=");
9347 + case GUPNP_SEARCH_CRITERIA_OP_LESS:
9349 + gchar* _tmp3_ = NULL;
9350 + _tmp3_ = g_strdup ("<");
9355 + case GUPNP_SEARCH_CRITERIA_OP_LEQ:
9357 + gchar* _tmp4_ = NULL;
9358 + _tmp4_ = g_strdup ("<=");
9363 + case GUPNP_SEARCH_CRITERIA_OP_GREATER:
9365 + gchar* _tmp5_ = NULL;
9366 + _tmp5_ = g_strdup (">");
9371 + case GUPNP_SEARCH_CRITERIA_OP_GEQ:
9373 + gchar* _tmp6_ = NULL;
9374 + _tmp6_ = g_strdup (">=");
9381 + g_assert_not_reached ();
9387 + self = (RygelLMSSqlOperator*) rygel_lms_sql_operator_construct (object_type, _tmp7_, _tmp8_, _tmp9_);
9393 +RygelLMSSqlOperator* rygel_lms_sql_operator_new_from_search_criteria_op (GUPnPSearchCriteriaOp op, const gchar* arg, const gchar* collate) {
9394 + return rygel_lms_sql_operator_construct_from_search_criteria_op (RYGEL_LMS_TYPE_SQL_OPERATOR, op, arg, collate);
9398 +static gchar* rygel_lms_sql_operator_real_to_string (RygelLMSSqlOperator* self) {
9399 + gchar* result = NULL;
9400 + const gchar* _tmp0_ = NULL;
9401 + const gchar* _tmp1_ = NULL;
9402 + const gchar* _tmp2_ = NULL;
9403 + gchar* _tmp3_ = NULL;
9404 + _tmp0_ = self->arg;
9405 + _tmp1_ = self->name;
9406 + _tmp2_ = self->collate;
9407 + _tmp3_ = g_strdup_printf ("(%s %s ? %s)", _tmp0_, _tmp1_, _tmp2_);
9413 +gchar* rygel_lms_sql_operator_to_string (RygelLMSSqlOperator* self) {
9414 + g_return_val_if_fail (self != NULL, NULL);
9415 + return RYGEL_LMS_SQL_OPERATOR_GET_CLASS (self)->to_string (self);
9419 +static void rygel_lms_sql_operator_class_init (RygelLMSSqlOperatorClass * klass) {
9420 + rygel_lms_sql_operator_parent_class = g_type_class_peek_parent (klass);
9421 + ((RygelLMSSqlOperatorClass *) klass)->to_string = rygel_lms_sql_operator_real_to_string;
9422 + G_OBJECT_CLASS (klass)->finalize = rygel_lms_sql_operator_finalize;
9426 +static void rygel_lms_sql_operator_instance_init (RygelLMSSqlOperator * self) {
9430 +static void rygel_lms_sql_operator_finalize (GObject* obj) {
9431 + RygelLMSSqlOperator * self;
9432 + self = G_TYPE_CHECK_INSTANCE_CAST (obj, RYGEL_LMS_TYPE_SQL_OPERATOR, RygelLMSSqlOperator);
9433 + _g_free0 (self->name);
9434 + _g_free0 (self->arg);
9435 + _g_free0 (self->collate);
9436 + G_OBJECT_CLASS (rygel_lms_sql_operator_parent_class)->finalize (obj);
9440 +GType rygel_lms_sql_operator_get_type (void) {
9441 + static volatile gsize rygel_lms_sql_operator_type_id__volatile = 0;
9442 + if (g_once_init_enter (&rygel_lms_sql_operator_type_id__volatile)) {
9443 + static const GTypeInfo g_define_type_info = { sizeof (RygelLMSSqlOperatorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) rygel_lms_sql_operator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RygelLMSSqlOperator), 0, (GInstanceInitFunc) rygel_lms_sql_operator_instance_init, NULL };
9444 + GType rygel_lms_sql_operator_type_id;
9445 + rygel_lms_sql_operator_type_id = g_type_register_static (G_TYPE_OBJECT, "RygelLMSSqlOperator", &g_define_type_info, 0);
9446 + g_once_init_leave (&rygel_lms_sql_operator_type_id__volatile, rygel_lms_sql_operator_type_id);
9448 + return rygel_lms_sql_operator_type_id__volatile;