Hello community, here is the log from the commit of package kitinerary for openSUSE:Factory checked in at 2020-11-10 13:36:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kitinerary (Old) and /work/SRC/openSUSE:Factory/.kitinerary.new.11331 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kitinerary" Tue Nov 10 13:36:25 2020 rev:29 rq:846698 version:20.08.3 Changes: -------- --- /work/SRC/openSUSE:Factory/kitinerary/kitinerary.changes 2020-10-12 13:50:19.981994937 +0200 +++ /work/SRC/openSUSE:Factory/.kitinerary.new.11331/kitinerary.changes 2020-11-10 13:36:44.588796608 +0100 @@ -1,0 +2,15 @@ +Thu Nov 5 22:46:33 UTC 2020 - Luca Beltrame <lbeltr...@kde.org> + +- Update to 20.08.3 + * New bugfix release + * For more details please see: + * https://kde.org/announcements/releases/2020-11-apps-update +- Changes since 20.08.2: + * Be a bit less strict when applying the year from the context date + * Guard against SNCF tickets having 1st/2nd leg barcode on 3rd leg page + * Fix second leg class extraction from SNCF ticket barcodes + * Extract English SNCF tickets + * Avoid NaN comparisons + * Require C++17 + +------------------------------------------------------------------- Old: ---- kitinerary-20.08.2.tar.xz kitinerary-20.08.2.tar.xz.sig New: ---- kitinerary-20.08.3.tar.xz kitinerary-20.08.3.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kitinerary.spec ++++++ --- /var/tmp/diff_new_pack.LFtqDm/_old 2020-11-10 13:36:45.180795432 +0100 +++ /var/tmp/diff_new_pack.LFtqDm/_new 2020-11-10 13:36:45.180795432 +0100 @@ -18,7 +18,7 @@ %bcond_without lang Name: kitinerary -Version: 20.08.2 +Version: 20.08.3 Release: 0 Summary: Data model and extraction system for travel reservations License: LGPL-2.1-or-later ++++++ kitinerary-20.08.2.tar.xz -> kitinerary-20.08.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/CMakeLists.txt new/kitinerary-20.08.3/CMakeLists.txt --- old/kitinerary-20.08.2/CMakeLists.txt 2020-10-03 14:53:18.000000000 +0200 +++ new/kitinerary-20.08.3/CMakeLists.txt 2020-10-31 18:39:10.000000000 +0100 @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.5) -set(PIM_VERSION "5.15.2") +set(PIM_VERSION "5.15.3") project(KItinerary VERSION ${PIM_VERSION}) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(KF5_MIN_VERSION "5.71.0") @@ -33,8 +33,8 @@ find_package(SharedMimeInfo 1.3 REQUIRED) endif() -set(KMIME_VERSION "5.15.2") -set(PIM_PKPASS "5.15.2") +set(KMIME_VERSION "5.15.3") +set(PIM_PKPASS "5.15.3") find_package(KF5Mime ${KMIME_VERSION} CONFIG REQUIRED) find_package(KF5CalendarCore ${KF5_MIN_VERSION} CONFIG) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/po/nn/kitinerary.po new/kitinerary-20.08.3/po/nn/kitinerary.po --- old/kitinerary-20.08.2/po/nn/kitinerary.po 1970-01-01 01:00:00.000000000 +0100 +++ new/kitinerary-20.08.3/po/nn/kitinerary.po 2020-11-03 01:48:03.000000000 +0100 @@ -0,0 +1,186 @@ +# Translation of kitinerary to Norwegian Nynorsk +# +# Karl Ove Hufthammer <k...@huftis.org>, 2020. +msgid "" +msgstr "" +"Project-Id-Version: kitinerary\n" +"Report-Msgid-Bugs-To: https://bugs.kde.org\n" +"POT-Creation-Date: 2020-07-13 07:48+0200\n" +"PO-Revision-Date: 2020-10-24 14:33+0200\n" +"Last-Translator: Karl Ove Hufthammer <k...@huftis.org>\n" +"Language-Team: Norwegian Nynorsk <l10n...@lister.huftis.org>\n" +"Language: nn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 20.08.2\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#: calendarhandler.cpp:187 +#, kde-format +msgctxt "canceled train/flight/loding reservation" +msgid "Canceled: %1" +msgstr "Kansellert: %1" + +#: calendarhandler.cpp:217 +#, kde-format +msgid "Flight %1 from %2 to %3" +msgstr "Flyging %1 frå %2 til %3" + +#: calendarhandler.cpp:236 +#, kde-format +msgid "Boarding for flight %1" +msgstr "Ombordstiging for flyging %1" + +#: calendarhandler.cpp:238 +#, kde-format +msgid "Boarding for flight %1 at gate %2" +msgstr "Ombordstiging for flyging %1 ved utgang %2" + +#: calendarhandler.cpp:247 +#, kde-format +msgid "Boarding time: %1" +msgstr "Ombordstigingstid: %1" + +#: calendarhandler.cpp:250 +#, kde-format +msgid "Departure gate: %1" +msgstr "Ombordstiging ved utgang: %1" + +#: calendarhandler.cpp:260 +#, kde-format +msgid "Boarding group: %1" +msgstr "Ombordstigingsgruppe: %1" + +#: calendarhandler.cpp:263 calendarhandler.cpp:295 calendarhandler.cpp:323 +#, kde-format +msgid "Seat: %1" +msgstr "Sete: %1" + +#: calendarhandler.cpp:266 calendarhandler.cpp:301 calendarhandler.cpp:326 +#: calendarhandler.cpp:369 calendarhandler.cpp:423 +#, kde-format +msgid "Booking reference: %1" +msgstr "Reservasjonskode: %1" + +#: calendarhandler.cpp:278 +#, kde-format +msgid "Train %1 from %2 to %3" +msgstr "Tog %1 frå %2 til %3" + +#: calendarhandler.cpp:287 +#, kde-format +msgid "Departure platform: %1" +msgstr "Avgang ved plattform: %1" + +#: calendarhandler.cpp:292 +#, kde-format +msgid "Coach: %1" +msgstr "Vogn: %1" + +#: calendarhandler.cpp:298 +#, kde-format +msgid "Arrival platform: %1" +msgstr "Innkomst ved plattform: %1" + +#: calendarhandler.cpp:312 +#, kde-format +msgid "Bus %1 from %2 to %3" +msgstr "Buss %1 frå %2 til %3" + +#: calendarhandler.cpp:336 +#, kde-format +msgid "Hotel reservation: %1" +msgstr "Hotellreservasjon: %1" + +#: calendarhandler.cpp:347 +#, kde-format +msgid "Check-in: %1" +msgstr "Innsjekk etter: %1" + +#: calendarhandler.cpp:350 +#, kde-format +msgid "Check-out: %1" +msgstr "Utsjekk før: %1" + +#: calendarhandler.cpp:353 +#, kde-format +msgid "Phone: %1" +msgstr "Telefonnummer: %1" + +#: calendarhandler.cpp:356 +#, kde-format +msgid "Email: %1" +msgstr "E-postadresse: %1" + +#: calendarhandler.cpp:359 +#, kde-format +msgid "Website: %1" +msgstr "Heimeside: %1" + +#: calendarhandler.cpp:402 +#, kde-format +msgid "Entrance for %1" +msgstr "Inngang for %1" + +#: calendarhandler.cpp:448 +#, kde-format +msgid "Restaurant reservation: %1" +msgstr "Restaurantreservasjon: %1" + +#: calendarhandler.cpp:462 +#, kde-format +msgid "Number Of People: %1" +msgstr "Talet på gjestar: %1" + +#: calendarhandler.cpp:465 +#, kde-format +msgid "Reservation reference: %1" +msgstr "Reservasjonskode: %1" + +#: calendarhandler.cpp:469 +#, kde-format +msgid "Under name: %1" +msgstr "Under namnet: %1" + +#: calendarhandler.cpp:479 +#, kde-format +msgid "Rental Car reservation: %1" +msgstr "Leigebilreservasjon: %1" + +# Same som «rental car» (førre tekst)? +#: calendarhandler.cpp:487 +#, kde-format +msgid "Rent car reservation: %1" +msgstr "Leigebilreservasjon: %1" + +#: calendarhandler.cpp:494 +#, kde-format +msgid "" +"Reservation reference: %1\n" +"Under name: %2\n" +"\n" +"PickUp location: %3\n" +"\n" +"Dropoff Location: %4" +msgstr "" +"Reservasjonsreferanse: %1\n" +"Under namnet: %2\n" +"\n" +"Hentestad: %3\n" +"\n" +"Levering: %4" + +#: calendarhandler.cpp:519 +#, kde-format +msgid "" +"Reservation reference: %1\n" +"Under name: %2\n" +"PickUp location: %3" +msgstr "" +"Reservasjonsreferanse: %1\n" +"Under namnet: %2\n" +"Hentestad: %3" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/po/zh_CN/kitinerary.po new/kitinerary-20.08.3/po/zh_CN/kitinerary.po --- old/kitinerary-20.08.2/po/zh_CN/kitinerary.po 2020-10-06 05:43:07.000000000 +0200 +++ new/kitinerary-20.08.3/po/zh_CN/kitinerary.po 2020-11-03 01:48:03.000000000 +0100 @@ -8,7 +8,7 @@ "Project-Id-Version: kdeorg\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2020-07-13 07:48+0200\n" -"PO-Revision-Date: 2020-09-23 12:20\n" +"PO-Revision-Date: 2020-10-08 19:23\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/src/cli/org.kde.kitinerary-extractor.appdata.xml new/kitinerary-20.08.3/src/cli/org.kde.kitinerary-extractor.appdata.xml --- old/kitinerary-20.08.2/src/cli/org.kde.kitinerary-extractor.appdata.xml 2020-10-03 14:53:18.000000000 +0200 +++ new/kitinerary-20.08.3/src/cli/org.kde.kitinerary-extractor.appdata.xml 2020-10-31 18:39:10.000000000 +0100 @@ -18,6 +18,7 @@ <name xml:lang="it">Estrattore a riga di comando di KItinerary</name> <name xml:lang="ko">KItinerary 명령행 추출기</name> <name xml:lang="nl">Extractor van opdrachtregel van KItinerary</name> + <name xml:lang="nn">Kommandolinjebasert uthentar for KItinerary</name> <name xml:lang="pl">Wydobywane danych z wiersza poleceń KItinerary</name> <name xml:lang="pt">Extracção da Linha de Comandos do KItinerary</name> <name xml:lang="pt-BR">Extrator em linha de comando do KItinerary</name> @@ -44,6 +45,7 @@ <summary xml:lang="it">Estrattore di dati di prenotazioni a riga di comando.</summary> <summary xml:lang="ko">명령행 예약 데이터 추출기입니다.</summary> <summary xml:lang="nl">Gegevensextractor van reservering op de opdrachtregel.</summary> + <summary xml:lang="nn">Kommandolinjebasert uthentar for reservasjonsdata.</summary> <summary xml:lang="pl">Wydobywane danych o rezerwacji z wiersza poleceń.</summary> <summary xml:lang="pt">Extracção de dados de reservas na linha de comandos.</summary> <summary xml:lang="pt-BR">Extrator em linha de comando de dados de reservas.</summary> @@ -72,6 +74,7 @@ <p xml:lang="it">Estrattore a riga di comando per dati di itinerari, per l'integrazione con applicazioni di terze parti.</p> <p xml:lang="ko">외부 프로그램에 통합할 수 있는 명령행 여행 정보 추출기입니다.</p> <p xml:lang="nl">Extractor van reisgegevens op de opdrachtregel, voor integratie in toepassingen van derden.</p> + <p xml:lang="nn">Kommandolinjebasert uthentar for reiserutedata, for integrasjon med tredjepartsprogram.</p> <p xml:lang="pl">Wydobywane danych z wiersza poleceń dla planu podróży, do zszywania z aplikacjami osób trzecich.</p> <p xml:lang="pt">Extracção pela linha de comandos de dados de itinerários, para se integrar com aplicações de terceiros.</p> <p xml:lang="pt-BR">Extrator em linha de comando para dados de itinerários, para integração em aplicativos de terceiros.</p> @@ -89,9 +92,9 @@ <binary>kitinerary-extractor</binary> </provides> <releases> + <release version="5.15.3" date="2020-11-05"/> <release version="5.15.2" date="2020-10-08"/> <release version="5.15.1" date="2020-09-03"/> <release version="5.15.0" date="2020-08-13"/> - <release version="5.14.3" date="2020-07-09"/> </releases> </component> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/src/cli/org.kde.kitinerary-extractor.desktop new/kitinerary-20.08.3/src/cli/org.kde.kitinerary-extractor.desktop --- old/kitinerary-20.08.2/src/cli/org.kde.kitinerary-extractor.desktop 2020-10-03 14:53:18.000000000 +0200 +++ new/kitinerary-20.08.3/src/cli/org.kde.kitinerary-extractor.desktop 2020-10-31 18:39:10.000000000 +0100 @@ -14,6 +14,7 @@ Name[it]=Estrattore di KItinerary Name[ko]=KItinerary 추출기 Name[nl]=Extractor van KItinerary +Name[nn]=KItinerary-uthentar Name[pl]=Wydobywanie KItinerary Name[pt]=Extracção do KItinerary Name[pt_BR]=Extrator do KItinerary @@ -38,6 +39,7 @@ GenericName[it]=Estrattore a riga di comando di KItinerary GenericName[ko]=KItinerary 명령행 추출기 GenericName[nl]=Extractor van opdrachtregel van KItinerary +GenericName[nn]=Kommandolinjebasert uthentar for KItinerary GenericName[pl]=Wydobywane danych z wiersza poleceń KItinerary GenericName[pt]=Extracção pela linha de comandos do KItinerary GenericName[pt_BR]=Extrator em linha de comando do KItinerary @@ -65,6 +67,7 @@ Comment[it]=Estrattore di dati di prenotazioni a riga di comando. Comment[ko]=명령행 예약 데이터 추출기입니다. Comment[nl]=Gegevensextractor van reservering op de opdrachtregel. +Comment[nn]=Kommandolinjebasert uthentar for reservasjonsdata. Comment[pl]=Wydobywane danych o rezerwacji z wiersza poleceń. Comment[pt]=Extracção de dados de reservas pela linha de comandos. Comment[pt_BR]=Extrator em linha de comando de dados de reservas. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/src/extractors/sncf.js new/kitinerary-20.08.3/src/extractors/sncf.js --- old/kitinerary-20.08.2/src/extractors/sncf.js 2020-10-03 14:53:18.000000000 +0200 +++ new/kitinerary-20.08.3/src/extractors/sncf.js 2020-10-31 18:39:10.000000000 +0100 @@ -19,11 +19,11 @@ function parseText(text) { var reservations = new Array(); - var bookingRef = text.match(/DOSSIER VOYAGE : +([A-Z0-9]{6})/); + var bookingRef = text.match(/(?:DOSSIER VOYAGE|BOOKING FILE REFERENCE) : +([A-Z0-9]{6})/); var pos = 0; while (true) { - var header = text.substr(pos).match(/ +Départ \/ Arrivée.*\n/); + var header = text.substr(pos).match(/ +(?:Départ \/ Arrivée|Departure \/ Arrival).*\n/); if (!header) break; var index = header.index + header[0].length; @@ -31,14 +31,14 @@ var res = JsonLd.newTrainReservation(); res.reservationNumber = bookingRef[1]; - var depLine = text.substr(pos + index).match(/\n {2,3}([\w -]+?) +(\d{2}\/\d{2}) à (\d{2}h\d{2})/); + var depLine = text.substr(pos + index).match(/\n {2,3}([\w -]+?) +(\d{2}\/\d{2}) (?:à|at) (\d{2}h\d{2})/); if (!depLine) break; index += depLine.index + depLine[0].length; res.reservationFor.departureStation.name = depLine[1]; res.reservationFor.departureTime = JsonLd.toDateTime(depLine[2] + " " + depLine[3], "dd/MM hh'h'mm", "fr"); - var arrLine = text.substr(pos + index).match(/\n {2,3}([\w -]+?) +(\d{2}\/\d{2}) à (\d{2}h\d{2})/); + var arrLine = text.substr(pos + index).match(/\n {2,3}([\w -]+?) +(\d{2}\/\d{2}) (?:à|at) (\d{2}h\d{2})/); if (!arrLine) break; index += arrLine.index + arrLine[0].length; @@ -49,13 +49,13 @@ // since the stations are vertically centered, the stuff we are looking for might be at different // positions relative to them var legText = text.substring(pos + header.index + header[0].length, pos + index); - var trainNumber = legText.match(/TRAIN N° ?(\d{3,4})/); + var trainNumber = legText.match(/TRAIN (?:N°|NUMBER) ?(\d{3,5})/); if (trainNumber) res.reservationFor.trainNumber = trainNumber[1]; - var seatRes = legText.match(/(VOITURE|COACH) (\d+) - PLACE (\d+)/); + var seatRes = legText.match(/(?:VOITURE|COACH) (\d+) - PLACE (\d+)/); if (seatRes) { - res.reservedTicket.ticketedSeat.seatSection = seatRes[2]; - res.reservedTicket.ticketedSeat.seatNumber = seatRes[3]; + res.reservedTicket.ticketedSeat.seatSection = seatRes[1]; + res.reservedTicket.ticketedSeat.seatNumber = seatRes[2]; } reservations.push(res); @@ -70,39 +70,44 @@ function parsePdf(pdf) { var reservations = new Array(); + var barcode = null; for (var i = 0; i < pdf.pageCount; ++i) { var page = pdf.pages[i]; - // barcode format: + // barcode format: (see https://community.kde.org/KDE_PIM/KItinerary/SNCF_Barcodes) // 'i0CV' // 6x PNR - // 9x document id + // 9x document id / e-ticket number // '1211' // dd/MM/yyyy birthdate - // 2x 5x gare & connextion ids of the first leg + // 2x 5x SNCF station code of the first leg // 5x train number first leg // dd/MM travel date // 18x client id // 19x family name // 19x given name - // 1x class - // 4x stuff - // '1' to indicate a second leg, '0' otherwise - // 2x 5x gare & connexion ids for the second leg + // 1x class first leg ('1' or '2') + // 4x tariff/price code + // 1x class second leg ('1' or '2'; '0' if there is no second leg) + // 2x 5x SNCF station code for the second leg // 5x train number second leg - var barcode = null; + var nextBarcode = null; var images = page.imagesInRect(0.75, 0, 1, 0.75); - for (var j = 0; j < images.length && !barcode; ++j) { - barcode = Barcode.decodeAztec(images[j]); - if (barcode.substr(0, 4).toUpperCase() !== "I0CV") - barcode = null; + for (var j = 0; j < images.length && !nextBarcode; ++j) { + nextBarcode = Barcode.decodeAztec(images[j]); + if (nextBarcode.substr(0, 4).toUpperCase() !== "I0CV") + nextBarcode = null; } + // Guard against tickets with 3 or more legs, with the second page for the 3rd and subsequent + // leg repeating the barcode of the first two legs. One would expect the barcode for the following + // legs there, but that doesn't even seem to exists in the sample documents I have for this... + barcode = (nextBarcode && nextBarcode != barcode) ? nextBarcode : null; var underName = null; if (barcode) { var underName = JsonLd.newObject("Person"); - underName.familyName = barcode.substring(73, 91).trim(); - underName.givenName = barcode.substring(92, 110).trim(); + underName.familyName = barcode.substr(72, 19).trim(); + underName.givenName = barcode.substr(91, 19).trim(); } var legs = parseText(page.text); @@ -112,7 +117,7 @@ legs[j].reservedTicket.ticketToken = "aztecCode:" + barcode; legs[j].reservationFor.departureStation.identifier = "sncf:" + barcode.substr(j == 0 ? 33 : 116, 5); legs[j].reservationFor.arrivalStation.identifier = "sncf:" + barcode.substr(j == 0 ? 38 : 121, 5); - legs[j].reservedTicket.ticketedSeat.seatingType = barcode.substring(110, 111); + legs[j].reservedTicket.ticketedSeat.seatingType = barcode.substr(j == 0 ? 110 : 115, 1); } reservations.push(legs[j]); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/src/jsapi/jsonld.cpp new/kitinerary-20.08.3/src/jsapi/jsonld.cpp --- old/kitinerary-20.08.2/src/jsapi/jsonld.cpp 2020-10-03 14:53:18.000000000 +0200 +++ new/kitinerary-20.08.3/src/jsapi/jsonld.cpp 2020-10-31 18:39:10.000000000 +0100 @@ -197,7 +197,9 @@ // if the date does not contain a year number, determine that based on the context date, if set else if (!hasYear && m_contextDate.isValid()) { dt.setDate({m_contextDate.date().year(), dt.date().month(), dt.date().day()}); - if (dt < m_contextDate) { + // go one day back to leave a bit of room for documents produced very close to + // or even during the trip + if (dt < m_contextDate.addDays(-1)) { dt = dt.addYears(1); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kitinerary-20.08.2/src/knowledgedb/timezonedb.cpp new/kitinerary-20.08.3/src/knowledgedb/timezonedb.cpp --- old/kitinerary-20.08.2/src/knowledgedb/timezonedb.cpp 2020-10-03 14:53:18.000000000 +0200 +++ new/kitinerary-20.08.3/src/knowledgedb/timezonedb.cpp 2020-10-31 18:39:10.000000000 +0100 @@ -11,6 +11,8 @@ #include <QTimeZone> +#include <cmath> + using namespace KItinerary; const char* KnowledgeDb::tzId(KnowledgeDb::Tz tz) @@ -43,6 +45,10 @@ KnowledgeDb::Tz KnowledgeDb::timezoneForCoordinate(float lat, float lon, bool *ambiguous) { + if (std::isnan(lat) || std::isnan(lon)) { + return Tz::Undefined; + } + // see arctic latitude filter in the generator script, we only cover 65°S to 80°N if (lat < timezone_index_params.yStart || lat > timezone_index_params.yEnd()) { return Tz::Undefined;