forked from keybase/client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
interfaces.go
175 lines (146 loc) · 7.03 KB
/
interfaces.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package types
import (
"github.com/keybase/client/go/gregor"
"github.com/keybase/client/go/protocol/chat1"
"github.com/keybase/client/go/protocol/gregor1"
"github.com/keybase/client/go/protocol/keybase1"
context "golang.org/x/net/context"
)
type Offlinable interface {
IsOffline(ctx context.Context) bool
Connected(ctx context.Context)
Disconnected(ctx context.Context)
}
type Resumable interface {
Start(ctx context.Context, uid gregor1.UID)
Stop(ctx context.Context) chan struct{}
}
type CryptKey interface {
Material() keybase1.Bytes32
Generation() int
}
type NameInfoSource interface {
Lookup(ctx context.Context, name string, vis keybase1.TLFVisibility) (NameInfo, error)
}
type UnboxConversationInfo interface {
GetConvID() chat1.ConversationID
GetMembersType() chat1.ConversationMembersType
GetFinalizeInfo() *chat1.ConversationFinalizeInfo
}
type ConversationSource interface {
Offlinable
Push(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID,
msg chat1.MessageBoxed) (chat1.MessageUnboxed, bool, error)
Pull(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID, query *chat1.GetThreadQuery,
pagination *chat1.Pagination) (chat1.ThreadView, []*chat1.RateLimit, error)
PullLocalOnly(ctx context.Context, convID chat1.ConversationID, uid gregor1.UID,
query *chat1.GetThreadQuery, p *chat1.Pagination) (chat1.ThreadView, error)
GetMessages(ctx context.Context, conv UnboxConversationInfo, uid gregor1.UID, msgIDs []chat1.MessageID) ([]chat1.MessageUnboxed, error)
GetMessagesWithRemotes(ctx context.Context, conv chat1.Conversation, uid gregor1.UID,
msgs []chat1.MessageBoxed) ([]chat1.MessageUnboxed, error)
Clear(convID chat1.ConversationID, uid gregor1.UID) error
TransformSupersedes(ctx context.Context, conv chat1.Conversation, uid gregor1.UID,
msgs []chat1.MessageUnboxed) ([]chat1.MessageUnboxed, error)
SetRemoteInterface(func() chat1.RemoteInterface)
}
type MessageDeliverer interface {
Offlinable
Resumable
Queue(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext,
outboxID *chat1.OutboxID, identifyBehavior keybase1.TLFIdentifyBehavior) (chat1.OutboxRecord, error)
ForceDeliverLoop(ctx context.Context)
}
type Sender interface {
Send(ctx context.Context, convID chat1.ConversationID, msg chat1.MessagePlaintext,
clientPrev chat1.MessageID, outboxID *chat1.OutboxID) (chat1.OutboxID, *chat1.MessageBoxed, *chat1.RateLimit, error)
Prepare(ctx context.Context, msg chat1.MessagePlaintext, membersType chat1.ConversationMembersType,
conv *chat1.Conversation) (*chat1.MessageBoxed, []chat1.Asset, []gregor1.UID, chat1.ChannelMention, *chat1.TopicNameState, error)
}
type ChatLocalizer interface {
Localize(ctx context.Context, uid gregor1.UID, inbox Inbox) ([]chat1.ConversationLocal, error)
Name() string
SetOffline()
}
type InboxSource interface {
Offlinable
Read(ctx context.Context, uid gregor1.UID, localizer ChatLocalizer, useLocalData bool,
query *chat1.GetInboxLocalQuery, p *chat1.Pagination) (Inbox, *chat1.RateLimit, error)
ReadUnverified(ctx context.Context, uid gregor1.UID, useLocalData bool,
query *chat1.GetInboxQuery, p *chat1.Pagination) (Inbox, *chat1.RateLimit, error)
IsMember(ctx context.Context, uid gregor1.UID, convID chat1.ConversationID) (bool, *chat1.RateLimit, error)
NewConversation(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers,
conv chat1.Conversation) error
NewMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID,
msg chat1.MessageBoxed) (*chat1.ConversationLocal, error)
ReadMessage(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID,
msgID chat1.MessageID) (*chat1.ConversationLocal, error)
SetStatus(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID,
status chat1.ConversationStatus) (*chat1.ConversationLocal, error)
SetAppNotificationSettings(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers,
convID chat1.ConversationID, settings chat1.ConversationNotificationInfo) (*chat1.ConversationLocal, error)
TlfFinalize(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers,
convIDs []chat1.ConversationID, finalizeInfo chat1.ConversationFinalizeInfo) ([]chat1.ConversationLocal, error)
MembershipUpdate(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers,
joined []chat1.ConversationMember, removed []chat1.ConversationMember,
resets []chat1.ConversationMember, previews []chat1.ConversationID) (MembershipUpdateRes, error)
TeamTypeChanged(ctx context.Context, uid gregor1.UID, vers chat1.InboxVers, convID chat1.ConversationID,
teamType chat1.TeamType) (*chat1.ConversationLocal, error)
GetInboxQueryLocalToRemote(ctx context.Context,
lquery *chat1.GetInboxLocalQuery) (*chat1.GetInboxQuery, NameInfo, error)
SetRemoteInterface(func() chat1.RemoteInterface)
}
type ServerCacheVersions interface {
Set(ctx context.Context, vers chat1.ServerCacheVers) error
MatchBodies(ctx context.Context, vers int) (int, error)
MatchInbox(ctx context.Context, vers int) (int, error)
Fetch(ctx context.Context) (chat1.ServerCacheVers, error)
}
type Syncer interface {
IsConnected(ctx context.Context) bool
Connected(ctx context.Context, cli chat1.RemoteInterface, uid gregor1.UID,
syncRes *chat1.SyncChatRes) error
Disconnected(ctx context.Context)
Sync(ctx context.Context, cli chat1.RemoteInterface, uid gregor1.UID,
syncRes *chat1.SyncChatRes) error
RegisterOfflinable(offlinable Offlinable)
SendChatStaleNotifications(ctx context.Context, uid gregor1.UID,
updates []chat1.ConversationStaleUpdate, immediate bool)
Shutdown()
}
type RetryDescription interface {
Fix(ctx context.Context, uid gregor1.UID) error
SendStale(ctx context.Context, uid gregor1.UID)
String() string
RekeyFixable(ctx context.Context, tlfID chat1.TLFID) bool
}
type FetchRetrier interface {
Offlinable
Resumable
Failure(ctx context.Context, uid gregor1.UID, desc RetryDescription) error
Success(ctx context.Context, uid gregor1.UID, desc RetryDescription) error
Force(ctx context.Context)
Rekey(ctx context.Context, name string, membersType chat1.ConversationMembersType,
public bool)
}
type ConvLoader interface {
Resumable
Queue(ctx context.Context, convID chat1.ConversationID) error
}
type PushHandler interface {
TlfFinalize(context.Context, gregor.OutOfBandMessage) error
TlfResolve(context.Context, gregor.OutOfBandMessage) error
Activity(context.Context, gregor.OutOfBandMessage) error
Typing(context.Context, gregor.OutOfBandMessage) error
MembershipUpdate(context.Context, gregor.OutOfBandMessage) error
HandleOobm(context.Context, gregor.OutOfBandMessage) (bool, error)
}
type AppState interface {
State() keybase1.AppState
NextUpdate() chan keybase1.AppState
}
type TeamChannelSource interface {
Offlinable
GetChannelsFull(context.Context, gregor1.UID, chat1.TLFID, chat1.TopicType) ([]chat1.ConversationLocal, []chat1.RateLimit, error)
GetChannelsTopicName(context.Context, gregor1.UID, chat1.TLFID, chat1.TopicType) ([]ConvIDAndTopicName, []chat1.RateLimit, error)
ChannelsChanged(context.Context, chat1.TLFID)
}