/*
* dLeyna
*
* Copyright (C) 2012-2017 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU Lesser General Public License,
* version 2.1, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
*
* Mark Ryan <mark.d.ryan@intel.com>
*
*/
#ifndef DLS_PROPS_H__
#define DLS_PROPS_H__
#include <libgupnp/gupnp.h>
#include <libgupnp-av/gupnp-av.h>
#include <libdleyna/core/settings.h>
#include "async.h"
#define DLS_UPNP_MASK_PROP_PARENT (1LL << 0)
#define DLS_UPNP_MASK_PROP_TYPE (1LL << 1)
#define DLS_UPNP_MASK_PROP_PATH (1LL << 2)
#define DLS_UPNP_MASK_PROP_DISPLAY_NAME (1LL << 3)
#define DLS_UPNP_MASK_PROP_CHILD_COUNT (1LL << 4)
#define DLS_UPNP_MASK_PROP_SEARCHABLE (1LL << 5)
#define DLS_UPNP_MASK_PROP_URLS (1LL << 6)
#define DLS_UPNP_MASK_PROP_MIME_TYPE (1LL << 7)
#define DLS_UPNP_MASK_PROP_ARTIST (1LL << 8)
#define DLS_UPNP_MASK_PROP_ALBUM (1LL << 9)
#define DLS_UPNP_MASK_PROP_DATE (1LL << 10)
#define DLS_UPNP_MASK_PROP_GENRE (1LL << 11)
#define DLS_UPNP_MASK_PROP_DLNA_PROFILE (1LL << 12)
#define DLS_UPNP_MASK_PROP_TRACK_NUMBER (1LL << 13)
#define DLS_UPNP_MASK_PROP_SIZE (1LL << 14)
#define DLS_UPNP_MASK_PROP_DURATION (1LL << 15)
#define DLS_UPNP_MASK_PROP_BITRATE (1LL << 16)
#define DLS_UPNP_MASK_PROP_SAMPLE_RATE (1LL << 17)
#define DLS_UPNP_MASK_PROP_BITS_PER_SAMPLE (1LL << 18)
#define DLS_UPNP_MASK_PROP_WIDTH (1LL << 19)
#define DLS_UPNP_MASK_PROP_HEIGHT (1LL << 20)
#define DLS_UPNP_MASK_PROP_COLOR_DEPTH (1LL << 21)
#define DLS_UPNP_MASK_PROP_ALBUM_ART_URL (1LL << 22)
#define DLS_UPNP_MASK_PROP_RESOURCES (1LL << 23)
#define DLS_UPNP_MASK_PROP_URL (1LL << 24)
#define DLS_UPNP_MASK_PROP_REFPATH (1LL << 25)
#define DLS_UPNP_MASK_PROP_RESTRICTED (1LL << 26)
#define DLS_UPNP_MASK_PROP_DLNA_MANAGED (1LL << 27)
#define DLS_UPNP_MASK_PROP_CREATOR (1LL << 28)
#define DLS_UPNP_MASK_PROP_ARTISTS (1LL << 29)
#define DLS_UPNP_MASK_PROP_CREATE_CLASSES (1LL << 30)
#define DLS_UPNP_MASK_PROP_OBJECT_UPDATE_ID (1LL << 31)
#define DLS_UPNP_MASK_PROP_UPDATE_COUNT (1LL << 32)
#define DLS_UPNP_MASK_PROP_CONTAINER_UPDATE_ID (1LL << 33)
#define DLS_UPNP_MASK_PROP_TOTAL_DELETED_CHILD_COUNT (1LL << 34)
#define DLS_UPNP_MASK_PROP_DLNA_CONVERSION (1LL << 35)
#define DLS_UPNP_MASK_PROP_DLNA_OPERATION (1LL << 36)
#define DLS_UPNP_MASK_PROP_DLNA_FLAGS (1LL << 37)
#define DLS_UPNP_MASK_PROP_TYPE_EX (1LL << 38)
#define DLS_UPNP_MASK_ALL_PROPS 0xffffffffffffffff
typedef struct dls_prop_map_t_ dls_prop_map_t;
struct dls_prop_map_t_ {
const gchar *upnp_prop_name;
dls_upnp_prop_mask type;
gboolean filter;
gboolean searchable;
gboolean updateable;
};
void dls_prop_maps_new(GHashTable **property_map, GHashTable **filter_map);
dls_upnp_prop_mask dls_props_parse_filter(GHashTable *filter_map,
GVariant *filter,
gchar **upnp_filter);
gboolean dls_props_parse_update_filter(GHashTable *filter_map,
GVariant *to_add_update,
GVariant *to_delete,
dls_upnp_prop_mask *mask,
gchar **upnp_filter);
void dls_props_add_device(GUPnPDeviceInfo *root_proxy,
GUPnPDeviceInfo *proxy,
GUPnPServiceProxy *ems_proxy,
const dls_device_t *device,
GVariantBuilder *vb);
GVariant *dls_props_get_device_prop(GUPnPDeviceInfo *root_proxy,
GUPnPDeviceInfo *proxy,
const dls_device_t *device,
const gchar *prop);
gboolean dls_props_add_object(GVariantBuilder *item_vb,
GUPnPDIDLLiteObject *object,
const char *root_path,
const gchar *parent_path,
dls_upnp_prop_mask filter_mask);
GVariant *dls_props_get_object_prop(const gchar *prop, const gchar *root_path,
GUPnPDIDLLiteObject *object);
void dls_props_add_container(GVariantBuilder *item_vb,
GUPnPDIDLLiteContainer *object,
dls_upnp_prop_mask filter_mask,
const gchar *protocol_info,
gboolean *have_child_count);
void dls_props_add_child_count(GVariantBuilder *item_vb, gint value);
GVariant *dls_props_get_container_prop(const gchar *prop,
GUPnPDIDLLiteObject *object,
const gchar *protocol_info);
void dls_props_add_resource(GVariantBuilder *item_vb,
GUPnPDIDLLiteObject *object,
dls_upnp_prop_mask filter_mask,
const gchar *protocol_info);
void dls_props_add_item(GVariantBuilder *item_vb,
GUPnPDIDLLiteObject *object,
const gchar *root_path,
dls_upnp_prop_mask filter_mask,
const gchar *protocol_info);
GVariant *dls_props_get_item_prop(const gchar *prop, const gchar *root_path,
GUPnPDIDLLiteObject *object,
const gchar *protocol_info);
const gchar *dls_props_media_spec_to_upnp_class(const gchar *m2spec_class);
gchar *dls_props_media_spec_ex_to_upnp_class(const gchar *m2spec_class);
const gchar *dls_props_upnp_class_to_media_spec(const gchar *upnp_class);
const gchar *dls_props_upnp_class_to_media_spec_ex(const gchar *upnp_class);
void dls_props_add_manager(dleyna_settings_t *settings, GVariantBuilder *vb);
GVariant *dls_props_get_manager_prop(dleyna_settings_t *settings,
const gchar *prop);
GVariant *dls_props_get_error_prop(GError *error);
#endif /* DLS_PROPS_H__ */