Skip to content

Commit

Permalink
Fix VD susbscription for unavailable custom params
Browse files Browse the repository at this point in the history
Also was fixed sending of the empty OnVD notification
Fixed removal of custom VD parameters if it was removed in
editor.
Fixed calculation of result code for SubscribeVD and UnsubscribeVD.
  • Loading branch information
AKalinich-Luxoft committed Aug 26, 2019
1 parent fcf3228 commit 0ae8a93
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 44 deletions.
37 changes: 26 additions & 11 deletions app/controller/sdl/Abstract/Controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ SDL.SDLController = Em.Object.extend(
}
return size;
};
this.updateCustomVehicleDataTypesMapping();
},
/**
* Active application model binding type {SDLAppModel}
Expand Down Expand Up @@ -381,6 +382,23 @@ SDL.SDLController = Em.Object.extend(
}
return 0;
},
/**
* @description Updates custom OEM data types according to current VD
*/
updateCustomVehicleDataTypesMapping() {
for (key in SDL.SDLVehicleInfoModel.eVehicleDataType) {
if (SDL.SDLVehicleInfoModel.eVehicleDataType[key] == 'VEHICLEDATA_OEM_CUSTOM_DATA' &&
!SDL.SDLVehicleInfoModel.vehicleData.hasOwnProperty(key)) {
delete SDL.SDLVehicleInfoModel.eVehicleDataType[key];
}
}

for (key in SDL.SDLVehicleInfoModel.vehicleData) {
if (!SDL.SDLVehicleInfoModel.eVehicleDataType.hasOwnProperty(key)) {
SDL.SDLVehicleInfoModel.eVehicleDataType[key] = 'VEHICLEDATA_OEM_CUSTOM_DATA';
}
}
},
/**
* vehicleDataChange button handler on VehicleInfo View
*/
Expand All @@ -390,21 +408,18 @@ SDL.SDLController = Em.Object.extend(
var params = {};
var parsedData = JSON.parse(data);
for (var i in parsedData) {
if(undefined === SDL.SDLVehicleInfoModel.vehicleData[i]) {
SDL.SDLVehicleInfoModel.eVehicleDataType[i] = 'VEHICLEDATA_OEM_CUSTOM_DATA';
params[i] = parsedData[i];
continue;
}
if (SDL.SDLController.compareObjects(
SDL.SDLVehicleInfoModel.vehicleData[i],
parsedData[i]
)
) {
if (undefined === SDL.SDLVehicleInfoModel.vehicleData[i] ||
SDL.SDLController.compareObjects(
SDL.SDLVehicleInfoModel.vehicleData[i],
parsedData[i]
)) {
params[i] = parsedData[i];
}
}
SDL.SDLVehicleInfoModel.vehicleData = parsedData;
if (params) {
SDL.SDLController.updateCustomVehicleDataTypesMapping();

if (Object.keys(params).length > 0) {
FFW.VehicleInfo.OnVehicleData(params);
}
}
Expand Down
106 changes: 84 additions & 22 deletions app/model/sdl/VehicleInfoModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,34 @@ SDL.SDLVehicleInfoModel = Em.Object.create(
id
);
},
/**
* Function calculates result code according to subscriptions result
* @param {Object} subscriptions
* @returns calculated result code
*/
CalculateSubscriptionsResultCode: function(subscriptions) {
var statistic = {
success_count: 0,
total_count: 0
};

for (var key in subscriptions) {
statistic.total_count++;
if (subscriptions[key].resultCode == 'SUCCESS') {
statistic.success_count++;
}
}

if (statistic.total_count == statistic.success_count) {
return SDL.SDLModel.data.resultCode.SUCCESS;
}

if (statistic.success_count > 0) {
return SDL.SDLModel.data.resultCode.WARNINGS;
}

return SDL.SDLModel.data.resultCode.DATA_NOT_AVAILABLE;
},
/**
* Function returns response message to VehicleInfoRPC
*
Expand All @@ -406,27 +434,44 @@ SDL.SDLVehicleInfoModel = Em.Object.create(
if (key === 'clusterModeStatus') {
key = 'clusterModes';
}

var vehicleDataType = this.eVehicleDataType.hasOwnProperty(key) ?
this.eVehicleDataType[key] : "VEHICLEDATA_OEM_CUSTOM_DATA";

if (!this.eVehicleDataType.hasOwnProperty(key)) {
subscribeVIData[key] = {
dataType: vehicleDataType,
resultCode: 'VEHICLE_DATA_NOT_AVAILABLE'
};
continue;
}

if (SDL.SDLModel.subscribedData[key] === true) {
subscribeVIData[key] = {
dataType: this.eVehicleDataType[key],
dataType: vehicleDataType,
resultCode: 'DATA_ALREADY_SUBSCRIBED'
};
} else if (key === 'externalTemperature') {
continue;
}

if (key === 'externalTemperature') {
subscribeVIData[key] = {
dataType: this.eVehicleDataType[key],
dataType: vehicleDataType,
resultCode: 'VEHICLE_DATA_NOT_AVAILABLE'
};
} else {
SDL.SDLModel.subscribedData[key] = true;
subscribeVIData[key] = {
dataType: this.eVehicleDataType[key],
resultCode: 'SUCCESS'
};
continue;
}

SDL.SDLModel.subscribedData[key] = true;
subscribeVIData[key] = {
dataType: vehicleDataType,
resultCode: 'SUCCESS'
};
}

var resultCode = this.CalculateSubscriptionsResultCode(subscribeVIData);
FFW.VehicleInfo.sendVISubscribeVehicleDataResult(
SDL.SDLModel.data.resultCode.SUCCESS, message.id, message.method,
subscribeVIData
resultCode, message.id, message.method, subscribeVIData
);
},
/**
Expand All @@ -440,27 +485,44 @@ SDL.SDLVehicleInfoModel = Em.Object.create(
if (key === 'clusterModeStatus') {
key = 'clusterModes';
}

var vehicleDataType = this.eVehicleDataType.hasOwnProperty(key) ?
this.eVehicleDataType[key] : "VEHICLEDATA_OEM_CUSTOM_DATA";

if (!this.eVehicleDataType.hasOwnProperty(key)) {
subscribeVIData[key] = {
dataType: vehicleDataType,
resultCode: 'VEHICLE_DATA_NOT_AVAILABLE'
};
continue;
}

if (SDL.SDLModel.subscribedData[key] === false) {
subscribeVIData[key] = {
dataType: this.eVehicleDataType[key],
dataType: vehicleDataType,
resultCode: 'DATA_NOT_SUBSCRIBED'
};
} else if (key === 'externalTemperature') {
continue;
}

if (key === 'externalTemperature') {
subscribeVIData[key] = {
dataType: this.eVehicleDataType[key],
dataType: vehicleDataType,
resultCode: 'VEHICLE_DATA_NOT_AVAILABLE'
};
} else {
SDL.SDLModel.subscribedData[key] = false;
subscribeVIData[key] = {
dataType: this.eVehicleDataType[key],
resultCode: 'SUCCESS'
};
continue;
}

SDL.SDLModel.subscribedData[key] = false;
subscribeVIData[key] = {
dataType: vehicleDataType,
resultCode: 'SUCCESS'
};
}

var resultCode = this.CalculateSubscriptionsResultCode(subscribeVIData);
FFW.VehicleInfo.sendVISubscribeVehicleDataResult(
SDL.SDLModel.data.resultCode.SUCCESS, message.id, message.method,
subscribeVIData
resultCode, message.id, message.method, subscribeVIData
);
},
/**
Expand Down
21 changes: 10 additions & 11 deletions ffw/VehicleInfoRPC.js
Original file line number Diff line number Diff line change
Expand Up @@ -277,18 +277,17 @@ FFW.VehicleInfo = FFW.RPCObserver.create(
*/
sendVISubscribeVehicleDataResult: function(resultCode, id, method, data) {
Em.Logger.log('FFW.' + method + 'Response');
if (resultCode === SDL.SDLModel.data.resultCode.SUCCESS) {

// send repsonse
var JSONMessage = {
'jsonrpc': '2.0',
'id': id,
'result': data
};
JSONMessage.result.code = resultCode;
JSONMessage.result.method = method;
this.sendMessage(JSONMessage);
}
// send repsonse
var JSONMessage = {
'jsonrpc': '2.0',
'id': id,
'result': data
};

JSONMessage.result.code = resultCode;
JSONMessage.result.method = method;
this.sendMessage(JSONMessage);
},
/**
* Send error response from onRPCRequest
Expand Down

0 comments on commit 0ae8a93

Please sign in to comment.