/** * Create underlying stream and queue the first play_next_track. * * @param id Name of the stream. * @param pop_url The url to request the next track from. */ Show(IApplication app, String id, String pop_url) { stream = Stream.createInstance(app.getVHost(), app.getName(), id); stream.setRepeat(false); stream.addListener(this); this.pop_url = pop_url; this.id = id; this.app = app; schedule_play_next_track(); }
/** * Request the next track from the trackmanager and play it. When a 404 is returned, delete this * show. On any other error: log it and try again in 0.5s. */ private void play_next_track() { try { last_action = "get next track"; current_track = new JSONObject(get_url(pop_url)); WMSLoggerFactory.getLogger(null).info(current_path() + " on " + id); boolean success = stream.play("mp3:" + current_path(), 0, -1, true); pop_error = false; last_action = "play " + current_path(); if (!success) { last_action = "failed play " + current_path(); schedule_play_next_track(); } } catch (Callback404Exception e) { last_action = "remove show"; Shows.remove_show(app.getName(), id); return; } catch (IOException e) { // streamer offline? WMSLoggerFactory.getLogger(null) .error("streamer unreachable (IOException in get_url) in " + id); WMSLoggerFactory.getLogger(null).error("asdf", e); pop_error = true; wait(500); schedule_play_next_track(); } catch (Exception e) { WMSLoggerFactory.getLogger(null).error("Unexpected exception in " + id, e); pop_error = true; wait(500); schedule_play_next_track(); } }