summaryrefslogtreecommitdiffstats
path: root/store
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2016-07-21 10:00:09 -0400
committerGitHub <noreply@github.com>2016-07-21 10:00:09 -0400
commitbfa04c0ab0eca5d812ad64e5f51e95ec458cf0d3 (patch)
tree6a51f8d4d144a181192499f5fd60ef82700e9abb /store
parentf0e9ec2dd127ffe34472c617f978173a8bf60b7c (diff)
downloadchat-bfa04c0ab0eca5d812ad64e5f51e95ec458cf0d3.tar.gz
chat-bfa04c0ab0eca5d812ad64e5f51e95ec458cf0d3.tar.bz2
chat-bfa04c0ab0eca5d812ad64e5f51e95ec458cf0d3.zip
PLT-2408 Adds here mention for online users (#3619)
* Added @here mention that notifies online users * Fixed existing race condition that would sometime cause clients to miss mention count changes * Added missing localization strings * Prevent @here from mentioning the user who posted it
Diffstat (limited to 'store')
-rw-r--r--store/sql_status_store.go22
-rw-r--r--store/sql_status_store_test.go11
-rw-r--r--store/store.go1
3 files changed, 33 insertions, 1 deletions
diff --git a/store/sql_status_store.go b/store/sql_status_store.go
index 235d12fa8..bb3c7c364 100644
--- a/store/sql_status_store.go
+++ b/store/sql_status_store.go
@@ -98,7 +98,27 @@ func (s SqlStatusStore) GetOnlineAway() StoreChannel {
var statuses []*model.Status
if _, err := s.GetReplica().Select(&statuses, "SELECT * FROM Status WHERE Status = :Online OR Status = :Away", map[string]interface{}{"Online": model.STATUS_ONLINE, "Away": model.STATUS_AWAY}); err != nil {
- result.Err = model.NewLocAppError("SqlStatusStore.GetOnline", "store.sql_status.get_online_away.app_error", nil, err.Error())
+ result.Err = model.NewLocAppError("SqlStatusStore.GetOnlineAway", "store.sql_status.get_online_away.app_error", nil, err.Error())
+ } else {
+ result.Data = statuses
+ }
+
+ storeChannel <- result
+ close(storeChannel)
+ }()
+
+ return storeChannel
+}
+
+func (s SqlStatusStore) GetOnline() StoreChannel {
+ storeChannel := make(StoreChannel)
+
+ go func() {
+ result := StoreResult{}
+
+ var statuses []*model.Status
+ if _, err := s.GetReplica().Select(&statuses, "SELECT * FROM Status WHERE Status = :Online", map[string]interface{}{"Online": model.STATUS_ONLINE}); err != nil {
+ result.Err = model.NewLocAppError("SqlStatusStore.GetOnline", "store.sql_status.get_online.app_error", nil, err.Error())
} else {
result.Data = statuses
}
diff --git a/store/sql_status_store_test.go b/store/sql_status_store_test.go
index e16dc14d0..139915bad 100644
--- a/store/sql_status_store_test.go
+++ b/store/sql_status_store_test.go
@@ -48,6 +48,17 @@ func TestSqlStatusStore(t *testing.T) {
}
}
+ if result := <-store.Status().GetOnline(); result.Err != nil {
+ t.Fatal(result.Err)
+ } else {
+ statuses := result.Data.([]*model.Status)
+ for _, status := range statuses {
+ if status.Status != model.STATUS_ONLINE {
+ t.Fatal("should not have returned offline statuses")
+ }
+ }
+ }
+
if err := (<-store.Status().ResetAll()).Err; err != nil {
t.Fatal(err)
}
diff --git a/store/store.go b/store/store.go
index c495ff927..8efec5e54 100644
--- a/store/store.go
+++ b/store/store.go
@@ -266,6 +266,7 @@ type StatusStore interface {
SaveOrUpdate(status *model.Status) StoreChannel
Get(userId string) StoreChannel
GetOnlineAway() StoreChannel
+ GetOnline() StoreChannel
ResetAll() StoreChannel
GetTotalActiveUsersCount() StoreChannel
UpdateLastActivityAt(userId string, lastActivityAt int64) StoreChannel