Internet radio browser GUI for music/video streams from various directory services.

⌈⌋ branch:  streamtuner2


Artifact [31c60c9ce1]

Artifact 31c60c9ce145a5cc98d9c088f0762d583fe7ac8f:

Wiki page [XDND types] by mario on 2015-04-27 22:57:55.
D 2015-04-27T22:57:55.313
L XDND\stypes
N text/x-markdown
P a03b51e56c7331ddc706deeb84314d3c27b3fe9c
U mario
W 3218
There's drag and drop support in streamtuner2 [since 2.1.7](technote/e469da47ac9778f590c46d52feb17e11787848e0), primarily meant for exporting individual stations into .XSPF or .PLS files, or dragging them into audio players.

There is also support for proper XDND payloads. However most BSD/Linux desktop applications support little more than `STRING` or `text/uri-list` file dragging.  There's no standardization in or beyond that. Which is because nobody bothers to document anything. So as exception to the rule:


| drag target MIME type | info id | content / payload | actions |
---------------------------------------------------------
| <kbd>audio/x-mpegurl</kbd> | 20 | `#EXTM3U`<br>`#EXTINF;-1,Title`<br>`http://example.org/stream.mp3`<br>… | DEFAULT+COPY |
| <kbd>application/x-scpls</kbd> | 21 | `[Playlist]`<br>`File1=http://example.org/stream.mp3`<br>`Title1=Radio`<br>… | DEFAULT+COPY |
| <kbd>application/xspf+xml</kbd> | 22 | `<playlist xmlns=…>`<br>`<track><title>Radio</title>`<br>`<location>http://example.org/stream.mp3</location>`<br>… | DEFAULT+COPY |
| <kbd>application/smil</kbd> <br> <kbd>text/html</kbd> | 23 | `<seq>`<br>`<audio src="http://example.org/stream.mp3">`<br>… | DEFAULT+COPY |
| <kbd>application/jspf+json</kbd> | 25 | `{ "playlist": {`<br>`"track":{`<br>`"location": "http://example.org/stream.mp3"`<br>… | DEFAULT+COPY |
| <kbd>application/x-desktop</kbd> | 26 | `[Desktop Entry]`<br>`Type=Link`<br>`URL=http://example.org/stream.mp3`<br>`Title=Radio`<br>… | DEFAULT+COPY |
| <kbd>text/url</kbd><br><kbd>message/external-body</kbd> | 27 | `[InternetShortcut]`<br>`URL=http://example.org/stream.mp3` | DEFAULT+COPY |
| <kbd>url/direct</kbd><br><kbd>text/iri-list</kbd> | 15 | `http://example.org/stream.mp3` | DEFAULT+COPY |
| <kbd>FILE_NAME</kbd> | 3 | `/tmp/streamtuner2/RadioStation.pls` | DEFAULT+COPY |
| <kbd>text/uri-list</kbd> | 4 | `file:///tmp/streamtuner2/RadioStation.xspf` | DEFAULT+COPY |
| <kbd>TEXT</kbd><br> <kbd>STRING</kbd><br> <kbd>UTF8_STRING</kbd><br> <kbd>text/plain</kbd> | 5 | `http://example.org:8309/listen.pls`<br>`# Title: Radio`<br>`# Description: Current song etc..` | DEFAULT+COPY |
| <kbd>json/vnd.streamtuner2.station</kbd> <br>*(internal JSON format)* | 51 | `[`<br>&nbsp;`{`<br>&nbsp;&nbsp;`"url": "http://example.org:8429/.ogg",`<br>&nbsp;&nbsp;`"title": "Radio station name"`<br>&nbsp;`},`<br>… | SAMEAPP+ACTIONMOVE |

<style>
 .content table td { border-bottom: 3px dashed #ddd; }
 .content table td { font-size: 80%; }
</style>
<small>

 - The example payloads are abstracted here.
 - The info ids are just Gtk-internal.
 - Ordering doesn't reflect priority handling.

</small>

As said, only <kbd>text/uri-list</kbd> is used in practice.  It doesn't allow actual streaming URLs being transferred. Instead streamtuner2 has to create temporary export files. And since this dumb approach doesn't allow any content-negotation, a preconfigured default playlist format will be used for temp files. (Defaults to XSPF for crashing Rhythmbox.)

Alternatively there's <kbd>text/iri-list</kbd> now (yes, why not go with the century?) and <kbd>url/direct</kbd> to get a direct streaming URL/IRL.


Z 0bc446c68da3158808c688a1af5d3128