dotfiles/awesome/notif-center/subwidgets/notification-center/dont-disturb.lua
2020-05-16 23:07:21 +03:00

104 lines
No EOL
2.9 KiB
Lua

local awful = require('awful')
local naughty = require('naughty')
local wibox = require('wibox')
local gears = require('gears')
local beautiful = require('beautiful')
local dpi = require('beautiful').xresources.apply_dpi
local clickable_container = require('notif-center.subwidgets.clickable-container')
local HOME = os.getenv('HOME')
local PATH_TO_ICONS = HOME .. '/.config/awesome/notif-center/icons/'
local PATH_TO_WIDGET = HOME .. '/.config/awesome/notif-center/subwidgets/notification-center/'
dont_disturb = false
-- Delete button imagebox
local dont_disturb_imagebox = wibox.widget {
{
id = 'icon',
image = PATH_TO_ICONS .. 'dont-disturb-mode' .. '.svg',
resize = true,
forced_height = dpi(20),
forced_width = dpi(20),
widget = wibox.widget.imagebox,
},
layout = wibox.layout.fixed.horizontal
}
local function update_icon()
local widgetIconName
if dont_disturb then
widgetIconName = 'toggled-on'
dont_disturb_imagebox.icon:set_image(PATH_TO_ICONS .. 'dont-disturb-mode' .. '.svg')
else
widgetIconName = 'toggled-off'
dont_disturb_imagebox.icon:set_image(PATH_TO_ICONS .. 'notify-mode' .. '.svg')
end
end
-- Function to check status after awesome.restart()
local check_disturb_status = function()
local cmd = "cat " .. PATH_TO_WIDGET .. "disturb_status"
awful.spawn.easy_async_with_shell(cmd, function(stdout)
local status = stdout
if status:match("true") then
dont_disturb = true
update_icon()
elseif status:match("false") then
dont_disturb = false
update_icon()
else
dont_disturb = false
awful.spawn.easy_async_with_shell("echo " .. 'false' .. " > " .. PATH_TO_WIDGET .. "disturb_status", function(stdout) end, false)
update_icon()
end
end, false)
end
-- Check status on startup
check_disturb_status()
-- Maintain Status even after awesome.restart() by writing on the PATH_TO_WIDGET/ .. disturb_status
local toggle_disturb = function()
if(dont_disturb == true) then
-- Switch Off
dont_disturb = false
awful.spawn.easy_async_with_shell("echo " .. tostring(dont_disturb) .. " > " .. PATH_TO_WIDGET .. "disturb_status", function(stdout) end, false)
update_icon()
else
-- Switch On
dont_disturb = true
awful.spawn.easy_async_with_shell("echo " .. tostring(dont_disturb) .. " > " .. PATH_TO_WIDGET .. "disturb_status", function(stdout) end, false)
update_icon()
end
end
local dont_disturb_button = clickable_container(wibox.container.margin(dont_disturb_imagebox, dpi(7), dpi(7), dpi(7), dpi(7)))
dont_disturb_button:buttons(
gears.table.join(
awful.button(
{},
1,
nil,
function()
-- toggle
toggle_disturb()
end
)
)
)
local dont_disturb_wrapped = wibox.widget {
{
dont_disturb_button,
bg = beautiful.bg_modal,
shape = gears.shape.circle,
widget = wibox.container.background
},
layout = wibox.layout.fixed.horizontal
}
return dont_disturb_wrapped