172 lines
3.8 KiB
Lua
172 lines
3.8 KiB
Lua
local awful = require('awful')
|
|
local naughty = require('naughty')
|
|
|
|
local user_config = require('widget.screen-recorder.screen-recorder-config')
|
|
|
|
local scripts_tbl = {}
|
|
|
|
local ffmpeg_pid = nil
|
|
|
|
-- Get user settings
|
|
scripts_tbl.user_resolution = user_config.user_resolution
|
|
scripts_tbl.user_offset = user_config.user_offset
|
|
scripts_tbl.user_audio = user_config.user_audio
|
|
scripts_tbl.user_dir = user_config.user_save_directory
|
|
scripts_tbl.user_mic_lvl = user_config.user_mic_lvl
|
|
scripts_tbl.user_fps = user_config.user_fps
|
|
|
|
scripts_tbl.update_user_settings = function(res, offset, audio)
|
|
scripts_tbl.user_resolution = res
|
|
scripts_tbl.user_offset = offset
|
|
scripts_tbl.user_audio = audio
|
|
end
|
|
|
|
scripts_tbl.check_settings = function()
|
|
-- For debugging purpose only
|
|
-- naughty.notification({
|
|
-- message=scripts_tbl.user_resolution .. ' ' .. scripts_tbl.user_offset .. tostring(scripts_tbl.user_audio)
|
|
-- })
|
|
end
|
|
|
|
local create_save_directory = function()
|
|
|
|
local create_dir_cmd = [[
|
|
dir=]] .. scripts_tbl.user_dir .. [[
|
|
|
|
if [ ! -d $dir ]; then
|
|
mkdir -p $dir
|
|
fi
|
|
]]
|
|
|
|
awful.spawn.easy_async_with_shell(
|
|
create_dir_cmd,
|
|
function(stdout) end
|
|
)
|
|
|
|
end
|
|
|
|
create_save_directory()
|
|
|
|
local kill_existing_recording_ffmpeg = function()
|
|
-- Let's killall ffmpeg instance first after awesome (re)-starts if there's any
|
|
awful.spawn.easy_async_with_shell(
|
|
[[
|
|
ps x | grep "ffmpeg -video_size" | grep -v grep | awk '{print $1}' | xargs kill
|
|
]],
|
|
function(stdout) end
|
|
)
|
|
end
|
|
|
|
kill_existing_recording_ffmpeg()
|
|
|
|
local turn_on_the_mic = function()
|
|
awful.spawn.easy_async_with_shell(
|
|
[[
|
|
amixer set Capture cap
|
|
amixer set Capture ]].. scripts_tbl.user_mic_lvl ..[[%
|
|
]],
|
|
function() end
|
|
)
|
|
end
|
|
|
|
local ffmpeg_stop_recording = function()
|
|
awesome.kill(
|
|
ffmpeg_pid, awesome.unix_signal.SIGINT
|
|
)
|
|
end
|
|
|
|
local create_notification = function(file_dir)
|
|
local open_video = naughty.action {
|
|
name = 'Open',
|
|
icon_only = false,
|
|
}
|
|
|
|
local delete_video = naughty.action {
|
|
name = 'Delete',
|
|
icon_only = false,
|
|
}
|
|
|
|
open_video:connect_signal(
|
|
'invoked',
|
|
function()
|
|
awful.spawn('xdg-open ' .. file_dir, false)
|
|
end
|
|
)
|
|
|
|
delete_video:connect_signal(
|
|
'invoked',
|
|
function()
|
|
awful.spawn('gio trash ' .. file_dir, false)
|
|
end
|
|
)
|
|
|
|
naughty.notification ({
|
|
app_name = 'Screenshot Recorder',
|
|
timeout = 60,
|
|
title = '<b>Recording Finished!</b>',
|
|
message = 'Recording can now be viewed.',
|
|
actions = { open_video, delete_video }
|
|
})
|
|
end
|
|
|
|
local ffmpeg_start_recording = function(audio, filename)
|
|
|
|
local add_audio_str = ' '
|
|
|
|
if audio then
|
|
turn_on_the_mic()
|
|
add_audio_str = ' -f pulse -ac 2 -i default '
|
|
end
|
|
|
|
ffmpeg_pid = awful.spawn.easy_async_with_shell(
|
|
[[
|
|
file_name=]] .. filename .. [[
|
|
|
|
ffmpeg -video_size ]] .. scripts_tbl.user_resolution .. [[ -framerate ]] .. scripts_tbl.user_fps .. [[ -f x11grab \
|
|
-i :0.0+]] .. scripts_tbl.user_offset .. add_audio_str .. [[ $file_name
|
|
]],
|
|
function(stdout, stderr)
|
|
|
|
if stderr and stderr:match('Invalid argument') then
|
|
naughty.notification({
|
|
app_name = 'Screen Recorder',
|
|
title = '<b>Invalid Configuration!</b>',
|
|
message = 'Please, put a valid settings!',
|
|
timeout = 60,
|
|
urgency = 'normal'
|
|
})
|
|
awesome.emit_signal('widget::screen_recorder')
|
|
return
|
|
end
|
|
create_notification(filename)
|
|
end
|
|
)
|
|
end
|
|
|
|
local create_unique_filename = function(audio)
|
|
awful.spawn.easy_async_with_shell(
|
|
[[
|
|
dir=]] .. scripts_tbl.user_dir .. [[
|
|
date=$(date '+%Y-%m-%d_%H-%M-%S')
|
|
format=.mp4
|
|
|
|
echo ${dir}${date}${format} | tr -d '\n'
|
|
]],
|
|
function(stdout)
|
|
local filename = stdout
|
|
ffmpeg_start_recording(audio, filename)
|
|
end
|
|
)
|
|
end
|
|
|
|
scripts_tbl.start_recording = function(audio_mode)
|
|
create_save_directory()
|
|
create_unique_filename(audio_mode)
|
|
end
|
|
|
|
scripts_tbl.stop_recording = function()
|
|
ffmpeg_stop_recording()
|
|
end
|
|
|
|
|
|
return scripts_tbl |