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; Range range;
std::vector<T> results; std::vector<T> results;
bool moreResults; bool moreResults{};
RangeResults getSubRange(Range subRange) RangeResults getSubRange(Range subRange)
{ {
+6 -3
View File
@@ -38,9 +38,12 @@ namespace UserInterface
Feedback::IFeedbackService& feedbackService{ *Service<Feedback::IFeedbackService>::get() }; Feedback::IFeedbackService& feedbackService{ *Service<Feedback::IFeedbackService>::get() };
Scrobbling::IScrobblingService& scrobblingService{ *Service<Scrobbling::IScrobblingService>::get() }; Scrobbling::IScrobblingService& scrobblingService{ *Service<Scrobbling::IScrobblingService>::get() };
range = getActualRange(range);
RangeResults<ArtistId> artists; RangeResults<ArtistId> artists;
range = getActualRange(range);
if (range.size == 0)
return artists;
switch (getMode()) switch (getMode())
{ {
case Mode::Random: case Mode::Random:
@@ -76,11 +79,11 @@ namespace UserInterface
case Mode::Search: case Mode::Search:
{ {
// do not sort results as we search in both name and sort names, sorting may be very long
Artist::FindParameters params; Artist::FindParameters params;
params.setClusters(getFilters().getClusterIds()); params.setClusters(getFilters().getClusterIds());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType); params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::BySortName);
params.setRange(range); params.setRange(range);
{ {
+8 -7
View File
@@ -30,23 +30,24 @@ namespace UserInterface
{ {
} }
DatabaseCollectorBase::Range DatabaseCollectorBase::Range DatabaseCollectorBase::getActualRange(Range range) const
DatabaseCollectorBase::getActualRange(Range range) const
{ {
assert(range.offset < _maxCount); assert(range.size > 0);
if (range.offset < _maxCount)
range.size = std::min(_maxCount - range.offset, range.size); range.size = std::min(_maxCount - range.offset, range.size);
else
range.size = 0;
return range; return range;
} }
std::size_t std::size_t DatabaseCollectorBase::getMaxCount() const
DatabaseCollectorBase::getMaxCount() const
{ {
return _maxCount; return _maxCount;
} }
void void DatabaseCollectorBase::setSearch(std::string_view searchText)
DatabaseCollectorBase::setSearch(std::string_view searchText)
{ {
_searchText = searchText; _searchText = searchText;
_searchKeywords = StringUtils::splitString(_searchText, " "); _searchKeywords = StringUtils::splitString(_searchText, " ");
@@ -69,4 +69,3 @@ namespace UserInterface
std::size_t _maxCount; std::size_t _maxCount;
}; };
} // ns UserInterface } // ns UserInterface
+4 -2
View File
@@ -41,9 +41,11 @@ namespace UserInterface
Feedback::IFeedbackService& feedbackService{ *Service<Feedback::IFeedbackService>::get() }; Feedback::IFeedbackService& feedbackService{ *Service<Feedback::IFeedbackService>::get() };
Scrobbling::IScrobblingService& scrobblingService{ *Service<Scrobbling::IScrobblingService>::get() }; Scrobbling::IScrobblingService& scrobblingService{ *Service<Scrobbling::IScrobblingService>::get() };
range = getActualRange(range);
RangeResults<ReleaseId> releases; RangeResults<ReleaseId> releases;
range = getActualRange(range);
if (range.size == 0)
return releases;
switch (getMode()) switch (getMode())
{ {
case Mode::Random: case Mode::Random:
+3 -3
View File
@@ -62,9 +62,9 @@ namespace UserInterface
}; };
static inline std::unordered_map<Mode, std::size_t> _maxCounts static inline std::unordered_map<Mode, std::size_t> _maxCounts
{ {
{Mode::Artist, 8000}, {Mode::Artist, 1000},
{Mode::Release, 4000}, {Mode::Release, 504},
{Mode::Track, 4000}, {Mode::Track, 500},
}; };
std::size_t getBatchSize(Mode mode) const; std::size_t getBatchSize(Mode mode) const;
std::size_t getMaxCount(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()}; Feedback::IFeedbackService& feedbackService{*Service<Feedback::IFeedbackService>::get()};
Scrobbling::IScrobblingService& scrobblingService {*Service<Scrobbling::IScrobblingService>::get()}; Scrobbling::IScrobblingService& scrobblingService {*Service<Scrobbling::IScrobblingService>::get()};
range = getActualRange(range);
RangeResults<TrackId> tracks; RangeResults<TrackId> tracks;
range = getActualRange(range);
if (range.size == 0)
return tracks;
switch (getMode()) switch (getMode())
{ {
case Mode::Random: case Mode::Random: