This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
2018-05-29 13:33:58 +02:00

151 lines
4.9 KiB
C++

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Copyright (C) 2015 Simon Stuerz <stuerz.simon@gmail.com> *
* *
* This file is part of mea. *
* *
* mea is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, version 3 of the License. *
* *
* mea is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with mea. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "nymeahosts.h"
#include "nymeahost.h"
#include <QUuid>
#include <QDebug>
#include <QSettings>
NymeaHosts::NymeaHosts(QObject *parent) :
QAbstractListModel(parent)
{
beginResetModel();
QSettings settings;
qDebug() << "Connections: loading connections " << settings.fileName();
settings.beginGroup("Connections");
foreach (const QString &uuid, settings.childGroups()) {
settings.beginGroup(uuid);
NymeaHost *host = new NymeaHost(this);
host->setName(settings.value("name").toString());
host->setHostAddress(settings.value("hostAddress").toString());
host->setWebSocketUrl(settings.value("webSocketUrl").toString());
host->setUuid(QUuid(uuid));
qDebug() << " " << host->webSocketUrl();
m_hosts.append(host);
settings.endGroup();
}
settings.endGroup();
endResetModel();
}
NymeaHost *NymeaHosts::get(const QString &webSocketUrl)
{
foreach (NymeaHost *host, m_hosts) {
if (host->webSocketUrl() == webSocketUrl) {
return host;
}
}
return nullptr;
}
QList<NymeaHost *> NymeaHosts::hosts()
{
return m_hosts;
}
int NymeaHosts::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_hosts.count();
}
QVariant NymeaHosts::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= m_hosts.count())
return QVariant();
NymeaHost *host = m_hosts.at(index.row());
if (role == NameRole) {
return host->name();
} else if (role == HostAddressRole) {
return host->hostAddress();
} else if (role == WebSocketUrlRole) {
return host->webSocketUrl();
}
return QVariant();
}
void NymeaHosts::addHost(const QString &name, const QString &hostAddress, const QString &webSocketUrl)
{
// check if we allready have added this connection
foreach (NymeaHost *host, m_hosts) {
if (host->webSocketUrl() == webSocketUrl) {
return;
}
}
NymeaHost *host = new NymeaHost(this);
host->setName(name);
host->setHostAddress(hostAddress);
host->setWebSocketUrl(webSocketUrl);
host->setUuid(QUuid::createUuid());
qDebug() << "NymeaHosts: add connection" << host->webSocketUrl();
beginInsertRows(QModelIndex(), m_hosts.count(), m_hosts.count());
m_hosts.append(host);
endInsertRows();
QSettings settings;
settings.beginGroup("Connections");
settings.beginGroup(host->uuid().toString());
settings.setValue("name", name);
settings.setValue("hostAddress", hostAddress);
settings.setValue("webSocketUrl", webSocketUrl);
settings.endGroup();
settings.endGroup();
qDebug() << "Connections: saved connection" << settings.fileName();
}
void NymeaHosts::removeHost(NymeaHost *host)
{
int index = m_hosts.indexOf(host);
beginRemoveRows(QModelIndex(), index, index);
qDebug() << "Connections: removed connection" << host->webSocketUrl();
m_hosts.removeAt(index);
QSettings settings;
settings.beginGroup("Connections");
settings.remove(host->uuid().toString());
settings.endGroup();
host->deleteLater();
endRemoveRows();
}
void NymeaHosts::clearModel()
{
beginResetModel();
qDebug() << "NymeaHosts: delete all hosts";
qDeleteAll(m_hosts);
m_hosts.clear();
endResetModel();
}
QHash<int, QByteArray> NymeaHosts::roleNames() const
{
QHash<int, QByteArray> roles;
roles[NameRole] = "name";
roles[HostAddressRole] = "hostAddress";
roles[WebSocketUrlRole] = "webSocketUrl";
return roles;
}