Merge pull request #3007 from Trial97/open_source

add open source filter
This commit is contained in:
Alexandru Ionut Tripon 2024-10-28 15:04:33 +02:00 committed by GitHub
commit d4bf61da50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 31 additions and 5 deletions

View File

@ -76,6 +76,7 @@ class ResourceAPI {
std::optional<std::list<Version> > versions; std::optional<std::list<Version> > versions;
std::optional<QString> side; std::optional<QString> side;
std::optional<QStringList> categoryIds; std::optional<QStringList> categoryIds;
bool openSource;
}; };
struct SearchCallbacks { struct SearchCallbacks {
std::function<void(QJsonDocument&)> on_succeed; std::function<void(QJsonDocument&)> on_succeed;

View File

@ -116,6 +116,8 @@ class ModrinthAPI : public NetworkResourceAPI {
} }
if (args.categoryIds.has_value() && !args.categoryIds->empty()) if (args.categoryIds.has_value() && !args.categoryIds->empty())
facets_list.append(QString("[%1]").arg(getCategoriesFilters(args.categoryIds.value()))); facets_list.append(QString("[%1]").arg(getCategoriesFilters(args.categoryIds.value())));
if (args.openSource)
facets_list.append("[\"open_source:true\"]");
facets_list.append(QString("[\"project_type:%1\"]").arg(resourceTypeParameter(args.type))); facets_list.append(QString("[\"project_type:%1\"]").arg(resourceTypeParameter(args.type)));

View File

@ -39,7 +39,9 @@ ResourceAPI::SearchArgs ModModel::createSearchArguments()
auto sort = getCurrentSortingMethodByIndex(); auto sort = getCurrentSortingMethodByIndex();
return { ModPlatform::ResourceType::MOD, m_next_search_offset, m_search_term, sort, loaders, versions, side, categories }; return {
ModPlatform::ResourceType::MOD, m_next_search_offset, m_search_term, sort, loaders, versions, side, categories, m_filter->openSource
};
} }
ResourceAPI::VersionSearchArgs ModModel::createVersionsArguments(QModelIndex& entry) ResourceAPI::VersionSearchArgs ModModel::createVersionsArguments(QModelIndex& entry)

View File

@ -189,7 +189,7 @@ void ListModel::performPaginatedSearch()
auto netJob = makeShared<NetJob>("Flame::Search", APPLICATION->network()); auto netJob = makeShared<NetJob>("Flame::Search", APPLICATION->network());
auto searchUrl = FlameAPI().getSearchURL({ ModPlatform::ResourceType::MODPACK, nextSearchOffset, currentSearchTerm, sort, auto searchUrl = FlameAPI().getSearchURL({ ModPlatform::ResourceType::MODPACK, nextSearchOffset, currentSearchTerm, sort,
m_filter->loaders, m_filter->versions, "", m_filter->categoryIds }); m_filter->loaders, m_filter->versions, "", m_filter->categoryIds, m_filter->openSource });
netJob->addNetAction(Net::ApiDownload::makeByteArray(QUrl(searchUrl.value()), response)); netJob->addNetAction(Net::ApiDownload::makeByteArray(QUrl(searchUrl.value()), response));
jobPtr = netJob; jobPtr = netJob;

View File

@ -155,7 +155,7 @@ void ModpackListModel::performPaginatedSearch()
ResourceAPI::SortingMethod sort{}; ResourceAPI::SortingMethod sort{};
sort.name = currentSort; sort.name = currentSort;
auto searchUrl = ModrinthAPI().getSearchURL({ ModPlatform::ResourceType::MODPACK, nextSearchOffset, currentSearchTerm, sort, auto searchUrl = ModrinthAPI().getSearchURL({ ModPlatform::ResourceType::MODPACK, nextSearchOffset, currentSearchTerm, sort,
m_filter->loaders, m_filter->versions, "", m_filter->categoryIds }); m_filter->loaders, m_filter->versions, "", m_filter->categoryIds, m_filter->openSource });
auto netJob = makeShared<NetJob>("Modrinth::SearchModpack", APPLICATION->network()); auto netJob = makeShared<NetJob>("Modrinth::SearchModpack", APPLICATION->network());
netJob->addNetAction(Net::ApiDownload::makeByteArray(QUrl(searchUrl.value()), m_allResponse)); netJob->addNetAction(Net::ApiDownload::makeByteArray(QUrl(searchUrl.value()), m_allResponse));

