Skip to content

Commit

Permalink
Use the term metadata hub now -- for any stored metadata, such as mig…
Browse files Browse the repository at this point in the history
…ht be used by dbus
  • Loading branch information
mikebrady committed Dec 31, 2017
1 parent b67718a commit 0801290
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 82 deletions.
2 changes: 1 addition & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ dbus-interface.c: org.gnome.ShairportSync.xml
endif

if USE_DBUS_CORE_AND_DACP
shairport_sync_SOURCES += dacp.c metadata.c tinyhttp/chunk.c tinyhttp/header.c tinyhttp/http.c
shairport_sync_SOURCES += dacp.c metadata_hub.c tinyhttp/chunk.c tinyhttp/header.c tinyhttp/http.c
endif

if USE_MPRIS
Expand Down
144 changes: 72 additions & 72 deletions dacp.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
#include <time.h>
#include <unistd.h>

#include "metadata.h"
#include "metadata_hub.h"
#include "tinyhttp/http.h"

typedef struct {
Expand Down Expand Up @@ -300,7 +300,7 @@ void *dacp_monitor_thread_code(void *na) {
char *sp = response;
if (le >= 8) {
// here, we know that we are receiving playerstatusupdates, so set a flag
metadata.playerstatusupdates_are_received = 1;
metadata_store.playerstatusupdates_are_received = 1;
// here start looking for the contents of the status update
if (dacp_tlv_crawl(&sp, &item_size) == 'cmst') { // status
sp -= item_size; // drop down into the array -- don't skip over it
Expand Down Expand Up @@ -333,27 +333,27 @@ void *dacp_monitor_thread_code(void *na) {
r = *(unsigned char *)(t);
switch (r) {
case 2:
if (metadata.play_status != PS_STOPPED) {
metadata.play_status = PS_STOPPED;
metadata.play_status_changed = 1;
if (metadata_store.play_status != PS_STOPPED) {
metadata_store.play_status = PS_STOPPED;
metadata_store.play_status_changed = 1;
debug(1, "Play status set to \"stopped\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
case 3:
if (metadata.play_status != PS_PAUSED) {
metadata.play_status = PS_PAUSED;
metadata.play_status_changed = 1;
if (metadata_store.play_status != PS_PAUSED) {
metadata_store.play_status = PS_PAUSED;
metadata_store.play_status_changed = 1;
debug(1, "Play status set to \"paused\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
case 4:
if (metadata.play_status != PS_PLAYING) {
metadata.play_status = PS_PLAYING;
metadata.play_status_changed = 1;
if (metadata_store.play_status != PS_PLAYING) {
metadata_store.play_status = PS_PLAYING;
metadata_store.play_status_changed = 1;
debug(1, "Play status set to \"playing\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
default:
Expand All @@ -366,19 +366,19 @@ void *dacp_monitor_thread_code(void *na) {
r = *(unsigned char *)(t);
switch (r) {
case 0:
if (metadata.shuffle_status != SS_OFF) {
metadata.shuffle_status = SS_OFF;
metadata.shuffle_status_changed = 1;
if (metadata_store.shuffle_status != SS_OFF) {
metadata_store.shuffle_status = SS_OFF;
metadata_store.shuffle_status_changed = 1;
debug(1, "Shuffle status set to \"off\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
case 1:
if (metadata.shuffle_status != SS_ON) {
metadata.shuffle_status = SS_ON;
metadata.shuffle_status_changed = 1;
if (metadata_store.shuffle_status != SS_ON) {
metadata_store.shuffle_status = SS_ON;
metadata_store.shuffle_status_changed = 1;
debug(1, "Shuffle status set to \"on\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
default:
Expand All @@ -391,27 +391,27 @@ void *dacp_monitor_thread_code(void *na) {
r = *(unsigned char *)(t);
switch (r) {
case 0:
if (metadata.repeat_status != RS_NONE) {
metadata.repeat_status = RS_NONE;
metadata.repeat_status_changed = 1;
if (metadata_store.repeat_status != RS_NONE) {
metadata_store.repeat_status = RS_NONE;
metadata_store.repeat_status_changed = 1;
debug(1, "Repeat status set to \"none\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
case 1:
if (metadata.repeat_status != RS_SINGLE) {
metadata.repeat_status = RS_SINGLE;
metadata.repeat_status_changed = 1;
if (metadata_store.repeat_status != RS_SINGLE) {
metadata_store.repeat_status = RS_SINGLE;
metadata_store.repeat_status_changed = 1;
debug(1, "Repeat status set to \"single\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
case 2:
if (metadata.repeat_status != RS_ALL) {
metadata.repeat_status = RS_ALL;
metadata.repeat_status_changed = 1;
if (metadata_store.repeat_status != RS_ALL) {
metadata_store.repeat_status = RS_ALL;
metadata_store.repeat_status_changed = 1;
debug(1, "Repeat status set to \"all\".");
metadata.changed = 1;
metadata_store.changed = 1;
}
break;
default:
Expand All @@ -421,68 +421,68 @@ void *dacp_monitor_thread_code(void *na) {
break;
case 'cann': // track name
t = sp - item_size;
if ((metadata.track_name == NULL) ||
(strncmp(metadata.track_name, t, item_size) != 0)) {
if (metadata.track_name)
free(metadata.track_name);
metadata.track_name = strndup(t, item_size);
debug(1, "Track name set to: \"%s\"", metadata.track_name);
metadata.track_name_changed = 1;
metadata.changed = 1;
if ((metadata_store.track_name == NULL) ||
(strncmp(metadata_store.track_name, t, item_size) != 0)) {
if (metadata_store.track_name)
free(metadata_store.track_name);
metadata_store.track_name = strndup(t, item_size);
debug(1, "Track name set to: \"%s\"", metadata_store.track_name);
metadata_store.track_name_changed = 1;
metadata_store.changed = 1;
}
break;
case 'cana': // artist name
t = sp - item_size;
if ((metadata.artist_name == NULL) ||
(strncmp(metadata.artist_name, t, item_size) != 0)) {
if (metadata.artist_name)
free(metadata.artist_name);
metadata.artist_name = strndup(t, item_size);
debug(1, "Artist name set to: \"%s\"", metadata.artist_name);
metadata.artist_name_changed = 1;
metadata.changed = 1;
if ((metadata_store.artist_name == NULL) ||
(strncmp(metadata_store.artist_name, t, item_size) != 0)) {
if (metadata_store.artist_name)
free(metadata_store.artist_name);
metadata_store.artist_name = strndup(t, item_size);
debug(1, "Artist name set to: \"%s\"", metadata_store.artist_name);
metadata_store.artist_name_changed = 1;
metadata_store.changed = 1;
}
break;
case 'canl': // album name
t = sp - item_size;
if ((metadata.album_name == NULL) ||
(strncmp(metadata.album_name, t, item_size) != 0)) {
if (metadata.album_name)
free(metadata.album_name);
metadata.album_name = strndup(t, item_size);
debug(1, "Album name set to: \"%s\"", metadata.album_name);
metadata.album_name_changed = 1;
metadata.changed = 1;
if ((metadata_store.album_name == NULL) ||
(strncmp(metadata_store.album_name, t, item_size) != 0)) {
if (metadata_store.album_name)
free(metadata_store.album_name);
metadata_store.album_name = strndup(t, item_size);
debug(1, "Album name set to: \"%s\"", metadata_store.album_name);
metadata_store.album_name_changed = 1;
metadata_store.changed = 1;
}
break;
case 'cang': // genre
t = sp - item_size;
if ((metadata.genre == NULL) || (strncmp(metadata.genre, t, item_size) != 0)) {
if (metadata.genre)
free(metadata.genre);
metadata.genre = strndup(t, item_size);
debug(1, "Genre set to: \"%s\"", metadata.genre);
metadata.genre_changed = 1;
metadata.changed = 1;
if ((metadata_store.genre == NULL) || (strncmp(metadata_store.genre, t, item_size) != 0)) {
if (metadata_store.genre)
free(metadata_store.genre);
metadata_store.genre = strndup(t, item_size);
debug(1, "Genre set to: \"%s\"", metadata_store.genre);
metadata_store.genre_changed = 1;
metadata_store.changed = 1;
}
break;
case 'canp': // nowplaying 4 ids: dbid, plid, playlistItem, itemid (from mellowware --
// see reference above)
t = sp - item_size;
if (memcmp(metadata.item_composite_id, t, sizeof(metadata.item_composite_id)) != 0) {
memcpy(metadata.item_composite_id, t, sizeof(metadata.item_composite_id));
if (memcmp(metadata_store.item_composite_id, t, sizeof(metadata_store.item_composite_id)) != 0) {
memcpy(metadata_store.item_composite_id, t, sizeof(metadata_store.item_composite_id));

char st[33];
char *pt = st;
int it;
for (it = 0; it < 16; it++) {
sprintf(pt, "%02X", metadata.item_composite_id[it]);
sprintf(pt, "%02X", metadata_store.item_composite_id[it]);
pt += 2;
}
*pt = 0;
debug(1, "Item composite ID set to 0x%s.", st);
metadata.item_id_changed = 1;
metadata.changed = 1;
metadata_store.item_id_changed = 1;
metadata_store.changed = 1;
}
break;
/*
Expand Down Expand Up @@ -551,26 +551,26 @@ void *dacp_monitor_thread_code(void *na) {
free(response);
response = NULL;
};
/*
strcpy(command,"nowplayingartwork?mw=320&mh=320");
debug(1,"Command: \"%s\", result is %d",command, dacp_send_command(command, &response, &le));
if (response) {
free(response);
response = NULL;
}
/*
strcpy(command,"getproperty?properties=dmcp.volume");
debug(1,"Command: \"%s\", result is %d",command, dacp_send_command(command, &response, &le));
if (response) {
free(response);
response = NULL;
}
*/
strcpy(command,"setproperty?dmcp.volume=100.000000");
debug(1,"Command: \"%s\", result is %d",command, dacp_send_command(command, &response, &le));
if (response) {
free(response);
response = NULL;
}
*/
sleep(2);
}
debug(1, "DACP monitor thread exiting.");
Expand Down
12 changes: 8 additions & 4 deletions metadata.c → metadata_hub.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
/*
* Metadata store and access methods.
* Metadata hub and access methods.
* Basically, if you need to store metadata
* (e.g. for use with the dbus interfaces),
* then you need a metadata hub,
* where everything is stored
* This file is part of Shairport Sync.
* Copyright (c) Mike Brady 2017
* All rights reserved.
Expand Down Expand Up @@ -28,9 +32,9 @@
#include <string.h>

#include "dacp.h"
#include "metadata.h"
#include "metadata_hub.h"

void metadata_bundle_init(void) {
void metadata_hub_init(void) {
debug(1, "Metadata bundle initialisation.");
memset(&metadata, 0, sizeof(metadata));
memset(&metadata_store, 0, sizeof(metadata_store));
}
4 changes: 2 additions & 2 deletions metadata.h → metadata_hub.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@ typedef struct metadata_bundle {

} metadata_bundle;

struct metadata_bundle metadata;
struct metadata_bundle metadata_store;

void metadata_bundle_init(void);
void metadata_hub_init(void);
1 change: 1 addition & 0 deletions rtsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1257,6 +1257,7 @@ void *metadata_thread_function(void *ignore) {
pc_queue_get_item(&metadata_queue, &pack);
if (config.metadata_enabled)
metadata_process(pack.type, pack.code, pack.data, pack.length);

if (pack.carrier)
msg_free(pack.carrier); // release the message
else if (pack.data)
Expand Down
6 changes: 3 additions & 3 deletions shairport.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@

#if defined(HAVE_DBUS) || defined(HAVE_MPRIS)
#include "dacp.h"
#include "metadata.h"
#include "metadata_hub.h"
#endif

#ifdef HAVE_DBUS
Expand Down Expand Up @@ -1542,8 +1542,8 @@ int main(int argc, char **argv) {
#endif

#if defined(HAVE_DBUS) || defined(HAVE_MPRIS)
debug(1, "Initialising metadata bundle");
metadata_bundle_init();
debug(1, "Initialising metadata hub");
metadata_hub_init();
#endif

#if defined(HAVE_DBUS) || defined(HAVE_MPRIS)
Expand Down

0 comments on commit 0801290

Please sign in to comment.