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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#!/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,
}
|