first commit
This commit is contained in:
90
mpv/scripts/file-browser/modules/controls.lua
Normal file
90
mpv/scripts/file-browser/modules/controls.lua
Normal file
@@ -0,0 +1,90 @@
|
||||
|
||||
local mp = require 'mp'
|
||||
local msg = require 'mp.msg'
|
||||
local utils = require 'mp.utils'
|
||||
|
||||
local o = require 'modules.options'
|
||||
local g = require 'modules.globals'
|
||||
local fb_utils = require 'modules.utils'
|
||||
local movement = require 'modules.navigation.directory-movement'
|
||||
local ass = require 'modules.ass'
|
||||
local cursor = require 'modules.navigation.cursor'
|
||||
|
||||
local controls = {}
|
||||
|
||||
--opens the browser
|
||||
function controls.open()
|
||||
if not g.state.hidden then return end
|
||||
|
||||
for _,v in ipairs(g.state.keybinds) do
|
||||
mp.add_forced_key_binding(v[1], 'dynamic/'..v[2], v[3], v[4])
|
||||
end
|
||||
|
||||
if o.set_shared_script_properties then utils.shared_script_property_set('file_browser-open', 'yes') end
|
||||
if o.set_user_data then mp.set_property_bool('user-data/file_browser/open', true) end
|
||||
|
||||
if o.toggle_idlescreen then mp.commandv('script-message', 'osc-idlescreen', 'no', 'no_osd') end
|
||||
g.state.hidden = false
|
||||
if g.state.directory == nil then
|
||||
local path = mp.get_property('path')
|
||||
if path or o.default_to_working_directory then movement.goto_current_dir() else movement.goto_root() end
|
||||
return
|
||||
end
|
||||
|
||||
if not g.state.flag_update then ass.draw()
|
||||
else g.state.flag_update = false ; ass.update_ass() end
|
||||
end
|
||||
|
||||
--closes the list and sets the hidden flag
|
||||
function controls.close()
|
||||
if g.state.hidden then return end
|
||||
|
||||
for _,v in ipairs(g.state.keybinds) do
|
||||
mp.remove_key_binding('dynamic/'..v[2])
|
||||
end
|
||||
|
||||
if o.set_shared_script_properties then utils.shared_script_property_set("file_browser-open", "no") end
|
||||
if o.set_user_data then mp.set_property_bool('user-data/file_browser/open', false) end
|
||||
|
||||
if o.toggle_idlescreen then mp.commandv('script-message', 'osc-idlescreen', 'yes', 'no_osd') end
|
||||
g.state.hidden = true
|
||||
ass.remove()
|
||||
end
|
||||
|
||||
--toggles the list
|
||||
function controls.toggle()
|
||||
if g.state.hidden then controls.open()
|
||||
else controls.close() end
|
||||
end
|
||||
|
||||
--run when the escape key is used
|
||||
function controls.escape()
|
||||
--if multiple items are selection cancel the
|
||||
--selection instead of closing the browser
|
||||
if next(g.state.selection) or g.state.multiselect_start then
|
||||
g.state.selection = {}
|
||||
cursor.disable_select_mode()
|
||||
ass.update_ass()
|
||||
return
|
||||
end
|
||||
controls.close()
|
||||
end
|
||||
|
||||
--opens a specific directory
|
||||
function controls.browse_directory(directory, open_browser)
|
||||
if not directory then return end
|
||||
if open_browser == nil then open_browser = true end
|
||||
|
||||
directory = mp.command_native({"expand-path", directory}) or ''
|
||||
-- directory = join_path( mp.get_property("working-directory", ""), directory )
|
||||
|
||||
if directory ~= "" then directory = fb_utils.fix_path(directory, true) end
|
||||
msg.verbose('recieved directory from script message: '..directory)
|
||||
|
||||
directory = fb_utils.resolve_directory_mapping(directory)
|
||||
local co = movement.goto_directory(directory)
|
||||
if open_browser then controls.open() end
|
||||
return co
|
||||
end
|
||||
|
||||
return controls
|
||||
Reference in New Issue
Block a user