177 lines
4.3 KiB
Lua
177 lines
4.3 KiB
Lua
local wibox = require('wibox')
|
|
local awful = require('awful')
|
|
local gears = require('gears')
|
|
local beautiful = require('beautiful')
|
|
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
local builder = require('widget.notif-center.build-notifbox.notifbox-ui-elements')
|
|
local notifbox_core = require('widget.notif-center.build-notifbox')
|
|
|
|
local notifbox_layout = notifbox_core.notifbox_layout
|
|
local remove_notifbox_empty = notifbox_core.remove_notifbox_empty
|
|
local reset_notifbox_layout = notifbox_core.reset_notifbox_layout
|
|
|
|
local return_date_time = function(format)
|
|
return os.date(format)
|
|
end
|
|
|
|
local parse_to_seconds = function(time)
|
|
local hourInSec = tonumber(string.sub(time, 1, 2)) * 3600
|
|
local minInSec = tonumber(string.sub(time, 4, 5)) * 60
|
|
local getSec = tonumber(string.sub(time, 7, 8))
|
|
return (hourInSec + minInSec + getSec)
|
|
end
|
|
|
|
notifbox_box = function(notif, icon, title, message, app, bgcolor)
|
|
|
|
local time_of_pop = return_date_time('%H:%M:%S')
|
|
local exact_time = return_date_time('%I:%M %p')
|
|
local exact_date_time = return_date_time('%b %d, %I:%M %p')
|
|
|
|
local notifbox_timepop = wibox.widget {
|
|
id = 'time_pop',
|
|
markup = nil,
|
|
font = 'SF Pro Text Regular 10',
|
|
align = 'left',
|
|
valign = 'center',
|
|
visible = true,
|
|
widget = wibox.widget.textbox
|
|
}
|
|
|
|
local notifbox_dismiss = builder.notifbox_dismiss()
|
|
|
|
local time_of_popup = gears.timer {
|
|
timeout = 60,
|
|
call_now = true,
|
|
autostart = true,
|
|
callback = function()
|
|
|
|
local time_difference = nil
|
|
|
|
time_difference = parse_to_seconds(return_date_time('%H:%M:%S')) - parse_to_seconds(time_of_pop)
|
|
time_difference = tonumber(time_difference)
|
|
|
|
if time_difference < 60 then
|
|
notifbox_timepop:set_markup('now')
|
|
|
|
elseif time_difference >= 60 and time_difference < 3600 then
|
|
local time_in_minutes = math.floor(time_difference / 60)
|
|
notifbox_timepop:set_markup(time_in_minutes .. 'm ago')
|
|
|
|
elseif time_difference >= 3600 and time_difference < 86400 then
|
|
notifbox_timepop:set_markup(exact_time)
|
|
|
|
elseif time_difference >= 86400 then
|
|
notifbox_timepop:set_markup(exact_date_time)
|
|
return false
|
|
|
|
end
|
|
|
|
collectgarbage('collect')
|
|
end
|
|
}
|
|
|
|
local notifbox_template = wibox.widget {
|
|
id = 'notifbox_template',
|
|
expand = 'none',
|
|
{
|
|
{
|
|
layout = wibox.layout.fixed.vertical,
|
|
spacing = dpi(5),
|
|
{
|
|
expand = 'none',
|
|
layout = wibox.layout.align.horizontal,
|
|
{
|
|
layout = wibox.layout.fixed.horizontal,
|
|
spacing = dpi(5),
|
|
builder.notifbox_icon(icon),
|
|
builder.notifbox_appname(app),
|
|
},
|
|
nil,
|
|
{
|
|
notifbox_timepop,
|
|
notifbox_dismiss,
|
|
layout = wibox.layout.fixed.horizontal
|
|
}
|
|
},
|
|
{
|
|
layout = wibox.layout.fixed.vertical,
|
|
spacing = dpi(5),
|
|
{
|
|
builder.notifbox_title(title),
|
|
builder.notifbox_message(message),
|
|
layout = wibox.layout.fixed.vertical
|
|
},
|
|
builder.notifbox_actions(notif),
|
|
},
|
|
|
|
},
|
|
margins = dpi(10),
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = bgcolor,
|
|
shape = function(cr, width, height)
|
|
gears.shape.partially_rounded_rect(cr, width, height, true, true, true, true, beautiful.groups_radius)
|
|
end,
|
|
widget = wibox.container.background,
|
|
}
|
|
|
|
-- Put the generated template to a container
|
|
local notifbox = wibox.widget {
|
|
notifbox_template,
|
|
shape = function(cr, width, height)
|
|
gears.shape.partially_rounded_rect(cr, width, height, true, true, true, true, beautiful.groups_radius)
|
|
end,
|
|
widget = wibox.container.background
|
|
}
|
|
|
|
-- Delete notification box
|
|
local notifbox_delete = function()
|
|
notifbox_layout:remove_widgets(notifbox, true)
|
|
end
|
|
|
|
-- Delete notifbox on LMB
|
|
notifbox:buttons(
|
|
awful.util.table.join(
|
|
awful.button(
|
|
{},
|
|
1,
|
|
function()
|
|
if #notifbox_layout.children == 1 then
|
|
reset_notifbox_layout()
|
|
else
|
|
notifbox_delete()
|
|
end
|
|
collectgarbage('collect')
|
|
end
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Add hover, and mouse leave events
|
|
notifbox_template:connect_signal(
|
|
"mouse::enter",
|
|
function()
|
|
notifbox.bg = beautiful.groups_bg
|
|
notifbox_timepop.visible = false
|
|
notifbox_dismiss.visible = true
|
|
end
|
|
)
|
|
|
|
notifbox_template:connect_signal(
|
|
"mouse::leave",
|
|
function()
|
|
notifbox.bg = beautiful.tranparent
|
|
notifbox_timepop.visible = true
|
|
notifbox_dismiss.visible = false
|
|
end
|
|
)
|
|
|
|
collectgarbage('collect')
|
|
|
|
return notifbox
|
|
end
|
|
|
|
|
|
return notifbox_box |