Fixed search that may add infinite stuff

This commit is contained in:
emeric
2023-11-02 14:27:14 +01:00
parent 3697c809d3
commit e78f436d9a
7 changed files with 75 additions and 68 deletions
@@ -46,7 +46,7 @@ namespace Database
{
Range range;
std::vector<T> results;
bool moreResults;
bool moreResults{};
RangeResults getSubRange(Range subRange)
{
+6 -3
View File
@@ -38,9 +38,12 @@ namespace UserInterface
Feedback::IFeedbackService& feedbackService{ *Service<Feedback::IFeedbackService>::get() };
Scrobbling::IScrobblingService& scrobblingService{ *Service<Scrobbling::IScrobblingService>::get() };
range = getActualRange(range);
RangeResults<ArtistId> artists;
range = getActualRange(range);
if (range.size == 0)
return artists;
switch (getMode())
{
case Mode::Random:
@@ -76,11 +79,11 @@ namespace UserInterface
case Mode::Search:
{
// do not sort results as we search in both name and sort names, sorting may be very long
Artist::FindParameters params;
params.setClusters(getFilters().getClusterIds());
params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::BySortName);
params.setRange(range);
{
+25 -24
View File
@@ -23,34 +23,35 @@
namespace UserInterface
{
DatabaseCollectorBase::DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount)
: _filters {filters}
, _mode {defaultMode}
, _maxCount {maxCount}
{
}
DatabaseCollectorBase::DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount)
: _filters{ filters }
, _mode{ defaultMode }
, _maxCount{ maxCount }
{
}
DatabaseCollectorBase::Range
DatabaseCollectorBase::getActualRange(Range range) const
{
assert(range.offset < _maxCount);
range.size = std::min(_maxCount - range.offset, range.size);
DatabaseCollectorBase::Range DatabaseCollectorBase::getActualRange(Range range) const
{
assert(range.size > 0);
return range;
}
if (range.offset < _maxCount)
range.size = std::min(_maxCount - range.offset, range.size);
else
range.size = 0;
std::size_t
DatabaseCollectorBase::getMaxCount() const
{
return _maxCount;
}
return range;
}
void
DatabaseCollectorBase::setSearch(std::string_view searchText)
{
_searchText = searchText;
_searchKeywords = StringUtils::splitString(_searchText, " ");
}
std::size_t DatabaseCollectorBase::getMaxCount() const
{
return _maxCount;
}
void DatabaseCollectorBase::setSearch(std::string_view searchText)
{
_searchText = searchText;
_searchKeywords = StringUtils::splitString(_searchText, " ");
}
} // ns UserInterface
+32 -33
View File
@@ -29,44 +29,43 @@
namespace UserInterface
{
class Filters;
class Filters;
class DatabaseCollectorBase
{
public:
using Range = Database::Range;
class DatabaseCollectorBase
{
public:
using Range = Database::Range;
virtual ~DatabaseCollectorBase() {}
virtual ~DatabaseCollectorBase() {}
enum class Mode
{
Random,
Starred,
RecentlyPlayed,
RecentlyAdded,
MostPlayed,
Search,
All
};
enum class Mode
{
Random,
Starred,
RecentlyPlayed,
RecentlyAdded,
MostPlayed,
Search,
All
};
DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount);
DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount);
Mode getMode() const { return _mode; }
void setMode(Mode mode) { _mode = mode; }
void setSearch(std::string_view search);
Mode getMode() const { return _mode; }
void setMode(Mode mode) { _mode = mode; }
void setSearch(std::string_view search);
protected:
Range getActualRange(Range range) const;
std::size_t getMaxCount() const;
Filters& getFilters() { return _filters; }
const std::vector<std::string_view>& getSearchKeywords() const { return _searchKeywords; }
protected:
Range getActualRange(Range range) const;
std::size_t getMaxCount() const;
Filters& getFilters() { return _filters; }
const std::vector<std::string_view>& getSearchKeywords() const { return _searchKeywords; }
private:
Filters& _filters;
std::string _searchText;
std::vector<std::string_view> _searchKeywords;
Mode _mode;
std::size_t _maxCount;
};
private:
Filters& _filters;
std::string _searchText;
std::vector<std::string_view> _searchKeywords;
Mode _mode;
std::size_t _maxCount;
};
} // ns UserInterface
+4 -2
View File
@@ -41,9 +41,11 @@ namespace UserInterface
Feedback::IFeedbackService& feedbackService{ *Service<Feedback::IFeedbackService>::get() };
Scrobbling::IScrobblingService& scrobblingService{ *Service<Scrobbling::IScrobblingService>::get() };
range = getActualRange(range);
RangeResults<ReleaseId> releases;
range = getActualRange(range);
if (range.size == 0)
return releases;
switch (getMode())
{
case Mode::Random:
+3 -3
View File
@@ -62,9 +62,9 @@ namespace UserInterface
};
static inline std::unordered_map<Mode, std::size_t> _maxCounts
{
{Mode::Artist, 8000},
{Mode::Release, 4000},
{Mode::Track, 4000},
{Mode::Artist, 1000},
{Mode::Release, 504},
{Mode::Track, 500},
};
std::size_t getBatchSize(Mode mode) const;
std::size_t getMaxCount(Mode mode) const;
+4 -2
View File
@@ -41,9 +41,11 @@ namespace UserInterface
Feedback::IFeedbackService& feedbackService{*Service<Feedback::IFeedbackService>::get()};
Scrobbling::IScrobblingService& scrobblingService {*Service<Scrobbling::IScrobblingService>::get()};
range = getActualRange(range);
RangeResults<TrackId> tracks;
range = getActualRange(range);
if (range.size == 0)
return tracks;
switch (getMode())
{
case Mode::Random: