diff options
Diffstat (limited to 'plugins/vfs_curl/vfs_curl.c')
-rw-r--r-- | plugins/vfs_curl/vfs_curl.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c index 5e7d0060..37ba65e6 100644 --- a/plugins/vfs_curl/vfs_curl.c +++ b/plugins/vfs_curl/vfs_curl.c @@ -202,22 +202,47 @@ http_parse_shoutcast_meta (HTTP_FILE *fp, const char *meta, int size) { title[s] = 0; trace ("got stream title: %s\n", title); if (fp->track) { + int songstarted = 0; char *tit = strstr (title, " - "); + deadbeef->pl_lock (); if (tit) { *tit = 0; tit += 3; - vfs_curl_set_meta (fp->track, "artist", title); - vfs_curl_set_meta (fp->track, "title", tit); + + const char *orig_title = deadbeef->pl_find_meta (fp->track, "title"); + const char *orig_artist = deadbeef->pl_find_meta (fp->track, "artist"); + + if (!orig_title || strcasecmp (orig_title, tit)) { + vfs_curl_set_meta (fp->track, "title", tit); + songstarted = 1; + } + if (!orig_artist || strcasecmp (orig_artist, title)) { + vfs_curl_set_meta (fp->track, "artist", title); + songstarted = 1; + } } else { - vfs_curl_set_meta (fp->track, "title", title); + const char *orig_title = deadbeef->pl_find_meta (fp->track, "title"); + if (!orig_title || strcasecmp (orig_title, tit)) { + vfs_curl_set_meta (fp->track, "title", title); + songstarted = 1; + } } + deadbeef->pl_unlock (); ddb_playlist_t *plt = deadbeef->plt_get_curr (); if (plt) { deadbeef->plt_modified (plt); deadbeef->plt_unref (plt); } deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); + if (songstarted) { + ddb_event_track_t *ev = (ddb_event_track_t *)deadbeef->event_alloc (DB_EV_SONGSTARTED); + ev->track = fp->track; + if (ev->track) { + deadbeef->pl_item_ref (ev->track); + } + deadbeef->event_send ((ddb_event_t *)ev, 0, 0); + } } return 0; } |