summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-02-12 17:32:20 +0100
committerSamantaz Fox <coding@samantaz.fr>2022-02-12 17:32:20 +0100
commit60e870b27783bdcdb07d26489b50d18a85c49eeb (patch)
treea8d7cf49e9b357dedd7d602b2072796ae3453789 /src
parent99d770be643d36fe40fbb8ac54a5fa5f692aebf0 (diff)
downloadinvidious-60e870b27783bdcdb07d26489b50d18a85c49eeb.tar.gz
invidious-60e870b27783bdcdb07d26489b50d18a85c49eeb.tar.bz2
invidious-60e870b27783bdcdb07d26489b50d18a85c49eeb.zip
Fix OPML import
Diffstat (limited to 'src')
-rw-r--r--src/invidious/user/imports.cr15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/invidious/user/imports.cr b/src/invidious/user/imports.cr
index 7404cd97..61d10719 100644
--- a/src/invidious/user/imports.cr
+++ b/src/invidious/user/imports.cr
@@ -105,12 +105,25 @@ struct Invidious::User
# Youtube
# -------------------
+ private def is_opml?(mimetype : String, extension : String)
+ opml_mimetypes = [
+ "application/xml",
+ "text/xml",
+ "text/x-opml",
+ "text/x-opml+xml",
+ ]
+
+ opml_extensions = ["xml", "opml"]
+
+ return opml_mimetypes.any?(&.== mimetype) || opml_extensions.any?(&.== extension)
+ end
+
# Import subscribed channels from Youtube
# Returns success status
def from_youtube(user : User, body : String, filename : String, type : String) : Bool
extension = filename.split(".").last
- if extension == "xml" || type == "application/xml" || type == "text/xml"
+ if is_opml?(type, extension)
subscriptions = XML.parse(body)
user.subscriptions += subscriptions.xpath_nodes(%q(//outline[@type="rss"])).map do |channel|
channel["xmlUrl"].match(/UC[a-zA-Z0-9_-]{22}/).not_nil![0]