View File

@ -134,6 +134,7 @@ ModFilterWidget::ModFilterWidget(MinecraftInstance* instance, bool extended, QWi
ui->versions->hide(); ui->versions->hide();
ui->showAllVersions->hide(); ui->showAllVersions->hide();
ui->environmentGroup->hide(); ui->environmentGroup->hide();
ui->openSource->hide();
} }
ui->versions->setStyleSheet("combobox-popup: 0;"); ui->versions->setStyleSheet("combobox-popup: 0;");
@ -159,6 +160,7 @@ ModFilterWidget::ModFilterWidget(MinecraftInstance* instance, bool extended, QWi
} }
connect(ui->hideInstalled, &QCheckBox::stateChanged, this, &ModFilterWidget::onHideInstalledFilterChanged); connect(ui->hideInstalled, &QCheckBox::stateChanged, this, &ModFilterWidget::onHideInstalledFilterChanged);
connect(ui->openSource, &QCheckBox::stateChanged, this, &ModFilterWidget::onOpenSourceFilterChanged);
setHidden(true); setHidden(true);
loadVersionList(); loadVersionList();
@ -208,6 +210,7 @@ void ModFilterWidget::loadVersionList()
void ModFilterWidget::prepareBasicFilter() void ModFilterWidget::prepareBasicFilter()
{ {
m_filter->openSource = false;
if (m_instance) { if (m_instance) {
m_filter->hideInstalled = false; m_filter->hideInstalled = false;
m_filter->side = ""; // or "both" m_filter->side = ""; // or "both"
@ -337,4 +340,13 @@ void ModFilterWidget::setCategories(const QList<ModPlatform::Category>& categori
} }
} }
#include "ModFilterWidget.moc" void ModFilterWidget::onOpenSourceFilterChanged()
{
auto open = ui->openSource->isChecked();
m_filter_changed = open != m_filter->openSource;
m_filter->openSource = open;
if (m_filter_changed)
emit filterChanged();
}
#include "ModFilterWidget.moc"

View File

@ -64,11 +64,12 @@ class ModFilterWidget : public QTabWidget {
QString side; QString side;
bool hideInstalled; bool hideInstalled;
QStringList categoryIds; QStringList categoryIds;
bool openSource;
bool operator==(const Filter& other) const bool operator==(const Filter& other) const
{ {
return hideInstalled == other.hideInstalled && side == other.side && loaders == other.loaders && versions == other.versions && return hideInstalled == other.hideInstalled && side == other.side && loaders == other.loaders && versions == other.versions &&
releases == other.releases && categoryIds == other.categoryIds; releases == other.releases && categoryIds == other.categoryIds && openSource == other.openSource;
} }
bool operator!=(const Filter& other) const { return !(*this == other); } bool operator!=(const Filter& other) const { return !(*this == other); }
@ -107,6 +108,7 @@ class ModFilterWidget : public QTabWidget {
void onSideFilterChanged(); void onSideFilterChanged();
void onHideInstalledFilterChanged(); void onHideInstalledFilterChanged();
void onShowAllVersionsChanged(); void onShowAllVersionsChanged();
void onOpenSourceFilterChanged();
private: private:
Ui::ModFilterWidget* ui; Ui::ModFilterWidget* ui;

View File

@ -188,6 +188,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="openSource">
<property name="text">
<string>Open source only</string>
</property>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">