static void databases_items_xxx (DMAPShare * share, SoupServer * server, SoupMessage * msg, const char *path, GHashTable * query, SoupClientContext * context) { DMAPDb *db; const gchar *rest_of_path; const gchar *id_str; guint id; guint64 filesize; DPAPRecord *record; rest_of_path = strchr (path + 1, '/'); id_str = rest_of_path + 9; id = strtoul (id_str, NULL, 10); g_object_get (share, "db", &db, NULL); record = DPAP_RECORD (dmap_db_lookup_by_id (db, id)); g_object_get (record, "large-filesize", &filesize, NULL); DMAP_SHARE_GET_CLASS (share)->message_add_standard_headers (share, msg); soup_message_set_status (msg, SOUP_STATUS_OK); send_chunked_file (server, msg, record, filesize); g_object_unref (record); }
static void databases_items_xxx (DMAPShare * share, SoupServer * server, SoupMessage * msg, const char *path, GHashTable * query, SoupClientContext * context) { DMAPDb *db; const gchar *transcode_mimetype; const gchar *rest_of_path; const gchar *id_str; guint id; const gchar *range_header; guint64 filesize; guint64 offset = 0; DAAPRecord *record; rest_of_path = strchr (path + 1, '/'); id_str = rest_of_path + 9; id = strtoul (id_str, NULL, 10); g_object_get (share, "db", &db, NULL); record = DAAP_RECORD (dmap_db_lookup_by_id (db, id)); g_object_get (record, "filesize", &filesize, NULL); DMAP_SHARE_GET_CLASS (share)->message_add_standard_headers (share, msg); soup_message_headers_append (msg->response_headers, "Accept-Ranges", "bytes"); range_header = soup_message_headers_get_one (msg->request_headers, "Range"); if (range_header) { const gchar *s; gchar *content_range; s = range_header + 6; /* bytes= */ offset = atoll (s); content_range = g_strdup_printf ("bytes %" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT, offset, filesize, filesize); soup_message_headers_append (msg->response_headers, "Content-Range", content_range); g_debug ("Content range is %s.", content_range); g_free (content_range); soup_message_set_status (msg, SOUP_STATUS_PARTIAL_CONTENT); } else { soup_message_set_status (msg, SOUP_STATUS_OK); } g_object_get (share, "transcode-mimetype", &transcode_mimetype, NULL); send_chunked_file (server, msg, record, filesize, offset, transcode_mimetype); g_object_unref (record); }
gint 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; 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 ret = g_strcmp0 (album_a, album_b); if (ret == 0) { if (track_a < track_b) ret = -1; 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; }