void rygel_didl_lite_writer_serialize (RygelDIDLLiteWriter* self, RygelMediaObject* media_object, GError** error) { GError * _inner_error_; g_return_if_fail (self != NULL); g_return_if_fail (media_object != NULL); _inner_error_ = NULL; if (RYGEL_IS_MEDIA_ITEM (media_object)) { rygel_didl_lite_writer_serialize_item (self, RYGEL_MEDIA_ITEM (media_object), &_inner_error_); if (_inner_error_ != NULL) { g_propagate_error (error, _inner_error_); return; } } else { if (RYGEL_IS_MEDIA_CONTAINER (media_object)) { rygel_didl_lite_writer_serialize_container (self, RYGEL_MEDIA_CONTAINER (media_object), &_inner_error_); if (_inner_error_ != NULL) { g_propagate_error (error, _inner_error_); return; } } else { _inner_error_ = g_error_new_literal (RYGEL_DIDL_LITE_WRITER_ERROR, RYGEL_DIDL_LITE_WRITER_ERROR_UNSUPPORTED_OBJECT, "Unable to serialize unsupported object"); if (_inner_error_ != NULL) { g_propagate_error (error, _inner_error_); return; } } } }
/** * Factory method. * * Create a QueryContainer from a plain-text description string. * * @param definition Plain-text defintion of the query-container * @param name The title of the container. If not supplied, it * will be derived from the plain-text description of * the container * @return A new instance of QueryContainer */ RygelMediaExportQueryContainer * rygel_media_export_query_container_factory_create_from_description (RygelMediaExportQueryContainerFactory *self, const gchar *definition, const gchar *name) { gchar *title; gchar *attribute; gchar *pattern; gchar *upnp_class; gchar *id; RygelMediaExportQueryContainer *container; RygelSearchExpression *expression; g_return_val_if_fail (RYGEL_MEDIA_EXPORT_IS_QUERY_CONTAINER_FACTORY (self), NULL); g_return_val_if_fail (definition != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); title = g_strdup (name); attribute = NULL; pattern = NULL; upnp_class = NULL; id = g_strdup (definition); rygel_media_export_query_container_factory_register_id (self, &id); expression = rygel_media_export_query_container_factory_parse_description (definition, &pattern, &attribute, &upnp_class, &title); if (!pattern || pattern[0] == '\0') { container = RYGEL_MEDIA_EXPORT_QUERY_CONTAINER (rygel_media_export_leaf_query_container_new (expression, id, title)); } else { container = RYGEL_MEDIA_EXPORT_QUERY_CONTAINER (rygel_media_export_node_query_container_new (expression, id, title, pattern, attribute)); } if (upnp_class) { rygel_media_object_set_upnp_class (RYGEL_MEDIA_OBJECT (container), upnp_class); if (!g_strcmp0 (upnp_class, RYGEL_MEDIA_CONTAINER_MUSIC_ALBUM)) { rygel_media_container_set_sort_criteria (RYGEL_MEDIA_CONTAINER (container), RYGEL_MEDIA_CONTAINER_ALBUM_SORT_CRITERIA); } } rygel_search_expression_unref (expression); g_free (id); g_free (upnp_class); g_free (pattern); g_free (attribute); g_free (title); return container; }
static void rygel_media_export_harvester_on_file_added (RygelMediaExportHarvester *self, GFile *file) { gchar *uri; GError *error; RygelMediaExportMediaCache *cache; GFileInfo *info; RygelMediaExportHarvesterPrivate *priv; g_return_if_fail (RYGEL_MEDIA_EXPORT_IS_HARVESTER (self)); g_return_if_fail (G_IS_FILE (file)); uri = g_file_get_uri (file); g_debug ("Filesystem events settled for %s, scheduling extraction…", uri); g_free (uri); cache = rygel_media_export_media_cache_get_default (); priv = self->priv; error = NULL; info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, G_FILE_QUERY_INFO_NONE, priv->cancellable, &error); if (error) { g_warning ("Failed to query file: %s", error->message); g_error_free (error); error = NULL; goto out; } if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY || rygel_media_export_harvester_is_eligible (info)) { RygelMediaContainer *parent_container = NULL; GFile *current = g_object_ref (file); GeeAbstractCollection *abstract_locations = GEE_ABSTRACT_COLLECTION (priv->locations); do { GFile *parent = g_file_get_parent (current); gchar *id = rygel_media_export_media_cache_get_id (parent); RygelMediaObject *tmp_object = rygel_media_export_media_cache_get_object (cache, id, &error); if (error) { g_warning (_("Error fetching object '%s' from database: %s"), id, error->message); g_free (id); g_object_unref (parent); g_error_free (error); error = NULL; goto inner_out; } g_free (id); if (parent_container) { g_object_unref (parent_container); parent_container = NULL; } if (RYGEL_IS_MEDIA_CONTAINER (tmp_object)) { parent_container = RYGEL_MEDIA_CONTAINER (tmp_object); } else { g_object_unref (tmp_object); } if (!parent_container) { g_object_ref (parent); g_object_unref (current); current = parent; } g_object_unref (parent); if (!parent_container && gee_abstract_collection_contains (abstract_locations, current)) { RygelMediaObject* another_object = rygel_media_export_media_cache_get_object (cache, RYGEL_MEDIA_EXPORT_ROOT_CONTAINER_FILESYSTEM_FOLDER_ID, &error); if (error) { goto inner_out; } if (parent_container) { g_object_unref (parent_container); parent_container = NULL; } if (RYGEL_IS_MEDIA_CONTAINER (another_object)) { parent_container = RYGEL_MEDIA_CONTAINER (another_object); } break; } } while (!parent_container); rygel_media_export_harvester_schedule (self, current, parent_container, NULL); inner_out: g_object_unref (current); if (parent_container) { g_object_unref (parent_container); } } else { gchar* file_uri = g_file_get_uri (file); g_debug ("%s is not eligible for extraction", file_uri); g_free (file_uri); } out: g_object_unref (cache); }
static gboolean rygel_external_container_real_search_co (RygelExternalContainerSearchData* data) { switch (data->_state_) { case 0: goto _state_0; case 2: goto _state_2; case 3: goto _state_3; case 4: goto _state_4; default: g_assert_not_reached (); } _state_0: { data->results = gee_array_list_new (RYGEL_TYPE_MEDIA_OBJECT, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL); #line 116 "rygel-external-container.vala" if (data->expression == NULL) { #line 116 "rygel-external-container.vala" data->_tmp0_ = TRUE; #line 553 "rygel-external-container.c" } else { #line 116 "rygel-external-container.vala" data->_tmp0_ = !RYGEL_IS_RELATIONAL_EXPRESSION (data->expression); #line 557 "rygel-external-container.c" } #line 116 "rygel-external-container.vala" if (data->_tmp0_) { #line 561 "rygel-external-container.c" data->_state_ = 2; RYGEL_MEDIA_CONTAINER_CLASS (rygel_external_container_parent_class)->search (RYGEL_MEDIA_CONTAINER (data->self), data->expression, data->offset, data->max_count, data->cancellable, rygel_external_container_search_ready, data); return FALSE; _state_2: data->_tmp1_ = RYGEL_MEDIA_CONTAINER_CLASS (rygel_external_container_parent_class)->search_finish (RYGEL_MEDIA_CONTAINER (data->self), data->_res_, &data->total_matches, &data->_inner_error_); if (data->_inner_error_ != NULL) { g_simple_async_result_set_from_error (data->_async_result, data->_inner_error_); g_error_free (data->_inner_error_); _g_object_unref0 (data->results); { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } } data->result = data->_tmp1_; _g_object_unref0 (data->results); { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } } data->rel_expression = _rygel_search_expression_ref0 ((data->_tmp2_ = data->expression, RYGEL_IS_RELATIONAL_EXPRESSION (data->_tmp2_) ? ((RygelRelationalExpression*) data->_tmp2_) : NULL)); data->id = g_strdup ((const char*) ((RygelSearchExpression*) data->rel_expression)->operand2); #line 128 "rygel-external-container.vala" if (_vala_strcmp0 ((const char*) ((RygelSearchExpression*) data->rel_expression)->operand1, "@id") != 0) { #line 128 "rygel-external-container.vala" data->_tmp4_ = TRUE; #line 599 "rygel-external-container.c" } else { #line 129 "rygel-external-container.vala" data->_tmp4_ = GPOINTER_TO_INT (((RygelSearchExpression*) data->rel_expression)->op) != GUPNP_SEARCH_CRITERIA_OP_EQ; #line 603 "rygel-external-container.c" } #line 128 "rygel-external-container.vala" if (data->_tmp4_) { #line 128 "rygel-external-container.vala" data->_tmp3_ = TRUE; #line 609 "rygel-external-container.c" } else { #line 130 "rygel-external-container.vala" data->_tmp3_ = !rygel_external_container_is_direct_child (data->self, data->id); #line 613 "rygel-external-container.c" } #line 128 "rygel-external-container.vala" if (data->_tmp3_) { #line 617 "rygel-external-container.c" data->_state_ = 3; RYGEL_MEDIA_CONTAINER_CLASS (rygel_external_container_parent_class)->search (RYGEL_MEDIA_CONTAINER (data->self), data->expression, data->offset, data->max_count, data->cancellable, rygel_external_container_search_ready, data); return FALSE; _state_3: data->_tmp5_ = RYGEL_MEDIA_CONTAINER_CLASS (rygel_external_container_parent_class)->search_finish (RYGEL_MEDIA_CONTAINER (data->self), data->_res_, &data->total_matches, &data->_inner_error_); if (data->_inner_error_ != NULL) { g_simple_async_result_set_from_error (data->_async_result, data->_inner_error_); g_error_free (data->_inner_error_); _g_object_unref0 (data->results); _rygel_search_expression_unref0 (data->rel_expression); _g_free0 (data->id); { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } } data->result = data->_tmp5_; _g_object_unref0 (data->results); _rygel_search_expression_unref0 (data->rel_expression); _g_free0 (data->id); { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } } data->factory = rygel_external_item_factory_new (); #line 140 "rygel-external-container.vala" if (rygel_external_item_factory_id_valid (data->id)) { #line 656 "rygel-external-container.c" data->_state_ = 4; rygel_external_item_factory_create_for_id (data->factory, data->id, data->self, rygel_external_container_search_ready, data); return FALSE; _state_4: data->media_object = rygel_external_item_factory_create_for_id_finish (data->factory, data->_res_, &data->_inner_error_); if (data->_inner_error_ != NULL) { g_simple_async_result_set_from_error (data->_async_result, data->_inner_error_); g_error_free (data->_inner_error_); _g_object_unref0 (data->results); _rygel_search_expression_unref0 (data->rel_expression); _g_free0 (data->id); _rygel_external_item_factory_unref0 (data->factory); { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } } #line 142 "rygel-external-container.vala" gee_abstract_collection_add ((GeeAbstractCollection*) data->results, (RygelMediaObject*) data->media_object); #line 681 "rygel-external-container.c" _g_object_unref0 (data->media_object); } else { { data->_container_it = gee_abstract_collection_iterator ((GeeAbstractCollection*) data->self->priv->containers); #line 144 "rygel-external-container.vala" while (TRUE) { #line 144 "rygel-external-container.vala" if (!gee_iterator_next (data->_container_it)) { #line 144 "rygel-external-container.vala" break; #line 692 "rygel-external-container.c" } data->container = (RygelExternalContainer*) gee_iterator_get (data->_container_it); #line 145 "rygel-external-container.vala" if (_vala_strcmp0 (((RygelMediaObject*) data->container)->id, data->id) == 0) { #line 146 "rygel-external-container.vala" gee_abstract_collection_add ((GeeAbstractCollection*) data->results, (RygelMediaObject*) data->container); #line 699 "rygel-external-container.c" } _g_object_unref0 (data->container); } _g_object_unref0 (data->_container_it); } } #line 151 "rygel-external-container.vala" data->total_matches = (guint) gee_collection_get_size ((GeeCollection*) data->results); #line 708 "rygel-external-container.c" data->result = (GeeList*) data->results; _rygel_search_expression_unref0 (data->rel_expression); _g_free0 (data->id); _rygel_external_item_factory_unref0 (data->factory); { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } _g_object_unref0 (data->results); _rygel_search_expression_unref0 (data->rel_expression); _g_free0 (data->id); _rygel_external_item_factory_unref0 (data->factory); } { if (data->_state_ == 0) { g_simple_async_result_complete_in_idle (data->_async_result); } else { g_simple_async_result_complete (data->_async_result); } g_object_unref (data->_async_result); return FALSE; } }
static void rygel_media_container_finalize (GObject* obj) { RygelMediaContainer * self; self = RYGEL_MEDIA_CONTAINER (obj); G_OBJECT_CLASS (rygel_media_container_parent_class)->finalize (obj); }