9 Commits
v1.1 ... v1.1.2

8 changed files with 41 additions and 17 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 129 KiB

BIN
packaging/mobile_window.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -2,7 +2,7 @@
<component type="desktop-application"> <component type="desktop-application">
<id>org.eyecreate.qiflora</id> <id>org.eyecreate.qiflora</id>
<name>QiFlora</name> <name>QiFlora</name>
<summary>Mobile friendly application to monitor Mi Flora devices.</summary> <summary>Mobile friendly application to monitor plants using Mi Flora devices.</summary>
<metadata_license>FSFAP</metadata_license> <metadata_license>FSFAP</metadata_license>
<project_license>GPL-3.0-or-later</project_license> <project_license>GPL-3.0-or-later</project_license>
<content_rating type="oars-1.1" /> <content_rating type="oars-1.1" />
@@ -15,10 +15,23 @@
</description> </description>
<screenshots> <screenshots>
<screenshot type="default"> <screenshot type="default">
<image type="source">https://git.eyecreate.org/eyecreate/qiflora/raw/v1.1/packaging/main_window.png</image> <image type="source">https://git.eyecreate.org/eyecreate/qiflora/raw/v1.1.2/packaging/main_window.png</image>
</screenshot>
<screenshot>
<image type="source">https://git.eyecreate.org/eyecreate/qiflora/raw/v1.1.2/packaging/mobile_window.png</image>
</screenshot> </screenshot>
</screenshots> </screenshots>
<releases> <releases>
<release version="1.1.2" date="2019-11-15" type="stable">
<description>
<p>Fixed code causing text to sometimes not appear.</p>
</description>
</release>
<release version="1.1.1" date="2019-11-14" type="stable">
<description>
<p>Cleaned up graph markings and temperature rounding.</p>
</description>
</release>
<release version="1.1" date="2019-11-13" type="stable"> <release version="1.1" date="2019-11-13" type="stable">
<description> <description>
<p>This release adds history graph for the last 48 hours.</p> <p>This release adds history graph for the last 48 hours.</p>

View File

@@ -1,7 +1,7 @@
[Desktop Entry] [Desktop Entry]
Name=QiFlora Name=QiFlora
Comment=Monitor plants with Mi Flora sensors. Comment=Monitor plants with Mi Flora sensors.
Version=1.1 Version=1.1.2
Exec=qiflora Exec=qiflora
MimeType=application/x-qiflora; MimeType=application/x-qiflora;
Icon=org.eyecreate.qiflora Icon=org.eyecreate.qiflora

View File

@@ -83,12 +83,15 @@
"name": "qiflora", "name": "qiflora",
"buildsystem": "cmake-ninja", "buildsystem": "cmake-ninja",
"builddir": true, "builddir": true,
"config-opts": [
"-DCMAKE_BUILD_TYPE=Release"
]
"sources": [ "sources": [
{ {
"type": "git", "type": "git",
"url": "https://git.eyecreate.org/eyecreate/qiflora.git", "url": "https://git.eyecreate.org/eyecreate/qiflora.git",
"tag": "v1.1", "tag": "v1.1.2",
"commit": "9bad2c73ff21515f63f5a09d7a8434bdfd98e6ee" "commit": "16db502a0460139dcff6a63df90c218e3e4c1d66"
} }
] ]
} }

View File

