Add the ability to rename PCs

This commit is contained in:
Cameron Gutman
2020-05-01 18:34:15 -07:00
parent 0d9d0845f5
commit b75f662c41
7 changed files with 85 additions and 1 deletions
+13
View File
@@ -416,6 +416,19 @@ void ComputerManager::deleteHost(NvComputer* computer)
QThreadPool::globalInstance()->start(new DeferredHostDeletionTask(this, computer)); QThreadPool::globalInstance()->start(new DeferredHostDeletionTask(this, computer));
} }
void ComputerManager::renameHost(NvComputer* computer, QString name)
{
{
QWriteLocker(&computer->lock);
computer->name = name;
computer->hasCustomName = true;
}
// Notify the UI of the state change
handleComputerStateChanged(computer);
}
void ComputerManager::handleAboutToQuit() void ComputerManager::handleAboutToQuit()
{ {
QWriteLocker lock(&m_Lock); QWriteLocker lock(&m_Lock);
+2
View File
@@ -179,6 +179,8 @@ public:
// computer is deleted inside this call // computer is deleted inside this call
void deleteHost(NvComputer* computer); void deleteHost(NvComputer* computer);
void renameHost(NvComputer* computer, QString name);
signals: signals:
void computerStateChanged(NvComputer* computer); void computerStateChanged(NvComputer* computer);
+8 -1
View File
@@ -14,6 +14,7 @@
#define SER_IPV6ADDR "ipv6address" #define SER_IPV6ADDR "ipv6address"
#define SER_APPLIST "apps" #define SER_APPLIST "apps"
#define SER_SRVCERT "srvcert" #define SER_SRVCERT "srvcert"
#define SER_CUSTOMNAME "customname"
#define SER_APPNAME "name" #define SER_APPNAME "name"
#define SER_APPID "id" #define SER_APPID "id"
@@ -23,6 +24,7 @@ NvComputer::NvComputer(QSettings& settings)
{ {
this->name = settings.value(SER_NAME).toString(); this->name = settings.value(SER_NAME).toString();
this->uuid = settings.value(SER_UUID).toString(); this->uuid = settings.value(SER_UUID).toString();
this->hasCustomName = settings.value(SER_CUSTOMNAME).toBool();
this->macAddress = settings.value(SER_MAC).toByteArray(); this->macAddress = settings.value(SER_MAC).toByteArray();
this->localAddress = settings.value(SER_LOCALADDR).toString(); this->localAddress = settings.value(SER_LOCALADDR).toString();
this->remoteAddress = settings.value(SER_REMOTEADDR).toString(); this->remoteAddress = settings.value(SER_REMOTEADDR).toString();
@@ -62,6 +64,7 @@ void NvComputer::serialize(QSettings& settings) const
QReadLocker lock(&this->lock); QReadLocker lock(&this->lock);
settings.setValue(SER_NAME, name); settings.setValue(SER_NAME, name);
settings.setValue(SER_CUSTOMNAME, hasCustomName);
settings.setValue(SER_UUID, uuid); settings.setValue(SER_UUID, uuid);
settings.setValue(SER_MAC, macAddress); settings.setValue(SER_MAC, macAddress);
settings.setValue(SER_LOCALADDR, localAddress); settings.setValue(SER_LOCALADDR, localAddress);
@@ -96,6 +99,7 @@ NvComputer::NvComputer(QString address, QString serverInfo, QSslCertificate serv
{ {
this->serverCert = serverCert; this->serverCert = serverCert;
this->hasCustomName = false;
this->name = NvHTTP::getXmlString(serverInfo, "hostname"); this->name = NvHTTP::getXmlString(serverInfo, "hostname");
if (this->name.isEmpty()) { if (this->name.isEmpty()) {
this->name = "UNKNOWN"; this->name = "UNKNOWN";
@@ -377,7 +381,10 @@ bool NvComputer::update(NvComputer& that)
changed = true; \ changed = true; \
} }
ASSIGN_IF_CHANGED(name); if (!hasCustomName) {
// Only overwrite the name if it's not custom
ASSIGN_IF_CHANGED(name);
}
ASSIGN_IF_CHANGED_AND_NONEMPTY(macAddress); ASSIGN_IF_CHANGED_AND_NONEMPTY(macAddress);
ASSIGN_IF_CHANGED_AND_NONEMPTY(localAddress); ASSIGN_IF_CHANGED_AND_NONEMPTY(localAddress);
ASSIGN_IF_CHANGED_AND_NONEMPTY(remoteAddress); ASSIGN_IF_CHANGED_AND_NONEMPTY(remoteAddress);
+1
View File
@@ -71,6 +71,7 @@ public:
QString manualAddress; QString manualAddress;
QByteArray macAddress; QByteArray macAddress;
QString name; QString name;
bool hasCustomName;
QString uuid; QString uuid;
QSslCertificate serverCert; QSslCertificate serverCert;
QVector<NvApp> appList; QVector<NvApp> appList;
+52
View File
@@ -1,5 +1,6 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
import ComputerModel 1.0 import ComputerModel 1.0
@@ -159,6 +160,15 @@ CenteredGridView {
deletePcDialog.open() deletePcDialog.open()
} }
} }
NavigableMenuItem {
parentMenu: pcContextMenu
text: "Rename PC"
onTriggered: {
renamePcDialog.pcIndex = index
renamePcDialog.originalName = model.name
renamePcDialog.open()
}
}
NavigableMenuItem { NavigableMenuItem {
parentMenu: pcContextMenu parentMenu: pcContextMenu
text: "Wake PC" text: "Wake PC"
@@ -265,6 +275,48 @@ CenteredGridView {
onAccepted: deletePc() onAccepted: deletePc()
} }
NavigableDialog {
id: renamePcDialog
property string label: "Enter the new name for this PC:"
property string originalName
property int pcIndex : -1;
standardButtons: Dialog.Ok | Dialog.Cancel
onOpened: {
// Force keyboard focus on the textbox so keyboard navigation works
editText.forceActiveFocus()
}
onClosed: {
editText.clear()
}
onAccepted: {
if (editText.text) {
computerModel.renameComputer(pcIndex, editText.text)
}
}
ColumnLayout {
Label {
text: renamePcDialog.label
font.bold: true
}
TextField {
id: editText
placeholderText: renamePcDialog.originalName
Layout.fillWidth: true
focus: true
Keys.onReturnPressed: {
renamePcDialog.accept()
}
}
}
}
ScrollBar.vertical: ScrollBar { ScrollBar.vertical: ScrollBar {
parent: pcGrid.parent parent: pcGrid.parent
anchors { anchors {
+7
View File
@@ -128,6 +128,13 @@ void ComputerModel::wakeComputer(int computerIndex)
QThreadPool::globalInstance()->start(wakeTask); QThreadPool::globalInstance()->start(wakeTask);
} }
void ComputerModel::renameComputer(int computerIndex, QString name)
{
Q_ASSERT(computerIndex < m_Computers.count());
m_ComputerManager->renameHost(m_Computers[computerIndex], name);
}
void ComputerModel::pairComputer(int computerIndex, QString pin) void ComputerModel::pairComputer(int computerIndex, QString pin)
{ {
Q_ASSERT(computerIndex < m_Computers.count()); Q_ASSERT(computerIndex < m_Computers.count());
+2
View File
@@ -35,6 +35,8 @@ public:
Q_INVOKABLE void wakeComputer(int computerIndex); Q_INVOKABLE void wakeComputer(int computerIndex);
Q_INVOKABLE void renameComputer(int computerIndex, QString name);
Q_INVOKABLE Session* createSessionForCurrentGame(int computerIndex); Q_INVOKABLE Session* createSessionForCurrentGame(int computerIndex);
signals: signals: