Fixed search that may add infinite stuff
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user