80a5eb593ec1b48c7de07df2f9cfceb42e35b32a
[harbour-pedalo.git] / src / journeymodel.cpp
1 #include "journeymodel.h"
2 #include <QDebug>
3
4 JourneyModel::JourneyModel(QObject *parent) : QAbstractListModel(parent) {
5 roles[StartRole] = "start";
6 roles[DurationRole] = "duration";
7 roles[OvertookRole] = "overtook";
8 roles[OvertakenByRole] = "overtakenby";
9 }
10
11 QHash<int, QByteArray> JourneyModel::roleNames() const {
12 return roles;
13 }
14
15 void JourneyModel::addJourney(const Journey &journey)
16 {
17 beginInsertRows(QModelIndex(), rowCount(), rowCount());
18 journeys << journey;
19 endInsertRows();
20 }
21
22 void JourneyModel::addJourney(QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby) {
23 quint64 startepoch = start.toMSecsSinceEpoch();
24 addJourney(Journey(startepoch, duration, overtook, overtakenby));
25 }
26
27 void JourneyModel::editJourney(quint32 index, QDateTime start, quint32 duration, quint32 overtook, quint32 overtakenby) {
28 quint64 startepoch = start.toMSecsSinceEpoch();
29 journeys.replace(index, Journey(startepoch, duration, overtook, overtakenby));
30 emit dataChanged(createIndex(index, 0), createIndex(index, 0));
31 }
32
33 int JourneyModel::rowCount(const QModelIndex & parent) const {
34 Q_UNUSED(parent)
35 return journeys.count();
36 }
37
38 QVariant JourneyModel::data(const QModelIndex & index, int role) const {
39 if (index.row() < 0 || index.row() > journeys.count())
40 return QVariant();
41
42 const Journey &journey = journeys[index.row()];
43 if (role == StartRole)
44 return journey.getStart();
45 else if (role == DurationRole)
46 return journey.getDuration();
47 else if (role == OvertookRole)
48 return journey.getOvertook();
49 else if (role == OvertakenByRole)
50 return journey.getOvertakenBy();
51 return QVariant();
52 }
53
54 void JourneyModel::clear() {
55 journeys.clear();
56 }
57
58 void JourneyModel::exportToFile(QFile & file) {
59 if (file.open(QIODevice::WriteOnly)) {
60 QTextStream out(&file);
61 for (QList<Journey>::iterator journeyIter = journeys.begin(); journeyIter != journeys.end(); journeyIter++) {
62 out << journeyIter->getStart() << ",";
63 out << journeyIter->getDuration() << ",";
64 out << journeyIter->getOvertook() << ",";
65 out << journeyIter->getOvertakenBy() << endl;
66 }
67 file.close();
68 }
69 else {
70 qDebug() << "File failed to export";
71 }
72 }
73
74 void JourneyModel::importFromFile(QFile & file) {
75 if (file.open(QIODevice::ReadOnly)) {
76 QTextStream in(&file);
77 while (!in.atEnd()) {
78 QStringList data;
79 quint64 start;
80 qint32 duration = 0;
81 qint32 overtook = 0;
82 qint32 overtakenby = 0;
83
84 data = in.readLine().split(",");
85 if (data.length() == 4) {
86 start = data[0].toLongLong();
87 duration = data[1].toLongLong();
88 overtook = data[2].toLongLong();
89 overtakenby = data[3].toLongLong();
90
91 addJourney(Journey(start, duration, overtook, overtakenby));
92 }
93 }
94 file.close();
95 }
96 }
97
98
99 QDate JourneyModel::epochToDate(quint64 epoch) {
100 QDateTime date;
101
102 qDebug() << "Epoch: " << epoch;
103 date.setMSecsSinceEpoch(epoch);
104 qDebug() << "Date: " << date.date();
105 return date.date();
106 }
107
108 QTime JourneyModel::epochToTime(quint64 epoch) {
109 QDateTime date;
110
111 date.setMSecsSinceEpoch(epoch);
112 return date.time();
113 }
114
115 QDateTime JourneyModel::epochToDateTime(quint64 epoch) {
116 QDateTime date;
117
118 date.setMSecsSinceEpoch(epoch);
119 return date;
120 }