/* * monitor.c * * Created on: 18 июл. 2022 г. * Author: alexander */ #include #include #include "monitor.h" #include "rxrandr.h" static bool checkMonitor(Monitors *dbMonitors, x_info *pcMonitors) { if (!dbMonitors->size || !pcMonitors->count || !(dbMonitors->size == pcMonitors->count)) { return false; } bool compare = false; for (size_t i = 0; i < dbMonitors->size; ++i) { for (size_t j = 0; j < pcMonitors->count; ++j) { if (!strcmp(pcMonitors->monitor[j].name, dbMonitors->monitor[i]->data[1])) { compare = true; } } if (!compare) { return false; } compare = false; } return true; } Monitors *loadMonitors() { Monitors *dbMonitors = dbGetMonitorsList(); x_info *pcMonitors = getXInfo(); if (!checkMonitor(dbMonitors, pcMonitors)) // Если строки не равны, произвести перезапись в БД { if (dbMonitors) dbFreeMonitors(dbMonitors); if (!deleteAllMonitors()) { fprintf(stderr, "Не удалось удалить записи мониторов из БД\n"); exit(1); } for (size_t i = 0; i < pcMonitors->count; ++i) { dbAddMonitor(pcMonitors->monitor[i].name, pcMonitors->monitor[i].primary); } freeXInfo(pcMonitors); return dbGetMonitorsList(); } freeXInfo(pcMonitors); return dbMonitors; } void freeMonitors(Monitors *monitors) { for (size_t i = 0; i < monitors->size; ++i) { free(monitors->monitor[i]->data[2]); free(monitors->monitor[i]->data[3]); free(monitors->monitor[i]->data); free(monitors->monitor[i]); } free(monitors); }