🐛 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,6 +360,25 @@ class AppDatabase extends _$AppDatabase {
} }
Future<void> saveChatRooms(List<SnChatRoom> rooms) async { Future<void> saveChatRooms(List<SnChatRoom> rooms) async {
await transaction(() async {
// 1. Identify rooms to remove
final remoteRoomIds = rooms.map((r) => r.id).toSet();
final currentRooms = await select(chatRooms).get();
final currentRoomIds = currentRooms.map((r) => r.id).toSet();
final idsToRemove = currentRoomIds.difference(remoteRoomIds);
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) { await batch((batch) {
for (final room in rooms) { for (final room in rooms) {
batch.insert( batch.insert(
@@ -376,6 +395,7 @@ class AppDatabase extends _$AppDatabase {
} }
} }
}); });
});
} }
// Methods for post drafts // Methods for post drafts

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),