222 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
local battery = req_rel(..., "util")
 | 
						|
local widget = {}
 | 
						|
 | 
						|
-- Percentages to warn at
 | 
						|
-- (must be in order least -> greatest)
 | 
						|
widget.warnings = {
 | 
						|
	5, 10, 25, 50
 | 
						|
}
 | 
						|
 | 
						|
widget.warninglog = {}
 | 
						|
 | 
						|
for i=1, #widget.warnings do
 | 
						|
	widget.warninglog[i] = false
 | 
						|
end
 | 
						|
 | 
						|
widget.image_path = beautiful.icons.battery.missing
 | 
						|
widget.icon = wibox.widget {
 | 
						|
	image = beautiful.icons.battery.missing,
 | 
						|
	resize = true,
 | 
						|
	widget = wibox.widget.imagebox,
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
widget.progressbar = wibox.widget {
 | 
						|
	max_value = 100,
 | 
						|
	widget = wibox.widget.progressbar,
 | 
						|
	paddings = beautiful.dpi(2),
 | 
						|
	color = beautiful.color.bar.active,
 | 
						|
	background_color = beautiful.color.transparent,
 | 
						|
	border_color = beautiful.color.bar.active,
 | 
						|
	border_width = beautiful.dpi(1),
 | 
						|
	margins = beautiful.dpi(3)
 | 
						|
}
 | 
						|
 | 
						|
widget.arc = wibox.widget {
 | 
						|
	{
 | 
						|
		widget.icon,
 | 
						|
		top = beautiful.dpi(1),
 | 
						|
		bottom = beautiful.dpi(1),
 | 
						|
		layout = wibox.container.margin,
 | 
						|
	},
 | 
						|
	max_value = 100,
 | 
						|
	thickness = beautiful.dpi(4),
 | 
						|
	start_angle = 4.71238898, -- 2pi*3/4
 | 
						|
	--forced_height = beautiful.dpi(16),
 | 
						|
	--forced_width = beautiful.dpi(16),
 | 
						|
	colors = {"#27D4CC", "#00446B"},
 | 
						|
	bg = "#FFFFFF30",
 | 
						|
	paddings = beautiful.dpi(2),
 | 
						|
	widget = wibox.container.arcchart
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
widget.rotator = wibox.widget {
 | 
						|
	widget.progressbar,
 | 
						|
	forced_width = beautiful.dpi(15),
 | 
						|
	direction = "east",
 | 
						|
	layout = wibox.container.rotate,
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
widget.widget = wibox.widget {
 | 
						|
	{
 | 
						|
		{   -- Right space
 | 
						|
			widget = wibox.widget.separator,
 | 
						|
			color = beautiful.color.transparent,
 | 
						|
			forced_width = beautiful.dpi(3)
 | 
						|
		},
 | 
						|
		{
 | 
						|
			widget.arc,
 | 
						|
			top = beautiful.dpi(2),
 | 
						|
			bottom = beautiful.dpi(2),
 | 
						|
			layout = wibox.container.margin,
 | 
						|
		},
 | 
						|
		{   -- Left space
 | 
						|
			widget = wibox.widget.separator,
 | 
						|
			color = beautiful.color.transparent,
 | 
						|
			forced_width = beautiful.dpi(3)
 | 
						|
		},
 | 
						|
 | 
						|
		layout = wibox.layout.align.horizontal,
 | 
						|
	},
 | 
						|
	layout = wibox.container.background,
 | 
						|
}
 | 
						|
 | 
						|
widget.widget:connect_signal("mouse::enter", function(result)
 | 
						|
	widget.widget.bg = beautiful.color.bar.hover_bg
 | 
						|
end)
 | 
						|
 | 
						|
widget.widget:connect_signal("mouse::leave", function(result)
 | 
						|
	widget.widget.bg = beautiful.color.transparent
 | 
						|
end)
 | 
						|
 | 
						|
widget.update = function(stdout)
 | 
						|
	local batpec = string.match(stdout, "(%d?%d?%d)%%")
 | 
						|
	batpec = tonumber(string.format("% 3d", batpec))
 | 
						|
 | 
						|
	local discharging = string.match(stdout, "discharging") or false
 | 
						|
 | 
						|
	-- Handle low power notifications
 | 
						|
	if discharging then
 | 
						|
		for i=1, #widget.warnings do
 | 
						|
			v = widget.warnings[i]
 | 
						|
			if (batpec <= v) and (not widget.warninglog[i]) then
 | 
						|
				widget.warninglog[i] = true
 | 
						|
 | 
						|
				naughty.notify({
 | 
						|
					title = "Low power",
 | 
						|
					text = "Battery is at " .. tostring(batpec) .. "%",
 | 
						|
					icon = beautiful.icons.battery.caution,
 | 
						|
 | 
						|
					timeout = 5,
 | 
						|
					ignore_suspend = true,
 | 
						|
 | 
						|
					border_color = beautiful.color.battery.danger,
 | 
						|
					preset = beautiful.notification_templates.bottom_right
 | 
						|
				})
 | 
						|
				break
 | 
						|
			end
 | 
						|
		end
 | 
						|
	else
 | 
						|
		for i=1, #widget.warnings do
 | 
						|
			if (batpec >= widget.warnings[i]) then
 | 
						|
				widget.warninglog[i] = false
 | 
						|
			end
 | 
						|
		end
 | 
						|
	end
 | 
						|
 | 
						|
 | 
						|
	widget.progressbar.value = batpec
 | 
						|
	widget.arc.value = batpec
 | 
						|
 | 
						|
	if batpec > 60 then
 | 
						|
		widget.progressbar.color = beautiful.color.battery.good
 | 
						|
	elseif batpec > 40 then
 | 
						|
		widget.progressbar.color = beautiful.color.battery.low
 | 
						|
	elseif batpec <= 40 then
 | 
						|
		widget.progressbar.color = beautiful.color.battery.danger
 | 
						|
	end
 | 
						|
 | 
						|
 | 
						|
	widget.image_path = beautiful.icons.battery.missing
 | 
						|
	-- Set current battery icon
 | 
						|
	if (not discharging) then
 | 
						|
		if batpec > 80 then widget.image_path = beautiful.icons.battery.charging.full
 | 
						|
		elseif batpec > 60 then widget.image_path = beautiful.icons.battery.charging.good
 | 
						|
		elseif batpec > 40 then widget.image_path = beautiful.icons.battery.charging.low
 | 
						|
		elseif batpec > 20 then widget.image_path = beautiful.icons.battery.charging.caution
 | 
						|
		elseif batpec <= 20 then widget.image_path = beautiful.icons.battery.charging.empty end
 | 
						|
	else
 | 
						|
		if batpec > 80 then widget.image_path = beautiful.icons.battery.full
 | 
						|
		elseif batpec > 60 then widget.image_path = beautiful.icons.battery.good
 | 
						|
		elseif batpec > 40 then widget.image_path = beautiful.icons.battery.low
 | 
						|
		elseif batpec > 20 then widget.image_path = beautiful.icons.battery.caution
 | 
						|
		elseif batpec <= 20 then widget.image_path = beautiful.icons.battery.empty end
 | 
						|
	end
 | 
						|
	widget.icon.image = widget.image_path
 | 
						|
 | 
						|
	if (not discharging) and (batpec > 90) then
 | 
						|
		widget.progressbar.border_color = beautiful.color.battery.good
 | 
						|
	elseif (discharging) and (batpec <= 25) then
 | 
						|
		widget.progressbar.border_color = beautiful.color.battery.danger
 | 
						|
	else
 | 
						|
		widget.progressbar.border_color = beautiful.color.bar.active
 | 
						|
	end
 | 
						|
 | 
						|
	if discharging then
 | 
						|
		widget.rotator.direction = "east"
 | 
						|
	else
 | 
						|
		widget.rotator.direction = "west"
 | 
						|
	end
 | 
						|
end
 | 
						|
 | 
						|
widget.readupdate = function()
 | 
						|
	battery.status(
 | 
						|
		function(stdout, stderr, exitreason, exitcode)
 | 
						|
			widget.update(stdout)
 | 
						|
		end
 | 
						|
	)
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
widget.widget:connect_signal("button::press",
 | 
						|
	function(_, _, _, button, mods)
 | 
						|
		if (button == 1) then
 | 
						|
			battery.status(
 | 
						|
				function(stdout, stderr, exitreason, exitcode)
 | 
						|
					local batpec = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
 | 
						|
					local batstat = string.match(stdout, "discharging") or false
 | 
						|
 | 
						|
					if batstat then
 | 
						|
						batstat = "Discharging, "
 | 
						|
					else
 | 
						|
						batstat = "Charging, "
 | 
						|
					end
 | 
						|
 | 
						|
					local out = naughty.notify({
 | 
						|
						title = "Battery:",
 | 
						|
						text = batstat .. batpec .. "%",
 | 
						|
						icon = widget.icon.image,
 | 
						|
						replaces_id = widget.notid,
 | 
						|
						ignore_suspend = true,
 | 
						|
 | 
						|
						preset = beautiful.notification_templates.bottom_right
 | 
						|
					})
 | 
						|
					widget.notid = out.id
 | 
						|
				end
 | 
						|
			)
 | 
						|
		end
 | 
						|
	end
 | 
						|
)
 | 
						|
 | 
						|
battery.watch(
 | 
						|
	10,
 | 
						|
	function(_, stdout)
 | 
						|
		widget.update(stdout)
 | 
						|
	end,
 | 
						|
	widget.widget
 | 
						|
)
 | 
						|
 | 
						|
return widget
 |