[vlc-commits] [Git][videolan/vlc][master] 2 commits: service discovery/radio: sort by votes in descending order instead of random

Felix Paul Kühne (@fkuehne) gitlab at videolan.org
Tue Jul 14 14:14:23 UTC 2026



Felix Paul Kühne pushed to branch master at VideoLAN / VLC


Commits:
93500a4a by Felix Paul Kühne at 2026-07-14T15:46:50+02:00
service discovery/radio: sort by votes in descending order instead of random

- - - - -
373c7ec9 by Felix Paul Kühne at 2026-07-14T15:46:50+02:00
service discovery/radio: expose stations as streams and more metadata

Previously, streams were exposed as files. Per station, we expose
home page, genre, language now plus codec and bitrate as extra meta.

- - - - -


1 changed file:

- modules/services_discovery/radio.c


Changes:

=====================================
modules/services_discovery/radio.c
=====================================
@@ -390,6 +390,22 @@ static void Close(vlc_object_t *p_this)
     free(p_sys);
 }
 
+static void SetMetaFromField(input_item_t *item, csv_parser *parser, int index, vlc_meta_type_t type)
+{
+    if (index < 0 || strlen(parser->fields[index]) == 0)
+        return;
+
+    input_item_SetMeta(item, type, parser->fields[index]);
+}
+
+static void SetMetaExtraFromField(input_item_t *item, csv_parser *parser, int index, const char *name)
+{
+    if (index < 0 || strlen(parser->fields[index]) == 0)
+        return;
+
+    input_item_SetMetaExtra(item, name, parser->fields[index]);
+}
+
 static int ReadDirectory(stream_t *p_access, input_item_node_t *p_node)
 {
     access_sys_t *p_sys = p_access->p_sys;
@@ -406,7 +422,7 @@ static int ReadDirectory(stream_t *p_access, input_item_node_t *p_node)
     }
 
     char *stations_endpoint;
-    if (asprintf(&stations_endpoint, "%scsv/stations/bycountrycodeexact/%s?hidebroken=true&order=random",
+    if (asprintf(&stations_endpoint, "%scsv/stations/bycountrycodeexact/%s?hidebroken=true&order=votes&reverse=true",
                  p_sys->base_url, p_access->psz_location) < 0)
     {
         return VLC_ENOMEM;
@@ -423,6 +439,11 @@ static int ReadDirectory(stream_t *p_access, input_item_node_t *p_node)
     int name_index = csv_parser_get_field_index(parser, "name");
     int url_index = csv_parser_get_field_index(parser, "url");
     int favicon_index = csv_parser_get_field_index(parser, "favicon");
+    int homepage_index = csv_parser_get_field_index(parser, "homepage");
+    int tags_index = csv_parser_get_field_index(parser, "tags");
+    int language_index = csv_parser_get_field_index(parser, "language");
+    int codec_index = csv_parser_get_field_index(parser, "codec");
+    int bitrate_index = csv_parser_get_field_index(parser, "bitrate");
     if (name_index < 0 || url_index < 0)
     {
         msg_Err(p_access, "Missing required fields in station data");
@@ -445,16 +466,22 @@ static int ReadDirectory(stream_t *p_access, input_item_node_t *p_node)
             continue;
         }
 
-        input_item_t *station_item = input_item_New(parser->fields[url_index], parser->fields[name_index]);
+        input_item_t *station_item = input_item_NewStream(parser->fields[url_index],
+                                                         parser->fields[name_index],
+                                                         INPUT_DURATION_INDEFINITE);
         if (!station_item)
         {
             continue;
         }
 
-        if (favicon_index >= 0 && strlen(parser->fields[favicon_index]) > 0)
-        {
-            input_item_SetMeta(station_item, vlc_meta_ArtworkURL, parser->fields[favicon_index]);
-        }
+        SetMetaFromField(station_item, parser, favicon_index, vlc_meta_ArtworkURL);
+        SetMetaFromField(station_item, parser, homepage_index, vlc_meta_URL);
+        SetMetaFromField(station_item, parser, tags_index, vlc_meta_Genre);
+        SetMetaFromField(station_item, parser, language_index, vlc_meta_Language);
+
+        SetMetaExtraFromField(station_item, parser, codec_index, "Codec");
+        SetMetaExtraFromField(station_item, parser, bitrate_index, "Bitrate (kb/s)");
+
         input_item_node_AppendItem(p_node, station_item);
         input_item_Release(station_item);
     }



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/627235c90de74ae4948bd2119ca48323ce5e5d58...373c7ec97e5c75b6e26f8141b405df20fa27506b

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/627235c90de74ae4948bd2119ca48323ce5e5d58...373c7ec97e5c75b6e26f8141b405df20fa27506b
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help




More information about the vlc-commits mailing list