init
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
-- Copyright (c) 2021, Eisa AlAwadhi
|
||||
-- License: BSD 2-Clause License
|
||||
|
||||
-- Creator: Eisa AlAwadhi
|
||||
-- Project: UndoRedo
|
||||
-- Version: 2.2
|
||||
|
||||
local utils = require 'mp.utils'
|
||||
local msg = require 'mp.msg'
|
||||
local seconds = 0
|
||||
local countTimer = -1
|
||||
local seekTime = 0
|
||||
local seekNumber = 0
|
||||
local currentIndex = 0
|
||||
local seekTable = {}
|
||||
local seeking = 0
|
||||
local undoRedo = 0
|
||||
local pause = false
|
||||
seekTable[0] = 0
|
||||
|
||||
----------------------------USER CUSTOMIZATION SETTINGS-----------------------------------
|
||||
--These settings are for users to manually change some options in the script.
|
||||
--Keybinds can be defined in the bottom of the script.
|
||||
|
||||
local osd_messages = true --true is for displaying osd messages when actions occur, Change to false will disable all osd messages generated from this script
|
||||
|
||||
---------------------------END OF USER CUSTOMIZATION SETTINGS---------------------
|
||||
|
||||
local function prepareUndoRedo()
|
||||
if (pause == true) then
|
||||
seconds = seconds
|
||||
else
|
||||
seconds = seconds - 0.5
|
||||
end
|
||||
seekTable[currentIndex] = seekTable[currentIndex] + seconds
|
||||
seconds = 0
|
||||
end
|
||||
|
||||
local function getUndoRedo()
|
||||
if (seeking == 0) then
|
||||
prepareUndoRedo()
|
||||
|
||||
seekNumber = currentIndex + 1
|
||||
currentIndex = seekNumber
|
||||
seekTime = math.floor(mp.get_property_number('time-pos'))
|
||||
table.insert(seekTable, seekNumber, seekTime)
|
||||
|
||||
undoRedo = 0
|
||||
|
||||
elseif (seeking == 1) then
|
||||
seeking = 0
|
||||
end
|
||||
end
|
||||
|
||||
mp.register_event('file-loaded', function()
|
||||
filePath = mp.get_property('path')
|
||||
|
||||
timer = mp.add_periodic_timer(0.1, function()
|
||||
seconds = seconds + 0.1
|
||||
end)
|
||||
|
||||
if (pause == true) then
|
||||
timer:stop()
|
||||
else
|
||||
timer:resume()
|
||||
end
|
||||
|
||||
timer2 = mp.add_periodic_timer(0.1, function()
|
||||
countTimer = countTimer + 0.1
|
||||
|
||||
if (countTimer == 0.6) then
|
||||
timer:resume()
|
||||
getUndoRedo()
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
timer2:stop()
|
||||
end)
|
||||
|
||||
|
||||
mp.register_event('seek', function()
|
||||
countTimer = 0
|
||||
timer2:resume()
|
||||
timer:stop()
|
||||
end)
|
||||
|
||||
mp.observe_property('pause', 'bool', function(name, value)
|
||||
if value then
|
||||
if timer ~= nil then
|
||||
timer:stop()
|
||||
end
|
||||
pause = true
|
||||
else
|
||||
if timer ~= nil then
|
||||
timer:resume()
|
||||
end
|
||||
pause = false
|
||||
end
|
||||
end)
|
||||
|
||||
mp.register_event('end-file', function()
|
||||
if timer ~= nil then
|
||||
timer:kill()
|
||||
end
|
||||
if timer2 ~= nil then
|
||||
timer2:kill()
|
||||
end
|
||||
seekNumber = 0
|
||||
currentIndex = 0
|
||||
undoRedo = 0
|
||||
seconds = 0
|
||||
countTimer = -1
|
||||
seekTable[0] = 0
|
||||
end)
|
||||
|
||||
local function undo()
|
||||
if (filePath ~= nil) and (countTimer >= 0) and (countTimer < 0.6) and (seeking == 0) then
|
||||
timer2:stop()
|
||||
|
||||
getUndoRedo()
|
||||
|
||||
currentIndex = currentIndex - 1
|
||||
if (currentIndex < 0) then
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('No Undo Found')
|
||||
end
|
||||
currentIndex = 0
|
||||
msg.info('No undo found')
|
||||
else
|
||||
if (seekTable[currentIndex] < 0) then
|
||||
seekTable[currentIndex] = 0
|
||||
end
|
||||
|
||||
seeking = 1
|
||||
|
||||
mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact')
|
||||
|
||||
undoRedo = 1
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('Undo')
|
||||
end
|
||||
msg.info('Seeked using undo')
|
||||
end
|
||||
elseif (filePath ~= nil) and (currentIndex > 0) then
|
||||
|
||||
prepareUndoRedo()
|
||||
currentIndex = currentIndex - 1
|
||||
|
||||
if (seekTable[currentIndex] < 0) then
|
||||
seekTable[currentIndex] = 0
|
||||
end
|
||||
|
||||
seeking = 1
|
||||
mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact')
|
||||
|
||||
undoRedo = 1
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('Undo')
|
||||
end
|
||||
msg.info('Seeked using undo')
|
||||
elseif (filePath ~= nil) and (currentIndex == 0) then
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('No Undo Found')
|
||||
end
|
||||
msg.info('No undo found')
|
||||
end
|
||||
end
|
||||
|
||||
local function redo()
|
||||
if (filePath ~= nil) and (currentIndex < seekNumber) then
|
||||
|
||||
prepareUndoRedo()
|
||||
currentIndex = currentIndex + 1
|
||||
|
||||
if (seekTable[currentIndex] < 0) then
|
||||
seekTable[currentIndex] = 0
|
||||
end
|
||||
|
||||
seeking = 1
|
||||
mp.commandv('seek', seekTable[currentIndex], 'absolute', 'exact')
|
||||
|
||||
undoRedo = 0
|
||||
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('Redo')
|
||||
end
|
||||
msg.info('Seeked using redo')
|
||||
elseif (filePath ~= nil) and (currentIndex == seekNumber) then
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('No Redo Found')
|
||||
end
|
||||
msg.info('No redo found')
|
||||
end
|
||||
end
|
||||
|
||||
local function undoLoop()
|
||||
if (filePath ~= nil) and (undoRedo == 0) then
|
||||
undo()
|
||||
elseif (filePath ~= nil) and (undoRedo == 1) then
|
||||
redo()
|
||||
elseif (filePath ~= nil) and (countTimer == -1) then
|
||||
if (osd_messages == true) then
|
||||
mp.osd_message('No Undo Found')
|
||||
end
|
||||
msg.info('No undo found')
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
mp.add_key_binding("ctrl+z", "undo", undo)
|
||||
mp.add_key_binding("ctrl+Z", "undoCaps", undo)
|
||||
|
||||
mp.add_key_binding("ctrl+y", "redo", redo)
|
||||
mp.add_key_binding("ctrl+Y", "redoCaps", redo)
|
||||
|
||||
mp.add_key_binding("ctrl+alt+z", "undoLoop", undoLoop)
|
||||
mp.add_key_binding("ctrl+alt+Z", "undoLoopCaps", undoLoop)
|
||||
Reference in New Issue
Block a user