| Index: src/engine/main.cpp |
| =================================================================== |
| --- a/src/engine/main.cpp |
| +++ b/src/engine/main.cpp |
| @@ -145,11 +145,43 @@ |
| } |
| case Communication::PROC_SET_PREF: |
| { |
| - std::string prefName = ""; |
| - std::string prefValue = ""; |
| + std::string prefName; |
| request >> prefName; |
| - request >> prefValue; |
| - filterEngine->SetPref(prefName, filterEngine->GetJsEngine()->NewValue(prefValue)); |
| + |
| + Communication::ValueType valueType = request.GetType(); |
| + switch (valueType) |
| + { |
| + case Communication::TYPE_STRING: |
| + { |
| + std::string prefValue; |
| + request >> prefValue; |
| + filterEngine->SetPref(prefName, filterEngine->GetJsEngine()->NewValue(prefValue)); |
| + break; |
| + } |
| + case Communication::TYPE_INT64: |
| + { |
| + int64_t prefValue; |
| + request >> prefValue; |
| + filterEngine->SetPref(prefName, filterEngine->GetJsEngine()->NewValue(prefValue)); |
| + break; |
| + } |
| + case Communication::TYPE_INT32: |
| + { |
| + int prefValue; |
| + request >> prefValue; |
| + filterEngine->SetPref(prefName, filterEngine->GetJsEngine()->NewValue(prefValue)); |
| + break; |
| + } |
| + case Communication::TYPE_BOOL: |
| + { |
| + bool prefValue; |
| + request >> prefValue; |
| + filterEngine->SetPref(prefName, filterEngine->GetJsEngine()->NewValue(prefValue)); |
| + break; |
| + } |
| + default: |
| + break; |
| + } |
| break; |
| } |
| case Communication::PROC_GET_PREF: |
| @@ -158,11 +190,26 @@ |
| request >> name; |
| AdblockPlus::JsValuePtr valuePtr = filterEngine->GetPref(name); |
| - if ((valuePtr->IsNull()) || (!valuePtr->IsString())) |
| - response << 0; |
| - else |
| + if (valuePtr->IsNull() || valuePtr->IsUndefined()) |
| { |
| - response << 1; |
| + // Report no success |
| + response << false; |
| + break; |
| + } |
| + |
| + // Report success |
| + response << true; |
| + |
| + if (valuePtr->IsBool()) |
| + { |
| + response << valuePtr->AsBool(); |
| + } |
| + else if (valuePtr->IsNumber()) |
| + { |
| + response << valuePtr->AsInt(); |
| + } |
| + else if (valuePtr->IsString()) |
| + { |
| response << valuePtr->AsString(); |
| } |
| break; |