File indexing completed on 2024-05-12 04:42:43

0001 /*
0002     SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "journeyutil_p.h"
0008 #include "stopoverutil_p.h"
0009 #include "timeutil_p.h"
0010 
0011 #include <KPublicTransport/Journey>
0012 #include <KPublicTransport/Stopover>
0013 
0014 #include <QDateTime>
0015 #include <QTimeZone>
0016 
0017 using namespace KPublicTransport;
0018 
0019 QDateTime JourneyUtil::firstTransportDeparture(const Journey &jny)
0020 {
0021     for (const auto &section : jny.sections()) {
0022         if (section.mode() == JourneySection::PublicTransport) {
0023             return section.scheduledDepartureTime();
0024         }
0025     }
0026 
0027     return jny.scheduledDepartureTime();
0028 }
0029 
0030 bool JourneyUtil::firstTransportDepartureLessThan(const Journey &lhs, const Journey &rhs)
0031 {
0032     return firstTransportDeparture(lhs) < firstTransportDeparture(rhs);
0033 }
0034 
0035 bool JourneyUtil::firstTransportDepartureEqual(const Journey &lhs, const Journey &rhs)
0036 {
0037     return firstTransportDeparture(lhs) == firstTransportDeparture(rhs);
0038 }
0039 
0040 void JourneyUtil::applyTimeZone(Journey &jny, const QTimeZone &tz)
0041 {
0042     auto sections = std::move(jny.takeSections());
0043     for (auto &sec : sections) {
0044         sec.setScheduledDepartureTime(TimeUtil::applyTimeZone(sec.scheduledDepartureTime(), tz));
0045         sec.setExpectedDepartureTime(TimeUtil::applyTimeZone(sec.expectedDepartureTime(), tz));
0046         sec.setScheduledArrivalTime(TimeUtil::applyTimeZone(sec.scheduledArrivalTime(), tz));
0047         sec.setExpectedArrivalTime(TimeUtil::applyTimeZone(sec.expectedArrivalTime(), tz));
0048 
0049         auto stops = sec.takeIntermediateStops();
0050         for (auto &stop : stops) {
0051             StopoverUtil::applyTimeZone(stop, tz);
0052         }
0053         sec.setIntermediateStops(std::move(stops));
0054     }
0055     jny.setSections(std::move(sections));
0056 }