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:
parent
f6e4ee9a4a
commit
d039c9b6bd
5 changed files with 49 additions and 3 deletions
|
@ -120,7 +120,6 @@ int main(int argc, char *argv[])
|
|||
installNewTranslator();
|
||||
|
||||
qsrand(QDateTime::currentDateTime().toTime_t());
|
||||
|
||||
qDebug("main(): starting main program");
|
||||
|
||||
MainWindow ui;
|
||||
|
|
|
@ -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())
|
||||
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);
|
||||
}
|
|
@ -45,6 +45,8 @@ private:
|
|||
QByteArray inputBuffer;
|
||||
bool messageInProgress;
|
||||
bool handshakeStarted;
|
||||
bool newMissingFeatureFound(QString _serversMissingFeatures);
|
||||
void clearNewClientFeatures();
|
||||
int messageLength;
|
||||
|
||||
QTimer *timer;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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; }
|
||||
|
|
Loading…
Reference in a new issue