fix: add battery notif (#441)
* fix: waybar style battery msgs * Revert "fix: waybar style battery msgs" This reverts commit 924d998ddda6cb4becc87fabfd7958a0f7ecc773. * fix: revert changes --------- Co-authored-by: Jas Singh <jaskiratpal.singh@outlook.com>
This commit is contained in:
21
lib/utils.ts
21
lib/utils.ts
@@ -13,6 +13,8 @@ import { Window } from 'types/@girs/gtk-3.0/gtk-3.0.cjs';
|
||||
import { namedColors } from './constants/colors';
|
||||
import { distroIcons } from './constants/distro';
|
||||
import { distro } from './variables';
|
||||
const battery = await Service.import('battery');
|
||||
import options from 'options';
|
||||
|
||||
export type Binding<T> = import('types/service').Binding<any, any, T>;
|
||||
|
||||
@@ -200,3 +202,22 @@ export function getDistroIcon(): string {
|
||||
const icon = distroIcons.find(([id]) => id === distro.id);
|
||||
return icon ? icon[1] : ''; // default icon if not found
|
||||
}
|
||||
|
||||
export const warnOnLowBattery = (): void => {
|
||||
battery.connect('notify::percent', () => {
|
||||
const { lowBatteryThreshold, lowBatteryNotification, lowBatteryNotificationText, lowBatteryNotificationTitle } =
|
||||
options.menus.power;
|
||||
if (!lowBatteryNotification.value || battery.charging) return;
|
||||
const lowThreshold = lowBatteryThreshold.value;
|
||||
|
||||
if (battery.percent === lowThreshold || battery.percent === lowThreshold / 2) {
|
||||
Notify({
|
||||
summary: lowBatteryNotificationTitle.value.replace('/$POWER_LEVEL/g', battery.percent.toString()),
|
||||
body: lowBatteryNotificationText.value.replace('/$POWER_LEVEL/g', battery.percent.toString()),
|
||||
iconName: icons.ui.warning,
|
||||
urgency: 'critical',
|
||||
timeout: 7000,
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
4
main.ts
4
main.ts
@@ -11,12 +11,12 @@ import { Bar } from 'modules/bar/Bar';
|
||||
import MenuWindows from './modules/menus/main.js';
|
||||
import SettingsDialog from 'widget/settings/SettingsDialog';
|
||||
import Notifications from './modules/notifications/index.js';
|
||||
import { bash, forMonitors } from 'lib/utils';
|
||||
import { bash, forMonitors, warnOnLowBattery } from 'lib/utils';
|
||||
import options from 'options.js';
|
||||
import OSD from 'modules/osd/index';
|
||||
|
||||
App.config({
|
||||
onConfigParsed: () => Utils.execAsync(`python3 ${App.configDir}/services/bluetooth.py`),
|
||||
onConfigParsed: () => [Utils.execAsync(`python3 ${App.configDir}/services/bluetooth.py`), warnOnLowBattery()],
|
||||
windows: [...MenuWindows, Notifications(), SettingsDialog(), ...forMonitors(Bar), OSD()],
|
||||
closeWindowDelay: {
|
||||
sideright: 350,
|
||||
|
||||
@@ -32,14 +32,14 @@ const BatteryLabel = (): BarBoxChild => {
|
||||
|
||||
const generateTooltip = (timeSeconds: number, isCharging: boolean, isCharged: boolean): string => {
|
||||
if (isCharged) {
|
||||
return 'Fully Charged!!!';
|
||||
return 'Full';
|
||||
}
|
||||
|
||||
const { hours, minutes } = formatTime(timeSeconds);
|
||||
if (isCharging) {
|
||||
return `${hours} hours ${minutes} minutes until full`;
|
||||
return `Time to full: ${hours} h ${minutes} min`;
|
||||
} else {
|
||||
return `${hours} hours ${minutes} minutes left`;
|
||||
return `Time to empty: ${hours} h ${minutes} min`;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1160,6 +1160,12 @@ const options = mkOptions(OPTIONS, {
|
||||
raiseMaximumVolume: opt(false),
|
||||
},
|
||||
power: {
|
||||
lowBatteryNotification: opt(false),
|
||||
lowBatteryThreshold: opt(20),
|
||||
lowBatteryNotificationTitle: opt('Warning: Low battery'),
|
||||
lowBatteryNotificationText: opt(
|
||||
'Your battery is running low ($POWER_LEVEL %).\n\nPlease plug in your charger.',
|
||||
),
|
||||
showLabel: opt(true),
|
||||
confirmation: opt(true),
|
||||
sleep: opt('systemctl suspend'),
|
||||
|
||||
@@ -17,6 +17,28 @@ export const PowerMenuSettings = (): Scrollable<Child, Attribute> => {
|
||||
children: [
|
||||
Header('Power Menu'),
|
||||
Option({ opt: options.menus.power.showLabel, title: 'Show Label', type: 'boolean' }),
|
||||
Option({
|
||||
opt: options.menus.power.lowBatteryNotification,
|
||||
title: 'Show Notification For Low Battery',
|
||||
type: 'boolean',
|
||||
}),
|
||||
Option({
|
||||
opt: options.menus.power.lowBatteryThreshold,
|
||||
title: 'Battery Level For Notification',
|
||||
type: 'number',
|
||||
}),
|
||||
Option({
|
||||
opt: options.menus.power.lowBatteryNotificationTitle,
|
||||
title: 'Low Battery Notification Title',
|
||||
subtitle: 'Use $POWER_LEVEL To Show Battery Percent',
|
||||
type: 'string',
|
||||
}),
|
||||
Option({
|
||||
opt: options.menus.power.lowBatteryNotificationText,
|
||||
title: 'Low Battery Notification Body',
|
||||
subtitle: 'Use $POWER_LEVEL To Show Battery Percent',
|
||||
type: 'string',
|
||||
}),
|
||||
Option({ opt: options.menus.power.confirmation, title: 'Confirmation Dialog', type: 'boolean' }),
|
||||
Option({ opt: options.menus.power.shutdown, title: 'Shutdown Command', type: 'string' }),
|
||||
Option({ opt: options.menus.power.reboot, title: 'Reboot Command', type: 'string' }),
|
||||
|
||||
Reference in New Issue
Block a user