LCOV - code coverage report
Current view: top level - lib/matrix_api_lite/model - sync_update.dart (source / functions) Hit Total Coverage
Test: merged.info Lines: 78 175 44.6 %
Date: 2024-11-12 07:37:08 Functions: 0 0 -

          Line data    Source code
       1             : /* MIT License
       2             : *
       3             : * Copyright (C) 2019, 2020, 2021 Famedly GmbH
       4             : *
       5             : * Permission is hereby granted, free of charge, to any person obtaining a copy
       6             : * of this software and associated documentation files (the "Software"), to deal
       7             : * in the Software without restriction, including without limitation the rights
       8             : * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
       9             : * copies of the Software, and to permit persons to whom the Software is
      10             : * furnished to do so, subject to the following conditions:
      11             : *
      12             : * The above copyright notice and this permission notice shall be included in all
      13             : * copies or substantial portions of the Software.
      14             : *
      15             : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      16             : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      17             : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      18             : * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      19             : * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      20             : * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      21             : * SOFTWARE.
      22             : */
      23             : 
      24             : import 'package:matrix/matrix_api_lite.dart';
      25             : 
      26             : class SyncUpdate {
      27             :   String nextBatch;
      28             :   RoomsUpdate? rooms;
      29             :   List<Presence>? presence;
      30             :   List<BasicEvent>? accountData;
      31             :   List<BasicEventWithSender>? toDevice;
      32             :   DeviceListsUpdate? deviceLists;
      33             :   Map<String, int>? deviceOneTimeKeysCount;
      34             :   List<String>? deviceUnusedFallbackKeyTypes;
      35             : 
      36          17 :   SyncUpdate({
      37             :     required this.nextBatch,
      38             :     this.rooms,
      39             :     this.presence,
      40             :     this.accountData,
      41             :     this.toDevice,
      42             :     this.deviceLists,
      43             :     this.deviceOneTimeKeysCount,
      44             :     this.deviceUnusedFallbackKeyTypes,
      45             :   });
      46             : 
      47          35 :   SyncUpdate.fromJson(Map<String, Object?> json)
      48          35 :       : nextBatch = json.tryGet<String>('next_batch') ?? '',
      49          35 :         rooms = (() {
      50          35 :           final temp = json.tryGetMap<String, Object?>('rooms');
      51          35 :           return temp != null ? RoomsUpdate.fromJson(temp) : null;
      52          35 :         }()),
      53             :         presence = json
      54          70 :             .tryGetMap<String, List<Object?>>('presence')?['events']
      55         105 :             ?.map((i) => Presence.fromJson(i as Map<String, Object?>))
      56          35 :             .toList(),
      57             :         accountData = json
      58          70 :             .tryGetMap<String, List<Object?>>('account_data')?['events']
      59         105 :             ?.map((i) => BasicEvent.fromJson(i as Map<String, Object?>))
      60          35 :             .toList(),
      61             :         toDevice = json
      62          70 :             .tryGetMap<String, List<Object?>>('to_device')?['events']
      63          35 :             ?.map(
      64          70 :               (i) => BasicEventWithSender.fromJson(i as Map<String, Object?>),
      65             :             )
      66          35 :             .toList(),
      67          35 :         deviceLists = (() {
      68          35 :           final temp = json.tryGetMap<String, Object?>('device_lists');
      69          33 :           return temp != null ? DeviceListsUpdate.fromJson(temp) : null;
      70          35 :         }()),
      71             :         deviceOneTimeKeysCount =
      72          35 :             json.tryGetMap<String, int>('device_one_time_keys_count'),
      73             :         deviceUnusedFallbackKeyTypes =
      74          35 :             json.tryGetList<String>('device_unused_fallback_key_types') ??
      75          35 :                 json.tryGetList<String>(
      76             :                   'org.matrix.msc2732.device_unused_fallback_key_types',
      77             :                 );
      78             : 
      79           0 :   Map<String, Object?> toJson() {
      80           0 :     final data = <String, Object?>{};
      81           0 :     data['next_batch'] = nextBatch;
      82           0 :     if (rooms != null) {
      83           0 :       data['rooms'] = rooms!.toJson();
      84             :     }
      85           0 :     if (presence != null) {
      86           0 :       data['presence'] = {
      87           0 :         'events': presence!.map((i) => i.toJson()).toList(),
      88             :       };
      89             :     }
      90           0 :     if (accountData != null) {
      91           0 :       data['account_data'] = {
      92           0 :         'events': accountData!.map((i) => i.toJson()).toList(),
      93             :       };
      94             :     }
      95           0 :     if (toDevice != null) {
      96           0 :       data['to_device'] = {
      97           0 :         'events': toDevice!.map((i) => i.toJson()).toList(),
      98             :       };
      99             :     }
     100           0 :     if (deviceLists != null) {
     101           0 :       data['device_lists'] = deviceLists!.toJson();
     102             :     }
     103           0 :     if (deviceOneTimeKeysCount != null) {
     104           0 :       data['device_one_time_keys_count'] = deviceOneTimeKeysCount;
     105             :     }
     106           0 :     if (deviceUnusedFallbackKeyTypes != null) {
     107           0 :       data['device_unused_fallback_key_types'] = deviceUnusedFallbackKeyTypes;
     108           0 :       data['org.matrix.msc2732.device_unused_fallback_key_types'] =
     109           0 :           deviceUnusedFallbackKeyTypes;
     110             :     }
     111             :     return data;
     112             :   }
     113             : }
     114             : 
     115             : class RoomsUpdate {
     116             :   Map<String, JoinedRoomUpdate>? join;
     117             :   Map<String, InvitedRoomUpdate>? invite;
     118             :   Map<String, LeftRoomUpdate>? leave;
     119             :   Map<String, KnockRoomUpdate>? knock;
     120             : 
     121          15 :   RoomsUpdate({
     122             :     this.join,
     123             :     this.invite,
     124             :     this.leave,
     125             :     this.knock,
     126             :   });
     127             : 
     128          35 :   RoomsUpdate.fromJson(Map<String, Object?> json) {
     129         105 :     join = json.tryGetMap<String, Object?>('join')?.catchMap(
     130          35 :           (k, v) =>
     131          70 :               MapEntry(k, JoinedRoomUpdate.fromJson(v as Map<String, Object?>)),
     132             :         );
     133         105 :     invite = json.tryGetMap<String, Object?>('invite')?.catchMap(
     134          70 :           (k, v) => MapEntry(
     135             :             k,
     136          35 :             InvitedRoomUpdate.fromJson(v as Map<String, Object?>),
     137             :           ),
     138             :         );
     139         105 :     leave = json.tryGetMap<String, Object?>('leave')?.catchMap(
     140          35 :           (k, v) =>
     141          70 :               MapEntry(k, LeftRoomUpdate.fromJson(v as Map<String, Object?>)),
     142             :         );
     143          70 :     knock = json.tryGetMap<String, Object?>('knock')?.catchMap(
     144           0 :           (k, v) =>
     145           0 :               MapEntry(k, KnockRoomUpdate.fromJson(v as Map<String, Object?>)),
     146             :         );
     147             :   }
     148             : 
     149           0 :   Map<String, Object?> toJson() {
     150           0 :     final data = <String, Object?>{};
     151           0 :     if (join != null) {
     152           0 :       data['join'] = join!.map((k, v) => MapEntry(k, v.toJson()));
     153             :     }
     154           0 :     if (invite != null) {
     155           0 :       data['invite'] = invite!.map((k, v) => MapEntry(k, v.toJson()));
     156             :     }
     157           0 :     if (leave != null) {
     158           0 :       data['leave'] = leave!.map((k, v) => MapEntry(k, v.toJson()));
     159             :     }
     160           0 :     if (knock != null) {
     161           0 :       data['knock'] = knock!.map((k, v) => MapEntry(k, v.toJson()));
     162             :     }
     163             :     return data;
     164             :   }
     165             : }
     166             : 
     167             : abstract class SyncRoomUpdate {}
     168             : 
     169             : class JoinedRoomUpdate extends SyncRoomUpdate {
     170             :   RoomSummary? summary;
     171             :   List<MatrixEvent>? state;
     172             :   TimelineUpdate? timeline;
     173             :   List<BasicRoomEvent>? ephemeral;
     174             :   List<BasicRoomEvent>? accountData;
     175             :   UnreadNotificationCounts? unreadNotifications;
     176             : 
     177          14 :   JoinedRoomUpdate({
     178             :     this.summary,
     179             :     this.state,
     180             :     this.timeline,
     181             :     this.ephemeral,
     182             :     this.accountData,
     183             :     this.unreadNotifications,
     184             :   });
     185             : 
     186          36 :   JoinedRoomUpdate.fromJson(Map<String, Object?> json)
     187          36 :       : summary = json.tryGetFromJson('summary', RoomSummary.fromJson),
     188             :         state = json
     189          71 :             .tryGetMap<String, List<Object?>>('state')?['events']
     190         101 :             ?.map((i) => MatrixEvent.fromJson(i as Map<String, Object?>))
     191          35 :             .toList(),
     192          36 :         timeline = json.tryGetFromJson('timeline', TimelineUpdate.fromJson),
     193             :         ephemeral = json
     194          71 :             .tryGetMap<String, List<Object?>>('ephemeral')?['events']
     195         101 :             ?.map((i) => BasicRoomEvent.fromJson(i as Map<String, Object?>))
     196          35 :             .toList(),
     197             :         accountData = json
     198          71 :             .tryGetMap<String, List<Object?>>('account_data')?['events']
     199         101 :             ?.map((i) => BasicRoomEvent.fromJson(i as Map<String, Object?>))
     200          35 :             .toList(),
     201          36 :         unreadNotifications = json.tryGetFromJson(
     202             :           'unread_notifications',
     203             :           UnreadNotificationCounts.fromJson,
     204             :         );
     205             : 
     206           0 :   Map<String, Object?> toJson() {
     207           0 :     final data = <String, Object?>{};
     208           0 :     if (summary != null) {
     209           0 :       data['summary'] = summary!.toJson();
     210             :     }
     211           0 :     if (state != null) {
     212           0 :       data['state'] = {
     213           0 :         'events': state!.map((i) => i.toJson()).toList(),
     214             :       };
     215             :     }
     216           0 :     if (timeline != null) {
     217           0 :       data['timeline'] = timeline!.toJson();
     218             :     }
     219           0 :     if (ephemeral != null) {
     220           0 :       data['ephemeral'] = {
     221           0 :         'events': ephemeral!.map((i) => i.toJson()).toList(),
     222             :       };
     223             :     }
     224           0 :     if (accountData != null) {
     225           0 :       data['account_data'] = {
     226           0 :         'events': accountData!.map((i) => i.toJson()).toList(),
     227             :       };
     228             :     }
     229           0 :     if (unreadNotifications != null) {
     230           0 :       data['unread_notifications'] = unreadNotifications!.toJson();
     231             :     }
     232             :     return data;
     233             :   }
     234             : }
     235             : 
     236             : class InvitedRoomUpdate extends SyncRoomUpdate {
     237             :   List<StrippedStateEvent>? inviteState;
     238             : 
     239           3 :   InvitedRoomUpdate({this.inviteState});
     240             : 
     241          35 :   InvitedRoomUpdate.fromJson(Map<String, Object?> json)
     242             :       : inviteState = json
     243          70 :             .tryGetMap<String, List<Object?>>('invite_state')?['events']
     244         101 :             ?.map((i) => StrippedStateEvent.fromJson(i as Map<String, Object?>))
     245          35 :             .toList();
     246             : 
     247           0 :   Map<String, Object?> toJson() {
     248           0 :     final data = <String, Object?>{};
     249           0 :     if (inviteState != null) {
     250           0 :       data['invite_state'] = {
     251           0 :         'events': inviteState!.map((i) => i.toJson()).toList(),
     252             :       };
     253             :     }
     254             :     return data;
     255             :   }
     256             : }
     257             : 
     258             : class KnockRoomUpdate extends SyncRoomUpdate {
     259             :   List<StrippedStateEvent>? knockState;
     260             : 
     261           0 :   KnockRoomUpdate({this.knockState});
     262             : 
     263           0 :   KnockRoomUpdate.fromJson(Map<String, Object?> json)
     264             :       : knockState = json
     265           0 :             .tryGetMap<String, List<Object?>>('knock_state')?['events']
     266           0 :             ?.map((i) => StrippedStateEvent.fromJson(i as Map<String, Object?>))
     267           0 :             .toList();
     268             : 
     269           0 :   Map<String, Object?> toJson() {
     270           0 :     final data = <String, Object?>{};
     271           0 :     if (knockState != null) {
     272           0 :       data['knock_state'] = {
     273           0 :         'events': knockState!.map((i) => i.toJson()).toList(),
     274             :       };
     275             :     }
     276             :     return data;
     277             :   }
     278             : }
     279             : 
     280             : class LeftRoomUpdate extends SyncRoomUpdate {
     281             :   List<MatrixEvent>? state;
     282             :   TimelineUpdate? timeline;
     283             :   List<BasicRoomEvent>? accountData;
     284             : 
     285           3 :   LeftRoomUpdate({
     286             :     this.state,
     287             :     this.timeline,
     288             :     this.accountData,
     289             :   });
     290             : 
     291          35 :   LeftRoomUpdate.fromJson(Map<String, Object?> json)
     292             :       : state = json
     293          68 :             .tryGetMap<String, List<Object?>>('state')?['events']
     294          99 :             ?.map((i) => MatrixEvent.fromJson(i as Map<String, Object?>))
     295          33 :             .toList(),
     296          35 :         timeline = json.tryGetFromJson('timeline', TimelineUpdate.fromJson),
     297             :         accountData = json
     298          68 :             .tryGetMap<String, List<Object?>>('account_data')?['events']
     299          99 :             ?.map((i) => BasicRoomEvent.fromJson(i as Map<String, Object?>))
     300          33 :             .toList();
     301             : 
     302           0 :   Map<String, Object?> toJson() {
     303           0 :     final data = <String, Object?>{};
     304           0 :     if (state != null) {
     305           0 :       data['state'] = {
     306           0 :         'events': state!.map((i) => i.toJson()).toList(),
     307             :       };
     308             :     }
     309           0 :     if (timeline != null) {
     310           0 :       data['timeline'] = timeline!.toJson();
     311             :     }
     312           0 :     if (accountData != null) {
     313           0 :       data['account_data'] = {
     314           0 :         'events': accountData!.map((i) => i.toJson()).toList(),
     315             :       };
     316             :     }
     317             :     return data;
     318             :   }
     319             : }
     320             : 
     321             : class TimelineUpdate {
     322             :   List<MatrixEvent>? events;
     323             :   bool? limited;
     324             :   String? prevBatch;
     325             : 
     326          15 :   TimelineUpdate({
     327             :     this.events,
     328             :     this.limited,
     329             :     this.prevBatch,
     330             :   });
     331             : 
     332          35 :   TimelineUpdate.fromJson(Map<String, Object?> json)
     333             :       : events = json
     334          35 :             .tryGetList<Map<String, Object?>>('events')
     335         101 :             ?.map((v) => MatrixEvent.fromJson(v))
     336          35 :             .toList(),
     337          35 :         limited = json.tryGet<bool>('limited'),
     338          35 :         prevBatch = json.tryGet<String>('prev_batch');
     339             : 
     340           0 :   Map<String, Object?> toJson() {
     341           0 :     final data = <String, Object?>{};
     342           0 :     if (events != null) {
     343           0 :       data['events'] = events!.map((i) => i.toJson()).toList();
     344             :     }
     345           0 :     if (limited != null) {
     346           0 :       data['limited'] = limited;
     347             :     }
     348           0 :     if (prevBatch != null) {
     349           0 :       data['prev_batch'] = prevBatch;
     350             :     }
     351             :     return data;
     352             :   }
     353             : }
     354             : 
     355             : class UnreadNotificationCounts {
     356             :   int? highlightCount;
     357             :   int? notificationCount;
     358             : 
     359           2 :   UnreadNotificationCounts({
     360             :     this.notificationCount,
     361             :     this.highlightCount,
     362             :   });
     363             : 
     364          35 :   UnreadNotificationCounts.fromJson(Map<String, Object?> json)
     365          35 :       : highlightCount = json.tryGet<int>('highlight_count'),
     366          35 :         notificationCount = json.tryGet<int>('notification_count');
     367             : 
     368           0 :   Map<String, Object?> toJson() {
     369           0 :     final data = <String, Object?>{};
     370           0 :     if (highlightCount != null) {
     371           0 :       data['highlight_count'] = highlightCount;
     372             :     }
     373           0 :     if (notificationCount != null) {
     374           0 :       data['notification_count'] = notificationCount;
     375             :     }
     376             :     return data;
     377             :   }
     378             : }
     379             : 
     380             : class DeviceListsUpdate {
     381             :   List<String>? changed;
     382             :   List<String>? left;
     383             : 
     384           0 :   DeviceListsUpdate({
     385             :     this.changed,
     386             :     this.left,
     387             :   });
     388             : 
     389          33 :   DeviceListsUpdate.fromJson(Map<String, Object?> json)
     390          33 :       : changed = json.tryGetList<String>('changed') ?? [],
     391          33 :         left = json.tryGetList<String>('left') ?? [];
     392             : 
     393           0 :   Map<String, Object?> toJson() {
     394           0 :     final data = <String, Object?>{};
     395           0 :     if (changed != null) {
     396           0 :       data['changed'] = changed;
     397             :     }
     398           0 :     if (left != null) {
     399           0 :       data['left'] = left;
     400             :     }
     401             :     return data;
     402             :   }
     403             : }

Generated by: LCOV version 1.14