public synchronized InputStream getStream(PlaylistItem playlistItem) { MetadataThread metadataThread = metadataFetchers.get(playlistItem); try { return metadataThread.getPlayingStream(); } catch (NullPointerException e) { return null; } }
public synchronized void remove(PlaylistItem playlistItem) { MetadataThread metadataThread = metadataFetchers.get(playlistItem); if (metadataThread != null) { metadataThread.stopFetching(); try { metadataThread.join(); metadataFetchers.remove(playlistItem); } catch (InterruptedException e) { e.printStackTrace(); System.out.println("Error joining thread for playlist item: " + playlistItem); } } }
public synchronized void add(PlaylistItem playlistItem) { MetadataThread metadataThread = metadataFetchers.get(playlistItem); // only add if it doesn't exist already if (metadataThread == null) { try { // get the headers from the playlistItem url Map<String, List<String>> headers = new HashMap<>(); InputStream inputStream = IMPNetworkUtilities.getHeaders(playlistItem, headers); // work out type of stream from headers StreamType streamType = IMPMetadataUtilities.getStreamType(playlistItem.getInternalURL(), headers); if (streamType == StreamType.Shoutcast) { MetadataThread shoutcastMetadataThread = new ShoutcastMetadataThread( playlistItem, inputStream, Integer.parseInt(headers.get("icy-metaint").get(0)), this); shoutcastMetadataThread.setName(playlistItem.getURL().toString()); metadataFetchers.put(playlistItem, shoutcastMetadataThread); shoutcastMetadataThread.start(); } else if (streamType == StreamType.Live365) { MetadataThread live365MetadataThread = new Live365MetadataThread(playlistItem, inputStream, this); live365MetadataThread.setName(playlistItem.getURL().toString()); metadataFetchers.put(playlistItem, live365MetadataThread); live365MetadataThread.start(); } } catch (IOException e) { e.printStackTrace(); } } }