summaryrefslogtreecommitdiff
path: root/.local/share/libquvi-scripts/media/vidstream.lua
blob: 916599af5a6869ed4e3d0194e2814a62699a09c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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: