NewPipeExtractor/extractor/src/main/java/org/schabi/newpipe/extractor/kiosk/KioskList.java

99 lines
3.4 KiB
Java
Raw Normal View History

2017-08-12 17:29:28 +02:00
package org.schabi.newpipe.extractor.kiosk;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
2017-08-12 17:29:28 +02:00
import org.schabi.newpipe.extractor.UrlIdHandler;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import java.io.IOException;
2017-08-12 17:29:28 +02:00
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
2017-08-12 21:10:21 +02:00
public class KioskList {
public interface KioskExtractorFactory {
KioskExtractor createNewKiosk(final StreamingService streamingService,
final String url,
final String kioskId)
throws ExtractionException, IOException;
}
2017-11-30 11:34:26 +01:00
private final int service_id;
private final HashMap<String, KioskEntry> kioskList = new HashMap<>();
private String defaultKiosk = null;
2017-08-12 17:29:28 +02:00
private class KioskEntry {
public KioskEntry(KioskExtractorFactory ef, UrlIdHandler h) {
extractorFactory = ef;
2017-08-12 17:29:28 +02:00
handler = h;
}
2017-11-30 11:34:26 +01:00
final KioskExtractorFactory extractorFactory;
final UrlIdHandler handler;
2017-08-12 17:29:28 +02:00
}
public KioskList(int service_id) {
this.service_id = service_id;
}
public void addKioskEntry(KioskExtractorFactory extractorFactory, UrlIdHandler handler, String id)
2017-08-12 17:29:28 +02:00
throws Exception {
if(kioskList.get(id) != null) {
throw new Exception("Kiosk with type " + id + " already exists.");
2017-08-12 17:29:28 +02:00
}
kioskList.put(id, new KioskEntry(extractorFactory, handler));
}
public void setDefaultKiosk(String kioskType) {
defaultKiosk = kioskType;
}
2018-02-24 22:20:50 +01:00
public KioskExtractor getDefaultKioskExtractor(String nextPageUrl)
throws ExtractionException, IOException {
if(defaultKiosk != null && !defaultKiosk.equals("")) {
2018-02-24 22:20:50 +01:00
return getExtractorById(defaultKiosk, nextPageUrl);
} else {
if(!kioskList.isEmpty()) {
// if not set get any entry
Object[] keySet = kioskList.keySet().toArray();
2018-02-24 22:20:50 +01:00
return getExtractorById(keySet[0].toString(), nextPageUrl);
} else {
return null;
}
}
2017-08-12 17:29:28 +02:00
}
public String getDefaultKioskId() {
2017-09-23 15:59:00 +02:00
return defaultKiosk;
}
2018-02-24 22:20:50 +01:00
public KioskExtractor getExtractorById(String kioskId, String nextPageUrl)
throws ExtractionException, IOException {
KioskEntry ke = kioskList.get(kioskId);
2017-08-12 17:29:28 +02:00
if(ke == null) {
throw new ExtractionException("No kiosk found with the type: " + kioskId);
2017-08-12 17:29:28 +02:00
} else {
return ke.extractorFactory.createNewKiosk(NewPipe.getService(service_id),
2018-02-26 15:55:27 +01:00
ke.handler.getUrl(kioskId), kioskId);
2017-08-12 17:29:28 +02:00
}
}
2017-10-22 21:44:24 +02:00
public Set<String> getAvailableKiosks() {
2017-08-12 17:29:28 +02:00
return kioskList.keySet();
}
2018-02-24 22:20:50 +01:00
public KioskExtractor getExtractorByUrl(String url, String nextPageUrl)
throws ExtractionException, IOException {
2017-08-12 17:29:28 +02:00
for(Map.Entry<String, KioskEntry> e : kioskList.entrySet()) {
KioskEntry ke = e.getValue();
if(ke.handler.acceptUrl(url)) {
2018-02-24 22:20:50 +01:00
return getExtractorById(e.getKey(), nextPageUrl);
2017-08-12 17:29:28 +02:00
}
}
throw new ExtractionException("Could not find a kiosk that fits to the url: " + url);
}
public UrlIdHandler getUrlIdHandlerByType(String type) {
return kioskList.get(type).handler;
}
2017-08-12 17:29:28 +02:00
}