mirror of
https://github.com/Rafostar/clapper.git
synced 2025-12-25 06:29:13 +01:00
clapper: Ensure redirects for an item are from single source
In cases where there are multiple objects resolving a playlist at once (e.g. player starts playing playlist item that Media Scanner also works on), just ignore parsing results from the other parser. We keep/use parsing results from whichever parser parsed the playlist first.
This commit is contained in:
@@ -54,6 +54,7 @@ struct _ClapperMediaItem
|
||||
/* Whether using title from URI */
|
||||
gboolean title_is_parsed;
|
||||
|
||||
GType redirects_src_type;
|
||||
gchar *redirect_uri;
|
||||
gchar *cache_uri;
|
||||
|
||||
@@ -684,6 +685,8 @@ static inline gboolean
|
||||
clapper_media_item_set_redirect_uri (ClapperMediaItem *self, const gchar *redirect_uri,
|
||||
GstObject *redirect_src)
|
||||
{
|
||||
GType src_type;
|
||||
|
||||
/* Safety checks */
|
||||
if (G_UNLIKELY (!redirect_uri)) {
|
||||
GST_ERROR_OBJECT (self, "Received redirect request without an URI set");
|
||||
@@ -694,6 +697,18 @@ clapper_media_item_set_redirect_uri (ClapperMediaItem *self, const gchar *redire
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Only allow redirects determined by the same source type, otherwise
|
||||
* we would start mixing URIs when multiple sources message them */
|
||||
src_type = G_OBJECT_TYPE (redirect_src);
|
||||
|
||||
if (self->redirects_src_type == 0) {
|
||||
self->redirects_src_type = src_type;
|
||||
} else if (self->redirects_src_type != src_type) {
|
||||
GST_LOG_OBJECT (self, "Ignoring redirection from different source: %s",
|
||||
G_OBJECT_TYPE_NAME (redirect_src));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_set_str (&self->redirect_uri, redirect_uri);
|
||||
GST_DEBUG_OBJECT (self, "Set redirect URI: \"%s\", source: %s",
|
||||
self->redirect_uri, G_OBJECT_TYPE_NAME (redirect_src));
|
||||
|
||||
Reference in New Issue
Block a user