From 0d2668bac56e084acce95f610bf0ed66b9fa822e Mon Sep 17 00:00:00 2001 From: oleg Date: Mon, 13 Apr 2026 10:39:48 +0300 Subject: [PATCH] add nmea2000 dependency. Fix CSV parsing --- CMakeLists.txt | 4 ++++ cmake/dependencies.cmake | 13 +++++++++++++ src/csv.cpp | 8 ++++++++ src/j1939_db.cpp | 4 ++++ 4 files changed, 29 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d493102..eee86b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,5 +45,9 @@ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${clipp_SOURCE_DIR}/include ) +target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE + CANBOAT_JSON_PATH="${canboat_SOURCE_DIR}/docs/canboat.json" +) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ftxui::component ftxui::screen ftxui::dom tiny-process-library xlnt sqlite3_lib z Boost::regex ${Boost_LIBRARIES} lely::coapp lely::co lely::can lely::io2 lely::ev lely::util) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index c40d0ed..1eb5bb5 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -121,6 +121,19 @@ FetchContent_Declare( GIT_PROGRESS TRUE ) +FetchContent_Declare( + canboat + GIT_REPOSITORY https://github.com/canboat/canboat.git + GIT_TAG v6.1.6 + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE +) + +FetchContent_GetProperties(canboat) +if(NOT canboat_POPULATED) + FetchContent_Populate(canboat) +endif() + FetchContent_GetProperties(lely_core) if(NOT lely_core_POPULATED) FetchContent_Populate(lely_core) diff --git a/src/csv.cpp b/src/csv.cpp index f1db020..c9cc0aa 100644 --- a/src/csv.cpp +++ b/src/csv.cpp @@ -92,6 +92,14 @@ std::unique_ptr parseCsv(const std::string &file) { if (line.empty()) continue; + while (std::count(line.begin(), line.end(), '"') % 2 != 0) { + std::string next; + if (!std::getline(ifs, next)) + break; + line += '\n'; + line += next; + } + auto fields = parseCsvLine(line); std::map pgn_row_map, spn_row_map; diff --git a/src/j1939_db.cpp b/src/j1939_db.cpp index 18a0b73..fc08171 100644 --- a/src/j1939_db.cpp +++ b/src/j1939_db.cpp @@ -57,6 +57,10 @@ void initJ1939Database(sqlite::database &db) { db << "PRAGMA journal_mode = OFF"; db << "PRAGMA synchronous = OFF"; db << "PRAGMA foreign_keys = ON;"; + + db << "CREATE INDEX IF NOT EXISTS idx_spns_pgn ON spns(pgn);"; + db << "CREATE INDEX IF NOT EXISTS idx_spn_fragments_spn ON spn_fragments(spn);"; + db << "CREATE INDEX IF NOT EXISTS idx_spn_fragments_spn_pgn ON spn_fragments(spn, pgn);"; } std::string buildPgnInsertSql() {