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();
qsrand(QDateTime::currentDateTime().toTime_t());
qDebug("main(): starting main program");
MainWindow ui;

View file

@ -25,6 +25,7 @@ RemoteClient::RemoteClient(QObject *parent)
: AbstractClient(parent), timeRunning(0), lastDataReceived(0), messageInProgress(false), handshakeStarted(false), messageLength(0)
{
clearNewClientFeatures();
int keepalive = settingsCache->getKeepAlive();
timer = new QTimer(this);
timer->setInterval(keepalive * 1000);
@ -135,6 +136,13 @@ void RemoteClient::processConnectionClosedEvent(const Event_ConnectionClosed & /
void RemoteClient::loginResponse(const Response &response)
{
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) {
setStatus(StatusLoggedIn);
emit userInfoChanged(resp.user_info());
@ -149,8 +157,10 @@ void RemoteClient::loginResponse(const Response &response)
ignoreList.append(resp.ignore_list(i));
emit ignoreListReceived(ignoreList);
if (resp.missing_features_size() > 0 && settingsCache->getNotifyAboutUpdates())
emit notifyUserAboutUpdate();
if (newMissingFeatureFound(possibleMissingFeatures) && resp.missing_features_size() > 0 && settingsCache->getNotifyAboutUpdates()) {
settingsCache->setKnownMissingFeatures(possibleMissingFeatures);
emit notifyUserAboutUpdate();
}
} else if (response.response_code() != Response::RespNotConnected) {
QList<QString> missingFeatures;
@ -380,3 +390,29 @@ QString RemoteClient::getSrvClientID(const QString _hostname)
QString uniqueServerClientID = QCryptographicHash::hash(srvClientID.toUtf8(), QCryptographicHash::Sha1).toHex().right(15);
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;
bool messageInProgress;
bool handshakeStarted;
bool newMissingFeatureFound(QString _serversMissingFeatures);
void clearNewClientFeatures();
int messageLength;
QTimer *timer;

View file

@ -249,6 +249,12 @@ SettingsCache::SettingsCache()
spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool();
rememberGameSettings = settings->value("game/remembergamesettings", true).toBool();
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) {

View file

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