package org.schabi.newpipe.extractor.playlist; import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage; import org.schabi.newpipe.extractor.ListInfo; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.Page; import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.utils.ExtractorHelper; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class PlaylistInfo extends ListInfo { private PlaylistInfo(int serviceId, ListLinkHandler linkHandler, String name) throws ParsingException { super(serviceId, linkHandler, name); } public static PlaylistInfo getInfo(String url) throws IOException, ExtractionException { return getInfo(NewPipe.getServiceByUrl(url), url); } public static PlaylistInfo getInfo(StreamingService service, String url) throws IOException, ExtractionException { PlaylistExtractor extractor = service.getPlaylistExtractor(url); extractor.fetchPage(); return getInfo(extractor); } public static InfoItemsPage getMoreItems(StreamingService service, String url, Page page) throws IOException, ExtractionException { return service.getPlaylistExtractor(url).getPage(page); } /** * Get PlaylistInfo from PlaylistExtractor * * @param extractor an extractor where fetchPage() was already got called on. */ public static PlaylistInfo getInfo(PlaylistExtractor extractor) throws ExtractionException { final PlaylistInfo info = new PlaylistInfo( extractor.getServiceId(), extractor.getLinkHandler(), extractor.getName()); // collect uploader extraction failures until we are sure this is not // just a playlist without an uploader List uploaderParsingErrors = new ArrayList(3); try { info.setOriginalUrl(extractor.getOriginalUrl()); } catch (Exception e) { info.addError(e); } try { info.setStreamCount(extractor.getStreamCount()); } catch (Exception e) { info.addError(e); } try { info.setThumbnailUrl(extractor.getThumbnailUrl()); } catch (Exception e) { info.addError(e); } try { info.setUploaderUrl(extractor.getUploaderUrl()); } catch (Exception e) { info.setUploaderUrl(""); uploaderParsingErrors.add(e); } try { info.setUploaderName(extractor.getUploaderName()); } catch (Exception e) { info.setUploaderName(""); uploaderParsingErrors.add(e); } try { info.setUploaderAvatarUrl(extractor.getUploaderAvatarUrl()); } catch (Exception e) { info.setUploaderAvatarUrl(""); uploaderParsingErrors.add(e); } try { info.setSubChannelUrl(extractor.getSubChannelUrl()); } catch (Exception e) { uploaderParsingErrors.add(e); } try { info.setSubChannelName(extractor.getSubChannelName()); } catch (Exception e) { uploaderParsingErrors.add(e); } try { info.setSubChannelAvatarUrl(extractor.getSubChannelAvatarUrl()); } catch (Exception e) { uploaderParsingErrors.add(e); } try { info.setBannerUrl(extractor.getBannerUrl()); } catch (Exception e) { info.addError(e); } // do not fail if everything but the uploader infos could be collected if (uploaderParsingErrors.size() > 0 && (!info.getErrors().isEmpty() || uploaderParsingErrors.size() < 3)) { info.addAllErrors(uploaderParsingErrors); } final InfoItemsPage itemsPage = ExtractorHelper.getItemsPageOrLogError(info, extractor); info.setRelatedItems(itemsPage.getItems()); info.setNextPage(itemsPage.getNextPage()); return info; } private String thumbnailUrl; private String bannerUrl; private String uploaderUrl; private String uploaderName; private String uploaderAvatarUrl; private String subChannelUrl; private String subChannelName; private String subChannelAvatarUrl; private long streamCount = 0; public String getThumbnailUrl() { return thumbnailUrl; } public void setThumbnailUrl(String thumbnailUrl) { this.thumbnailUrl = thumbnailUrl; } public String getBannerUrl() { return bannerUrl; } public void setBannerUrl(String bannerUrl) { this.bannerUrl = bannerUrl; } public String getUploaderUrl() { return uploaderUrl; } public void setUploaderUrl(String uploaderUrl) { this.uploaderUrl = uploaderUrl; } public String getUploaderName() { return uploaderName; } public void setUploaderName(String uploaderName) { this.uploaderName = uploaderName; } public String getUploaderAvatarUrl() { return uploaderAvatarUrl; } public void setUploaderAvatarUrl(String uploaderAvatarUrl) { this.uploaderAvatarUrl = uploaderAvatarUrl; } public String getSubChannelUrl() { return subChannelUrl; } public void setSubChannelUrl(String subChannelUrl) { this.subChannelUrl = subChannelUrl; } public String getSubChannelName() { return subChannelName; } public void setSubChannelName(String subChannelName) { this.subChannelName = subChannelName; } public String getSubChannelAvatarUrl() { return subChannelAvatarUrl; } public void setSubChannelAvatarUrl(String subChannelAvatarUrl) { this.subChannelAvatarUrl = subChannelAvatarUrl; } public long getStreamCount() { return streamCount; } public void setStreamCount(long streamCount) { this.streamCount = streamCount; } }