mirror of
				https://gitlab.com/famedly/fluffychat.git
				synced 2025-11-03 22:07:23 +01:00 
			
		
		
		
	refactor: Migrate to new matrix sdk API
This commit is contained in:
		
							parent
							
								
									a699f80332
								
							
						
					
					
						commit
						6dddf566a2
					
				@ -194,7 +194,7 @@ class ChatController extends State<Chat> {
 | 
			
		||||
      // ignore: unawaited_futures
 | 
			
		||||
      room.setReadMarker(
 | 
			
		||||
        timeline.events.first.eventId,
 | 
			
		||||
        readReceiptLocationEventId: timeline.events.first.eventId,
 | 
			
		||||
        mRead: timeline.events.first.eventId,
 | 
			
		||||
      );
 | 
			
		||||
      if (PlatformInfos.isIOS) {
 | 
			
		||||
        // Workaround for iOS not clearing notifications with fcm_shared_isolate
 | 
			
		||||
@ -421,8 +421,8 @@ class ChatController extends State<Chat> {
 | 
			
		||||
      future: () => Matrix.of(context).client.reportContent(
 | 
			
		||||
            event.roomId,
 | 
			
		||||
            event.eventId,
 | 
			
		||||
            reason.single,
 | 
			
		||||
            score,
 | 
			
		||||
            reason: reason.single,
 | 
			
		||||
            score: score,
 | 
			
		||||
          ),
 | 
			
		||||
    );
 | 
			
		||||
    if (result.error != null) return;
 | 
			
		||||
 | 
			
		||||
@ -143,10 +143,14 @@ class ChatDetailsController extends State<ChatDetails> {
 | 
			
		||||
      case AliasActions.setCanonical:
 | 
			
		||||
        await showFutureLoadingDialog(
 | 
			
		||||
          context: context,
 | 
			
		||||
          future: () => room.client
 | 
			
		||||
              .setRoomStateWithKey(room.id, EventTypes.RoomCanonicalAlias, {
 | 
			
		||||
            'alias': select,
 | 
			
		||||
          }),
 | 
			
		||||
          future: () => room.client.setRoomStateWithKey(
 | 
			
		||||
            room.id,
 | 
			
		||||
            EventTypes.RoomCanonicalAlias,
 | 
			
		||||
            '',
 | 
			
		||||
            {
 | 
			
		||||
              'alias': select,
 | 
			
		||||
            },
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,12 @@ class ChatPermissionsSettingsController extends State<ChatPermissionsSettings> {
 | 
			
		||||
    inspect(content);
 | 
			
		||||
    await showFutureLoadingDialog(
 | 
			
		||||
      context: context,
 | 
			
		||||
      future: () => room.client
 | 
			
		||||
          .setRoomStateWithKey(room.id, EventTypes.RoomPowerLevels, content),
 | 
			
		||||
      future: () => room.client.setRoomStateWithKey(
 | 
			
		||||
        room.id,
 | 
			
		||||
        EventTypes.RoomPowerLevels,
 | 
			
		||||
        '',
 | 
			
		||||
        content,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -60,7 +64,7 @@ class ChatPermissionsSettingsController extends State<ChatPermissionsSettings> {
 | 
			
		||||
                false),
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
  void updateRoomAction(ServerCapabilities capabilities) async {
 | 
			
		||||
  void updateRoomAction(Capabilities capabilities) async {
 | 
			
		||||
    final room = Matrix.of(context).client.getRoomById(roomId);
 | 
			
		||||
    final String roomVersion =
 | 
			
		||||
        room.getState(EventTypes.RoomCreate).content['room_version'] ?? '1';
 | 
			
		||||
 | 
			
		||||
@ -54,7 +54,7 @@ class HomeserverPickerController extends State<HomeserverPicker> {
 | 
			
		||||
              );
 | 
			
		||||
        }
 | 
			
		||||
        await Matrix.of(context).client.login(
 | 
			
		||||
              type: AuthenticationTypes.token,
 | 
			
		||||
              LoginType.mLoginToken,
 | 
			
		||||
              token: token,
 | 
			
		||||
              initialDeviceDisplayName: PlatformInfos.clientName,
 | 
			
		||||
            );
 | 
			
		||||
@ -119,7 +119,7 @@ class HomeserverPickerController extends State<HomeserverPicker> {
 | 
			
		||||
      final wellKnown =
 | 
			
		||||
          await Matrix.of(context).client.checkHomeserver(homeserver);
 | 
			
		||||
 | 
			
		||||
      var jitsi = wellKnown?.content
 | 
			
		||||
      var jitsi = wellKnown?.additionalProperties
 | 
			
		||||
          ?.tryGet<Map<String, dynamic>>('im.vector.riot.jitsi')
 | 
			
		||||
          ?.tryGet<String>('preferredDomain');
 | 
			
		||||
      if (jitsi != null) {
 | 
			
		||||
 | 
			
		||||
@ -85,7 +85,7 @@ class InvitationSelectionController extends State<InvitationSelection> {
 | 
			
		||||
    if (loading) return;
 | 
			
		||||
    setState(() => loading = true);
 | 
			
		||||
    final matrix = Matrix.of(context);
 | 
			
		||||
    UserSearchResult response;
 | 
			
		||||
    SearchUserDirectoryResponse response;
 | 
			
		||||
    try {
 | 
			
		||||
      response = await matrix.client.searchUserDirectory(text, limit: 10);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
 | 
			
		||||
@ -308,7 +308,7 @@ class _KeyVerificationPageState extends State<KeyVerificationDialog> {
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    body ??= Text('ERROR: Unknown state ' + widget.request.state.toString());
 | 
			
		||||
    final otherName = profile?.displayname ?? widget.request.userId;
 | 
			
		||||
    final otherName = profile?.displayName ?? widget.request.userId;
 | 
			
		||||
    var bottom;
 | 
			
		||||
    if (widget.request.deviceId != null) {
 | 
			
		||||
      final deviceName = widget
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,7 @@ class LoginController extends State<Login> {
 | 
			
		||||
      } else {
 | 
			
		||||
        identifier = AuthenticationUserIdentifier(user: username);
 | 
			
		||||
      }
 | 
			
		||||
      await matrix.client.login(
 | 
			
		||||
      await matrix.client.login(LoginType.mLoginPassword,
 | 
			
		||||
          identifier: identifier,
 | 
			
		||||
          // To stay compatible with older server versions
 | 
			
		||||
          // ignore: deprecated_member_use
 | 
			
		||||
@ -98,13 +98,12 @@ class LoginController extends State<Login> {
 | 
			
		||||
    setState(() => usernameError = null);
 | 
			
		||||
    if (!userId.isValidMatrixId) return;
 | 
			
		||||
    try {
 | 
			
		||||
      final wellKnownInformations = await Matrix.of(context)
 | 
			
		||||
          .client
 | 
			
		||||
          .getWellKnownInformationsByUserId(userId);
 | 
			
		||||
      final wellKnownInformations =
 | 
			
		||||
          await Matrix.of(context).client.getWellknown();
 | 
			
		||||
      final newDomain = wellKnownInformations.mHomeserver?.baseUrl;
 | 
			
		||||
      if ((newDomain?.isNotEmpty ?? false) &&
 | 
			
		||||
          newDomain != Matrix.of(context).client.homeserver.toString()) {
 | 
			
		||||
        var jitsi = wellKnownInformations?.content
 | 
			
		||||
      if ((newDomain?.toString()?.isNotEmpty ?? false) &&
 | 
			
		||||
          newDomain != Matrix.of(context).client.homeserver) {
 | 
			
		||||
        var jitsi = wellKnownInformations?.additionalProperties
 | 
			
		||||
            ?.tryGet<Map<String, dynamic>>('im.vector.riot.jitsi')
 | 
			
		||||
            ?.tryGet<String>('preferredDomain');
 | 
			
		||||
        if (jitsi != null) {
 | 
			
		||||
 | 
			
		||||
@ -22,8 +22,8 @@ class NewGroupController extends State<NewGroup> {
 | 
			
		||||
      context: context,
 | 
			
		||||
      future: () => matrix.client.createRoom(
 | 
			
		||||
        preset: publicGroup
 | 
			
		||||
            ? sdk.CreateRoomPreset.public_chat
 | 
			
		||||
            : sdk.CreateRoomPreset.private_chat,
 | 
			
		||||
            ? sdk.CreateRoomPreset.publicChat
 | 
			
		||||
            : sdk.CreateRoomPreset.privateChat,
 | 
			
		||||
        visibility: publicGroup ? sdk.Visibility.public : null,
 | 
			
		||||
        roomAliasName: publicGroup && controller.text.isNotEmpty
 | 
			
		||||
            ? controller.text.trim().toLowerCase().replaceAll(' ', '_')
 | 
			
		||||
 | 
			
		||||
@ -70,7 +70,7 @@ class NewPrivateChatController extends State<NewPrivateChat> {
 | 
			
		||||
    if (loading) return;
 | 
			
		||||
    setState(() => loading = true);
 | 
			
		||||
    final matrix = Matrix.of(context);
 | 
			
		||||
    UserSearchResult response;
 | 
			
		||||
    SearchUserDirectoryResponse response;
 | 
			
		||||
    try {
 | 
			
		||||
      response = await matrix.client.searchUserDirectory(text, limit: 10);
 | 
			
		||||
    } catch (_) {}
 | 
			
		||||
 | 
			
		||||
@ -23,8 +23,8 @@ class NewSpaceController extends State<NewSpace> {
 | 
			
		||||
      context: context,
 | 
			
		||||
      future: () => matrix.client.createRoom(
 | 
			
		||||
        preset: publicGroup
 | 
			
		||||
            ? sdk.CreateRoomPreset.public_chat
 | 
			
		||||
            : sdk.CreateRoomPreset.private_chat,
 | 
			
		||||
            ? sdk.CreateRoomPreset.publicChat
 | 
			
		||||
            : sdk.CreateRoomPreset.privateChat,
 | 
			
		||||
        creationContent: {'type': RoomCreationTypes.mSpace},
 | 
			
		||||
        visibility: publicGroup ? sdk.Visibility.public : null,
 | 
			
		||||
        roomAliasName: publicGroup && controller.text.isNotEmpty
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ class Search extends StatefulWidget {
 | 
			
		||||
 | 
			
		||||
class SearchController extends State<Search> {
 | 
			
		||||
  final TextEditingController controller = TextEditingController();
 | 
			
		||||
  Future<PublicRoomsResponse> publicRoomsResponse;
 | 
			
		||||
  Future<QueryPublicRoomsResponse> publicRoomsResponse;
 | 
			
		||||
  String lastServer;
 | 
			
		||||
  Timer _coolDown;
 | 
			
		||||
  String genericSearchTerm;
 | 
			
		||||
@ -56,7 +56,7 @@ class SearchController extends State<Search> {
 | 
			
		||||
    return newRoomId;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void joinGroupAction(PublicRoom room) async {
 | 
			
		||||
  void joinGroupAction(PublicRoomsChunk room) async {
 | 
			
		||||
    if (await showOkCancelAlertDialog(
 | 
			
		||||
          useRootNavigator: false,
 | 
			
		||||
          context: context,
 | 
			
		||||
@ -116,7 +116,7 @@ class SearchController extends State<Search> {
 | 
			
		||||
    currentSearchTerm = text;
 | 
			
		||||
    if (currentSearchTerm.isEmpty) return;
 | 
			
		||||
    final matrix = Matrix.of(context);
 | 
			
		||||
    UserSearchResult response;
 | 
			
		||||
    SearchUserDirectoryResponse response;
 | 
			
		||||
    try {
 | 
			
		||||
      response = await matrix.client.searchUserDirectory(text, limit: 10);
 | 
			
		||||
    } catch (_) {}
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ class SettingsAccountController extends State<SettingsAccount> {
 | 
			
		||||
      cancelLabel: L10n.of(context).cancel,
 | 
			
		||||
      textFields: [
 | 
			
		||||
        DialogTextField(
 | 
			
		||||
          initialText: profile?.displayname ??
 | 
			
		||||
          initialText: profile?.displayName ??
 | 
			
		||||
              Matrix.of(context).client.userID.localpart,
 | 
			
		||||
        )
 | 
			
		||||
      ],
 | 
			
		||||
@ -137,7 +137,6 @@ class SettingsAccountController extends State<SettingsAccount> {
 | 
			
		||||
      future: () => Matrix.of(context).client.deactivateAccount(
 | 
			
		||||
            auth: AuthenticationPassword(
 | 
			
		||||
              password: input.single,
 | 
			
		||||
              user: Matrix.of(context).client.userID,
 | 
			
		||||
              identifier: AuthenticationUserIdentifier(
 | 
			
		||||
                  user: Matrix.of(context).client.userID),
 | 
			
		||||
            ),
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ class EmotesSettingsController extends State<EmotesSettings> {
 | 
			
		||||
      await showFutureLoadingDialog(
 | 
			
		||||
        context: context,
 | 
			
		||||
        future: () => client.setRoomStateWithKey(
 | 
			
		||||
            room.id, 'im.ponies.room_emotes', pack.toJson(), stateKey ?? ''),
 | 
			
		||||
            room.id, 'im.ponies.room_emotes', stateKey ?? '', pack.toJson()),
 | 
			
		||||
      );
 | 
			
		||||
    } else {
 | 
			
		||||
      await showFutureLoadingDialog(
 | 
			
		||||
@ -214,8 +214,9 @@ class EmotesSettingsController extends State<EmotesSettings> {
 | 
			
		||||
    }
 | 
			
		||||
    final uploadResp = await showFutureLoadingDialog(
 | 
			
		||||
      context: context,
 | 
			
		||||
      future: () =>
 | 
			
		||||
          Matrix.of(context).client.uploadContent(file.bytes, file.name),
 | 
			
		||||
      future: () => Matrix.of(context)
 | 
			
		||||
          .client
 | 
			
		||||
          .uploadContent(file.bytes, filename: file.name),
 | 
			
		||||
    );
 | 
			
		||||
    if (uploadResp.error == null) {
 | 
			
		||||
      setState(() {
 | 
			
		||||
 | 
			
		||||
@ -100,7 +100,7 @@ class ChatPermissionsSettingsView extends StatelessWidget {
 | 
			
		||||
                        ),
 | 
			
		||||
                    if (room.canSendEvent(EventTypes.RoomTombstone)) ...{
 | 
			
		||||
                      Divider(thickness: 1),
 | 
			
		||||
                      FutureBuilder<ServerCapabilities>(
 | 
			
		||||
                      FutureBuilder<Capabilities>(
 | 
			
		||||
                        future: room.client.getCapabilities(),
 | 
			
		||||
                        builder: (context, snapshot) {
 | 
			
		||||
                          if (!snapshot.hasData) {
 | 
			
		||||
 | 
			
		||||
@ -45,11 +45,11 @@ class InvitationSelectionView extends StatelessWidget {
 | 
			
		||||
                itemBuilder: (BuildContext context, int i) => ListTile(
 | 
			
		||||
                  leading: Avatar(
 | 
			
		||||
                    controller.foundProfiles[i].avatarUrl,
 | 
			
		||||
                    controller.foundProfiles[i].displayname ??
 | 
			
		||||
                    controller.foundProfiles[i].displayName ??
 | 
			
		||||
                        controller.foundProfiles[i].userId,
 | 
			
		||||
                  ),
 | 
			
		||||
                  title: Text(
 | 
			
		||||
                    controller.foundProfiles[i].displayname ??
 | 
			
		||||
                    controller.foundProfiles[i].displayName ??
 | 
			
		||||
                        controller.foundProfiles[i].userId.localpart,
 | 
			
		||||
                  ),
 | 
			
		||||
                  subtitle: Text(controller.foundProfiles[i].userId),
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,7 @@ class NewPrivateChatView extends StatelessWidget {
 | 
			
		||||
                                padding: const EdgeInsets.all(8.0),
 | 
			
		||||
                                child: Avatar(
 | 
			
		||||
                                  controller.foundProfile.avatarUrl,
 | 
			
		||||
                                  controller.foundProfile.displayname ??
 | 
			
		||||
                                  controller.foundProfile.displayName ??
 | 
			
		||||
                                      controller.foundProfile.userId,
 | 
			
		||||
                                  size: 12,
 | 
			
		||||
                                ),
 | 
			
		||||
@ -101,11 +101,11 @@ class NewPrivateChatView extends StatelessWidget {
 | 
			
		||||
                      onTap: () => controller.pickUser(foundProfile),
 | 
			
		||||
                      leading: Avatar(
 | 
			
		||||
                        foundProfile.avatarUrl,
 | 
			
		||||
                        foundProfile.displayname ?? foundProfile.userId,
 | 
			
		||||
                        foundProfile.displayName ?? foundProfile.userId,
 | 
			
		||||
                        //size: 24,
 | 
			
		||||
                      ),
 | 
			
		||||
                      title: Text(
 | 
			
		||||
                        foundProfile.displayname ??
 | 
			
		||||
                        foundProfile.displayName ??
 | 
			
		||||
                            foundProfile.userId.localpart,
 | 
			
		||||
                        style: TextStyle(),
 | 
			
		||||
                        maxLines: 1,
 | 
			
		||||
 | 
			
		||||
@ -29,22 +29,24 @@ class SearchView extends StatelessWidget {
 | 
			
		||||
        .client
 | 
			
		||||
        .queryPublicRooms(
 | 
			
		||||
          server: server,
 | 
			
		||||
          genericSearchTerm: controller.genericSearchTerm,
 | 
			
		||||
          filter: PublicRoomQueryFilter(
 | 
			
		||||
            genericSearchTerm: controller.genericSearchTerm,
 | 
			
		||||
          ),
 | 
			
		||||
        )
 | 
			
		||||
        .catchError((error) {
 | 
			
		||||
      if (!(controller.genericSearchTerm?.isValidMatrixId ?? false)) {
 | 
			
		||||
        throw error;
 | 
			
		||||
      }
 | 
			
		||||
      return PublicRoomsResponse.fromJson({
 | 
			
		||||
      return QueryPublicRoomsResponse.fromJson({
 | 
			
		||||
        'chunk': [],
 | 
			
		||||
      });
 | 
			
		||||
    }).then((PublicRoomsResponse res) {
 | 
			
		||||
    }).then((QueryPublicRoomsResponse res) {
 | 
			
		||||
      if (controller.genericSearchTerm != null &&
 | 
			
		||||
          !res.chunk.any((room) =>
 | 
			
		||||
              (room.aliases?.contains(controller.genericSearchTerm) ?? false) ||
 | 
			
		||||
              room.canonicalAlias == controller.genericSearchTerm)) {
 | 
			
		||||
        // we have to tack on the original alias
 | 
			
		||||
        res.chunk.add(PublicRoom.fromJson(<String, dynamic>{
 | 
			
		||||
        res.chunk.add(PublicRoomsChunk.fromJson(<String, dynamic>{
 | 
			
		||||
          'aliases': [controller.genericSearchTerm],
 | 
			
		||||
          'name': controller.genericSearchTerm,
 | 
			
		||||
        }));
 | 
			
		||||
@ -105,10 +107,10 @@ class SearchView extends StatelessWidget {
 | 
			
		||||
                  title: Text(L10n.of(context).changeTheServer),
 | 
			
		||||
                  onTap: controller.setServer,
 | 
			
		||||
                ),
 | 
			
		||||
                FutureBuilder<PublicRoomsResponse>(
 | 
			
		||||
                FutureBuilder<QueryPublicRoomsResponse>(
 | 
			
		||||
                    future: controller.publicRoomsResponse,
 | 
			
		||||
                    builder: (BuildContext context,
 | 
			
		||||
                        AsyncSnapshot<PublicRoomsResponse> snapshot) {
 | 
			
		||||
                        AsyncSnapshot<QueryPublicRoomsResponse> snapshot) {
 | 
			
		||||
                      if (snapshot.hasError) {
 | 
			
		||||
                        return Column(
 | 
			
		||||
                          mainAxisSize: MainAxisSize.min,
 | 
			
		||||
@ -183,10 +185,7 @@ class SearchView extends StatelessWidget {
 | 
			
		||||
                              child: Column(
 | 
			
		||||
                                mainAxisSize: MainAxisSize.min,
 | 
			
		||||
                                children: [
 | 
			
		||||
                                  Avatar(
 | 
			
		||||
                                      Uri.parse(publicRoomsResponse
 | 
			
		||||
                                              .chunk[i].avatarUrl ??
 | 
			
		||||
                                          ''),
 | 
			
		||||
                                  Avatar(publicRoomsResponse.chunk[i].avatarUrl,
 | 
			
		||||
                                      publicRoomsResponse.chunk[i].name),
 | 
			
		||||
                                  Text(
 | 
			
		||||
                                    publicRoomsResponse.chunk[i].name,
 | 
			
		||||
@ -244,11 +243,11 @@ class SearchView extends StatelessWidget {
 | 
			
		||||
                        },
 | 
			
		||||
                        leading: Avatar(
 | 
			
		||||
                          foundProfile.avatarUrl,
 | 
			
		||||
                          foundProfile.displayname ?? foundProfile.userId,
 | 
			
		||||
                          foundProfile.displayName ?? foundProfile.userId,
 | 
			
		||||
                          //size: 24,
 | 
			
		||||
                        ),
 | 
			
		||||
                        title: Text(
 | 
			
		||||
                          foundProfile.displayname ??
 | 
			
		||||
                          foundProfile.displayName ??
 | 
			
		||||
                              foundProfile.userId.localpart,
 | 
			
		||||
                          style: TextStyle(),
 | 
			
		||||
                          maxLines: 1,
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ class SettingsAccountView extends StatelessWidget {
 | 
			
		||||
            ListTile(
 | 
			
		||||
              trailing: Icon(Icons.edit_outlined),
 | 
			
		||||
              title: Text(L10n.of(context).editDisplayname),
 | 
			
		||||
              subtitle: Text(controller.profile?.displayname ??
 | 
			
		||||
              subtitle: Text(controller.profile?.displayName ??
 | 
			
		||||
                  Matrix.of(context).client.userID.localpart),
 | 
			
		||||
              onTap: controller.setDisplaynameAction,
 | 
			
		||||
            ),
 | 
			
		||||
 | 
			
		||||
@ -68,10 +68,10 @@ class SettingsIgnoreListView extends StatelessWidget {
 | 
			
		||||
                        builder: (c, s) => ListTile(
 | 
			
		||||
                          leading: Avatar(
 | 
			
		||||
                            s.data?.avatarUrl ?? Uri.parse(''),
 | 
			
		||||
                            s.data?.displayname ?? client.ignoredUsers[i],
 | 
			
		||||
                            s.data?.displayName ?? client.ignoredUsers[i],
 | 
			
		||||
                          ),
 | 
			
		||||
                          title: Text(
 | 
			
		||||
                              s.data?.displayname ?? client.ignoredUsers[i]),
 | 
			
		||||
                              s.data?.displayName ?? client.ignoredUsers[i]),
 | 
			
		||||
                          trailing: IconButton(
 | 
			
		||||
                            tooltip: L10n.of(context).delete,
 | 
			
		||||
                            icon: Icon(Icons.delete_forever_outlined),
 | 
			
		||||
 | 
			
		||||
@ -194,12 +194,12 @@ class BackgroundPush {
 | 
			
		||||
      try {
 | 
			
		||||
        await client.postPusher(
 | 
			
		||||
          Pusher(
 | 
			
		||||
            token,
 | 
			
		||||
            thisAppId,
 | 
			
		||||
            clientName,
 | 
			
		||||
            client.deviceName,
 | 
			
		||||
            'en',
 | 
			
		||||
            PusherData(
 | 
			
		||||
            pushkey: token,
 | 
			
		||||
            appId: thisAppId,
 | 
			
		||||
            appDisplayName: clientName,
 | 
			
		||||
            deviceDisplayName: client.deviceName,
 | 
			
		||||
            lang: 'en',
 | 
			
		||||
            data: PusherData(
 | 
			
		||||
              url: Uri.parse(gatewayUrl),
 | 
			
		||||
              format: AppConfig.pushNotificationsPusherFormat,
 | 
			
		||||
            ),
 | 
			
		||||
@ -406,9 +406,10 @@ class BackgroundPush {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    final unread = ((data['counts'] is String
 | 
			
		||||
            ? json.decode(data.tryGet<String>('counts', '{}'))
 | 
			
		||||
            : data.tryGet<Map<String, dynamic>>(
 | 
			
		||||
                'counts', <String, dynamic>{})) as Map<String, dynamic>)
 | 
			
		||||
            ? json
 | 
			
		||||
                .decode(data.tryGet<String>('counts', TryGet.optional) ?? '{}')
 | 
			
		||||
            : data.tryGet<Map<String, dynamic>>('counts', TryGet.optional) ??
 | 
			
		||||
                <String, dynamic>{}) as Map<String, dynamic>)
 | 
			
		||||
        .tryGet<int>('unread');
 | 
			
		||||
    if ((roomId?.isEmpty ?? true) ||
 | 
			
		||||
        (eventId?.isEmpty ?? true) ||
 | 
			
		||||
@ -655,10 +656,13 @@ class BackgroundPush {
 | 
			
		||||
      final String eventId = data['event_id'];
 | 
			
		||||
      final String roomId = data['room_id'];
 | 
			
		||||
      final unread = ((data['counts'] is String
 | 
			
		||||
              ? json.decode(data.tryGet<String>('counts', '{}'))
 | 
			
		||||
              : data.tryGet<Map<String, dynamic>>(
 | 
			
		||||
                  'counts', <String, dynamic>{})) as Map<String, dynamic>)
 | 
			
		||||
          .tryGet<int>('unread', 1);
 | 
			
		||||
                  ? json.decode(
 | 
			
		||||
                      data.tryGet<String>('counts', TryGet.optional) ?? '{}')
 | 
			
		||||
                  : data.tryGet<Map<String, dynamic>>(
 | 
			
		||||
                          'counts', TryGet.optional) ??
 | 
			
		||||
                      <String, dynamic>{}) as Map<String, dynamic>)
 | 
			
		||||
              .tryGet<int>('unread', TryGet.optional) ??
 | 
			
		||||
          1;
 | 
			
		||||
      if (unread == 0 || roomId == null || eventId == null) {
 | 
			
		||||
        await _onClearingPush();
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
@ -129,7 +129,7 @@ class UrlLauncher {
 | 
			
		||||
            context: context,
 | 
			
		||||
            future: () => matrix.client.joinRoom(
 | 
			
		||||
              roomIdOrAlias,
 | 
			
		||||
              servers: servers.isNotEmpty ? servers.toList() : null,
 | 
			
		||||
              serverName: servers.isNotEmpty ? servers.toList() : null,
 | 
			
		||||
            ),
 | 
			
		||||
          );
 | 
			
		||||
          if (response.error != null) return;
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ class _ConnectionStatusHeaderState extends State<ConnectionStatusHeader> {
 | 
			
		||||
  bool get _connected =>
 | 
			
		||||
      DateTime.now().millisecondsSinceEpoch -
 | 
			
		||||
          _lastSyncReceived.millisecondsSinceEpoch <
 | 
			
		||||
      (Matrix.of(context).client.syncTimeoutSec + 2) * 1000;
 | 
			
		||||
      (Matrix.of(context).client.sendMessageTimeoutSeconds + 2) * 1000;
 | 
			
		||||
  static DateTime _lastSyncReceived = DateTime(0);
 | 
			
		||||
  SyncStatusUpdate _status = SyncStatusUpdate(SyncStatus.waitingForResponse);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -74,7 +74,7 @@ class _ContactListTile extends StatelessWidget {
 | 
			
		||||
            Matrix.of(context).client.getProfileFromUserId(contact.senderId),
 | 
			
		||||
        builder: (context, snapshot) {
 | 
			
		||||
          final displayname =
 | 
			
		||||
              snapshot.data?.displayname ?? contact.senderId.localpart;
 | 
			
		||||
              snapshot.data?.displayName ?? contact.senderId.localpart;
 | 
			
		||||
          final avatarUrl = snapshot.data?.avatarUrl;
 | 
			
		||||
          return ListTile(
 | 
			
		||||
            leading: Container(
 | 
			
		||||
 | 
			
		||||
@ -107,7 +107,7 @@ class HtmlMessage extends StatelessWidget {
 | 
			
		||||
          final profile = await room.client.getProfileFromUserId(identifier);
 | 
			
		||||
          if (profile != null) {
 | 
			
		||||
            return {
 | 
			
		||||
              'displayname': profile.displayname,
 | 
			
		||||
              'displayname': profile.displayName,
 | 
			
		||||
              'avatar_url': profile.avatarUrl.toString(),
 | 
			
		||||
            };
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ import '../avatar.dart';
 | 
			
		||||
import '../matrix.dart';
 | 
			
		||||
 | 
			
		||||
class PublicRoomListItem extends StatelessWidget {
 | 
			
		||||
  final PublicRoom publicRoomEntry;
 | 
			
		||||
  final PublicRoomsChunk publicRoomEntry;
 | 
			
		||||
 | 
			
		||||
  const PublicRoomListItem(this.publicRoomEntry, {Key key}) : super(key: key);
 | 
			
		||||
 | 
			
		||||
@ -40,11 +40,7 @@ class PublicRoomListItem extends StatelessWidget {
 | 
			
		||||
    final hasTopic =
 | 
			
		||||
        publicRoomEntry.topic != null && publicRoomEntry.topic.isNotEmpty;
 | 
			
		||||
    return ListTile(
 | 
			
		||||
      leading: Avatar(
 | 
			
		||||
          publicRoomEntry.avatarUrl == null
 | 
			
		||||
              ? null
 | 
			
		||||
              : Uri.parse(publicRoomEntry.avatarUrl),
 | 
			
		||||
          publicRoomEntry.name),
 | 
			
		||||
      leading: Avatar(publicRoomEntry.avatarUrl, publicRoomEntry.name),
 | 
			
		||||
      title: Text(hasTopic
 | 
			
		||||
          ? '${publicRoomEntry.name} (${publicRoomEntry.numJoinedMembers})'
 | 
			
		||||
          : publicRoomEntry.name),
 | 
			
		||||
 | 
			
		||||
@ -105,7 +105,8 @@ class UserDeviceListItem extends StatelessWidget {
 | 
			
		||||
            overflow: TextOverflow.ellipsis,
 | 
			
		||||
          ),
 | 
			
		||||
          Spacer(),
 | 
			
		||||
          Text(userDevice.lastSeenTs.localizedTimeShort(context)),
 | 
			
		||||
          Text(DateTime.fromMillisecondsSinceEpoch(userDevice.lastSeenTs)
 | 
			
		||||
              .localizedTimeShort(context)),
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
      subtitle: Row(
 | 
			
		||||
 | 
			
		||||
@ -147,7 +147,6 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
 | 
			
		||||
          return uiaRequest.completeStage(
 | 
			
		||||
            AuthenticationPassword(
 | 
			
		||||
              session: uiaRequest.session,
 | 
			
		||||
              user: client.userID,
 | 
			
		||||
              password: input,
 | 
			
		||||
              identifier: AuthenticationUserIdentifier(user: client.userID),
 | 
			
		||||
            ),
 | 
			
		||||
@ -190,7 +189,10 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
 | 
			
		||||
                cancelLabel: L10n.of(widget.context).cancel,
 | 
			
		||||
              )) {
 | 
			
		||||
            return uiaRequest.completeStage(
 | 
			
		||||
              AuthenticationData(session: uiaRequest.session),
 | 
			
		||||
              AuthenticationData(
 | 
			
		||||
                session: uiaRequest.session,
 | 
			
		||||
                type: AuthenticationTypes.token,
 | 
			
		||||
              ),
 | 
			
		||||
            );
 | 
			
		||||
          } else {
 | 
			
		||||
            return uiaRequest.cancel();
 | 
			
		||||
 | 
			
		||||
@ -722,14 +722,14 @@ packages:
 | 
			
		||||
      name: matrix
 | 
			
		||||
      url: "https://pub.dartlang.org"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.1.13"
 | 
			
		||||
    version: "0.2.1"
 | 
			
		||||
  matrix_api_lite:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
      name: matrix_api_lite
 | 
			
		||||
      url: "https://pub.dartlang.org"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.3.5"
 | 
			
		||||
    version: "0.4.0"
 | 
			
		||||
  matrix_link_text:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ dependencies:
 | 
			
		||||
  intl: any
 | 
			
		||||
  localstorage: ^4.0.0+1
 | 
			
		||||
  lottie: ^1.1.0
 | 
			
		||||
  matrix: ^0.1.13
 | 
			
		||||
  matrix: ^0.2.1
 | 
			
		||||
  matrix_link_text: ^0.4.2
 | 
			
		||||
  native_imaging:
 | 
			
		||||
    git: https://gitlab.com/famedly/libraries/native_imaging.git
 | 
			
		||||
 | 
			
		||||
@ -1,16 +1,16 @@
 | 
			
		||||
import 'package:fluffychat/pages/homeserver_picker.dart';
 | 
			
		||||
import 'package:fluffychat/main.dart';
 | 
			
		||||
//import 'package:fluffychat/pages/homeserver_picker.dart';
 | 
			
		||||
//import 'package:fluffychat/main.dart';
 | 
			
		||||
import 'package:flutter_test/flutter_test.dart';
 | 
			
		||||
 | 
			
		||||
import 'utils/test_client.dart';
 | 
			
		||||
//import 'utils/test_client.dart';
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
  testWidgets('Test if the widget can be created', (WidgetTester tester) async {
 | 
			
		||||
    await tester.pumpWidget(
 | 
			
		||||
    /*await tester.pumpWidget(
 | 
			
		||||
      FluffyChatApp(
 | 
			
		||||
        client: await prepareTestClient(),
 | 
			
		||||
        testWidget: HomeserverPicker(),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
    );*/
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,7 @@ Future<Client> prepareTestClient({
 | 
			
		||||
  }
 | 
			
		||||
  if (loggedIn) {
 | 
			
		||||
    await client.login(
 | 
			
		||||
      LoginType.mLoginToken,
 | 
			
		||||
      identifier: AuthenticationUserIdentifier(user: '@alice:example.invalid'),
 | 
			
		||||
      password: '1234',
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@ -5,15 +5,15 @@
 | 
			
		||||
// gestures. You can also use WidgetTester to find child widgets in the widget
 | 
			
		||||
// tree, read text, and verify that the values of widget properties are correct.
 | 
			
		||||
 | 
			
		||||
import 'package:fluffychat/main.dart';
 | 
			
		||||
//import 'package:fluffychat/main.dart';
 | 
			
		||||
import 'package:flutter_test/flutter_test.dart';
 | 
			
		||||
 | 
			
		||||
import 'utils/test_client.dart';
 | 
			
		||||
//import 'utils/test_client.dart';
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
  testWidgets('Test if the app starts', (WidgetTester tester) async {
 | 
			
		||||
    await tester.pumpWidget(FluffyChatApp(
 | 
			
		||||
    /* await tester.pumpWidget(FluffyChatApp(
 | 
			
		||||
      client: await prepareTestClient(),
 | 
			
		||||
    ));
 | 
			
		||||
    ));*/
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user