1
0
Fork 0

Add support for Invidious

- Embed Invidious player for invidio.us feeds
- Add new rewrite rule to use Invidious player for Youtube feeds
This commit is contained in:
Frédéric Guillot 2020-03-20 20:45:37 -07:00
parent e494d6e381
commit 592151bdb6
4 changed files with 27 additions and 1 deletions

View file

@ -16,6 +16,7 @@ import (
var ( var (
youtubeRegex = regexp.MustCompile(`youtube\.com/watch\?v=(.*)`) youtubeRegex = regexp.MustCompile(`youtube\.com/watch\?v=(.*)`)
invidioRegex = regexp.MustCompile(`invidio\.us\/watch\?v=(.*)`)
imgRegex = regexp.MustCompile(`<img [^>]+>`) imgRegex = regexp.MustCompile(`<img [^>]+>`)
textLinkRegex = regexp.MustCompile(`(?mi)(\bhttps?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])`) textLinkRegex = regexp.MustCompile(`(?mi)(\bhttps?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])`)
) )
@ -148,6 +149,26 @@ func addYoutubeVideo(entryURL, entryContent string) string {
return entryContent return entryContent
} }
func addYoutubeVideoUsingInvidiousPlayer(entryURL, entryContent string) string {
matches := youtubeRegex.FindStringSubmatch(entryURL)
if len(matches) == 2 {
video := `<iframe width="650" height="350" frameborder="0" src="https://invidio.us/embed/` + matches[1] + `" allowfullscreen></iframe>`
return video + `<br>` + entryContent
}
return entryContent
}
func addInvidiousVideo(entryURL, entryContent string) string {
matches := invidioRegex.FindStringSubmatch(entryURL)
fmt.Println(matches)
if len(matches) == 2 {
video := `<iframe width="650" height="350" frameborder="0" src="https://invidio.us/embed/` + matches[1] + `" allowfullscreen></iframe>`
return video + `<br>` + entryContent
}
return entryContent
}
func addPDFLink(entryURL, entryContent string) string { func addPDFLink(entryURL, entryContent string) string {
if strings.HasSuffix(entryURL, ".pdf") { if strings.HasSuffix(entryURL, ".pdf") {
return fmt.Sprintf(`<a href="%s">PDF</a><br>%s`, entryURL, entryContent) return fmt.Sprintf(`<a href="%s">PDF</a><br>%s`, entryURL, entryContent)

View file

@ -33,6 +33,10 @@ func Rewriter(entryURL, entryContent, customRewriteRules string) string {
entryContent = addDynamicImage(entryURL, entryContent) entryContent = addDynamicImage(entryURL, entryContent)
case "add_youtube_video": case "add_youtube_video":
entryContent = addYoutubeVideo(entryURL, entryContent) entryContent = addYoutubeVideo(entryURL, entryContent)
case "add_invidious_video":
entryContent = addInvidiousVideo(entryURL, entryContent)
case "add_youtube_video_using_invidious_player":
entryContent = addYoutubeVideoUsingInvidiousPlayer(entryURL, entryContent)
case "add_pdf_download_link": case "add_pdf_download_link":
entryContent = addPDFLink(entryURL, entryContent) entryContent = addPDFLink(entryURL, entryContent)
case "nl2br": case "nl2br":
@ -47,7 +51,6 @@ func Rewriter(entryURL, entryContent, customRewriteRules string) string {
func getPredefinedRewriteRules(entryURL string) string { func getPredefinedRewriteRules(entryURL string) string {
urlDomain := url.Domain(entryURL) urlDomain := url.Domain(entryURL)
for domain, rules := range predefinedRules { for domain, rules := range predefinedRules {
if strings.Contains(urlDomain, domain) { if strings.Contains(urlDomain, domain) {
return rules return rules

View file

@ -27,6 +27,7 @@ var predefinedRules = map[string]string{
"thedoghousediaries.com": "add_image_title", "thedoghousediaries.com": "add_image_title",
"treelobsters.com": "add_image_title", "treelobsters.com": "add_image_title",
"youtube.com": "add_youtube_video", "youtube.com": "add_youtube_video",
"invidio.us": "add_invidious_video",
"xkcd.com": "add_image_title", "xkcd.com": "add_image_title",
"framatube.org": "nl2br,convert_text_link", "framatube.org": "nl2br,convert_text_link",
} }

View file

@ -292,6 +292,7 @@ func isBlacklistedResource(src string) bool {
func isValidIframeSource(src string) bool { func isValidIframeSource(src string) bool {
whitelist := []string{ whitelist := []string{
"https://invidio.us",
"//www.youtube.com", "//www.youtube.com",
"http://www.youtube.com", "http://www.youtube.com",
"https://www.youtube.com", "https://www.youtube.com",