summaryrefslogtreecommitdiff
path: root/.local/share/libquvi-scripts/media/vidstream.lua
diff options
context:
space:
mode:
Diffstat (limited to '.local/share/libquvi-scripts/media/vidstream.lua')
-rw-r--r--.local/share/libquvi-scripts/media/vidstream.lua50
1 files changed, 50 insertions, 0 deletions
diff --git a/.local/share/libquvi-scripts/media/vidstream.lua b/.local/share/libquvi-scripts/media/vidstream.lua
new file mode 100644
index 0000000..916599a
--- /dev/null
+++ b/.local/share/libquvi-scripts/media/vidstream.lua
@@ -0,0 +1,50 @@
+-- libquvi-scripts
+
+local Vidstream = {}
+
+-- Identify the script.
+function ident(qargs)
+ return {
+ domains = table.concat({'vidstream.in'}, ','),
+ can_parse_url = Vidstream.can_parse_url(qargs)
+ }
+end
+
+-- Parse media URL.
+function parse(qargs)
+ local c = quvi.http.fetch(qargs.input_url).data
+ local p = { op = "download1", imhuman = "Proceed+to+video",
+ id = qargs.input_url:match('vidstream.in/([^/]+)'),
+ hash = c:match('name="hash" value="(.-)"') }
+ local R = require 'soup_request'
+ c = R.request(qargs.input_url, "POST", p)
+
+ qargs.id = p.id
+ qargs.title = c:match('property="og:title"%s+content="(.-)"')
+ qargs.thumb_url = c:match('property="og:image"%s+content="(.-)"')
+ qargs.duration_ms = tonumber(c:match('duration:%s*"(%d+)"') or 0) * 1000
+ qargs.streams = Vidstream.iter_streams(c, qargs)
+
+ return qargs
+end
+
+function Vidstream.iter_streams(c, qargs)
+ local S = require 'quvi/stream'
+
+ url,container = c:match('file:%s*"(.-/)v%.(.-)"')
+ local s = S.stream_new(table.concat({url, "v.", container}))
+ s.container = container
+ return { s }
+end
+
+function Vidstream.can_parse_url(qargs)
+ local U = require 'socket.url'
+ local t = U.parse(qargs.input_url)
+
+ return t and t.scheme and t.scheme:lower():match('^http$')
+ and t.host and t.host:lower():match('vidstream%.in$')
+ and t.path and t.path:match("^/[a-z0-9]+")
+ and true or false
+end
+
+-- vim: set ts=2 sw=2 tw=72 expandtab: