mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +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
		Add a link
		
	
		Reference in a new issue