107 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
| # -*- coding: utf-8 -*-
 | |
| # Copyright 2014 OpenMarket Ltd
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| from ._base import SQLBaseStore
 | |
| 
 | |
| 
 | |
| class PresenceStore(SQLBaseStore):
 | |
|     def create_presence(self, user_localpart):
 | |
|         return self._simple_insert(
 | |
|             table="presence",
 | |
|             values={"user_id": user_localpart},
 | |
|         )
 | |
| 
 | |
|     def has_presence_state(self, user_localpart):
 | |
|         return self._simple_select_one(
 | |
|             table="presence",
 | |
|             keyvalues={"user_id": user_localpart},
 | |
|             retcols=["user_id"],
 | |
|             allow_none=True,
 | |
|         )
 | |
| 
 | |
|     def get_presence_state(self, user_localpart):
 | |
|         return self._simple_select_one(
 | |
|             table="presence",
 | |
|             keyvalues={"user_id": user_localpart},
 | |
|             retcols=["state", "status_msg", "mtime"],
 | |
|         )
 | |
| 
 | |
|     def set_presence_state(self, user_localpart, new_state):
 | |
|         return self._simple_update_one(
 | |
|             table="presence",
 | |
|             keyvalues={"user_id": user_localpart},
 | |
|             updatevalues={"state": new_state["state"],
 | |
|                           "status_msg": new_state["status_msg"],
 | |
|                           "mtime": self._clock.time_msec()},
 | |
|             retcols=["state"],
 | |
|         )
 | |
| 
 | |
|     def allow_presence_visible(self, observed_localpart, observer_userid):
 | |
|         return self._simple_insert(
 | |
|             table="presence_allow_inbound",
 | |
|             values={"observed_user_id": observed_localpart,
 | |
|                     "observer_user_id": observer_userid},
 | |
|         )
 | |
| 
 | |
|     def disallow_presence_visible(self, observed_localpart, observer_userid):
 | |
|         return self._simple_delete_one(
 | |
|             table="presence_allow_inbound",
 | |
|             keyvalues={"observed_user_id": observed_localpart,
 | |
|                        "observer_user_id": observer_userid},
 | |
|         )
 | |
| 
 | |
|     def is_presence_visible(self, observed_localpart, observer_userid):
 | |
|         return self._simple_select_one(
 | |
|             table="presence_allow_inbound",
 | |
|             keyvalues={"observed_user_id": observed_localpart,
 | |
|                        "observer_user_id": observer_userid},
 | |
|             retcols=["observed_user_id"],
 | |
|             allow_none=True,
 | |
|         )
 | |
| 
 | |
|     def add_presence_list_pending(self, observer_localpart, observed_userid):
 | |
|         return self._simple_insert(
 | |
|             table="presence_list",
 | |
|             values={"user_id": observer_localpart,
 | |
|                     "observed_user_id": observed_userid,
 | |
|                     "accepted": False},
 | |
|         )
 | |
| 
 | |
|     def set_presence_list_accepted(self, observer_localpart, observed_userid):
 | |
|         return self._simple_update_one(
 | |
|             table="presence_list",
 | |
|             keyvalues={"user_id": observer_localpart,
 | |
|                        "observed_user_id": observed_userid},
 | |
|             updatevalues={"accepted": True},
 | |
|         )
 | |
| 
 | |
|     def get_presence_list(self, observer_localpart, accepted=None):
 | |
|         keyvalues = {"user_id": observer_localpart}
 | |
|         if accepted is not None:
 | |
|             keyvalues["accepted"] = accepted
 | |
| 
 | |
|         return self._simple_select_list(
 | |
|             table="presence_list",
 | |
|             keyvalues=keyvalues,
 | |
|             retcols=["observed_user_id", "accepted"],
 | |
|         )
 | |
| 
 | |
|     def del_presence_list(self, observer_localpart, observed_userid):
 | |
|         return self._simple_delete_one(
 | |
|             table="presence_list",
 | |
|             keyvalues={"user_id": observer_localpart,
 | |
|                        "observed_user_id": observed_userid},
 | |
|         )
 |