Hide games created/hosted by people on your Ignore List (#3883)

* Implement filter for games created by ignored users.
This commit is contained in:
Phillip Wheatley 2020-01-13 15:13:36 +00:00 committed by Zach H
parent 7bfefee073
commit 0f18fa9546
9 changed files with 99 additions and 4 deletions

View file

@ -2,6 +2,8 @@
#include "pb/serverinfo_game.pb.h"
#include "pixmapgenerator.h"
#include "settingscache.h"
#include "tab_userlists.h"
#include "userlist.h"
#include <QDateTime>
#include <QDebug>
@ -253,8 +255,9 @@ void GamesModel::updateGameList(const ServerInfo_Game &game)
endInsertRows();
}
GamesProxyModel::GamesProxyModel(QObject *parent, bool _ownUserIsRegistered)
: QSortFilterProxyModel(parent), ownUserIsRegistered(_ownUserIsRegistered), showBuddiesOnlyGames(false),
GamesProxyModel::GamesProxyModel(QObject *parent, const TabSupervisor *_tabSupervisor)
: QSortFilterProxyModel(parent), ownUserIsRegistered(_tabSupervisor->isOwnUserRegistered()),
tabSupervisor(_tabSupervisor), showBuddiesOnlyGames(false), hideIgnoredUserGames(false),
unavailableGamesVisible(false), showPasswordProtectedGames(true), maxPlayersFilterMin(-1), maxPlayersFilterMax(-1)
{
setSortRole(GamesModel::SORT_ROLE);
@ -267,6 +270,12 @@ void GamesProxyModel::setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames)
invalidateFilter();
}
void GamesProxyModel::setHideIgnoredUserGames(bool _hideIgnoredUserGames)
{
hideIgnoredUserGames = _hideIgnoredUserGames;
invalidateFilter();
}
void GamesProxyModel::setUnavailableGamesVisible(bool _unavailableGamesVisible)
{
unavailableGamesVisible = _unavailableGamesVisible;
@ -323,6 +332,7 @@ void GamesProxyModel::loadFilterParameters(const QMap<int, QString> &allGameType
unavailableGamesVisible = settingsCache->gameFilters().isUnavailableGamesVisible();
showPasswordProtectedGames = settingsCache->gameFilters().isShowPasswordProtectedGames();
hideIgnoredUserGames = settingsCache->gameFilters().isHideIgnoredUserGames();
gameNameFilter = settingsCache->gameFilters().getGameNameFilter();
maxPlayersFilterMin = settingsCache->gameFilters().getMinPlayers();
maxPlayersFilterMax = settingsCache->gameFilters().getMaxPlayers();
@ -343,6 +353,7 @@ void GamesProxyModel::saveFilterParameters(const QMap<int, QString> &allGameType
settingsCache->gameFilters().setShowBuddiesOnlyGames(showBuddiesOnlyGames);
settingsCache->gameFilters().setUnavailableGamesVisible(unavailableGamesVisible);
settingsCache->gameFilters().setShowPasswordProtectedGames(showPasswordProtectedGames);
settingsCache->gameFilters().setHideIgnoredUserGames(hideIgnoredUserGames);
settingsCache->gameFilters().setGameNameFilter(gameNameFilter);
QMapIterator<int, QString> gameTypeIterator(allGameTypes);
@ -367,6 +378,10 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex & /*sour
if (!showBuddiesOnlyGames && game.only_buddies()) {
return false;
}
if (hideIgnoredUserGames && tabSupervisor->getUserListsTab()->getIgnoreList()->getUsers().contains(
QString::fromStdString(game.creator_info().name()))) {
return false;
}
if (!unavailableGamesVisible) {
if (game.player_count() == game.max_players())
return false;
@ -398,3 +413,8 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex & /*sour
return true;
}
void GamesProxyModel::refresh()
{
invalidateFilter();
}