Branch data Line data Source code
1 : : #include "FFBMetadataManager.h"
2 : : #include "logging/Logger.h"
3 : : #include "io/RestApiProvider.h"
4 : :
5 : 3166 : bool FFBMetadataManager::UpdateMetadata(const SharedMemoryObjectOut& data) {
6 : 3166 : const char* trackName = data.scoring.scoringInfo.mTrackName;
7 : 3166 : const char* vehicleClass = nullptr;
8 : 3166 : const char* vehicleName = nullptr;
9 : :
10 [ + + ]: 3166 : if (data.telemetry.playerHasVehicle) {
11 : 2 : int idx = data.telemetry.playerVehicleIdx;
12 : 2 : const VehicleScoringInfoV01& veh = data.scoring.vehScoringInfo[idx];
13 : 2 : vehicleClass = veh.mVehicleClass;
14 : 2 : vehicleName = veh.mVehicleName;
15 : :
16 : : // Issue #368: Log all fields that might contain brand info if a change is detected
17 [ + - + - : 2 : if (vehicleName && m_last_logged_veh != vehicleName) {
+ - ]
18 [ + - + - ]: 2 : std::string restBrand = RestApiProvider::Get().GetManufacturer();
19 [ + - ]: 2 : Logger::Get().LogFile("[Metadata] Vehicle Change Detected: '%s' (Class: '%s', PitGroup: '%s', Filename: '%s', REST Brand: '%s')",
20 [ + - ]: 2 : vehicleName, vehicleClass, veh.mPitGroup, veh.mVehFilename, restBrand.c_str());
21 [ + - ]: 2 : m_last_logged_veh = vehicleName;
22 : 2 : }
23 : : }
24 : :
25 : 3166 : return UpdateInternal(vehicleClass, vehicleName, trackName);
26 : : }
27 : :
28 : 19131 : bool FFBMetadataManager::UpdateInternal(const char* vehicleClass, const char* vehicleName, const char* trackName) {
29 [ + - ]: 19131 : std::lock_guard<std::mutex> lock(m_mutex);
30 : 19131 : bool changed = false;
31 : :
32 [ + + + + ]: 19131 : if (vehicleName && std::strcmp(vehicleName, m_vehicle_name) != 0) {
33 : 115 : StringUtils::SafeCopy(m_vehicle_name, STR_BUF_64, vehicleName);
34 : 115 : changed = true;
35 : :
36 : : // Issue #368: Request manufacturer info from REST API on car change
37 [ + - + - ]: 115 : RestApiProvider::Get().ResetManufacturer();
38 [ + - ]: 115 : RestApiProvider::Get().ResetSteeringRange(); // Issue #379
39 [ + - + - : 345 : RestApiProvider::Get().RequestManufacturer(6397, m_vehicle_name); // TODO: use configured port
+ - ]
40 : : }
41 : :
42 [ + + + - : 26829 : if (vehicleClass && std::string(vehicleClass) != m_current_class_name) {
+ + + + +
+ + + - -
- - ]
43 [ + - ]: 127 : m_current_class_name = vehicleClass;
44 : 127 : changed = true;
45 : : }
46 : :
47 [ + + ]: 19131 : if (changed) {
48 [ + - ]: 131 : m_current_vclass = ParseVehicleClass(m_current_class_name.c_str(), m_vehicle_name);
49 : : }
50 : :
51 [ + + + + ]: 19131 : if (trackName && std::strcmp(trackName, m_track_name) != 0) {
52 : 274 : StringUtils::SafeCopy(m_track_name, STR_BUF_64, trackName);
53 : : }
54 : :
55 : 19131 : return changed;
56 : 19131 : }
|