Add helper functions to ensure we have sane tag lists

There should never be empty or duplicate tags on those lists.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2014-07-10 09:39:51 -07:00
parent 634df1a337
commit a8a8bcd86a
3 changed files with 29 additions and 2 deletions

24
dive.c
View file

@ -2089,6 +2089,30 @@ static void join_dive_computers(struct divecomputer *res, struct divecomputer *a
remove_redundant_dc(res, prefer_downloaded);
}
static bool tag_seen_before(struct tag_entry *start, struct tag_entry *before)
{
while(start && start != before) {
if (same_string(start->tag->name, before->tag->name))
return true;
start = start->next;
}
return false;
}
/* remove duplicates and empty nodes */
void taglist_cleanup(struct tag_entry **tag_list)
{
struct tag_entry **tl = tag_list;
while (*tl) {
/* skip tags that are empty or that we have seen before */
if (same_string((*tl)->tag->name, "") || tag_seen_before(*tag_list, *tl)) {
*tl = (*tl)->next;
continue;
}
tl = &(*tl)->next;
}
}
int taglist_get_tagstring(struct tag_entry *tag_list, char *buffer, int len)
{
int i = 0;

3
dive.h
View file

@ -197,6 +197,9 @@ struct divetag *taglist_add_tag(struct tag_entry **tag_list, const char *tag);
*/
int taglist_get_tagstring(struct tag_entry *tag_list, char *buffer, int len);
/* cleans up a list: removes empty tags and duplicates */
void taglist_cleanup(struct tag_entry **tag_list);
void taglist_init_global();
void taglist_free(struct tag_entry *tag_list);

View file

@ -934,9 +934,9 @@ void MainTab::on_timeEdit_timeChanged(const QTime &time)
void MainTab::saveTags()
{
struct dive *cd = current_dive;
Q_FOREACH(const QString& tag, ui.tagWidget->getBlockStringList()){
Q_FOREACH (const QString& tag, ui.tagWidget->getBlockStringList())
taglist_add_tag(&displayed_dive.tag_list, tag.toUtf8().data());
}
taglist_cleanup(&displayed_dive.tag_list);
MODIFY_SELECTED_DIVES(
QString tag;
taglist_free(mydive->tag_list);