Skip to content

Commit c50b655

Browse files
committed
Fixed link handling
1 parent 21815d2 commit c50b655

13 files changed

+97
-25
lines changed

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/invidious/linkHandler/InvidiousChannelLinkHandlerFactory.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import java.util.List;
88

99

10-
public class InvidiousChannelLinkHandlerFactory extends YoutubeLikeChannelLinkHandlerFactory {
10+
public class InvidiousChannelLinkHandlerFactory extends YoutubeLikeChannelLinkHandlerFactory
11+
implements InvidiousLinkHandlerFactory {
1112

1213
protected final String baseUrl;
1314

@@ -16,6 +17,11 @@ public InvidiousChannelLinkHandlerFactory(final InvidiousService service) {
1617
baseUrl = service.getInstance().getUrl();
1718
}
1819

20+
@Override
21+
public String getInvidiousBaseUrl() {
22+
return baseUrl;
23+
}
24+
1925
/**
2026
* Returns URL to channel from an ID
2127
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.schabi.newpipe.extractor.services.youtube.invidious.linkHandler;
2+
3+
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper;
4+
import org.schabi.newpipe.extractor.services.youtube.shared.linkHandler.YoutubeLikeLinkHandlerFactory;
5+
import org.schabi.newpipe.extractor.utils.Utils;
6+
7+
import java.net.URL;
8+
9+
public interface InvidiousLinkHandlerFactory extends YoutubeLikeLinkHandlerFactory {
10+
11+
String getInvidiousBaseUrl();
12+
13+
@Override
14+
default boolean isInvidiousUrl(final URL url) {
15+
return Utils.removeMAndWWWFromHost(url.getHost())
16+
.equalsIgnoreCase(Utils.getHostOrNull(getInvidiousBaseUrl())) &&
17+
YoutubeUrlHelper.isInvidioURL(url);
18+
}
19+
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/invidious/linkHandler/InvidiousPlaylistLinkHandlerFactory.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55

66
import java.util.List;
77

8-
public class InvidiousPlaylistLinkHandlerFactory extends YoutubeLikePlaylistLinkHandlerFactory {
8+
public class InvidiousPlaylistLinkHandlerFactory extends YoutubeLikePlaylistLinkHandlerFactory
9+
implements InvidiousLinkHandlerFactory {
910

1011
protected final String baseUrl;
1112

1213
public InvidiousPlaylistLinkHandlerFactory(final InvidiousService service) {
1314
this.baseUrl = service.getInstance().getUrl();
1415
}
1516

17+
@Override
18+
public String getInvidiousBaseUrl() {
19+
return baseUrl;
20+
}
21+
1622
@Override
1723
public String getUrl(final String id, final List<String> contentFilters,
1824
final String sortFilter) {

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/invidious/linkHandler/InvidiousStreamLinkHandlerFactory.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@
44
import org.schabi.newpipe.extractor.services.youtube.invidious.InvidiousService;
55
import org.schabi.newpipe.extractor.services.youtube.shared.linkHandler.YoutubeLikeStreamLinkHandlerFactory;
66

7-
public class InvidiousStreamLinkHandlerFactory extends YoutubeLikeStreamLinkHandlerFactory {
7+
public class InvidiousStreamLinkHandlerFactory extends YoutubeLikeStreamLinkHandlerFactory
8+
implements InvidiousLinkHandlerFactory {
89

910
protected final String baseUrl;
1011

1112
public InvidiousStreamLinkHandlerFactory(final InvidiousService service) {
1213
this.baseUrl = service.getInstance().getUrl();
1314
}
1415

16+
@Override
17+
public String getInvidiousBaseUrl() {
18+
return baseUrl;
19+
}
20+
1521
@Override
1622
public String getUrl(final String id) throws ParsingException {
1723
return baseUrl + "/watch?v=" + id;

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/shared/linkHandler/YoutubeLikeChannelLinkHandlerFactory.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import org.schabi.newpipe.extractor.exceptions.ParsingException;
44
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
5-
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper;
65
import org.schabi.newpipe.extractor.utils.Utils;
76

87
import java.net.URL;
98
import java.util.regex.Pattern;
109

11-
public abstract class YoutubeLikeChannelLinkHandlerFactory extends ListLinkHandlerFactory {
10+
public abstract class YoutubeLikeChannelLinkHandlerFactory extends ListLinkHandlerFactory
11+
implements YoutubeLikeLinkHandlerFactory {
1212

1313
protected static final Pattern EXCLUDED_SEGMENTS =
1414
Pattern.compile("playlist|watch|attribution_link|watch_popup|embed|feed|select_site");
@@ -30,9 +30,7 @@ public String getId(final String url) throws ParsingException {
3030
final URL urlObj = Utils.stringToURL(url);
3131
String path = urlObj.getPath();
3232

33-
if (!Utils.isHTTP(urlObj) || !(YoutubeUrlHelper.isYoutubeURL(urlObj)
34-
|| YoutubeUrlHelper.isInvidioURL(urlObj)
35-
|| YoutubeUrlHelper.isHooktubeURL(urlObj))) {
33+
if (!Utils.isHTTP(urlObj) || !isSupportedYouTubeLikeHost(urlObj)) {
3634
throw new ParsingException("the URL given is not a Youtube-URL");
3735
}
3836

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.schabi.newpipe.extractor.services.youtube.shared.linkHandler;
2+
3+
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper;
4+
5+
import java.net.URL;
6+
7+
public interface YoutubeLikeLinkHandlerFactory {
8+
9+
default boolean isSupportedYouTubeLikeHost(final URL url) {
10+
return YoutubeUrlHelper.isYoutubeURL(url)
11+
|| YoutubeUrlHelper.isYoutubeServiceURL(url)
12+
|| isInvidiousUrl(url)
13+
|| YoutubeUrlHelper.isHooktubeURL(url)
14+
|| YoutubeUrlHelper.isY2ubeURL(url);
15+
}
16+
17+
boolean isInvidiousUrl(final URL url);
18+
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/shared/linkHandler/YoutubeLikePlaylistLinkHandlerFactory.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,20 @@
66
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
77
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
88
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubePlaylistHelper;
9-
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper;
109
import org.schabi.newpipe.extractor.utils.Utils;
1110

1211
import java.net.MalformedURLException;
1312
import java.net.URL;
1413

15-
public abstract class YoutubeLikePlaylistLinkHandlerFactory extends ListLinkHandlerFactory {
14+
public abstract class YoutubeLikePlaylistLinkHandlerFactory extends ListLinkHandlerFactory
15+
implements YoutubeLikeLinkHandlerFactory {
1616

1717
@Override
1818
public String getId(final String url) throws ParsingException {
1919
try {
2020
final URL urlObj = Utils.stringToURL(url);
2121

22-
if (!Utils.isHTTP(urlObj) || !(YoutubeUrlHelper.isYoutubeURL(urlObj)
23-
|| YoutubeUrlHelper.isInvidioURL(urlObj))) {
22+
if (!Utils.isHTTP(urlObj) || !isSupportedYouTubeLikeHost(urlObj)) {
2423
throw new ParsingException("The url given is not a YouTube-URL");
2524
}
2625

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/shared/linkHandler/YoutubeLikeStreamLinkHandlerFactory.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.schabi.newpipe.extractor.services.youtube.shared.linkHandler;
22

33
import static org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper.isHooktubeURL;
4-
import static org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper.isInvidioURL;
54
import static org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper.isY2ubeURL;
65
import static org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper.isYoutubeServiceURL;
76
import static org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper.isYoutubeURL;
@@ -23,7 +22,8 @@
2322

2423
import javax.annotation.Nullable;
2524

26-
public abstract class YoutubeLikeStreamLinkHandlerFactory extends LinkHandlerFactory {
25+
public abstract class YoutubeLikeStreamLinkHandlerFactory extends LinkHandlerFactory
26+
implements YoutubeLikeLinkHandlerFactory {
2727

2828
protected static final Pattern YOUTUBE_VIDEO_ID_REGEX_PATTERN
2929
= Pattern.compile("^([a-zA-Z0-9_-]{11})");
@@ -85,12 +85,7 @@ public String getId(final String theUrlString)
8585
path = path.substring(1);
8686
}
8787

88-
if (!Utils.isHTTP(url)
89-
|| !(isYoutubeURL(url)
90-
|| isYoutubeServiceURL(url)
91-
|| isHooktubeURL(url)
92-
|| isInvidioURL(url)
93-
|| isY2ubeURL(url))
88+
if (!Utils.isHTTP(url) || !(isSupportedYouTubeLikeHost(url))
9489
) {
9590
if ("googleads.g.doubleclick.net".equalsIgnoreCase(host)) {
9691
throw new FoundAdException("Error found ad: " + urlString);
@@ -103,7 +98,7 @@ public String getId(final String theUrlString)
10398
throw new ParsingException("Can't find handler for url: " + urlString);
10499
}
105100

106-
if (isYoutubeURL(url) || isInvidioURL(url) || isHooktubeURL(url)) {
101+
if (isYoutubeURL(url) || isInvidiousUrl(url) || isHooktubeURL(url)) {
107102
if (isYoutubeURL(url)
108103
&& "attribution_link".equalsIgnoreCase(path)) {
109104
final String uQueryValue = Utils.getQueryValue(url, "u");
@@ -118,7 +113,7 @@ public String getId(final String theUrlString)
118113
final String viewQueryValue = Utils.getQueryValue(decodedURL, "v");
119114
return assertIsId(viewQueryValue);
120115

121-
} else if (isInvidioURL(url) || isHooktubeURL(url)) {
116+
} else if (isInvidiousUrl(url) || isHooktubeURL(url)) {
122117
// /watch?v=<ID>
123118
if ("watch".equalsIgnoreCase(path)) {
124119
final String viewQueryValue = Utils.getQueryValue(url, "v");

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/youtube/linkHandler/YoutubeChannelLinkHandlerFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
2525
*/
2626

27-
public final class YoutubeChannelLinkHandlerFactory extends YoutubeLikeChannelLinkHandlerFactory {
27+
public final class YoutubeChannelLinkHandlerFactory extends YoutubeLikeChannelLinkHandlerFactory
28+
implements YoutubeLinkHandlerFactory {
2829

2930
public static final YoutubeChannelLinkHandlerFactory INSTANCE
3031
= new YoutubeChannelLinkHandlerFactory();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.schabi.newpipe.extractor.services.youtube.youtube.linkHandler;
2+
3+
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubeUrlHelper;
4+
import org.schabi.newpipe.extractor.services.youtube.shared.linkHandler.YoutubeLikeLinkHandlerFactory;
5+
6+
import java.net.URL;
7+
8+
public interface YoutubeLinkHandlerFactory extends YoutubeLikeLinkHandlerFactory {
9+
10+
@Override
11+
default boolean isInvidiousUrl(final URL url) {
12+
return YoutubeUrlHelper.isInvidioURL(url);
13+
}
14+
}

0 commit comments

Comments
 (0)