AmendHub

Download:

jcs

/

subtext

/

amendments

/

435

db: When caching boards, reindex if needed and store latest post date

Move these cache operations to main after logger has inited since
these can take a while.

jcs made amendment 435 about 1 year ago
--- db.c Wed Mar 15 15:29:46 2023 +++ db.c Fri Mar 17 15:32:41 2023 @@ -23,6 +23,7 @@ #include "bile.h" #include "db.h" #include "folder.h" +#include "logger.h" #include "mail.h" #include "user.h" #include "util.h" @@ -256,11 +257,8 @@ db_init(Str255 path, short vrefnum, struct bile *bile) return NULL; } - if (!was_new) { + if (!was_new) db_config_load(tdb); - db_cache_boards(tdb); - db_cache_folders(tdb); - } memcpy(newfullpath, fullpath, sizeof(newfullpath)); PtoCstr(newfullpath); @@ -752,6 +750,7 @@ void db_cache_boards(struct db *tdb) { Str255 db_filename, board_filename; + struct board_id_time_map first_map; size_t n, size; unsigned long *ids; struct bile_object *obj; @@ -806,7 +805,7 @@ db_cache_boards(struct db *tdb) tdb->boards[n].bile = bile_open(board_filename, tdb->bile->vrefnum); if (tdb->boards[n].bile != NULL) - continue; + goto opened; PtoCstr(board_filename); @@ -829,6 +828,22 @@ db_cache_boards(struct db *tdb) if (tdb->boards[n].bile == NULL) panic("Failed to create board file %s: %d", board_filename, bile_error(NULL)); + +opened: + size = bile_read(tdb->boards[n].bile, + BOARD_SORTED_ID_MAP_RTYPE, 1, &first_map, sizeof(first_map)); + if (size != sizeof(first_map)) { + logger_printf("[db] Reindexing ids on board %s", + tdb->boards[n].name); + board_index_sorted_post_ids(&tdb->boards[n], NULL); + size = bile_read(tdb->boards[n].bile, + BOARD_SORTED_ID_MAP_RTYPE, 1, &first_map, sizeof(first_map)); + if (size != sizeof(first_map)) { + tdb->boards[n].last_post_at = 0; + continue; + } + } + tdb->boards[n].last_post_at = first_map.time; } } --- main.c Wed Mar 15 17:28:49 2023 +++ main.c Fri Mar 17 15:29:35 2023 @@ -104,6 +104,9 @@ main(void) logger_init(); logger_update_title(); + db_cache_boards(db); + db_cache_folders(db); + main_menu_init(); zone_size = (unsigned long)CurStackBase - (unsigned long)ApplZone;