UNPKG

termice

Version:

Simple terminal icecast player

59 lines (58 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.search_xiph = void 0; const util_1 = require("./util"); function search_xiph(search) { return new Promise(resolve => { const options = { method: 'GET', url: 'http://dir.xiph.org/search?q=' + search.split(' ').join('+') }; require('request')(options, (err, _, body) => { if (err) resolve([(0, util_1.error_entry)(err, 'Icecast')]); else resolve(parse_xiph(body)); }); }); } exports.search_xiph = search_xiph; function parse_xiph(body) { const JSDOM = require('jsdom').JSDOM; const host = 'http://dir.xiph.org'; let document; try { document = new JSDOM(body).window.document; } catch (err) { return [(0, util_1.error_entry)('Couldn\'t parse XIPH', 'Icecast')]; } const rows = document.querySelectorAll('.card'); if (rows === null) return []; else return Array.from(rows).map((entry) => { const sel_name_hp = entry.querySelector('.card-title'); const sel_playing = entry.querySelector('.card-subtitle'); const sel_description = entry.querySelector('.card-text'); const sel_url = entry.querySelector('.card-footer > div :last-child'); const sel_listeners = entry.querySelector('.card-footer'); return { name: sel_name_hp ? sel_name_hp.innerHTML : 'Null', homepage: 'Null', listeners: sel_listeners ? sel_listeners.textContent.trim().split(' ')[0] : 'Null', description: sel_description ? sel_description.innerHTML.trim() : '', playing: sel_playing ? sel_playing.innerHTML.substr(8) : '', url: sel_url ? host + sel_url.href : 'Null', bitrate: 'Null', src: 'Icecast', is_playlist: true, entry: entry.innerHTML }; }).sort((entry1, entry2) => entry2.listeners - entry1.listeners); }