mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-01 00:33:24 +00:00
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:
parent
634df1a337
commit
a8a8bcd86a
3 changed files with 29 additions and 2 deletions
24
dive.c
24
dive.c
|
@ -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
3
dive.h
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue