File indexing completed on 2024-05-12 17:24:10

0001 // SPDX-FileCopyrightText: 2023 Mathis <mbb@kaidan.im>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #include "waterhistorymodel.h"
0005 #include <QCoroTask>
0006 #include <QCoroFuture>
0007 #include <QDateTime>
0008 
0009 WaterHistoryModel::WaterHistoryModel(QObject *parent)
0010     : QAbstractListModel(parent)
0011 {
0012 }
0013 
0014 DB::Plant::Id WaterHistoryModel::plantId() const
0015 {
0016     return m_plantId;
0017 }
0018 
0019 void WaterHistoryModel::setPlantId(const DB::Plant::Id plantId)
0020 {
0021     if (plantId == m_plantId) {
0022         return;
0023     }
0024     m_plantId = plantId;
0025     auto future = Database::instance().waterEvents(plantId);
0026 
0027     QCoro::connect(std::move(future), this, [this](auto &&waterEvents) {
0028         beginResetModel();
0029         m_data = waterEvents;
0030         endResetModel();
0031     });
0032     Q_EMIT plantIdChanged();
0033 }
0034 
0035 int WaterHistoryModel::rowCount(const QModelIndex &) const
0036 {
0037     return m_data.size();
0038 }
0039 
0040 QHash<int, QByteArray> WaterHistoryModel::roleNames() const
0041 {
0042     return {
0043         {WaterEventRole, "waterEvent"}
0044     };
0045 }
0046 
0047 QVariant WaterHistoryModel::data(const QModelIndex &index, int role) const
0048 {
0049     Q_UNUSED(role)
0050     Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid));
0051 
0052     return QDateTime::fromSecsSinceEpoch(m_data.at(index.row()).value);
0053 }
0054 
0055 void WaterHistoryModel::waterPlant()
0056 {
0057     const int now = QDateTime::currentDateTime().toSecsSinceEpoch();
0058     Database::instance().waterPlant(m_plantId, now);
0059     beginInsertRows({}, m_data.size(), m_data.size());
0060     m_data.emplace_back(SingleValue<int>{now});
0061     endInsertRows();
0062 }