filter: index/unindex dives on loading or clearing logs

When loading dive data, populate the fulltext index. When clearing
dive data, free the fulltext index. When deleting a dive, remove it
from the fulltext index.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2020-02-16 22:26:47 +01:00 committed by Dirk Hohndel
parent 6434ad2628
commit d3f6e032cc
3 changed files with 20 additions and 0 deletions

View file

@ -17,6 +17,10 @@
#include "tag.h"
#include "trip.h"
#include "structured_list.h"
#ifndef SUBSURFACE_MOBILE
#include "fulltext.h"
#endif
/* one could argue about the best place to have this variable -
* it's used in the UI, but it seems to make the most sense to have it
@ -356,6 +360,9 @@ static void free_dive_structures(struct dive *d)
{
if (!d)
return;
#ifndef SUBSURFACE_MOBILE
fulltext_unregister(d);
#endif
/* free the strings */
free(d->buddy);
free(d->divemaster);
@ -401,6 +408,9 @@ static void copy_dive_nodc(const struct dive *s, struct dive *d)
*d = *s;
memset(&d->cylinders, 0, sizeof(d->cylinders));
memset(&d->weightsystems, 0, sizeof(d->weightsystems));
#ifndef SUBSURFACE_MOBILE
d->full_text = NULL;
#endif
invalidate_dive_cache(d);
d->buddy = copy_string(s->buddy);
d->divemaster = copy_string(s->divemaster);

View file

@ -140,6 +140,7 @@ struct dive_site;
struct dive_site_table;
struct dive_trip;
struct trip_table;
struct full_text_cache;
struct dive {
struct dive_trip *divetrip;
timestamp_t when;

View file

@ -5,6 +5,7 @@
#include "deco.h"
#include "divesite.h"
#include "divelist.h"
#include "fulltext.h"
#include "planner.h"
#include "qthelper.h"
#include "gettext.h"
@ -829,6 +830,10 @@ void process_loaded_dives()
/* Autogroup dives if desired by user. */
autogroup_dives(&dive_table, &trip_table);
#ifndef SUBSURFACE_MOBILE
fulltext_reload();
#endif
}
/*
@ -1338,6 +1343,10 @@ int get_dive_id_closest_to(timestamp_t when)
void clear_dive_file_data()
{
#ifndef SUBSURFACE_MOBILE
fulltext_unregister_all();
#endif
while (dive_table.nr)
delete_single_dive(0);
current_dive = NULL;