File indexing completed on 2025-02-02 05:02:38
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "tripgroup.h" 0008 0009 #include "jsonio.h" 0010 #include "logging.h" 0011 #include "reservationmanager.h" 0012 #include "tripgroupmanager.h" 0013 #include "transfer.h" 0014 #include "transfermanager.h" 0015 0016 #include <KItinerary/SortUtil> 0017 0018 #include <QDateTime> 0019 #include <QDebug> 0020 #include <QFile> 0021 #include <QJsonArray> 0022 #include <QJsonObject> 0023 0024 TripGroup::TripGroup() = default; 0025 0026 TripGroup::TripGroup(TripGroupManager *mgr) 0027 : m_mgr(mgr) 0028 { 0029 } 0030 0031 TripGroup::~TripGroup() = default; 0032 0033 QString TripGroup::name() const 0034 { 0035 return m_name; 0036 } 0037 0038 void TripGroup::setName(const QString &name) 0039 { 0040 m_name = name; 0041 } 0042 0043 QVector<QString> TripGroup::elements() const 0044 { 0045 return m_elements; 0046 } 0047 0048 void TripGroup::setElements(const QVector<QString> &elems) 0049 { 0050 m_elements = elems; 0051 } 0052 0053 bool TripGroup::load(const QString &path) 0054 { 0055 QFile f(path); 0056 if (!f.open(QFile::ReadOnly)) { 0057 qCWarning(Log) << "Failed to open trip group file:" << path << f.errorString(); 0058 return false; 0059 } 0060 0061 const auto obj = JsonIO::read(f.readAll()).toObject(); 0062 m_name = obj.value(QLatin1StringView("name")).toString(); 0063 const auto elems = obj.value(QLatin1StringView("elements")).toArray(); 0064 m_elements.clear(); 0065 m_elements.reserve(elems.size()); 0066 for (const auto &v : elems) { 0067 m_elements.push_back(v.toString()); 0068 } 0069 0070 return elems.size() >= 2; 0071 } 0072 0073 void TripGroup::store(const QString &path) const 0074 { 0075 QFile f(path); 0076 if (!f.open(QFile::WriteOnly)) { 0077 qCWarning(Log) << "Failed to open trip group file:" << path << f.errorString(); 0078 return; 0079 } 0080 0081 QJsonObject obj; 0082 obj.insert(QLatin1StringView("name"), m_name); 0083 QJsonArray elems; 0084 std::copy(m_elements.begin(), m_elements.end(), std::back_inserter(elems)); 0085 obj.insert(QLatin1StringView("elements"), elems); 0086 f.write(JsonIO::write(obj)); 0087 } 0088 0089 QDateTime TripGroup::beginDateTime() const 0090 { 0091 if (m_elements.empty()) { 0092 return {}; 0093 } 0094 const auto res = m_mgr->m_resMgr->reservation(m_elements.at(0)); 0095 const auto dt = KItinerary::SortUtil::startDateTime(res); 0096 0097 const auto transfer = m_mgr->m_transferMgr ? m_mgr->m_transferMgr->transfer(m_elements.at(0), Transfer::Before) : Transfer(); 0098 if (transfer.state() == Transfer::Selected && transfer.journey().scheduledDepartureTime().isValid()) { 0099 return std::min(dt, transfer.journey().scheduledDepartureTime()); 0100 } 0101 return dt; 0102 } 0103 0104 QDateTime TripGroup::endDateTime() const 0105 { 0106 if (m_elements.empty()) { 0107 return {}; 0108 } 0109 const auto res = m_mgr->m_resMgr->reservation(m_elements.constLast()); 0110 const auto dt = KItinerary::SortUtil::endDateTime(res); 0111 0112 const auto transfer = m_mgr->m_transferMgr ? m_mgr->m_transferMgr->transfer(m_elements.constLast(), Transfer::After) : Transfer(); 0113 if (transfer.state() == Transfer::Selected && transfer.journey().scheduledArrivalTime().isValid()) { 0114 return std::max(dt, transfer.journey().scheduledArrivalTime()); 0115 } 0116 return dt; 0117 } 0118 0119 #include "moc_tripgroup.cpp"