diff --git a/lib/src/services/api/client2client/contact.c2c.dart b/lib/src/services/api/client2client/contact.c2c.dart index 217b745..3f7c0b7 100644 --- a/lib/src/services/api/client2client/contact.c2c.dart +++ b/lib/src/services/api/client2client/contact.c2c.dart @@ -124,14 +124,15 @@ Future handleContactUpdate( await twonlyDB.contactsDao.updateContact( fromUserId, ContactsCompanion( - avatarSvgCompressed: - Value(Uint8List.fromList(contactUpdate.avatarSvgCompressed)), + avatarSvgCompressed: Value( + Uint8List.fromList(contactUpdate.avatarSvgCompressed), + ), displayName: Value(contactUpdate.displayName), username: Value(contactUpdate.username), senderProfileCounter: Value(senderProfileCounter), ), ); - unawaited(createPushAvatars()); + unawaited(createPushAvatars(forceForUserId: fromUserId)); } } } diff --git a/lib/src/utils/avatars.dart b/lib/src/utils/avatars.dart index 08a903e..d1fcd69 100644 --- a/lib/src/utils/avatars.dart +++ b/lib/src/utils/avatars.dart @@ -6,12 +6,21 @@ import 'package:flutter_svg/svg.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/src/utils/misc.dart'; -Future createPushAvatars() async { +Future createPushAvatars({int? forceForUserId}) async { final contacts = await twonlyDB.contactsDao.getAllContacts(); for (final contact in contacts) { if (contact.avatarSvgCompressed == null) continue; + if (forceForUserId == null) { + if (avatarPNGFile(contact.userId).existsSync()) { + continue; // only create the avatar in case no avatar exists yet fot this user + } + } else if (contact.userId != forceForUserId) { + // only update the avatar for this specified contact + continue; + } + final avatarSvg = getAvatarSvg(contact.avatarSvgCompressed!); final pictureInfo = await vg.loadPicture(SvgStringLoader(avatarSvg), null); @@ -27,8 +36,9 @@ Future createPushAvatars() async { } File avatarPNGFile(int contactId) { - final avatarsDirectory = - Directory('$globalApplicationCacheDirectory/avatars'); + final avatarsDirectory = Directory( + '$globalApplicationCacheDirectory/avatars', + ); if (!avatarsDirectory.existsSync()) { avatarsDirectory.createSync(recursive: true); @@ -42,8 +52,10 @@ Future getUserAvatar() async { return data.buffer.asUint8List(); } - final pictureInfo = - await vg.loadPicture(SvgStringLoader(gUser.avatarSvg!), null); + final pictureInfo = await vg.loadPicture( + SvgStringLoader(gUser.avatarSvg!), + null, + ); final image = await pictureInfo.picture.toImage(270, 300);