Refactor page loading so it's uniform, display every printing from every filtered set instead of just one. (#6105)

This commit is contained in:
BruebachL 2025-09-07 00:11:36 +02:00 committed by GitHub
parent 7f842bb1e8
commit b141a65838
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 47 additions and 71 deletions

View file

@ -200,52 +200,6 @@ void VisualDatabaseDisplayWidget::addCard(const ExactCard &cardToAdd)
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor); connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor);
} }
void VisualDatabaseDisplayWidget::populateCards()
{
int rowCount = databaseDisplayModel->rowCount();
cards->clear();
// Calculate the start and end indices for the current page
int start = currentPage * cardsPerPage;
int end = qMin(start + cardsPerPage, rowCount);
qCDebug(VisualDatabaseDisplayLog) << "Fetching from " << start << " to " << end << " cards";
// Load more cards if we are at the end of the current list and can fetch more
if (end >= rowCount && databaseDisplayModel->canFetchMore(QModelIndex())) {
qCDebug(VisualDatabaseDisplayLog) << "We gotta load more";
databaseDisplayModel->fetchMore(QModelIndex());
}
QList<const CardFilter *> setFilters = filterModel->getFiltersOfType(CardFilter::AttrSet);
const CardFilter *setFilter = nullptr;
if (setFilters.length() == 1) {
setFilter = setFilters.at(0);
}
for (int row = start; row < end; ++row) {
qCDebug(VisualDatabaseDisplayLog) << "Adding " << row;
QModelIndex index = databaseDisplayModel->index(row, CardDatabaseModel::NameColumn);
QVariant name = databaseDisplayModel->data(index, Qt::DisplayRole);
qCDebug(VisualDatabaseDisplayLog) << name.toString();
if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(name.toString())) {
if (setFilter) {
SetToPrintingsMap setMap = info->getSets();
if (setMap.contains(setFilter->term())) {
for (PrintingInfo printing : setMap[setFilter->term()]) {
addCard(ExactCard(info, printing));
}
}
} else {
addCard(CardDatabaseManager::getInstance()->getPreferredCard(info));
}
} else {
qCDebug(VisualDatabaseDisplayLog) << "Card not found in database!";
}
}
currentPage++;
}
void VisualDatabaseDisplayWidget::updateSearch(const QString &search) const void VisualDatabaseDisplayWidget::updateSearch(const QString &search) const
{ {
databaseDisplayModel->setStringFilter(search); databaseDisplayModel->setStringFilter(search);
@ -270,6 +224,38 @@ void VisualDatabaseDisplayWidget::searchModelChanged()
qCDebug(VisualDatabaseDisplayLog) << "Search model changed"; qCDebug(VisualDatabaseDisplayLog) << "Search model changed";
} }
void VisualDatabaseDisplayWidget::loadCurrentPage()
{
// Ensure only the initial page is loaded
if (currentPage == 0) {
// Only load the first page initially
qCDebug(VisualDatabaseDisplayLog) << "Loading the first page";
populateCards();
} else {
// If not the first page, just load the next page and append to the flow widget
loadNextPage();
}
}
void VisualDatabaseDisplayWidget::populateCards()
{
int rowCount = databaseDisplayModel->rowCount();
cards->clear();
// Calculate the start and end indices for the current page
int start = currentPage * cardsPerPage;
int end = qMin(start + cardsPerPage, rowCount);
qCDebug(VisualDatabaseDisplayLog) << "Fetching from " << start << " to " << end << " cards";
// Load more cards if we are at the end of the current list and can fetch more
if (end >= rowCount && databaseDisplayModel->canFetchMore(QModelIndex())) {
qCDebug(VisualDatabaseDisplayLog) << "We gotta load more";
databaseDisplayModel->fetchMore(QModelIndex());
}
loadPage(start, end);
}
void VisualDatabaseDisplayWidget::loadNextPage() void VisualDatabaseDisplayWidget::loadNextPage()
{ {
// Calculate the start and end indices for the next page // Calculate the start and end indices for the next page
@ -283,49 +269,38 @@ void VisualDatabaseDisplayWidget::loadNextPage()
} }
// Load the next page of cards and add them to the flow widget // Load the next page of cards and add them to the flow widget
loadPage(start, end);
}
void VisualDatabaseDisplayWidget::loadPage(int start, int end)
{
QList<const CardFilter *> setFilters = filterModel->getFiltersOfType(CardFilter::AttrSet); QList<const CardFilter *> setFilters = filterModel->getFiltersOfType(CardFilter::AttrSet);
const CardFilter *setFilter = nullptr;
if (setFilters.length() == 1) {
setFilter = setFilters.at(0);
}
for (int row = start; row < end; ++row) { for (int row = start; row < end; ++row) {
qCDebug(VisualDatabaseDisplayLog) << "Adding " << row;
QModelIndex index = databaseDisplayModel->index(row, CardDatabaseModel::NameColumn); QModelIndex index = databaseDisplayModel->index(row, CardDatabaseModel::NameColumn);
QVariant name = databaseDisplayModel->data(index, Qt::DisplayRole); QVariant name = databaseDisplayModel->data(index, Qt::DisplayRole);
qCDebug(VisualDatabaseDisplayLog) << name.toString();
if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(name.toString())) { if (CardInfoPtr info = CardDatabaseManager::getInstance()->getCardInfo(name.toString())) {
if (setFilter) { if (!setFilters.empty()) {
SetToPrintingsMap setMap = info->getSets(); SetToPrintingsMap setMap = info->getSets();
if (setMap.contains(setFilter->term())) { for (const CardFilter *setFilter : setFilters) {
for (PrintingInfo printing : setMap[setFilter->term()]) { if (setMap.contains(setFilter->term())) {
addCard(ExactCard(info, printing)); for (PrintingInfo printing : setMap[setFilter->term()]) {
addCard(ExactCard(info, printing));
}
} }
} }
} else { } else {
addCard(CardDatabaseManager::getInstance()->getPreferredCard(info)); addCard(CardDatabaseManager::getInstance()->getPreferredCard(info));
} }
} else { } else {
qCDebug(VisualDatabaseDisplayLog) << "Card " << name.toString() << " not found in database!"; qCDebug(VisualDatabaseDisplayLog) << "Card not found in database!";
} }
} }
// Update the current page
currentPage++; currentPage++;
} }
void VisualDatabaseDisplayWidget::loadCurrentPage()
{
// Ensure only the initial page is loaded
if (currentPage == 0) {
// Only load the first page initially
qCDebug(VisualDatabaseDisplayLog) << "Loading the first page";
populateCards();
} else {
// If not the first page, just load the next page and append to the flow widget
loadNextPage();
}
}
void VisualDatabaseDisplayWidget::modelDirty() const void VisualDatabaseDisplayWidget::modelDirty() const
{ {
debounceTimer->start(debounceTime); debounceTimer->start(debounceTime);

View file

@ -42,6 +42,7 @@ public:
void adjustCardsPerPage(); void adjustCardsPerPage();
void populateCards(); void populateCards();
void loadPage(int start, int end);
void loadNextPage(); void loadNextPage();
void loadCurrentPage(); void loadCurrentPage();
void sortCardList(const QStringList &properties, Qt::SortOrder order) const; void sortCardList(const QStringList &properties, Qt::SortOrder order) const;