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();
|
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;
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
Loading…
Reference in a new issue