fix: all the bugs with the new database and commanding
This commit is contained in:
parent
9602e6e937
commit
924633f272
12 changed files with 99 additions and 149 deletions
src/models
|
@ -55,20 +55,14 @@ relay_db_select_mapper(sqlite3_stmt *stmt)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
memset(new_relay->schedules, 0, sizeof(schedule_t*) * 7);
|
||||
relay_reload_schedules(new_relay);
|
||||
|
||||
schedule_t **schedules = schedule_get_relay_weekdays(new_relay->id);
|
||||
for(int i = 0; i < 7; ++i)
|
||||
{
|
||||
if(schedules[i] == NULL)
|
||||
{
|
||||
LOGGER_ERR("got only %d/7 schedules for relay_id %d\n", i, new_relay->id);
|
||||
relay_free(new_relay);
|
||||
free(schedules);
|
||||
return NULL;
|
||||
}
|
||||
new_relay->schedules[i] = schedules[i];
|
||||
}
|
||||
free(schedules); // don't free list, because contents are kept in relay->schedules
|
||||
new_relay->is_on = -1;
|
||||
new_relay->is_on_schedule = -1;
|
||||
new_relay->pulse_timer = 0;
|
||||
new_relay->sent_to_broker = 0;
|
||||
|
||||
return new_relay;
|
||||
}
|
||||
|
@ -119,11 +113,11 @@ relay_save(relay_t *relay)
|
|||
sqlite3_stmt *stmt;
|
||||
if(relay->id)
|
||||
{
|
||||
sqlite3_prepare_v2(global_database, "UPDATE relays set number = ?2, name = ?3, controller_id = ?4 WHERE id = ?1;", -1, &stmt, NULL);
|
||||
sqlite3_prepare_v2(global_database, "UPDATE relays set number = ?2, name = ?3 WHERE id = ?1;", -1, &stmt, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlite3_prepare_v2(global_database, "INSERT INTO relays(number, name, controller_id) values (?2, ?3, ?4);", -1, &stmt, NULL);
|
||||
sqlite3_prepare_v2(global_database, "INSERT INTO relays(number, name) values (?2, ?3);", -1, &stmt, NULL);
|
||||
}
|
||||
|
||||
int result = db_update_insert(relay, stmt);
|
||||
|
@ -149,6 +143,7 @@ relay_save(relay_t *relay)
|
|||
if(relay->id == 0)
|
||||
{
|
||||
relay->id = sqlite3_last_insert_rowid(global_database);
|
||||
LOGGER_DEBUG("new relay - new id: %d\n", relay->id);
|
||||
}
|
||||
|
||||
LOGGER_DEBUG("cleaning relay_schedule junction\n");
|
||||
|
@ -177,6 +172,7 @@ relay_create(uint8_t number)
|
|||
{
|
||||
relay_t *new_relay = malloc(sizeof(relay_t));
|
||||
|
||||
new_relay->id = 0;
|
||||
new_relay->number = number;
|
||||
new_relay->name[0] = '\0';
|
||||
|
||||
|
@ -217,23 +213,31 @@ void
|
|||
relay_reload_schedules(relay_t *relay)
|
||||
{
|
||||
schedule_t **schedules = schedule_get_relay_weekdays(relay->id);
|
||||
|
||||
uuid_t off_id;
|
||||
memset(off_id, 0, sizeof(uuid_t));
|
||||
memcpy(off_id, "off", 3);
|
||||
|
||||
int fill_with_off = 0;
|
||||
for(int i = 0; i < 7; ++i)
|
||||
{
|
||||
if(schedules[i] == NULL)
|
||||
if(schedules[i] == NULL || fill_with_off)
|
||||
{
|
||||
LOGGER_ERR("got only %d/7 schedules for relay_id %d\n", i, relay->id);
|
||||
relay_free(relay);
|
||||
schedule_free_list(schedules);
|
||||
return;
|
||||
LOGGER_WARNING("got only %d/7 schedules for relay_id %d\n", i, relay->id);
|
||||
relay->schedules[i] = schedule_get_by_uid(off_id);
|
||||
|
||||
fill_with_off = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(relay->schedules[i])
|
||||
{
|
||||
schedule_free(relay->schedules[i]);
|
||||
}
|
||||
relay->schedules[i] = schedules[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(int i = 0; i < 7; ++i)
|
||||
{
|
||||
schedule_free(relay->schedules[i]);
|
||||
relay->schedules[i] = schedules[i];
|
||||
}
|
||||
free(schedules); // don't free list, because contents are kept in relay->schedules
|
||||
}
|
||||
|
||||
|
@ -248,12 +252,12 @@ int
|
|||
relay_is_on_schedule(relay_t *relay, struct tm *time_struct)
|
||||
{
|
||||
schedule_t *schedule = relay->schedules[helper_get_weekday(time_struct)];
|
||||
if(schedule->length == 0)
|
||||
if(schedule->periods_count == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
for(uint16_t i = 0; i < schedule->length; ++i)
|
||||
for(uint16_t i = 0; i < schedule->periods_count; ++i)
|
||||
{
|
||||
if(period_includes_time(schedule->periods[i], time_struct))
|
||||
{
|
||||
|
@ -271,8 +275,8 @@ relay_debug(relay_t *relay)
|
|||
LOGGER_DEBUG("relay is NULL\n");
|
||||
return;
|
||||
}
|
||||
LOGGER_DEBUG("(1/3) %d @ %p\n", relay->number, (void*)relay);
|
||||
LOGGER_DEBUG("(2/3) name: %s\n", relay->name);
|
||||
LOGGER_DEBUG("(1/3) %3d @ %p\n", relay->number, (void*)relay);
|
||||
LOGGER_DEBUG("(2/3) id: %3d; name: %s\n", relay->id, relay->name);
|
||||
LOGGER_DEBUG("(3/3) schedules @ %p:\n", (void*)relay->schedules);
|
||||
for(int i = 0; i < 7; ++i)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue