Files
Archived/backups/bat0daemonbak/src/notification.c.bak
2025-02-24 15:18:44 -05:00

144 lines
4.2 KiB
C

#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "battery_monitor.h"
#define LOG_FILE "/home/klein/codeWS/C/bat0daemon/docs/battery_monitor.log"
void log_message(const char *message) {
FILE *log_file = fopen(LOG_FILE, "a");
if (log_file) {
fprintf(log_file, "%s\n", message);
fclose(log_file);
} else {
perror("Failed to open log file");
}
}
void activate_battery_saving_mode() {
log_message("Activating battery saving mode");
kill_processes("/home/klein/codeWS/C/bat0daemon/docs/procress_list.txt");
set_brightness(50);
}
void enter_sleep_mode() {
log_message("Entering sleep mode");
system("systemctl suspend");
}
void show_notification(const char *message, const char *title) {
log_message("Showing notification");
GtkWidget *dialog;
gtk_init(0, NULL);
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_NONE,
"%s", message);
gtk_dialog_add_button(GTK_DIALOG(dialog), "OK", GTK_RESPONSE_OK);
gtk_dialog_add_button(GTK_DIALOG(dialog), "Battery Saving Mode", GTK_RESPONSE_APPLY);
if (g_strcmp0(title, "Critical Battery Warning") == 0) {
gtk_dialog_add_button(GTK_DIALOG(dialog), "Sleep", GTK_RESPONSE_CLOSE);
}
gtk_window_set_title(GTK_WINDOW(dialog), title);
gint response = gtk_dialog_run(GTK_DIALOG(dialog));
if (response == GTK_RESPONSE_APPLY) {
activate_battery_saving_mode();
} else if (response == GTK_RESPONSE_CLOSE) {
enter_sleep_mode();
}
gtk_widget_destroy(dialog);
while (g_main_context_iteration(NULL, FALSE));
}
int get_battery_level() {
FILE *file;
int battery_level = -1;
file = fopen("/sys/class/power_supply/BAT0/capacity", "r");
if (file == NULL) {
perror("Failed to open capacity file");
log_message("Failed to open capacity file");
return -1;
}
if (fscanf(file, "%d", &battery_level) != 1) {
perror("Failed to read battery level");
log_message("Failed to read battery level");
fclose(file);
return -1;
}
fclose(file);
return battery_level;
}
void kill_processes(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open process list file");
log_message("Failed to open process list file");
return;
}
char process_name[256];
while (fgets(process_name, sizeof(process_name), file)) {
process_name[strcspn(process_name, "\n")] = 0; // Remove newline character
if (strlen(process_name) > 0) {
char command[300];
snprintf(command, sizeof(command), "pkill %s", process_name);
log_message(command); // Log the command being executed
system(command);
}
}
fclose(file);
}
void set_brightness(int brightness) {
const char *brightness_path = "/sys/class/backlight/intel_backlight/brightness";
const char *max_brightness_path = "/sys/class/backlight/intel_backlight/max_brightness";
int max_brightness = 100;
int new_brightness = 0;
char buffer[4];
int fd = open(max_brightness_path, O_RDONLY);
if (fd == -1) {
perror("Failed to open max brightness file");
log_message("Failed to open max brightness file");
return;
}
if (read(fd, buffer, sizeof(buffer)) != -1) {
max_brightness = atoi(buffer);
} else {
perror("Failed to read max brightness");
log_message("Failed to read max brightness");
}
close(fd);
new_brightness = max_brightness * brightness / 100;
fd = open(brightness_path, O_WRONLY);
if (fd == -1) {
perror("Failed to open brightness file");
log_message("Failed to open brightness file");
return;
}
snprintf(buffer, sizeof(buffer), "%d", new_brightness);
if (write(fd, buffer, strlen(buffer)) == -1) {
perror("Failed to write to brightness file");
log_message("Failed to write to brightness file");
}
close(fd);
}