• # Avec votre langage préféré...

    Posté par . En réponse au journal Écouter la radio. Évalué à -3.

    ... Ça donnerait quoi ?

    Avec vlc plutôt que mpv, de gros doutes sur l'utilisation de dmenu, et à l'arrache

    #!/usr/bin/env node
    if (process.argv.length<3) {
     var path = require('path')
     console.error('Usage: %s %s [nom_radio|num_radio]',
     path.basename(process.argv[0]), path.relative(".", process.argv[1]));
     process.exit(1)
    }
    var radios = {
     wwoz: "http://wwoz-sc.streamguys.com/wwoz-hi.mp3.m3u",
     fip: "http://audio.scdn.arkena.com/11016/fip-midfi128.mp3",
     classique: "http://players.creacast.com/creacast/classique/playlist.pls",
     inter: "http://www.listenlive.eu/franceinter128.m3u",
     nostalgie: "http://www.listenlive.eu/nostalgie_fr.m3u",
     larzac: "http://www.radiolarzac.org:8000/radiolarzac.m3u",
    }
    var argRadio = process.argv[2];
    if (argRadio.match(/^[0-9]+$/)) argRadio = Object.keys(radios)[argRadio]
    if (!radios[argRadio]) {
     console.error('Unknown radio %s\nChoose one of\n%s', process.argv[2], Object.keys(radios))
     process.exit(1)
    }
    var player = 'vlc'
    var dmenu = process.argv[3];
    if (!dmenu) return invokePlayer(player, radios[argRadio])
    var child = require('child_process').spawn('demnu', [], {stdio: 'pipe'})
    Object.keys(radios).forEach(function (k, i) {
     child.stdin.write(i + '\n')
    })
    var selected = null;
    child.stdout.on('data', function (d) {
     selected = d.toString().replace(/^\s*|\s*$/, '')
    })
    child.on('close', function () {
     if (selected!==null) return invokePlayer(player, radios[Object.keys(radios)[selected]])
     console.error('Oh no !...')
    })
    child.on('error', console.error.bind(console))
    function invokePlayer(player, url){
     var args = [];
     (player.match(/mpv/) && url.match(/[.](pls|m3u)$/)) && args.push('-playlist');
     args.push(url)
     var child = require('child_process').spawn(player, args, {stdio: 'inherit'})
     process.on('SIGINT', function () {
     child.kill('SIGINT')
     })
    }

    Je ne suis pas certain de cette partie au sujet de dmenu

     stname=$(for i in ${sta[@]}; do echo $i; done | dmenu) // envoie les options à dmenu ? une par ligne ? bloque jusqu'à la fermeture de dmenu ? sauvegarde la réponse de dmenu dans stname ?
     for ((i=0; i<${#sta[@]}; i++))
     do
     if [ "$stname" = "${sta[$i]}" ]
     then stream=${stau[$i]}
     fi
     done