🐛 Dozens of bug fixes

This commit is contained in:
2025-11-22 18:36:10 +08:00
parent 98c8a356e8
commit f50a19f573
3 changed files with 35 additions and 15 deletions

View File

@@ -360,21 +360,41 @@ class AppDatabase extends _$AppDatabase {
} }
Future<void> saveChatRooms(List<SnChatRoom> rooms) async { Future<void> saveChatRooms(List<SnChatRoom> rooms) async {
await batch((batch) { await transaction(() async {
for (final room in rooms) { // 1. Identify rooms to remove
batch.insert( final remoteRoomIds = rooms.map((r) => r.id).toSet();
chatRooms, final currentRooms = await select(chatRooms).get();
companionFromRoom(room), final currentRoomIds = currentRooms.map((r) => r.id).toSet();
mode: InsertMode.insertOrReplace, final idsToRemove = currentRoomIds.difference(remoteRoomIds);
);
for (final member in room.members ?? []) { if (idsToRemove.isNotEmpty) {
final idsList = idsToRemove.toList();
// Remove messages
await (delete(chatMessages)..where((t) => t.roomId.isIn(idsList))).go();
// Remove members
await (delete(chatMembers)
..where((t) => t.chatRoomId.isIn(idsList))).go();
// Remove rooms
await (delete(chatRooms)..where((t) => t.id.isIn(idsList))).go();
}
// 2. Upsert remote rooms
await batch((batch) {
for (final room in rooms) {
batch.insert( batch.insert(
chatMembers, chatRooms,
companionFromMember(member), companionFromRoom(room),
mode: InsertMode.insertOrReplace, mode: InsertMode.insertOrReplace,
); );
for (final member in room.members ?? []) {
batch.insert(
chatMembers,
companionFromMember(member),
mode: InsertMode.insertOrReplace,
);
}
} }
} });
}); });
} }

View File

@@ -846,7 +846,7 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
try { try {
final apiClient = ref.watch(apiClientProvider); final apiClient = ref.watch(apiClientProvider);
await apiClient.post( await apiClient.post(
'/sphere/publishers/$publisherUname/invites', '/sphere/publishers/invites/$publisherUname',
data: {'related_user_id': result.id, 'role': 0}, data: {'related_user_id': result.id, 'role': 0},
); );
// Refresh both providers // Refresh both providers
@@ -1134,7 +1134,7 @@ class _PublisherInviteSheet extends HookConsumerWidget {
try { try {
final client = ref.read(apiClientProvider); final client = ref.read(apiClientProvider);
await client.post( await client.post(
'/publishers/invites/${invite.publisher!.name}/accept', '/sphere/publishers/invites/${invite.publisher!.name}/accept',
); );
ref.invalidate(publisherInvitesProvider); ref.invalidate(publisherInvitesProvider);
ref.invalidate(publishersManagedProvider); ref.invalidate(publishersManagedProvider);
@@ -1147,7 +1147,7 @@ class _PublisherInviteSheet extends HookConsumerWidget {
try { try {
final client = ref.read(apiClientProvider); final client = ref.read(apiClientProvider);
await client.post( await client.post(
'/publishers/invites/${invite.publisher!.name}/decline', '/sphere/publishers/invites/${invite.publisher!.name}/decline',
); );
ref.invalidate(publisherInvitesProvider); ref.invalidate(publisherInvitesProvider);
} catch (err) { } catch (err) {

View File

@@ -206,7 +206,7 @@ class ActivityHeatmapWidget extends HookConsumerWidget {
}, },
child: Container( child: Container(
height: 12, height: 12,
margin: const EdgeInsets.all(0.5), margin: const EdgeInsets.all(1),
decoration: BoxDecoration( decoration: BoxDecoration(
color: getActivityColor(value), color: getActivityColor(value),
borderRadius: BorderRadius.circular(2), borderRadius: BorderRadius.circular(2),