Add missing feature rememberance to client (#2275)

Fix #2249
Add the ability for the client to remember the missing features that it
received from the server it last connected to and not display the
"missing/optional feature" message at every login.
This commit is contained in:
woogerboy21 2016-11-29 15:50:00 -05:00 committed by GitHub
parent f6e4ee9a4a
commit d039c9b6bd
5 changed files with 49 additions and 3 deletions

View file

@ -120,7 +120,6 @@ int main(int argc, char *argv[])
installNewTranslator(); installNewTranslator();
qsrand(QDateTime::currentDateTime().toTime_t()); qsrand(QDateTime::currentDateTime().toTime_t());
qDebug("main(): starting main program"); qDebug("main(): starting main program");
MainWindow ui; MainWindow ui;

View file

@ -25,6 +25,7 @@ RemoteClient::RemoteClient(QObject *parent)
: AbstractClient(parent), timeRunning(0), lastDataReceived(0), messageInProgress(false), handshakeStarted(false), messageLength(0) : AbstractClient(parent), timeRunning(0), lastDataReceived(0), messageInProgress(false), handshakeStarted(false), messageLength(0)
{ {
clearNewClientFeatures();
int keepalive = settingsCache->getKeepAlive(); int keepalive = settingsCache->getKeepAlive();
timer = new QTimer(this); timer = new QTimer(this);
timer->setInterval(keepalive * 1000); timer->setInterval(keepalive * 1000);
@ -135,6 +136,13 @@ void RemoteClient::processConnectionClosedEvent(const Event_ConnectionClosed & /
void RemoteClient::loginResponse(const Response &response) void RemoteClient::loginResponse(const Response &response)
{ {
const Response_Login &resp = response.GetExtension(Response_Login::ext); const Response_Login &resp = response.GetExtension(Response_Login::ext);
QString possibleMissingFeatures;
if (resp.missing_features_size() > 0) {
for (int i = 0; i < resp.missing_features_size(); ++i)
possibleMissingFeatures.append("," + QString::fromStdString(resp.missing_features(i)));
}
if (response.response_code() == Response::RespOk) { if (response.response_code() == Response::RespOk) {
setStatus(StatusLoggedIn); setStatus(StatusLoggedIn);
emit userInfoChanged(resp.user_info()); emit userInfoChanged(resp.user_info());
@ -149,8 +157,10 @@ void RemoteClient::loginResponse(const Response &response)
ignoreList.append(resp.ignore_list(i)); ignoreList.append(resp.ignore_list(i));
emit ignoreListReceived(ignoreList); emit ignoreListReceived(ignoreList);
if (resp.missing_features_size() > 0 && settingsCache->getNotifyAboutUpdates()) if (newMissingFeatureFound(possibleMissingFeatures) && resp.missing_features_size() > 0 && settingsCache->getNotifyAboutUpdates()) {
emit notifyUserAboutUpdate(); settingsCache->setKnownMissingFeatures(possibleMissingFeatures);
emit notifyUserAboutUpdate();
}
} else if (response.response_code() != Response::RespNotConnected) { } else if (response.response_code() != Response::RespNotConnected) {
QList<QString> missingFeatures; QList<QString> missingFeatures;
@ -380,3 +390,29 @@ QString RemoteClient::getSrvClientID(const QString _hostname)
QString uniqueServerClientID = QCryptographicHash::hash(srvClientID.toUtf8(), QCryptographicHash::Sha1).toHex().right(15); QString uniqueServerClientID = QCryptographicHash::hash(srvClientID.toUtf8(), QCryptographicHash::Sha1).toHex().right(15);
return uniqueServerClientID; return uniqueServerClientID;
} }
bool RemoteClient::newMissingFeatureFound(QString _serversMissingFeatures)
{
bool newMissingFeature = false;
QStringList serversMissingFeaturesList = _serversMissingFeatures.split(",");
foreach(const QString &feature, serversMissingFeaturesList) {
if (!feature.isEmpty()) {
if (!settingsCache->getKnownMissingFeatures().contains(feature))
return true;
}
}
return newMissingFeature;
}
void RemoteClient::clearNewClientFeatures()
{
QString newKnownMissingFeatures;
QStringList existingKnownMissingFeatures = settingsCache->getKnownMissingFeatures().split(",");
foreach(const QString &existingKnownFeature, existingKnownMissingFeatures) {
if (!existingKnownFeature.isEmpty()) {
if (!clientFeatures.contains(existingKnownFeature))
newKnownMissingFeatures.append("," + existingKnownFeature);
}
}
settingsCache->setKnownMissingFeatures(newKnownMissingFeatures);
}

View file

@ -45,6 +45,8 @@ private:
QByteArray inputBuffer; QByteArray inputBuffer;
bool messageInProgress; bool messageInProgress;
bool handshakeStarted; bool handshakeStarted;
bool newMissingFeatureFound(QString _serversMissingFeatures);
void clearNewClientFeatures();
int messageLength; int messageLength;
QTimer *timer; QTimer *timer;

View file

@ -249,6 +249,12 @@ SettingsCache::SettingsCache()
spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool(); spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool();
rememberGameSettings = settings->value("game/remembergamesettings", true).toBool(); rememberGameSettings = settings->value("game/remembergamesettings", true).toBool();
clientID = settings->value("personal/clientid", "notset").toString(); clientID = settings->value("personal/clientid", "notset").toString();
knownMissingFeatures = settings->value("interface/knownmissingfeatures", "").toString();
}
void SettingsCache::setKnownMissingFeatures(QString _knownMissingFeatures) {
knownMissingFeatures = _knownMissingFeatures;
settings->setValue("interface/knownmissingfeatures", knownMissingFeatures);
} }
void SettingsCache::setCardInfoViewMode(const int _viewMode) { void SettingsCache::setCardInfoViewMode(const int _viewMode) {

View file

@ -86,6 +86,7 @@ private:
QString picUrl; QString picUrl;
QString picUrlFallback; QString picUrlFallback;
QString clientID; QString clientID;
QString knownMissingFeatures;
int pixmapCacheSize; int pixmapCacheSize;
bool scaleCards; bool scaleCards;
bool showMessagePopups; bool showMessagePopups;
@ -181,7 +182,9 @@ public:
bool getRememberGameSettings() const { return rememberGameSettings; } bool getRememberGameSettings() const { return rememberGameSettings; }
int getKeepAlive() const { return keepalive; } int getKeepAlive() const { return keepalive; }
void setClientID(QString clientID); void setClientID(QString clientID);
void setKnownMissingFeatures(QString _knownMissingFeatures);
QString getClientID() { return clientID; } QString getClientID() { return clientID; }
QString getKnownMissingFeatures() { return knownMissingFeatures; }
ShortcutsSettings& shortcuts() const { return *shortcutsSettings; } ShortcutsSettings& shortcuts() const { return *shortcutsSettings; }
CardDatabaseSettings& cardDatabase() const { return *cardDatabaseSettings; } CardDatabaseSettings& cardDatabase() const { return *cardDatabaseSettings; }
ServersSettings& servers() const { return *serversSettings; } ServersSettings& servers() const { return *serversSettings; }