@@ -3,7 +3,7 @@ import org.kde.kirigami 2.6 as Kirigami
import QtQuick.Controls 2.0 as Controls import QtQuick.Controls 2.0 as Controls
import QtQuick.Layouts 1.12 as Layouts import QtQuick.Layouts 1.12 as Layouts
import QtCharts 2.3 as Charts import QtCharts 2.3 as Charts
import org.eyecreate.qiflora 1.0 import org.eyecreate.qiflora 1.1
Kirigami.ApplicationWindow { Kirigami.ApplicationWindow {
id: root id: root
@@ -25,7 +25,7 @@ Kirigami.ApplicationWindow {
id: mainPage id: mainPage
mainAction: Kirigami.Action { mainAction: Kirigami.Action {
iconName: "view-refresh" iconName: "view-refresh"
text: i18n("Query Device") text: qsTr("Query Device")
onTriggered: { onTriggered: {
deviceSelect.open(); deviceSelect.open();
} }
@@ -33,7 +33,7 @@ Kirigami.ApplicationWindow {
contextualActions: [ contextualActions: [
Kirigami.Action { Kirigami.Action {
iconName: "help-about" iconName: "help-about"
text: i18n("About") text: qsTr("About")
onTriggered: { onTriggered: {
pageStack.replace(aboutPageComponent); pageStack.replace(aboutPageComponent);
} }
@@ -73,6 +73,7 @@ Kirigami.ApplicationWindow {
title: "Temperature" title: "Temperature"
icon: "filename-bpm-amarok" icon: "filename-bpm-amarok"
lineColor: "red" lineColor: "red"
units: "&deg;C"
yMin: -20 yMin: -20
yMax: 40 yMax: 40
modelCol: 1 modelCol: 1
@@ -82,6 +83,7 @@ Kirigami.ApplicationWindow {
title: "Moisture" title: "Moisture"
icon: "colors-chromablue" icon: "colors-chromablue"
lineColor: "cyan" lineColor: "cyan"
units: "%"
yMin: 0 yMin: 0
yMax: 75 yMax: 75
modelCol: 3 modelCol: 3
@@ -91,6 +93,7 @@ Kirigami.ApplicationWindow {
title: "Conductivity" title: "Conductivity"
icon: "quickopen" icon: "quickopen"
lineColor: "gold" lineColor: "gold"
units: "&#181;S/cm"
yMin: 0 yMin: 0
yMax: 6000 yMax: 6000
modelCol: 4 modelCol: 4
@@ -100,6 +103,7 @@ Kirigami.ApplicationWindow {
title: "Brightness" title: "Brightness"
icon: "contrast" icon: "contrast"
lineColor: "orange" lineColor: "orange"
units: "lux"
yMin: 0 yMin: 0
yMax: 30000 yMax: 30000
modelCol: 2 modelCol: 2
@@ -109,7 +113,7 @@ Kirigami.ApplicationWindow {
delegate: Kirigami.Card { delegate: Kirigami.Card {
id: card id: card
banner { banner {
title: i18n(model.title) title: qsTr(model.title)
titleIcon: model.icon titleIcon: model.icon
titleLevel: 2 titleLevel: 2
} }
@@ -121,13 +125,13 @@ Kirigami.ApplicationWindow {
Kirigami.Heading { Kirigami.Heading {
Layouts.Layout.alignment: Qt.AlignCenter Layouts.Layout.alignment: Qt.AlignCenter
level: 4 level: 4
text: i18n("Last Measured") text: qsTr("Last Measured")
} }
Kirigami.Heading { Kirigami.Heading {
Layouts.Layout.alignment: Qt.AlignCenter Layouts.Layout.alignment: Qt.AlignCenter
level: 3 level: 3
text: { text: {
if(model.chartType == "temperature") qiflora.temperature + "°C\n" + (qiflora.temperature*1.8+32) + "°F" if(model.chartType == "temperature") Math.round(qiflora.temperature*10)/10 + "°C\n" + (Math.round((qiflora.temperature*1.8+32)*10)/10) + "°F"
else if(model.chartType == "moisture") qiflora.moisture + "%" else if(model.chartType == "moisture") qiflora.moisture + "%"
else if(model.chartType == "conductivity") qiflora.conduction + " µS/cm" else if(model.chartType == "conductivity") qiflora.conduction + " µS/cm"
else if(model.chartType == "brightness") qiflora.brightness + " lux" else if(model.chartType == "brightness") qiflora.brightness + " lux"
@@ -163,6 +167,7 @@ Kirigami.ApplicationWindow {
} }
axisY: Charts.ValueAxis { axisY: Charts.ValueAxis {
id: valueAx id: valueAx
labelFormat: "%d "+units
labelsColor: Kirigami.Theme.textColor labelsColor: Kirigami.Theme.textColor
min: yMin min: yMin
max: yMax max: yMax
@@ -202,7 +207,7 @@ Kirigami.ApplicationWindow {
color: "transparent" color: "transparent"
} }
Kirigami.Heading { Kirigami.Heading {
text: i18n("Select Device to Query") text: qsTr("Select Device to Query")
} }
Rectangle { Rectangle {
height: 10 height: 10
@@ -245,7 +250,7 @@ Kirigami.ApplicationWindow {
id: aboutPage id: aboutPage
actions.main: Kirigami.Action { actions.main: Kirigami.Action {
iconName: "window-close" iconName: "window-close"
text: "Close" text: qsTr("Close")
onTriggered: { onTriggered: {
pageStack.clear(); pageStack.clear();
pageStack.push(mainPageComponent); pageStack.push(mainPageComponent);

View File

@@ -12,7 +12,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv); QApplication app(argc, argv);
KAboutData aboutData("org.eyecreate.qiflora", "QiFlora", "1.1", "Mobile friendly application to monitor Mi Flora devices.",KAboutLicense::GPL_V3);//TODO:i18n KAboutData aboutData("org.eyecreate.qiflora", "QiFlora", "1.1.2", "Mobile friendly application to monitor Mi Flora devices.",KAboutLicense::GPL_V3);//TODO:i18n
aboutData.setProductName("qiflora"); aboutData.setProductName("qiflora");
aboutData.addAuthor("Kevin Whitaker",QString(),"eyecreate@eyecreate.org","https://www.eyecreate.org"); aboutData.addAuthor("Kevin Whitaker",QString(),"eyecreate@eyecreate.org","https://www.eyecreate.org");
aboutData.setDesktopFileName("org.eyecreate.qiflora"); aboutData.setDesktopFileName("org.eyecreate.qiflora");
@@ -26,7 +26,7 @@ Q_DECL_EXPORT int main(int argc, char *argv[])
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
qmlRegisterType<BluetoothDevices>(); qmlRegisterType<BluetoothDevices>();
qmlRegisterType<MiFlora>("org.eyecreate.qiflora",1,0,"QiFlora"); qmlRegisterType<MiFlora>("org.eyecreate.qiflora",1,1,"QiFlora");
engine.rootContext()->setContextProperty(QStringLiteral("appAboutData"), QVariant::fromValue(aboutData)); engine.rootContext()->setContextProperty(QStringLiteral("appAboutData"), QVariant::fromValue(aboutData));
engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

View File

@@ -17,6 +17,7 @@
#include "florahistory.h" #include "florahistory.h"
#include <QDebug> #include <QDebug>
#include <cmath>
QVariant FloraHistory::data(const QModelIndex& index, int role) const QVariant FloraHistory::data(const QModelIndex& index, int role) const
{ {
@@ -24,13 +25,15 @@ QVariant FloraHistory::data(const QModelIndex& index, int role) const
if(index.column() == 0) { if(index.column() == 0) {
return QVariant(tableData[index.row()].time); return QVariant(tableData[index.row()].time);
} else if(index.column() == 1) { } else if(index.column() == 1) {
return QVariant(tableData[index.row()].temperature); return QVariant(std::round(tableData[index.row()].temperature*10)/10); //temp in C
} else if(index.column() == 2) { } else if(index.column() == 2) {
return QVariant(tableData[index.row()].brightness); return QVariant(tableData[index.row()].brightness);
} else if(index.column() == 3) { } else if(index.column() == 3) {
return QVariant(tableData[index.row()].moisture); return QVariant(tableData[index.row()].moisture);
} else if(index.column() == 4) { } else if(index.column() == 4) {
return QVariant(tableData[index.row()].conductivity); return QVariant(tableData[index.row()].conductivity);
} else if(index.column() == 5) {
return QVariant((std::round((tableData[index.row()].temperature*1.8+32)*10)/10)); //temp in F
} else { } else {
return QVariant(); return QVariant();
} }
@@ -41,7 +44,7 @@ QVariant FloraHistory::data(const QModelIndex& index, int role) const
int FloraHistory::columnCount(const QModelIndex& parent) const int FloraHistory::columnCount(const QModelIndex& parent) const
{ {
return 5; return 6;
} }
int FloraHistory::rowCount(const QModelIndex& parent) const int FloraHistory::rowCount(const QModelIndex& parent) const