Persist host changes after update

This commit is contained in:
Cameron Gutman
2018-06-27 02:08:56 -07:00
parent ce4e469b7b
commit 36c8b6ce53
+26 -13
View File
@@ -60,16 +60,19 @@ NvComputer::serialize(QSettings& settings)
settings.setValue(SER_REMOTEADDR, remoteAddress); settings.setValue(SER_REMOTEADDR, remoteAddress);
settings.setValue(SER_MANUALADDR, manualAddress); settings.setValue(SER_MANUALADDR, manualAddress);
settings.remove(SER_APPLIST); // Avoid deleting an existing applist if we couldn't get one
settings.beginWriteArray(SER_APPLIST); if (!appList.isEmpty()) {
for (int i = 0; i < appList.count(); i++) { settings.remove(SER_APPLIST);
settings.setArrayIndex(i); settings.beginWriteArray(SER_APPLIST);
for (int i = 0; i < appList.count(); i++) {
settings.setArrayIndex(i);
settings.setValue(SER_APPNAME, appList[i].name); settings.setValue(SER_APPNAME, appList[i].name);
settings.setValue(SER_APPID, appList[i].id); settings.setValue(SER_APPID, appList[i].id);
settings.setValue(SER_APPHDR, appList[i].hdrSupported); settings.setValue(SER_APPHDR, appList[i].hdrSupported);
}
settings.endArray();
} }
settings.endArray();
} }
NvComputer::NvComputer(QString address, QString serverInfo) NvComputer::NvComputer(QString address, QString serverInfo)
@@ -161,6 +164,7 @@ ComputerManager::ComputerManager()
void ComputerManager::saveHosts() void ComputerManager::saveHosts()
{ {
QSettings settings; QSettings settings;
QReadLocker lock(&m_Lock);
settings.remove(SER_HOSTS); settings.remove(SER_HOSTS);
settings.beginWriteArray(SER_HOSTS); settings.beginWriteArray(SER_HOSTS);
@@ -229,20 +233,26 @@ bool ComputerManager::addNewHost(QString address, bool mdns)
bool changed = existingComputer->update(*newComputer); bool changed = existingComputer->update(*newComputer);
delete newComputer; delete newComputer;
// Drop the lock before notifying
lock.unlock();
// Tell our client if something changed // Tell our client if something changed
if (changed) { if (changed) {
emit computerStateChanged(existingComputer); handleComputerStateChanged(existingComputer);
} }
} }
else { else {
// Store this in our active sets // Store this in our active sets
m_KnownHosts[newComputer->uuid] = newComputer; m_KnownHosts[newComputer->uuid] = newComputer;
// Tell our client about this new PC // Start polling if enabled (write lock required)
emit computerStateChanged(newComputer);
// Start polling if enabled
startPollingComputer(newComputer); startPollingComputer(newComputer);
// Drop the lock before notifying
lock.unlock();
// Tell our client about this new PC
handleComputerStateChanged(newComputer);
} }
return true; return true;
@@ -264,6 +274,9 @@ void
ComputerManager::handleComputerStateChanged(NvComputer* computer) ComputerManager::handleComputerStateChanged(NvComputer* computer)
{ {
emit computerStateChanged(computer); emit computerStateChanged(computer);
// Save updated hosts to QSettings
saveHosts();
} }
// Must hold m_Lock for write // Must hold m_Lock for write