forked from Arieleg/mpv-copyTime
-
Notifications
You must be signed in to change notification settings - Fork 5
/
copyStuff.lua
166 lines (142 loc) · 4.92 KB
/
copyStuff.lua
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
require 'mp'
require 'mp.msg'
-- Copy:
-- Filename or URL
-- Full Filename Path
-- Current Video Time
-- Current Video Duration
-- Current Displayed Subtitle
-- Video Metadata
WINDOWS = 2
UNIX = 3
local function platform_type()
local utils = require 'mp.utils'
local workdir = utils.to_string(mp.get_property_native("working-directory"))
if string.find(workdir, "\\") then
return WINDOWS
else
return UNIX
end
end
local function command_exists(cmd)
local pipe = io.popen("type " .. cmd .. " > /dev/null 2> /dev/null; printf \"$?\"", "r")
exists = pipe:read() == "0"
pipe:close()
return exists
end
local function get_clipboard_cmd()
if command_exists("xclip") then
return "xclip -silent -in -selection clipboard"
elseif command_exists("wl-copy") then
return "wl-copy"
elseif command_exists("pbcopy") then
return "pbcopy"
else
mp.msg.error("No supported clipboard command found")
return false
end
end
local function divmod(a, b)
return a / b, a % b
end
local function set_clipboard(text)
if platform == WINDOWS then
mp.commandv("run", "powershell", "set-clipboard", table.concat({'"', text, '"'}))
return true
elseif (platform == UNIX and clipboard_cmd) then
local pipe = io.popen(clipboard_cmd, "w")
pipe:write(text)
pipe:close()
return true
else
mp.msg.error("Set_clipboard error")
return false
end
end
-- Copy Time
local function copyTime()
local time_pos = mp.get_property_number("time-pos")
local minutes, remainder = divmod(time_pos, 60)
local hours, minutes = divmod(minutes, 60)
local seconds = math.floor(remainder)
local milliseconds = math.floor((remainder - seconds) * 1000)
local time = string.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds)
if set_clipboard(time) then
mp.osd_message(string.format("Time Copied to Clipboard: %s", time))
else
mp.osd_message("Failed to copy time to clipboard")
end
end
-- Copy Filename with Extension
local function copyFilename()
local filename = string.format("%s", mp.get_property_osd("filename"))
local extension = string.match(filename, "%.(%w+)$")
local succ_message = "Filename Copied to Clipboard"
local fail_message = "Failed to copy filename to clipboard"
-- If filename doesn't have an extension then it is a URL.
if not extension then
filename = mp.get_property_osd("path")
succ_message = "URL Copied to Clipboard"
fail_message = "Failed to copy URL to clipboard"
end
if set_clipboard(filename) then
mp.osd_message(string.format("%s: %s", succ_message, filename))
else
mp.osd_message(string.format("%s", fail_message))
end
end
-- Copy Full Filename Path
local function copyFullPath()
if platform == WINDOWS then
full_path = string.format("%s\\%s", mp.get_property_osd("working-directory"), mp.get_property_osd("path"))
else
full_path = string.format("%s/%s", mp.get_property_osd("working-directory"), mp.get_property_osd("path"))
end
if set_clipboard(full_path) then
mp.osd_message(string.format("Full Filename Path Copied to Clipboard: %s", full_path))
else
mp.osd_message("Failed to copy full filename path to clipboard")
end
end
-- Copy Current Displayed Subtitle
local function copySubtitle()
local subtitle = string.format("%s", mp.get_property_osd("sub-text"))
if subtitle == "" then
mp.osd_message("There are no displayed subtitles.")
return
end
if set_clipboard(subtitle) then
mp.osd_message(string.format("Displayed Subtitle Copied to Clipboard: %s", subtitle))
else
mp.osd_message("Failed to copy displayed subtitle to clipboard")
end
end
-- Copy Current Video Duration
local function copyDuration()
local duration = string.format("%s", mp.get_property_osd("duration"))
if set_clipboard(duration) then
mp.osd_message(string.format("Video Duration Copied to Clipboard: %s", duration))
else
mp.osd_message("Failed to copy video duration to clipboard")
end
end
-- Copy Current Video Metadata
local function copyMetadata()
local metadata = string.format("%s", mp.get_property_osd("metadata"))
if set_clipboard(metadata) then
mp.osd_message(string.format("Video Metadata Copied to Clipboard: %s", metadata))
else
mp.osd_message("Failed to copy metadata to clipboard")
end
end
platform = platform_type()
if platform == UNIX then
clipboard_cmd = get_clipboard_cmd()
end
-- Key-Bindings
mp.add_key_binding("Ctrl+t", "copyTime", copyTime)
mp.add_key_binding("Ctrl+f", "copyFilename", copyFilename)
mp.add_key_binding("Ctrl+p", "copyFullPath", copyFullPath)
mp.add_key_binding("Ctrl+s", "copySubtitle", copySubtitle)
mp.add_key_binding("Ctrl+d", "copyDuration", copyDuration)
mp.add_key_binding("Ctrl+m", "copyMetadata", copyMetadata)