Example #1
0
    def gcm_send(uid, send_func):
        gcm_tokens = GcmTokenDao.get_from_uid(uid)
        tokens = [t.token for t in gcm_tokens]

        try:
            resp = send_func(tokens)
        except HTTPError as e:
            # TODO: handle it
            raise

        if resp["failure"] == 0 and resp["canonical_ids"] == 0:
            return

        for i in range(len(tokens)):
            result = resp["results"][i]
            if "message_id" in result:
                if "registration_id" in result:
                    GcmTokenDao.update_token(uid, tokens[i], result["registration_id"])
            else:
                error = result["error"]
                if error == "Unavailable":
                    # TODO: handle it
                    pass
                elif error == "NotRegistered":
                    token = tokens[i]
                    logging.info("delete not registered gcm token %s" % token)
                    GcmTokenDao.del_gcm_token(uid, token)
                else:
                    raise Exception("unknown error: %s" % error)
Example #2
0
    def post(self, username):
        user = UserDao.get_from_username(username)

        if user is None:
            self.send_error(400)
            return

        action = self.get_body_argument("action")

        if action == "set_ntf_token":
            token = self.get_body_argument("token")
            nid = NtfTokenDao.set_for_user(user.id, token)
            FetcherManager.add_task(nid)
        elif action == "add_gcm_token":
            token = self.get_body_argument("token")
            GcmTokenDao.add_gcm_token(user.id, token)
        elif action == "del_gcm_token":
            token = self.get_body_argument("token")
            GcmTokenDao.del_gcm_token(user.id, token)

        self.set_status(200)