Commit 2c1dfb2b authored by W. Michael Petullo's avatar W. Michael Petullo
Browse files

Back out Alexandre's addition of itemid property from DAAPRecord



Alexandre's code worked, but this is a little less intrusive. The real
answer might involve some deeper work later.
Signed-off-by: W. Michael Petullo's avatarW. Michael Petullo <mike@flyn.org>
parent d2ef353f
20 August 2010 W. Michael Petullo <mike@flyn.org>
* Back out Alexandre's addition of itemid property from
DAAPRecord. The itemid is the DMAPDb ID.
20 August 2010 Alexandre Rosenfeld <alexandre.rosenfeld@gmail.com>
* Apply Alexandre Rosenfeld's DACP patch from Google Summer of
......
......@@ -30,17 +30,6 @@ daap_record_init (DAAPRecordInterface *iface)
daap_record_init_count++;
if (! is_initialized) {
g_object_interface_install_property (iface,
g_param_spec_int ("itemid",
"Item ID",
"Item ID",
0,
G_MAXINT,
0,
G_PARAM_READWRITE));
g_object_interface_install_property (iface,
g_param_spec_string ("location",
"URI pointing to song data",
......@@ -248,14 +237,22 @@ daap_record_read (DAAPRecord *record, GError **err)
}
gint
daap_record_cmp_by_album (DAAPRecord *a, DAAPRecord *b)
daap_record_cmp_by_album (gpointer a, gpointer b, DMAPDb *db)
{
DAAPRecord *record_a, *record_b;
gchar *album_a, *album_b;
gchar *sort_album_a, *sort_album_b;
gint track_a, track_b;
gint ret;
g_object_get (a, "songalbum", &album_a, "sort-album", &sort_album_a, "track", &track_a, NULL);
g_object_get (b, "songalbum", &album_b, "sort-album", &sort_album_b, "track", &track_b, NULL);
record_a = DAAP_RECORD (dmap_db_lookup_by_id (db, GPOINTER_TO_UINT(a)));
record_b = DAAP_RECORD (dmap_db_lookup_by_id (db, GPOINTER_TO_UINT(b)));
g_assert (record_a);
g_assert (record_b);
g_object_get (record_a, "songalbum", &album_a, "sort-album", &sort_album_a, "track", &track_a, NULL);
g_object_get (record_b, "songalbum", &album_b, "sort-album", &sort_album_b, "track", &track_b, NULL);
if (sort_album_a && sort_album_b)
ret = g_strcmp0 (sort_album_a, sort_album_b);
else
......@@ -266,9 +263,11 @@ daap_record_cmp_by_album (DAAPRecord *a, DAAPRecord *b)
else
ret = (track_a == track_b) ? 0 : 1;
}
g_object_unref (record_a);
g_object_unref (record_b);
g_free (album_a);
g_free (album_b);
g_free (sort_album_a);
g_free (sort_album_b);
return ret;
}
\ No newline at end of file
}
......@@ -25,6 +25,7 @@
#include <gio/gio.h>
#include <libdmapsharing/dmap-record.h>
#include <libdmapsharing/dmap-db.h>
G_BEGIN_DECLS
......@@ -95,12 +96,14 @@ GInputStream *daap_record_read (DAAPRecord *record, GError **err);
/**
* daap_record_cmp_by_album:
* @a: first DAAPRecord.
* @b: second DAAPRecord.
* @a: first ID.
* @b: second ID.
* @db: A DMAPDb for which a and b are valid ID's.
*
* Compares two records according to album. Suitable to sort lists of albums.
* Compares the two records associated with the provided keys according
* to album. Suitable to sort lists of albums.
*/
gint daap_record_cmp_by_album (DAAPRecord *a, DAAPRecord *b);
gint daap_record_cmp_by_album (gpointer a, gpointer b, DMAPDb *db);
#endif /* __DAAP_RECORD_H */
......
......@@ -540,27 +540,18 @@ add_entry_to_mlcl (gpointer id,
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)) {
gint itemid;
g_object_get (record, "itemid", &itemid, NULL);
dmap_structure_add (mlit, DMAP_CC_MIID, (guint) itemid);
}
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)) {
gchar *title;
g_object_get (record, "title", &title, NULL);
dmap_structure_add (mlit, DMAP_CC_MINM, title);
g_free (title);
}
if (_dmap_share_client_requested (mb->bits, PERSISTENT_ID)) {
gint itemid;
g_object_get (record, "itemid", &itemid, NULL);
dmap_structure_add (mlit, DMAP_CC_MPER, (guint) itemid);
}
if (_dmap_share_client_requested (mb->bits, CONTAINER_ITEM_ID)) {
gint itemid;
g_object_get (record, "itemid", &itemid, NULL);
dmap_structure_add (mlit, DMAP_CC_MCTI, (guint) itemid);
}
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))
dmap_structure_add (mlit, DMAP_CC_MCTI, GPOINTER_TO_UINT (id));
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?
......
......@@ -1571,10 +1571,9 @@ _dmap_share_databases (DMAPShare *share,
GSList *filter_def;
filter_def = _dmap_share_build_filter (record_query);
records = dmap_db_apply_filter (DMAP_DB (share->priv->db), filter_def);
g_debug ("Found %d records", g_hash_table_size (records));
num_songs = g_hash_table_size (records);
g_debug ("Found %d records", num_songs);
dmap_share_free_filter (filter_def);
g_hash_table_destroy (records);
} else {
num_songs = dmap_db_count (share->priv->db);
}
......@@ -1662,10 +1661,8 @@ _dmap_share_databases (DMAPShare *share,
struct MLCL_Bits mb = {NULL,0};
gint pl_id;
gchar *record_query;
gchar *sort_by;
GSList *filter_def;
GHashTable *records;
GList *sorted_records;
map = DMAP_SHARE_GET_CLASS (share)->get_meta_data_map (share);
mb.bits = _dmap_share_parse_meta (query, map);
......@@ -1675,32 +1672,33 @@ _dmap_share_databases (DMAPShare *share,
dmap_structure_add (apso, DMAP_CC_MUTY, 0);
if (g_ascii_strcasecmp ("/1/items", rest_of_path + 13) == 0) {
GList *id;
gchar *sort_by;
GList *keys;
record_query = g_hash_table_lookup (query, "query");
filter_def = _dmap_share_build_filter (record_query);
records = dmap_db_apply_filter (DMAP_DB (share->priv->db), filter_def);
g_debug ("Found %d records", g_hash_table_size (records));
gint32 num_songs = g_hash_table_size (records);
g_debug ("Found %d records", num_songs);
dmap_share_free_filter (filter_def);
dmap_structure_add (apso, DMAP_CC_MTCO, (gint32) num_songs);
dmap_structure_add (apso, DMAP_CC_MRCO, (gint32) num_songs);
mb.mlcl = dmap_structure_add (apso, DMAP_CC_MLCL);
sorted_records = g_hash_table_get_values (records);
sort_by = g_hash_table_lookup (query, "sort");
keys = g_hash_table_get_keys (records);
if (g_strcmp0 (sort_by, "album") == 0) {
sorted_records = g_list_sort (sorted_records, (GCompareFunc) daap_record_cmp_by_album);
keys = g_list_sort_with_data (keys, (GCompareDataFunc) daap_record_cmp_by_album, records);
} else if (sort_by != NULL) {
g_warning ("Unknown sort column: %s", sort_by);
}
GList *record;
for (record = sorted_records; record; record = record->next) {
(*(DMAP_SHARE_GET_CLASS (share)->add_entry_to_mlcl)) (0, record->data, &mb);
for (id = keys; id; id = id->next) {
(*(DMAP_SHARE_GET_CLASS (share)->add_entry_to_mlcl)) (id->data, g_hash_table_lookup(records, id->data), &mb);
}
//g_hash_table_foreach (records, (GHFunc) DMAP_SHARE_GET_CLASS (share)->add_entry_to_mlcl, &mb);
g_list_free (sorted_records);
g_list_free (keys);
g_hash_table_destroy (records);
} else {
pl_id = atoi (rest_of_path + 14);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment