public void addDidlNodes(DIDLContent didl, JSONArray browse) throws JSONException { for (int i = 0; i < browse.length(); i++) { JSONObject obj = browse.getJSONObject(i); String url = obj.getString("browse"); String label = obj.getString("name"); String thumbnail = obj.optString("image"); String type = obj.optString("type"); Integer subCount = Integer.parseInt(obj.optString("count", "10")); // Hack so we can easily get container label in request for metadata. try { url += "&label=" + URLEncoder.encode(label, "UTF-8"); } catch (UnsupportedEncodingException e) { } // TODO: Use Album/Artist containers where appropriate. Check "type" field. // Container folder = new StorageFolder(url,"0",label,"Me", subCount, storageUsed); DIDLObject.Class containerClass; if (type == null) type = ""; type = type.toLowerCase(); if (type.equals("album")) { containerClass = MusicAlbum.CLASS; } else if (type.equals("artist")) { containerClass = ARTIST_CLASS; } else if (type.equals("genre")) { containerClass = MusicGenre.CLASS; } else { containerClass = CONTAINER_CLASS; } Container folder = new Container(url, "0", label, "System", containerClass, subCount); String playlist = obj.optString("playlink"); if (playlist != null && playlist.length() > 0) { MimeType mimeType = new MimeType("audio", "m3u"); Res res = new Res(); res.setProtocolInfo(new ProtocolInfo(mimeType)); res.setValue(playlist); folder.addResource(res); if (thumbnail != null && thumbnail.length() > 0) { try { URI uri = new URI(thumbnail); ALBUM_ART_URI albumArt = new ALBUM_ART_URI(uri); // TODO: DLNA requires xml attribute: // dlna:profileID="JPEG_TN" for jpeg thumbnails. folder.addProperty(albumArt); } catch (URISyntaxException e) { Log.w(TAG, "Found album art but bad URI", e); } } } didl.addContainer(folder); } }