Fixed search that may add infinite stuff
This commit is contained in:
@@ -46,7 +46,7 @@ namespace Database
|
||||
{
|
||||
Range range;
|
||||
std::vector<T> results;
|
||||
bool moreResults;
|
||||
bool moreResults{};
|
||||
|
||||
RangeResults getSubRange(Range subRange)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user