Refactor Extractor
- Renaming and removal of duplicate code - New base class for list extractors
This commit is contained in:
parent
729930802e
commit
bda65e83d6
7 changed files with 47 additions and 26 deletions
32
ListExtractor.java
Normal file
32
ListExtractor.java
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
package org.schabi.newpipe.extractor;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
import org.schabi.newpipe.extractor.stream.StreamInfoItemCollector;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class to extractors that have a list (e.g. playlists, channels).
|
||||||
|
*/
|
||||||
|
public abstract class ListExtractor extends Extractor {
|
||||||
|
protected String nextStreamsUrl;
|
||||||
|
|
||||||
|
public ListExtractor(UrlIdHandler urlIdHandler, int serviceId, String url) {
|
||||||
|
super(urlIdHandler, serviceId, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasMoreStreams(){
|
||||||
|
return nextStreamsUrl != null && !nextStreamsUrl.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException;
|
||||||
|
|
||||||
|
public String getNextStreamsUrl() {
|
||||||
|
return nextStreamsUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNextStreamsUrl(String nextStreamsUrl) {
|
||||||
|
this.nextStreamsUrl = nextStreamsUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -27,14 +27,15 @@ public abstract class StreamingService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract ServiceInfo getServiceInfo();
|
public abstract ServiceInfo getServiceInfo();
|
||||||
public abstract StreamExtractor getExtractorInstance(String url) throws IOException, ExtractionException;
|
|
||||||
public abstract SearchEngine getSearchEngineInstance();
|
|
||||||
public abstract UrlIdHandler getStreamUrlIdHandlerInstance();
|
public abstract UrlIdHandler getStreamUrlIdHandlerInstance();
|
||||||
public abstract UrlIdHandler getChannelUrlIdHandlerInstance();
|
public abstract UrlIdHandler getChannelUrlIdHandlerInstance();
|
||||||
public abstract UrlIdHandler getPlaylistUrlIdHandlerInstance();
|
public abstract UrlIdHandler getPlaylistUrlIdHandlerInstance();
|
||||||
|
public abstract SearchEngine getSearchEngineInstance();
|
||||||
|
public abstract SuggestionExtractor getSuggestionExtractorInstance();
|
||||||
|
public abstract StreamExtractor getStreamExtractorInstance(String url) throws IOException, ExtractionException;
|
||||||
public abstract ChannelExtractor getChannelExtractorInstance(String url) throws ExtractionException, IOException;
|
public abstract ChannelExtractor getChannelExtractorInstance(String url) throws ExtractionException, IOException;
|
||||||
public abstract PlaylistExtractor getPlaylistExtractorInstance(String url) throws ExtractionException, IOException;
|
public abstract PlaylistExtractor getPlaylistExtractorInstance(String url) throws ExtractionException, IOException;
|
||||||
public abstract SuggestionExtractor getSuggestionExtractorInstance();
|
|
||||||
|
|
||||||
|
|
||||||
public final int getServiceId() {
|
public final int getServiceId() {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.schabi.newpipe.extractor.channel;
|
package org.schabi.newpipe.extractor.channel;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.Extractor;
|
import org.schabi.newpipe.extractor.Extractor;
|
||||||
|
import org.schabi.newpipe.extractor.ListExtractor;
|
||||||
import org.schabi.newpipe.extractor.UrlIdHandler;
|
import org.schabi.newpipe.extractor.UrlIdHandler;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
|
@ -28,7 +29,7 @@ import java.io.IOException;
|
||||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public abstract class ChannelExtractor extends Extractor {
|
public abstract class ChannelExtractor extends ListExtractor {
|
||||||
|
|
||||||
public ChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
public ChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
||||||
super(urlIdHandler, serviceId, url);
|
super(urlIdHandler, serviceId, url);
|
||||||
|
@ -41,7 +42,5 @@ public abstract class ChannelExtractor extends Extractor {
|
||||||
public abstract String getFeedUrl() throws ParsingException;
|
public abstract String getFeedUrl() throws ParsingException;
|
||||||
public abstract StreamInfoItemCollector getStreams() throws ParsingException;
|
public abstract StreamInfoItemCollector getStreams() throws ParsingException;
|
||||||
public abstract long getSubscriberCount() throws ParsingException;
|
public abstract long getSubscriberCount() throws ParsingException;
|
||||||
public abstract boolean hasMoreStreams();
|
|
||||||
public abstract StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.schabi.newpipe.extractor.playlist;
|
package org.schabi.newpipe.extractor.playlist;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.Extractor;
|
import org.schabi.newpipe.extractor.Extractor;
|
||||||
|
import org.schabi.newpipe.extractor.ListExtractor;
|
||||||
import org.schabi.newpipe.extractor.UrlIdHandler;
|
import org.schabi.newpipe.extractor.UrlIdHandler;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
|
@ -8,7 +9,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemCollector;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public abstract class PlaylistExtractor extends Extractor {
|
public abstract class PlaylistExtractor extends ListExtractor {
|
||||||
|
|
||||||
public PlaylistExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
public PlaylistExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
||||||
super(urlIdHandler, serviceId, url);
|
super(urlIdHandler, serviceId, url);
|
||||||
|
@ -23,7 +24,4 @@ public abstract class PlaylistExtractor extends Extractor {
|
||||||
public abstract String getUploaderAvatarUrl() throws ParsingException;
|
public abstract String getUploaderAvatarUrl() throws ParsingException;
|
||||||
public abstract StreamInfoItemCollector getStreams() throws ParsingException;
|
public abstract StreamInfoItemCollector getStreams() throws ParsingException;
|
||||||
public abstract long getStreamsCount() throws ParsingException;
|
public abstract long getStreamsCount() throws ParsingException;
|
||||||
public abstract boolean hasMoreStreams();
|
|
||||||
public abstract StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
|
||||||
* It's lazily initialized (when getNextStreams is called)
|
* It's lazily initialized (when getNextStreams is called)
|
||||||
*/
|
*/
|
||||||
private Document nextStreamsAjax;
|
private Document nextStreamsAjax;
|
||||||
private String nextStreamsUrl = "";
|
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Variables for cache purposes (not "select" the current document all over again)
|
// Variables for cache purposes (not "select" the current document all over again)
|
||||||
|
@ -61,7 +60,6 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
|
||||||
private String feedUrl;
|
private String feedUrl;
|
||||||
private long subscriberCount = -1;
|
private long subscriberCount = -1;
|
||||||
|
|
||||||
|
|
||||||
public YoutubeChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
public YoutubeChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
||||||
super(urlIdHandler, urlIdHandler.cleanUrl(url), serviceId);
|
super(urlIdHandler, urlIdHandler.cleanUrl(url), serviceId);
|
||||||
fetchDocument();
|
fetchDocument();
|
||||||
|
@ -160,14 +158,11 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasMoreStreams() {
|
|
||||||
return nextStreamsUrl != null && !nextStreamsUrl.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException {
|
public StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException {
|
||||||
if (!hasMoreStreams()) throw new ExtractionException("Channel doesn't have more streams");
|
if (!hasMoreStreams()) {
|
||||||
|
throw new ExtractionException("Channel doesn't have more streams");
|
||||||
|
}
|
||||||
|
|
||||||
StreamInfoItemCollector collector = new StreamInfoItemCollector(getUrlIdHandler(), getServiceId());
|
StreamInfoItemCollector collector = new StreamInfoItemCollector(getUrlIdHandler(), getServiceId());
|
||||||
setupNextStreamsAjax(NewPipe.getDownloader());
|
setupNextStreamsAjax(NewPipe.getDownloader());
|
||||||
|
|
|
@ -27,7 +27,6 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
|
||||||
* It's lazily initialized (when getNextStreams is called)
|
* It's lazily initialized (when getNextStreams is called)
|
||||||
*/
|
*/
|
||||||
private Document nextStreamsAjax = null;
|
private Document nextStreamsAjax = null;
|
||||||
private String nextStreamsUrl = "";
|
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Variables for cache purposes (not "select" the current document all over again)
|
// Variables for cache purposes (not "select" the current document all over again)
|
||||||
|
@ -181,14 +180,11 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
|
||||||
return collector;
|
return collector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasMoreStreams() {
|
|
||||||
return nextStreamsUrl != null && !nextStreamsUrl.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException {
|
public StreamInfoItemCollector getNextStreams() throws ExtractionException, IOException {
|
||||||
if (!hasMoreStreams()) throw new ExtractionException("Playlist doesn't have more streams");
|
if (!hasMoreStreams()){
|
||||||
|
throw new ExtractionException("Playlist doesn't have more streams");
|
||||||
|
}
|
||||||
|
|
||||||
StreamInfoItemCollector collector = new StreamInfoItemCollector(getUrlIdHandler(), getServiceId());
|
StreamInfoItemCollector collector = new StreamInfoItemCollector(getUrlIdHandler(), getServiceId());
|
||||||
setupNextStreamsAjax(NewPipe.getDownloader());
|
setupNextStreamsAjax(NewPipe.getDownloader());
|
||||||
|
|
|
@ -46,7 +46,7 @@ public class YoutubeService extends StreamingService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StreamExtractor getExtractorInstance(String url)
|
public StreamExtractor getStreamExtractorInstance(String url)
|
||||||
throws ExtractionException, IOException {
|
throws ExtractionException, IOException {
|
||||||
UrlIdHandler urlIdHandler = YoutubeStreamUrlIdHandler.getInstance();
|
UrlIdHandler urlIdHandler = YoutubeStreamUrlIdHandler.getInstance();
|
||||||
if (urlIdHandler.acceptUrl(url)) {
|
if (urlIdHandler.acceptUrl(url)) {
|
||||||
|
|
Loading…
Reference in a new issue