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 StreamExtractor getExtractorInstance(String url) throws IOException, ExtractionException;
|
||||
public abstract SearchEngine getSearchEngineInstance();
|
||||
|
||||
public abstract UrlIdHandler getStreamUrlIdHandlerInstance();
|
||||
public abstract UrlIdHandler getChannelUrlIdHandlerInstance();
|
||||
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 PlaylistExtractor getPlaylistExtractorInstance(String url) throws ExtractionException, IOException;
|
||||
public abstract SuggestionExtractor getSuggestionExtractorInstance();
|
||||
|
||||
|
||||
public final int getServiceId() {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.schabi.newpipe.extractor.channel;
|
||||
|
||||
import org.schabi.newpipe.extractor.Extractor;
|
||||
import org.schabi.newpipe.extractor.ListExtractor;
|
||||
import org.schabi.newpipe.extractor.UrlIdHandler;
|
||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
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/>.
|
||||
*/
|
||||
|
||||
public abstract class ChannelExtractor extends Extractor {
|
||||
public abstract class ChannelExtractor extends ListExtractor {
|
||||
|
||||
public ChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
||||
super(urlIdHandler, serviceId, url);
|
||||
|
@ -41,7 +42,5 @@ public abstract class ChannelExtractor extends Extractor {
|
|||
public abstract String getFeedUrl() throws ParsingException;
|
||||
public abstract StreamInfoItemCollector getStreams() 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;
|
||||
|
||||
import org.schabi.newpipe.extractor.Extractor;
|
||||
import org.schabi.newpipe.extractor.ListExtractor;
|
||||
import org.schabi.newpipe.extractor.UrlIdHandler;
|
||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
|
@ -8,7 +9,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItemCollector;
|
|||
|
||||
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 {
|
||||
super(urlIdHandler, serviceId, url);
|
||||
|
@ -23,7 +24,4 @@ public abstract class PlaylistExtractor extends Extractor {
|
|||
public abstract String getUploaderAvatarUrl() throws ParsingException;
|
||||
public abstract StreamInfoItemCollector getStreams() 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)
|
||||
*/
|
||||
private Document nextStreamsAjax;
|
||||
private String nextStreamsUrl = "";
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// 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 long subscriberCount = -1;
|
||||
|
||||
|
||||
public YoutubeChannelExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) throws ExtractionException, IOException {
|
||||
super(urlIdHandler, urlIdHandler.cleanUrl(url), serviceId);
|
||||
fetchDocument();
|
||||
|
@ -160,14 +158,11 @@ public class YoutubeChannelExtractor extends ChannelExtractor {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMoreStreams() {
|
||||
return nextStreamsUrl != null && !nextStreamsUrl.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
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());
|
||||
setupNextStreamsAjax(NewPipe.getDownloader());
|
||||
|
|
|
@ -27,7 +27,6 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
|
|||
* It's lazily initialized (when getNextStreams is called)
|
||||
*/
|
||||
private Document nextStreamsAjax = null;
|
||||
private String nextStreamsUrl = "";
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////////////
|
||||
// Variables for cache purposes (not "select" the current document all over again)
|
||||
|
@ -181,14 +180,11 @@ public class YoutubePlaylistExtractor extends PlaylistExtractor {
|
|||
return collector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasMoreStreams() {
|
||||
return nextStreamsUrl != null && !nextStreamsUrl.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
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());
|
||||
setupNextStreamsAjax(NewPipe.getDownloader());
|
||||
|
|
|
@ -46,7 +46,7 @@ public class YoutubeService extends StreamingService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public StreamExtractor getExtractorInstance(String url)
|
||||
public StreamExtractor getStreamExtractorInstance(String url)
|
||||
throws ExtractionException, IOException {
|
||||
UrlIdHandler urlIdHandler = YoutubeStreamUrlIdHandler.getInstance();
|
||||
if (urlIdHandler.acceptUrl(url)) {
|
||||
|
|
Loading…
Reference in a new issue