mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 20:23:25 +00:00
filter: properly search for tags
The old code used get_taglist_string() and split the resulting string at commas to get the list of tags. This was wrong for two reasons: 1) It was buggy. Every tag but the first would start with a leading space and thus not be found. 2) It was inefficient. The tag list was concatenated, just to be split again. Turn the tag list directly into a QStringList and remove whitespace for good measure. Fixes #2842. Reported-by: Hartley Horwitz <hhrwtz@gmail.com> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
04b6bb8cc9
commit
a7440ce277
2 changed files with 16 additions and 9 deletions
|
@ -1,3 +1,4 @@
|
|||
Filter: fix searching for tags [#2842]
|
||||
Desktop: fix plotting of thumbnails on profile [#2833]
|
||||
Core: always include BT/BLE name, even for devices no recognized as dive computer
|
||||
Core: fix failure to recognize several Aqualung BLE dive computers
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
#include "divefilter.h"
|
||||
#include "divelist.h"
|
||||
#include "qthelper.h"
|
||||
#include "gettextfromc.h"
|
||||
#include "tag.h"
|
||||
#include "subsurface-qt/divelistnotifier.h"
|
||||
|
||||
static void updateDiveStatus(dive *d, bool newStatus, ShownChange &change)
|
||||
|
@ -15,6 +16,15 @@ static void updateDiveStatus(dive *d, bool newStatus, ShownChange &change)
|
|||
}
|
||||
}
|
||||
|
||||
static QStringList getTagList(const dive *d)
|
||||
{
|
||||
QStringList res;
|
||||
for (const tag_entry *tag = d->tag_list; tag; tag = tag->next)
|
||||
res.push_back(QString(tag->tag->name).trimmed());
|
||||
res.append(gettextFromC::tr(divemode_text_ui[d->dc.divemode]));
|
||||
return res;
|
||||
}
|
||||
|
||||
#ifdef SUBSURFACE_MOBILE
|
||||
|
||||
// Check if a string-list contains at least one string that starts with the second argument.
|
||||
|
@ -31,16 +41,14 @@ static bool check(const QStringList &items, const QStringList &list)
|
|||
{ return listContainsSuperstring(list, item); });
|
||||
}
|
||||
|
||||
bool hasTags(const QStringList &tags, const struct dive *d)
|
||||
static bool hasTags(const QStringList &tags, const struct dive *d)
|
||||
{
|
||||
if (tags.isEmpty())
|
||||
return true;
|
||||
QStringList dive_tags = get_taglist_string(d->tag_list).split(",");
|
||||
dive_tags.append(gettextFromC::tr(divemode_text_ui[d->dc.divemode]));
|
||||
return check(tags, dive_tags);
|
||||
return check(tags, getTagList(d));
|
||||
}
|
||||
|
||||
bool hasPersons(const QStringList &people, const struct dive *d)
|
||||
static bool hasPersons(const QStringList &people, const struct dive *d)
|
||||
{
|
||||
if (people.isEmpty())
|
||||
return true;
|
||||
|
@ -220,9 +228,7 @@ namespace {
|
|||
{
|
||||
if (tags.isEmpty())
|
||||
return true;
|
||||
QStringList dive_tags = get_taglist_string(d->tag_list).split(",");
|
||||
dive_tags.append(gettextFromC::tr(divemode_text_ui[d->dc.divemode]));
|
||||
return check(tags, dive_tags, mode, stringMode);
|
||||
return check(tags, getTagList(d), mode, stringMode);
|
||||
}
|
||||
|
||||
bool hasPersons(const QStringList &people, const struct dive *d, FilterData::Mode mode, StringFilterMode stringMode)
|
||||
|
|
Loading…
Add table
Reference in a new issue