Commit 93ece3d5 authored by W. Michael Petullo's avatar W. Michael Petullo

Documentation updates, install dmap-mdns-browser.h and add progress idle

function to dmap-connection.c.
parent 8a3140e5
15 August 2009 W. Michael Petullo <mike@flyn.org>
* Documentation.
* Add progress idle function to dmap-connection.c.
* Install dmap-mdns-browser.h again.
14 August 2009 W. Michael Petullo <mike@flyn.org>
* Add documentation overview.
13 August 2009 W. Michael Petullo <mike@flyn.org>
* Proper reference counting for DMAPRecords in DMAPDbs.
* Documentation work.
12 August 2009 W. Michael Petullo <mike@flyn.org>
* Simplify autogen.sh.
30 July 2009 W. Michael Petullo <mike@flyn.org>
* Modify configure.ac to require gstreamer-plugins-base >=
......
SUBDIRS = libdmapsharing tests
DIST_SUBDIRS = common libdmapsharing m4 media tests
SUBDIRS = docs libdmapsharing tests
DIST_SUBDIRS = docs libdmapsharing m4 media tests
### all of the standard pc files we need to generate
pcfiles = libdmapsharing-@LIBDMAPSHARING_MAJORMINOR@.pc
......
The libdmapsharing package includes two test programs, test-client-dmap
and test-client-server. The source code for these programs provide good
examples of how to develop a DMAP client or server application.
There are three steps to writting a DMAP server:
First, define classes that implement the DAAPDb (or DPAP) and DAAPRecord
interfaces (for an example, see test-daap-db.c and test-daap-record.c). If
your application already has a media database interface, then these new
definitions will simply be adapter classes encapsulating your existing
interface.
Second, define classes that implement the DMAPContainerDb and
DMAPContainerRecord interfaces (see test-dmap-container-db.c and
test-dmap-container-record.c). These classes will allow the creation of
playlists (DAAP) or albums (DPAP).
Finally, write the code that creates a new DAAPShare object (see
test-dmap-server.c) and provide it your DAAPDb object.
The libdmapsharing package also provides an optional interface,
DMAPRecordFactory, that may be convenient for application developers.
libdmapsharing is a library you may use to access and share DMAP (DAAP &
DPAP) content. The library is written in C using GObject and libsoup. The
DMAP family of protocols are used by products such as iTunes(TM),
iPhoto(TM) and the Roku SoundBridge(TM) family to share content such as
music and photos.
For documentation on libdmapsharing's API,
please refer to the API documentation, available at
http://www.flyn.org/projects/libdmapsharing/docs/ or with the
libdmapsharing source code.
......@@ -5,6 +5,8 @@ daap-connection.c:96: note: initialized from here
Ensure client test catches newly shared files?
Ensure D[AP]APRecords are properly freed.
daap-connection.c
daap-connection.h
daap-connection.lo
......
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
DIE=0
package=libdmapsharing
srcfile=configure.ac
gtkdocize || exit 1
aclocal -I m4 || exit 1
autoconf || exit 1
autoheader || exit 1
libtoolize --force || exit 1
automake -a || exit 1
./configure $* || exit 1
# a quick cvs co if necessary to alleviate the pain - may remove this
# when developers get a clue ;)
if test ! -d common;
then
echo "+ getting common/ from cvs"
cvs co common
fi
# source helper functions
if test ! -f common/autogen-helper.sh;
then
echo There is something wrong with your source tree.
echo You are missing common/autogen-helper.sh
exit 1
fi
. common/autogen-helper.sh
CONFIGURE_DEF_OPT='--enable-maintainer-mode'
autogen_options $*
echo -n "+ check for build tools"
if test ! -z "$NOCHECK"; then echo " skipped"; else echo; fi
version_check "autoconf" "$AUTOCONF autoconf autoconf-2.54 autoconf-2.53" \
"ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 53 || DIE=1
version_check "automake" "$AUTOMAKE automake automake-1.9 automake-1.8 automake-1.7 automake-1.6" \
"ftp://ftp.gnu.org/pub/gnu/automake/" 1 6 || DIE=1
version_check "libtoolize" "$LIBTOOLIZE libtoolize" \
"ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1
version_check "pkg-config" "" \
"http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
die_check $DIE
aclocal_check || DIE=1
autoheader_check || DIE=1
die_check $DIE
# if no arguments specified then this will be printed
if test -z "$*"; then
echo "+ checking for autogen.sh options"
echo " This autogen script will automatically run ./configure as:"
echo " ./configure $CONFIGURE_DEF_OPT"
echo " To pass any additional options, please specify them on the $0"
echo " command line."
fi
toplevel_check $srcfile
tool_run "$aclocal" "-I m4 $ACLOCAL_FLAGS"
tool_run "$libtoolize" "--copy --force"
tool_run "$autoheader"
# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo
echo timestamp > stamp-h.in 2> /dev/null
tool_run "$autoconf"
tool_run "$automake" "-a -c"
# if enable exists, add an -enable option for each of the lines in that file
if test -f enable; then
for a in `cat enable`; do
CONFIGURE_FILE_OPT="--enable-$a"
done
fi
# if disable exists, add an -disable option for each of the lines in that file
if test -f disable; then
for a in `cat disable`; do
CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a"
done
fi
test -n "$NOCONFIGURE" && {
echo "+ skipping configure stage for package $package, as requested."
echo "+ autogen.sh done."
exit 0
}
echo "+ running configure ... "
test ! -z "$CONFIGURE_DEF_OPT" && echo " ./configure default flags: $CONFIGURE_DEF_OPT"
test ! -z "$CONFIGURE_EXT_OPT" && echo " ./configure external flags: $CONFIGURE_EXT_OPT"
test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT"
echo
./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || {
echo " configure failed"
exit 1
}
echo "Now type 'make' to compile $package."
exit 0
AC_INIT(libdmapsharing, 1.9.0.10)
AC_INIT(libdmapsharing, 1.9.0.11)
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, cvs and prerelease does Werror too
AS_VERSION(libdmapsharing, LIBDMAPSHARING, 1, 9, 0, 10, LIBDMAPSHARING_CVS="no", LIBDMAPSHARING_CVS="yes")
AS_VERSION(libdmapsharing, LIBDMAPSHARING, 1, 9, 0, 11, LIBDMAPSHARING_CVS="no", LIBDMAPSHARING_CVS="yes")
AM_INIT_AUTOMAKE
......@@ -30,6 +30,10 @@ AM_PROG_CC_STDC
AC_HEADER_STDC
AC_PROG_LIBTOOL
GTK_DOC_CHECK(1.0)
AC_CONFIG_MACRO_DIR(m4)
dnl Test if --enable-debug given
AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],[enable debugging mode])])
if test "x$enable_debug" = "xyes" ; then
......@@ -315,7 +319,7 @@ AC_SUBST(DMAP_HAVE_UNALIGNED_ACCESS_DEFINE)
AC_OUTPUT([
Makefile
common/Makefile
docs/Makefile
libdmapsharing.pc
libdmapsharing/Makefile
libdmapsharing/dmap-config.h
......
Name: libdmapsharing
Version: 1.9.0.10
Version: 1.9.0.11
Release: 1%{?dist}
License: LGPLv2+
Source: http://downloads.sourceforge.net/%name/%{name}-%{version}.tar.gz
......@@ -35,6 +35,7 @@ other resources needed for developing applications using libdmapsharing.
%{_libdir}/pkgconfig/libdmapsharing-*.pc
%{_includedir}/libdmapsharing-*/
%{_libdir}/libdmapsharing.so
%{_datadir}/gtk-doc/html/libdmapsharing
%prep
......@@ -57,6 +58,10 @@ rm -rf $RPM_BUILD_ROOT
%postun -p /sbin/ldconfig
%changelog
* Sat Aug 15 2009 W. Michael Petullo <mike[@]flyn.org> - 1.9.0.11-1
- New upstream version.
- Add gtk-doc documentation to devel package.
* Wed Jul 29 2009 W. Michael Petullo <mike[@]flyn.org> - 1.9.0.10-1
- New upstream version.
......
......@@ -9,7 +9,7 @@ AUTOMAKE_OPTIONS = 1.6
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=
DOC_MODULE=libdmapsharing
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
......@@ -22,7 +22,7 @@ DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
# gtk-doc will search all .c & .h files beneath here for inline comments
# documenting the functions and macros.
# e.g. DOC_SOURCE_DIR=../../../gtk
DOC_SOURCE_DIR=
DOC_SOURCE_DIR=../libdmapsharing
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
......@@ -58,7 +58,18 @@ EXTRA_HFILES=
# Header files to ignore when scanning. Use base file name, no paths
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
IGNORE_HFILES=
IGNORE_HFILES= \
dmap-marshal.h \
dmap-config.h \
dmap-md5.h \
dmap-mdns-avahi.h \
dmap-mdns-publisher.h \
dmap-structure.h \
dmap-utils.h \
g-gst-input-stream.h \
g-gst-mp3-input-stream.h \
g-gst-wav-input-stream.h \
gst-util.h
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
......@@ -78,8 +89,20 @@ expand_content_files=
# signals and properties.
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS=
GTKDOC_LIBS=
GTKDOC_CFLAGS= \
-I$(top_srcdir) \
$(SOUP_CFLAGS) \
$(GSTREAMERAPP_CFLAGS) \
$(MDNS_CFLAGS)
GTKDOC_LIBS= \
$(top_builddir)/libdmapsharing/libdmapsharing.la \
$(GLIB_LIBS) \
$(GTHREAD_LIBS) \
$(GOBJECT_LIBS) \
$(MDNS_LIBS) \
$(GSTREAMERAPP_LIBS) \
$(SOUP_LIBS)
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make
......
......@@ -8,29 +8,41 @@
<bookinfo>
<title>libdmapsharing Reference Manual</title>
<releaseinfo>
for libdmapsharing [VERSION]
for libdmapsharing 1.9
The latest version of this documentation can be found on-line at
<ulink role="online-location" url="http://[SERVER]/libdmapsharing/index.html">http://[SERVER]/libdmapsharing/</ulink>.
<ulink role="online-location" url="http://www.flyn.org/projects/libdmapsharing/docs/">http://www.flyn.org/projects/libdmapsharing/docs/</ulink>.
</releaseinfo>
</bookinfo>
<chapter>
<title>Libdmapsharing Sharing Overview</title>
<xi:include href="mediadb.sgml"/>
<xi:include href="containerdb.sgml"/>
<xi:include href="shareapi.sgml"/>
</chapter>
<chapter>
<title>[Insert title here]</title>
<xi:include href="xml/dmap-container-db.xml"/>
<xi:include href="xml/dmap-share.xml"/>
<xi:include href="xml/dpap-share.xml"/>
<xi:include href="xml/dmap-container-record.xml"/>
<xi:include href="xml/daap-share.xml"/>
<xi:include href="xml/daap-record.xml"/>
<title>Libdmapsharing Browsing Overview</title>
</chapter>
<chapter>
<title>Libdmapsharing Objects and Interfaces</title>
<xi:include href="xml/daap-connection.xml"/>
<xi:include href="xml/daap-record.xml"/>
<xi:include href="xml/daap-share.xml"/>
<xi:include href="xml/dmap-connection.xml"/>
<xi:include href="xml/dmap-container-db.xml"/>
<xi:include href="xml/dmap-container-record.xml"/>
<xi:include href="xml/dmap-db.xml"/>
<xi:include href="xml/dmap-mdns-browser.xml"/>
<xi:include href="xml/dmap-share.xml"/>
<xi:include href="xml/dmap-record.xml"/>
<xi:include href="xml/dpap-record.xml"/>
<xi:include href="xml/dmap-record-factory.xml"/>
<xi:include href="xml/dpap-connection.xml"/>
<xi:include href="xml/dmap-connection.xml"/>
<xi:include href="xml/dmap-db.xml"/>
<xi:include href="xml/dpap-record.xml"/>
<xi:include href="xml/dpap-share.xml"/>
</chapter>
<chapter id="object-tree">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
......
......@@ -61,19 +61,14 @@ libdmapsharinginclude_HEADERS = \
daap-record.h \
daap-share.h \
dmap.h \
dmap-config.h \
dmap-connection.h \
dmap-container-db.h \
dmap-container-record.h \
dmap-db.h \
dmap-md5.h \
dmap-mdns-browser.h \
dmap-mdns-publisher.h \
dmap-record.h \
dmap-record-factory.h \
dmap-share.h \
dmap-structure.h \
dmap-utils.h \
dpap-connection.h \
dpap-record.h \
dpap-share.h
......@@ -81,8 +76,11 @@ libdmapsharinginclude_HEADERS = \
noinst_HEADERS = \
dmap-marshal.h \
dmap-config.h \
dmap-md5.h \
dmap-mdns-avahi.h \
dmap-mdns-browser.h \
dmap-mdns-publisher.h \
dmap-structure.h \
dmap-utils.h \
g-gst-input-stream.h \
g-gst-mp3-input-stream.h \
g-gst-wav-input-stream.h \
......
......@@ -28,11 +28,52 @@
G_BEGIN_DECLS
/**
* TYPE_DAAP_CONNECTION:
*
* The type for #DAAPConnection.
*/
#define TYPE_DAAP_CONNECTION (daap_connection_get_type ())
/**
* DAAP_CONNECTION:
* @o: Object which is subject to casting.
*
* Casts a #DAAPConnection or derived pointer into a (DAAPConnection *) pointer.
* Depending on the current debugging level, this function may invoke
* certain runtime checks to identify invalid casts.
*/
#define DAAP_CONNECTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_DAAP_CONNECTION, DAAPConnection))
/**
* DAAP_CONNECTION_CLASS:
* @k: a valid #DAAPConnectionClass
*
* Casts a derived #DAAPConnectionClass structure into a #DAAPConnectionClass
* structure.
*/
#define DAAP_CONNECTION_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), TYPE_DAAP_CONNECTION, DAAPConnectionClass))
/**
* IS_DAAP_CONNECTION:
* @o: Instance to check for being a %TYPE_DAAP_CONNECTION.
*
* Checks whether a valid #GTypeInstance pointer is of type %TYPE_DAAP_CONNECTION.
*/
#define IS_DAAP_CONNECTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_DAAP_CONNECTION))
/**
* IS_DAAP_CONNECTION_CLASS:
* @k: a #DAAPConnectionClass
*
* Checks whether @k "is a" valid #DAAPConnectionClass structure of type
* %DAAP_CONNECTION or derived.
*/
#define IS_DAAP_CONNECTION_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_DAAP_CONNECTION))
/**
* DAAP_CONNECTION_GET_CLASS:
* @o: a #DAAPConnection instance.
*
* Get the class structure associated to a #DAAPConnection instance.
*
* Returns: pointer to object class structure.
*/
#define DAAP_CONNECTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_DAAP_CONNECTION, DAAPConnectionClass))
typedef struct _DAAPConnection DAAPConnection;
......
......@@ -28,11 +28,38 @@
G_BEGIN_DECLS
/**
* TYPE_DAAP_RECORD:
*
* The type for #DAAPRecord.
*/
#define TYPE_DAAP_RECORD (daap_record_get_type ())
/**
* DAAP_RECORD:
* @o: Object which is subject to casting.
*
* Casts a #DAAPRecord or derived pointer into a (DAAPRecord *) pointer.
* Depending on the current debugging level, this function may invoke
* certain runtime checks to identify invalid casts.
*/
#define DAAP_RECORD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
TYPE_DAAP_RECORD, DAAPRecord))
/**
* IS_DAAP_RECORD:
* @o: Instance to check for being a %TYPE_DAAP_RECORD.
*
* Checks whether a valid #GTypeInstance pointer is of type %TYPE_DAAP_RECORD.
*/
#define IS_DAAP_RECORD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
TYPE_DAAP_RECORD))
/**
* DAAP_RECORD_GET_INTERFACE:
* @o: a #DAAPRecord instance.
*
* Get the class structure associated to a #DAAPRecord instance.
*
* Returns: pointer to object interface structure.
*/
#define DAAP_RECORD_GET_INTERFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), \
TYPE_DAAP_RECORD, DAAPRecordInterface))
......@@ -47,7 +74,23 @@ struct _DAAPRecordInterface {
};
GType daap_record_get_type (void);
/**
* daap_record_itunes_compat:
* @record: A DAAPRecord.
*
* Returns: TRUE if record is compatible with iTunes, else FALSE.
*/
gboolean daap_record_itunes_compat (DAAPRecord *record);
/**
* daap_record_read:
* @record: a DAAPRecord.
* @err: a GError.
*
* Returns: A GInputStream that provides read-only access to the data stream
* associated with record.
*/
GInputStream *daap_record_read (DAAPRecord *record, GError **err);
#endif /* __DAAP_RECORD_H */
......
......@@ -241,8 +241,8 @@ daap_share_new (const char *name,
"transcode-mimetype", transcode_mimetype,
NULL));
dmap_share_server_start (DMAP_SHARE (share));
dmap_share_publish_start (DMAP_SHARE (share));
_dmap_share_server_start (DMAP_SHARE (share));
_dmap_share_publish_start (DMAP_SHARE (share));
transcode_format = mime_to_format (transcode_mimetype);
......@@ -319,7 +319,7 @@ daap_share_server_info (DMAPShare *share,
* 3.0 is 2/3
*/
dmap_structure_add (msrv, DMAP_CC_MINM, nameprop);
dmap_structure_add (msrv, DMAP_CC_MSAU, dmap_share_get_auth_method (share));
dmap_structure_add (msrv, DMAP_CC_MSAU, _dmap_share_get_auth_method (share));
/* authentication method
* 0 is nothing
* 1 is name & password
......@@ -337,7 +337,7 @@ daap_share_server_info (DMAPShare *share,
dmap_structure_add (msrv, DMAP_CC_MSRS, (gchar) 0);
dmap_structure_add (msrv, DMAP_CC_MSDC, (gint32) 1);
dmap_share_message_set_from_dmap_structure (share, message, msrv);
_dmap_share_message_set_from_dmap_structure (share, message, msrv);
dmap_structure_destroy (msrv);
g_free (nameprop);
......@@ -564,73 +564,73 @@ add_entry_to_mlcl (gpointer id, DMAPRecord *record, gpointer _mb)
mb = (struct MLCL_Bits *) _mb;
mlit = dmap_structure_add (mb->mlcl, DMAP_CC_MLIT);
if (dmap_share_client_requested (mb->bits, ITEM_KIND))
if (_dmap_share_client_requested (mb->bits, ITEM_KIND))
dmap_structure_add (mlit, DMAP_CC_MIKD, (gchar) DAAP_ITEM_KIND_AUDIO);
if (dmap_share_client_requested (mb->bits, ITEM_ID))
if (_dmap_share_client_requested (mb->bits, ITEM_ID))
dmap_structure_add (mlit, DMAP_CC_MIID, GPOINTER_TO_UINT (id));
if (dmap_share_client_requested (mb->bits, ITEM_NAME)) {
if (_dmap_share_client_requested (mb->bits, ITEM_NAME)) {
const gchar *title;
g_object_get (record, "title", &title, NULL);
dmap_structure_add (mlit, DMAP_CC_MINM, title);
}
if (dmap_share_client_requested (mb->bits, PERSISTENT_ID))
if (_dmap_share_client_requested (mb->bits, PERSISTENT_ID))
dmap_structure_add (mlit, DMAP_CC_MPER, GPOINTER_TO_UINT (id));
if (dmap_share_client_requested (mb->bits, CONTAINER_ITEM_ID))
if (_dmap_share_client_requested (mb->bits, CONTAINER_ITEM_ID))
dmap_structure_add (mlit, DMAP_CC_MCTI, GPOINTER_TO_UINT (id));
if (dmap_share_client_requested (mb->bits, SONG_DATA_KIND))
if (_dmap_share_client_requested (mb->bits, SONG_DATA_KIND))
dmap_structure_add (mlit, DMAP_CC_ASDK, (gchar) DAAP_SONG_DATA_KIND_NONE);
/* FIXME: Any use for this?
if (dmap_share_client_requested (mb->bits, SONG_DATA_URL))
if (_dmap_share_client_requested (mb->bits, SONG_DATA_URL))
dmap_structure_add (mlit, DMAP_CC_ASUL, "daap://192.168.0.100:%u/databases/1/items/%d.%s?session-id=%s", data->port, *id, daap_record_get_format (DAAP_RECORD (record)), data->session_id);
*/
if (dmap_share_client_requested (mb->bits, SONG_ALBUM)) {
if (_dmap_share_client_requested (mb->bits, SONG_ALBUM)) {
const gchar *album;
g_object_get (record, "album", &album, NULL);
dmap_structure_add (mlit, DMAP_CC_ASAL, album);
}
if (dmap_share_client_requested (mb->bits, SONG_GROUPING))
if (_dmap_share_client_requested (mb->bits, SONG_GROUPING))
dmap_structure_add (mlit, DMAP_CC_AGRP, "");
if (dmap_share_client_requested (mb->bits, SONG_ARTIST)) {
if (_dmap_share_client_requested (mb->bits, SONG_ARTIST)) {
const gchar *artist;
g_object_get (record, "artist", &artist, NULL);
dmap_structure_add (mlit, DMAP_CC_ASAR, artist);
}
if (dmap_share_client_requested (mb->bits, SONG_BITRATE)) {
if (_dmap_share_client_requested (mb->bits, SONG_BITRATE)) {
gulong bitrate;
g_object_get (record, "bitrate", &bitrate, NULL);
if (bitrate != 0)
dmap_structure_add (mlit, DMAP_CC_ASBR, (gint32) bitrate);
}
if (dmap_share_client_requested (mb->bits, SONG_BPM))
if (_dmap_share_client_requested (mb->bits, SONG_BPM))
dmap_structure_add (mlit, DMAP_CC_ASBT, (gint32) 0);
if (dmap_share_client_requested (mb->bits, SONG_COMMENT))
if (_dmap_share_client_requested (mb->bits, SONG_COMMENT))
dmap_structure_add (mlit, DMAP_CC_ASCM, "");
if (dmap_share_client_requested (mb->bits, SONG_COMPILATION))
if (_dmap_share_client_requested (mb->bits, SONG_COMPILATION))
dmap_structure_add (mlit, DMAP_CC_ASCO, (gchar) FALSE);
if (dmap_share_client_requested (mb->bits, SONG_COMPOSER))
if (_dmap_share_client_requested (mb->bits, SONG_COMPOSER))
dmap_structure_add (mlit, DMAP_CC_ASCP, "");
if (dmap_share_client_requested (mb->bits, SONG_DATE_ADDED)) {
if (_dmap_share_client_requested (mb->bits, SONG_DATE_ADDED)) {
gint32 firstseen;
g_object_get (record, "firstseen", &firstseen, NULL);
dmap_structure_add (mlit, DMAP_CC_ASDA, firstseen);
}
if (dmap_share_client_requested (mb->bits, SONG_DATE_MODIFIED)) {
if (_dmap_share_client_requested (mb->bits, SONG_DATE_MODIFIED)) {
gint32 mtime;
g_object_get (record, "mtime", &mtime, NULL);
dmap_structure_add (mlit, DMAP_CC_ASDM, mtime);
}
if (dmap_share_client_requested (mb->bits, SONG_DISC_COUNT))
if (_dmap_share_client_requested (mb->bits, SONG_DISC_COUNT))
dmap_structure_add (mlit, DMAP_CC_ASDC, (gint32) 0);
if (dmap_share_client_requested (mb->bits, SONG_DISC_NUMBER)) {
if (_dmap_share_client_requested (mb->bits, SONG_DISC_NUMBER)) {
gint32 disc;
g_object_get (record, "disc", &disc, NULL);
dmap_structure_add (mlit, DMAP_CC_ASDN, disc);
}
if (dmap_share_client_requested (mb->bits, SONG_DISABLED))
if (_dmap_share_client_requested (mb->bits, SONG_DISABLED))
dmap_structure_add (mlit, DMAP_CC_ASDB, (gchar) FALSE);
if (dmap_share_client_requested (mb->bits, SONG_EQ_PRESET))
if (_dmap_share_client_requested (mb->bits, SONG_EQ_PRESET))