Home | History | Annotate | Download | only in notification
      1 // Copyright 2015 The Weave Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "src/notification/notification_parser.h"
      6 
      7 #include <base/logging.h>
      8 
      9 namespace weave {
     10 
     11 namespace {
     12 
     13 // Processes COMMAND_CREATED notifications.
     14 bool ParseCommandCreated(const base::DictionaryValue& notification,
     15                          NotificationDelegate* delegate,
     16                          const std::string& channel_name) {
     17   const base::DictionaryValue* command = nullptr;
     18   if (!notification.GetDictionary("command", &command)) {
     19     LOG(ERROR) << "COMMAND_CREATED notification is missing 'command' property";
     20     return false;
     21   }
     22 
     23   delegate->OnCommandCreated(*command, channel_name);
     24   return true;
     25 }
     26 
     27 // Processes DEVICE_DELETED notifications.
     28 bool ParseDeviceDeleted(const base::DictionaryValue& notification,
     29                         NotificationDelegate* delegate) {
     30   std::string cloud_id;
     31   if (!notification.GetString("deviceId", &cloud_id)) {
     32     LOG(ERROR) << "DEVICE_DELETED notification is missing 'deviceId' property";
     33     return false;
     34   }
     35 
     36   delegate->OnDeviceDeleted(cloud_id);
     37   return true;
     38 }
     39 
     40 }  // anonymous namespace
     41 
     42 bool ParseNotificationJson(const base::DictionaryValue& notification,
     43                            NotificationDelegate* delegate,
     44                            const std::string& channel_name) {
     45   CHECK(delegate);
     46 
     47   std::string kind;
     48   if (!notification.GetString("kind", &kind) || kind != "weave#notification") {
     49     LOG(WARNING) << "Push notification should have 'kind' property set to "
     50                     "weave#notification";
     51     return false;
     52   }
     53 
     54   std::string type;
     55   if (!notification.GetString("type", &type)) {
     56     LOG(WARNING) << "Push notification should have 'type' property";
     57     return false;
     58   }
     59 
     60   if (type == "COMMAND_CREATED")
     61     return ParseCommandCreated(notification, delegate, channel_name);
     62 
     63   if (type == "DEVICE_DELETED")
     64     return ParseDeviceDeleted(notification, delegate);
     65 
     66   // Here we ignore other types of notifications for now.
     67   LOG(INFO) << "Ignoring push notification of type " << type;
     68   return true;
     69 }
     70 
     71 }  // namespace weave
     72