#!/usr/bin/env lua
local table_merge = function (t1, t2)
t1 = t1 or {}
t2 = t2 or {}
for k, v in pairs(t2) do
t1[k] = v
end
return t1
end
local table_print = function (t)
for k, v in pairs(t) do
print( '|'.. k .. '=' .. v .. '|')
end
end
local table_match_or_any = function (t, key)
local str
str= t[key]
if not str then
_, str = next(t, nil)
end
return str
end
local zip_ext_first = function (zip, out)
local dir, rc, srt
dir = os.tmpname()
os.remove(dir)
os.execute('mkdir -p ' .. dir)
rc = os.execute('unzip -qq ' .. zip .. ' -d ' .. dir)
srt = io.popen('find ' .. dir .. ' -type f -name *.srt'):read('*l')
os.execute("mv '" .. srt .. "' '" .. out .. "'")
os.remove(dir)
return rc
end
local string_vid_path_to_name = function (str)
local extensions = {
"mkv",
"mp4",
"webm",
"flv",
"gif",
"gifv",
"avi",
"mpeg",
"3gp"
}
str = str:match('[^/]*$')
for _, ext in ipairs(extensions) do
str = str:gsub('.' .. ext, '')
end
return str
end
local error = function (str)
str = 'error: ' .. str
if mp then
mp.msg.warn(str)
else
print(str)
end
end
local opensubtitles_hash = function (fileName)
local fil = io.open(fileName, "rb")
if not fil then
return nil
end
local lo,hi = 0,0
for i = 1,8192 do
local a,b,c,d = fil:read(4):byte(1,4)
lo = lo + a + b*256 + c*65536 + d*16777216
a,b,c,d = fil:read(4):byte(1,4)
hi = hi + a + b*256 + c*65536 + d*16777216
while lo >= 4294967296 do
lo = lo - 4294967296
hi = hi + 1
end
while hi >= 4294967296 do
hi = hi - 4294967296
end
end
local size = fil:seek("end", -65536) + 65536
for i = 1,8192 do
local a,b,c,d = fil:read(4):byte(1,4)
lo = lo + a + b*256 + c*65536 + d*16777216
a,b,c,d = fil:read(4):byte(1,4)
hi = hi + a + b*256 + c*65536 + d*16777216
while lo >= 4294967296 do
lo = lo - 4294967296
hi = hi + 1
end
while hi >= 4294967296 do
hi = hi - 4294967296
end
end
lo = lo + size
while lo >= 4294967296 do
lo = lo - 4294967296
hi = hi + 1
end
while hi >= 4294967296 do
hi = hi - 4294967296
end
fil:close()
return string.format("%08x%08x", hi,lo), size
end
return {
table_merge = table_merge,
table_print = table_print,
table_match_or_any = table_match_or_any,
zip_ext_first = zip_ext_first,
string_vid_path_to_name = string_vid_path_to_name,
opensubtitles_hash = opensubtitles_hash,
error = error,
}