Line data Source code
1 : /*
2 : * Famedly Matrix SDK
3 : * Copyright (C) 2021 Famedly GmbH
4 : *
5 : * This program is free software: you can redistribute it and/or modify
6 : * it under the terms of the GNU Affero General Public License as
7 : * published by the Free Software Foundation, either version 3 of the
8 : * License, or (at your option) any later version.
9 : *
10 : * This program is distributed in the hope that it will be useful,
11 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : * GNU Affero General Public License for more details.
14 : *
15 : * You should have received a copy of the GNU Affero General Public License
16 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 : */
18 :
19 : import 'dart:typed_data';
20 :
21 : import 'package:matrix/encryption/utils/olm_session.dart';
22 : import 'package:matrix/encryption/utils/outbound_group_session.dart';
23 : import 'package:matrix/encryption/utils/ssss_cache.dart';
24 : import 'package:matrix/encryption/utils/stored_inbound_group_session.dart';
25 : import 'package:matrix/matrix.dart';
26 : import 'package:matrix/src/utils/queued_to_device_event.dart';
27 :
28 : abstract class DatabaseApi {
29 0 : int get maxFileSize => 1 * 1024 * 1024;
30 1 : bool get supportsFileStoring => false;
31 : Future<Map<String, dynamic>?> getClient(String name);
32 :
33 : Future updateClient(
34 : String homeserverUrl,
35 : String token,
36 : DateTime? tokenExpiresAt,
37 : String? refreshToken,
38 : String userId,
39 : String? deviceId,
40 : String? deviceName,
41 : String? prevBatch,
42 : String? olmAccount,
43 : );
44 :
45 : Future insertClient(
46 : String name,
47 : String homeserverUrl,
48 : String token,
49 : DateTime? tokenExpiresAt,
50 : String? refreshToken,
51 : String userId,
52 : String? deviceId,
53 : String? deviceName,
54 : String? prevBatch,
55 : String? olmAccount,
56 : );
57 :
58 : Future<List<Room>> getRoomList(Client client);
59 :
60 : Future<Room?> getSingleRoom(Client client, String roomId,
61 : {bool loadImportantStates = true});
62 :
63 : Future<Map<String, BasicEvent>> getAccountData();
64 :
65 : /// Stores a RoomUpdate object in the database. Must be called inside of
66 : /// [transaction].
67 : Future<void> storeRoomUpdate(
68 : String roomId,
69 : SyncRoomUpdate roomUpdate,
70 : Event? lastEvent,
71 : Client client,
72 : );
73 :
74 : Future<void> deleteTimelineForRoom(String roomId);
75 :
76 : /// Stores an EventUpdate object in the database. Must be called inside of
77 : /// [transaction].
78 : Future<void> storeEventUpdate(EventUpdate eventUpdate, Client client);
79 :
80 : Future<Event?> getEventById(String eventId, Room room);
81 :
82 : Future<void> forgetRoom(String roomId);
83 :
84 : Future<void> clearCache();
85 :
86 : Future<void> clear();
87 :
88 : Future<User?> getUser(String userId, Room room);
89 :
90 : Future<List<User>> getUsers(Room room);
91 :
92 : Future<List<Event>> getEventList(
93 : Room room, {
94 : int start = 0,
95 : bool onlySending = false,
96 : int? limit,
97 : });
98 :
99 : Future<List<String>> getEventIdList(
100 : Room room, {
101 : int start = 0,
102 : bool includeSending = false,
103 : int? limit,
104 : });
105 :
106 : Future<Uint8List?> getFile(Uri mxcUri);
107 :
108 : Future storeFile(Uri mxcUri, Uint8List bytes, int time);
109 :
110 : Future storeSyncFilterId(
111 : String syncFilterId,
112 : );
113 :
114 : Future storeAccountData(String type, String content);
115 :
116 : Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client);
117 :
118 : Future<SSSSCache?> getSSSSCache(String type);
119 :
120 : Future<OutboundGroupSession?> getOutboundGroupSession(
121 : String roomId,
122 : String userId,
123 : );
124 :
125 : Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions();
126 :
127 : Future<StoredInboundGroupSession?> getInboundGroupSession(
128 : String roomId,
129 : String sessionId,
130 : );
131 :
132 : Future updateInboundGroupSessionIndexes(
133 : String indexes,
134 : String roomId,
135 : String sessionId,
136 : );
137 :
138 : Future storeInboundGroupSession(
139 : String roomId,
140 : String sessionId,
141 : String pickle,
142 : String content,
143 : String indexes,
144 : String allowedAtIndex,
145 : String senderKey,
146 : String senderClaimedKey,
147 : );
148 :
149 : Future markInboundGroupSessionAsUploaded(
150 : String roomId,
151 : String sessionId,
152 : );
153 :
154 : Future updateInboundGroupSessionAllowedAtIndex(
155 : String allowedAtIndex,
156 : String roomId,
157 : String sessionId,
158 : );
159 :
160 : Future removeOutboundGroupSession(String roomId);
161 :
162 : Future storeOutboundGroupSession(
163 : String roomId,
164 : String pickle,
165 : String deviceIds,
166 : int creationTime,
167 : );
168 :
169 : Future updateClientKeys(
170 : String olmAccount,
171 : );
172 :
173 : Future storeOlmSession(
174 : String identityKey,
175 : String sessionId,
176 : String pickle,
177 : int lastReceived,
178 : );
179 :
180 : Future setLastActiveUserDeviceKey(
181 : int lastActive,
182 : String userId,
183 : String deviceId,
184 : );
185 :
186 : Future setLastSentMessageUserDeviceKey(
187 : String lastSentMessage,
188 : String userId,
189 : String deviceId,
190 : );
191 :
192 : Future clearSSSSCache();
193 :
194 : Future storeSSSSCache(
195 : String type,
196 : String keyId,
197 : String ciphertext,
198 : String content,
199 : );
200 :
201 : Future markInboundGroupSessionsAsNeedingUpload();
202 :
203 : Future storePrevBatch(
204 : String prevBatch,
205 : );
206 :
207 : Future deleteOldFiles(int savedAt);
208 :
209 : Future storeUserDeviceKeysInfo(
210 : String userId,
211 : bool outdated,
212 : );
213 :
214 : Future storeUserDeviceKey(
215 : String userId,
216 : String deviceId,
217 : String content,
218 : bool verified,
219 : bool blocked,
220 : int lastActive,
221 : );
222 :
223 : Future removeUserDeviceKey(
224 : String userId,
225 : String deviceId,
226 : );
227 :
228 : Future removeUserCrossSigningKey(
229 : String userId,
230 : String publicKey,
231 : );
232 :
233 : Future storeUserCrossSigningKey(
234 : String userId,
235 : String publicKey,
236 : String content,
237 : bool verified,
238 : bool blocked,
239 : );
240 :
241 : Future deleteFromToDeviceQueue(int id);
242 :
243 : Future removeEvent(String eventId, String roomId);
244 :
245 : Future setRoomPrevBatch(
246 : String? prevBatch,
247 : String roomId,
248 : Client client,
249 : );
250 :
251 : Future setVerifiedUserCrossSigningKey(
252 : bool verified,
253 : String userId,
254 : String publicKey,
255 : );
256 :
257 : Future setBlockedUserCrossSigningKey(
258 : bool blocked,
259 : String userId,
260 : String publicKey,
261 : );
262 :
263 : Future setVerifiedUserDeviceKey(
264 : bool verified,
265 : String userId,
266 : String deviceId,
267 : );
268 :
269 : Future setBlockedUserDeviceKey(
270 : bool blocked,
271 : String userId,
272 : String deviceId,
273 : );
274 :
275 : Future<List<Event>> getUnimportantRoomEventStatesForRoom(
276 : List<String> events,
277 : Room room,
278 : );
279 :
280 : Future<List<OlmSession>> getOlmSessions(
281 : String identityKey,
282 : String userId,
283 : );
284 :
285 : Future<Map<String, Map>> getAllOlmSessions();
286 :
287 : Future<List<OlmSession>> getOlmSessionsForDevices(
288 : List<String> identityKeys,
289 : String userId,
290 : );
291 :
292 : Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue();
293 :
294 : /// Please do `jsonEncode(content)` in your code to stay compatible with
295 : /// auto generated methods here.
296 : Future insertIntoToDeviceQueue(
297 : String type,
298 : String txnId,
299 : String content,
300 : );
301 :
302 : Future<List<String>> getLastSentMessageUserDeviceKey(
303 : String userId,
304 : String deviceId,
305 : );
306 :
307 : Future<List<StoredInboundGroupSession>> getInboundGroupSessionsToUpload();
308 :
309 : Future<void> addSeenDeviceId(
310 : String userId, String deviceId, String publicKeys);
311 :
312 : Future<void> addSeenPublicKey(String publicKey, String deviceId);
313 :
314 : Future<String?> deviceIdSeen(userId, deviceId);
315 :
316 : Future<String?> publicKeySeen(String publicKey);
317 :
318 : Future<dynamic> close();
319 :
320 : Future<void> transaction(Future<void> Function() action);
321 :
322 : Future<String> exportDump();
323 :
324 : Future<bool> importDump(String export);
325 :
326 : Future<void> storePresence(String userId, CachedPresence presence);
327 :
328 : Future<CachedPresence?> getPresence(String userId);
329 :
330 : /// Deletes the whole database. The database needs to be created again after
331 : /// this. Used for migration only.
332 : Future<void> delete();
333 : }
|