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; } } } }
static void rygel_media_export_music_item_real_commit (RygelUpdatableObject *base, GAsyncReadyCallback callback, gpointer user_data) { RygelMediaExportMusicItem *self = RYGEL_MEDIA_EXPORT_MUSIC_ITEM (base); g_return_if_fail (self); g_return_if_fail (callback); rygel_trackable_item_changed (RYGEL_TRACKABLE_ITEM (self)); /* Setup the async result. */ GSimpleAsyncResult *async_result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, rygel_media_export_music_item_real_commit); /* Do the work that could take a while. */ GError *error = NULL; RygelMediaExportMediaCache *cache = rygel_media_export_media_cache_get_default (); rygel_media_export_media_cache_save_item (cache, RYGEL_MEDIA_ITEM (self), &error); /* Set any error in the async result, if necessary. */ if (error) { g_simple_async_result_set_from_error (async_result, error); g_error_free (error); } /* Let the caller know that the async operation is finished, * and that its result is now available. */ g_simple_async_result_complete (async_result); /* Free our data structure. */ g_object_unref (async_result); g_object_unref (cache); }
int main (int argc, char *argv[]) { RygelMediaServer *server; RygelSimpleContainer *root_container; char *path; GFile *source_dir; GFileEnumerator *enumerator; GFileInfo *info; int i; GMainLoop *loop; GError *error = NULL; // g_type_init (); rygel_media_engine_init (&error); if (error != NULL) { g_print ("Could not initialize media engine: %s\n", error->message); g_error_free (error); return EXIT_FAILURE; } g_set_application_name ("Standalone-Server"); root_container = rygel_simple_container_new_root ("Sample implementation"); if (argc >= 2) { path = g_strdup (argv[1]); } else { path = g_get_current_dir (); } source_dir = g_file_new_for_commandline_arg (path); g_free (path); enumerator = g_file_enumerate_children (source_dir, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, G_FILE_QUERY_INFO_NONE, NULL, NULL); info = g_file_enumerator_next_file (enumerator, NULL, NULL); i = 0; while (info != NULL) { GFile *file; const char *display_name, *content_type; char *uri, *id; RygelMediaItem *item = NULL; GError *error = NULL; display_name = g_file_info_get_display_name (info); content_type = g_file_info_get_content_type (info); file = g_file_get_child_for_display_name (source_dir, display_name, &error); if (error != NULL) { g_critical ("Failed to get child: %s", error->message); return 127; } uri = g_file_get_uri (file); g_object_unref (file); id = g_strdup_printf ("%06d", i); if (g_str_has_prefix (content_type, "audio/")) { item = (RygelMediaItem*)rygel_audio_item_new (id, (RygelMediaContainer*)root_container, display_name, RYGEL_AUDIO_ITEM_UPNP_CLASS); } else if (g_str_has_prefix (content_type, "video/")) { item = (RygelMediaItem*)rygel_video_item_new (id, (RygelMediaContainer*)root_container, display_name, RYGEL_VIDEO_ITEM_UPNP_CLASS); } else if (g_str_has_prefix (content_type, "image/")) { item = (RygelMediaItem*)rygel_image_item_new (id, (RygelMediaContainer*)root_container, display_name, RYGEL_IMAGE_ITEM_UPNP_CLASS); } g_free (id); if (item != NULL) { RygelMediaObject *object; GeeArrayList* uris; rygel_media_item_set_mime_type (RYGEL_MEDIA_ITEM (item), content_type); object = RYGEL_MEDIA_OBJECT (item); gee_collection_add (GEE_COLLECTION (object->uris), uri); rygel_simple_container_add_child_item (root_container, item); } i++; info = g_file_enumerator_next_file (enumerator, NULL, NULL); } server = rygel_media_server_new ("Single purpose server", (RygelMediaContainer*)root_container, RYGEL_PLUGIN_CAPABILITIES_NONE); rygel_media_device_add_interface (RYGEL_MEDIA_DEVICE (server), "eth0"); rygel_media_device_add_interface (RYGEL_MEDIA_DEVICE (server), "wlan0"); loop = g_main_loop_new (NULL, FALSE); g_main_loop_run (loop); }