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 }