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);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,34 +23,35 @@
|
|||||||
|
|
||||||
namespace UserInterface
|
namespace UserInterface
|
||||||
{
|
{
|
||||||
DatabaseCollectorBase::DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount)
|
DatabaseCollectorBase::DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount)
|
||||||
: _filters {filters}
|
: _filters{ filters }
|
||||||
, _mode {defaultMode}
|
, _mode{ defaultMode }
|
||||||
, _maxCount {maxCount}
|
, _maxCount{ maxCount }
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
DatabaseCollectorBase::Range
|
DatabaseCollectorBase::Range DatabaseCollectorBase::getActualRange(Range range) const
|
||||||
DatabaseCollectorBase::getActualRange(Range range) const
|
{
|
||||||
{
|
assert(range.size > 0);
|
||||||
assert(range.offset < _maxCount);
|
|
||||||
range.size = std::min(_maxCount - range.offset, range.size);
|
|
||||||
|
|
||||||
return range;
|
if (range.offset < _maxCount)
|
||||||
}
|
range.size = std::min(_maxCount - range.offset, range.size);
|
||||||
|
else
|
||||||
|
range.size = 0;
|
||||||
|
|
||||||
std::size_t
|
return range;
|
||||||
DatabaseCollectorBase::getMaxCount() const
|
}
|
||||||
{
|
|
||||||
return _maxCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
std::size_t DatabaseCollectorBase::getMaxCount() const
|
||||||
DatabaseCollectorBase::setSearch(std::string_view searchText)
|
{
|
||||||
{
|
return _maxCount;
|
||||||
_searchText = searchText;
|
}
|
||||||
_searchKeywords = StringUtils::splitString(_searchText, " ");
|
|
||||||
}
|
void DatabaseCollectorBase::setSearch(std::string_view searchText)
|
||||||
|
{
|
||||||
|
_searchText = searchText;
|
||||||
|
_searchKeywords = StringUtils::splitString(_searchText, " ");
|
||||||
|
}
|
||||||
|
|
||||||
} // ns UserInterface
|
} // ns UserInterface
|
||||||
|
|
||||||
|
|||||||
@@ -29,44 +29,43 @@
|
|||||||
|
|
||||||
namespace UserInterface
|
namespace UserInterface
|
||||||
{
|
{
|
||||||
class Filters;
|
class Filters;
|
||||||
|
|
||||||
class DatabaseCollectorBase
|
class DatabaseCollectorBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Range = Database::Range;
|
using Range = Database::Range;
|
||||||
|
|
||||||
virtual ~DatabaseCollectorBase() {}
|
virtual ~DatabaseCollectorBase() {}
|
||||||
|
|
||||||
enum class Mode
|
enum class Mode
|
||||||
{
|
{
|
||||||
Random,
|
Random,
|
||||||
Starred,
|
Starred,
|
||||||
RecentlyPlayed,
|
RecentlyPlayed,
|
||||||
RecentlyAdded,
|
RecentlyAdded,
|
||||||
MostPlayed,
|
MostPlayed,
|
||||||
Search,
|
Search,
|
||||||
All
|
All
|
||||||
};
|
};
|
||||||
|
|
||||||
DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount);
|
DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount);
|
||||||
|
|
||||||
Mode getMode() const { return _mode; }
|
Mode getMode() const { return _mode; }
|
||||||
void setMode(Mode mode) { _mode = mode; }
|
void setMode(Mode mode) { _mode = mode; }
|
||||||
void setSearch(std::string_view search);
|
void setSearch(std::string_view search);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Range getActualRange(Range range) const;
|
Range getActualRange(Range range) const;
|
||||||
std::size_t getMaxCount() const;
|
std::size_t getMaxCount() const;
|
||||||
Filters& getFilters() { return _filters; }
|
Filters& getFilters() { return _filters; }
|
||||||
const std::vector<std::string_view>& getSearchKeywords() const { return _searchKeywords; }
|
const std::vector<std::string_view>& getSearchKeywords() const { return _searchKeywords; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Filters& _filters;
|
Filters& _filters;
|
||||||
std::string _searchText;
|
std::string _searchText;
|
||||||
std::vector<std::string_view> _searchKeywords;
|
std::vector<std::string_view> _searchKeywords;
|
||||||
Mode _mode;
|
Mode _mode;
|
||||||
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