Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- -- Open clipboard inserter
- -- -- Wait for unknown word and add it to anki through yomichan
- -- -- Select all the subtitle lines to add to the card.
- -- -- Ctrl + c [make sure it copies with paragraphs included, otherwise it wont work]
- -- -- Change back to MPV and Ctrl + v
- -- -- Done. The lines, their respective Audio and the current paused image
- -- will be added to the back of the card
- local utils = require 'mp.utils'
- local msg = require 'mp.msg'
- local subs = {}
- -- User Config
- local FRONT_FIELD = "Expression"
- local SENTENCE_AUDIO_FIELD = "Audio"
- local SENTENCE_FIELD = "Sentences"
- local IMAGE_FIELD = "Picture"
- local prefix = os.getenv("HOME") .. 'C:/Users//AppData/Roaming/Anki2/User 1/collection.media'
- function trim(s)
- return string.gsub(s, "^%s*(.-)%s*$", "%1")
- end
- function get_name(s, e)
- return mp.get_property("filename"):gsub('%W','').. tostring(s) .. tostring(e)
- end
- function clip(text)
- os.execute("echo \"" .. text .. "\" | xclip -selection clipboard &")
- end
- function create_audio(s, e)
- if s == nil or e == nil then
- return
- end
- local t = tostring(e - s)
- local source = mp.get_property("path")
- local destination = prefix .. get_name(s, e) .. '.mp3'
- local cmd = "ffmpeg -y -i \"" .. source .. "\" -ss " .. tostring(s)
- .. " -t " .. t .. " -q:a 0 -map a \"".. destination.. "\" 2> /dev/null &"
- os.execute(cmd)
- end
- function get_clipboard()
- local command = 'xclip -o'
- local handle = io.popen(command)
- local result = handle:read("*a")
- handle:close()
- return result
- end
- function set_clipboard(name, sub)
- if sub and mp.get_property_number('sub-start') then
- local sub_delay = mp.get_property_native("sub-delay")
- clip(sub)
- subs[sub] = { mp.get_property_number('sub-start') + sub_delay, mp.get_property_number('sub-end') + sub_delay }
- end
- end
- function create_screenshot(s, e)
- local img = prefix .. get_name(s,e) .. '.jpg'
- mp.commandv("raw", "no-osd", "screenshot-to-file", img)
- os.execute("mogrify -resize 640x480 -quality 85 -format jpg \"" .. img .."\"")
- end
- function get_extract()
- local lines = get_clipboard()
- local e = 0
- local s = 0
- for line in lines:gmatch("([^\n]*)\n?") do
- line = trim(line)
- if subs[line]~= nil then
- msg.info(lines)
- if subs[line][1] ~= nil and subs[line][2] ~= nil then
- msg.info(lines)
- if s == 0 then
- s = subs[line][1]
- else
- s = math.min(s, subs[line][1])
- end
- e = math.max(e, subs[line][2])
- end
- end
- end
- if e ~= 0 then
- local ifield = create_screenshot(s, e)
- local afield = create_audio(s, e)
- local tfield = string.gsub(string.gsub(lines,"\n", "<br />"), "\r", "")
- ifield = '<img src=\"'.. get_name(s,e) ..'.jpg\">'
- afield = "[sound:".. get_name(s,e) .. ".mp3]"
- add_to_last_added(ifield, afield, tfield)
- end
- end
- function get(request)
- local args = {
- "curl",
- "localhost:8765",
- "-X",
- "GET",
- "-d",
- request
- }
- local result =
- utils.subprocess(
- {
- args = args,
- cancellable = true
- }
- )
- return utils.parse_json(result.stdout)
- end
- function add_to_last_added(ifield, afield, tfield)
- local noteid = math.max(unpack(get('{"action": "findNotes", "params": {"query": "added:1"}, "version": 6}')["result"]))
- local note = get('{"action": "notesInfo", "params": {"notes": ['.. noteid.. ']}, "version": 6}')
- ifield = string.gsub(ifield, "\"", "\\\"")
- afield = string.gsub(afield, "\"", "\\\"")
- tfield = string.gsub(tfield, "\"", "\\\"")
- if note ~= nil then
- get('{"action": "updateNoteFields", "version": 6, "params": {"note": {"id": ' .. noteid.. ', "fields": {
- "' .. SENTENCE_AUDIO_FIELD .. '": "' .. afield .. '",
- "' .. SENTENCE_FIELD .. '": "' .. tfield .. '",
- "' .. IMAGE_FIELD .. '": "' .. ifield .. '",
- } } } }')
- mp.osd_message("Updated note: " .. note["result"][1]["fields"][FRONT_FIELD]["value"], 3)
- msg.info("Updated note: " .. note["result"][1]["fields"][FRONT_FIELD]["value"])
- end
- end
- function ex()
- pcall(get_extract)
- end
- mp.observe_property("sub-text", 'string', set_clipboard)
- mp.add_key_binding("ctrl+v", ex)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement