feat: adopt smolmail protocol 1.1, adaptive nav shell, and server mail retention

This commit is contained in:
randogoth 2026-09-27 11:07:11 +03:00
parent eaaa3f2ede
commit c693e6fcb9
27 changed files with 1190 additions and 592 deletions

View file

@ -32,18 +32,14 @@ final accountProvider = Provider<SmolAddress?>((ref) {
return ref.watch(clientProvider).accountAddress();
});
class Folder extends Notifier<String> {
@override
String build() => "inbox";
void select(String folder) => state = folder;
}
final folderProvider = NotifierProvider<Folder, String>(Folder.new);
final messagesProvider = Provider<List<MailRecord>>((ref) {
/// One tab (Inbox/Sent/Requests) can be on screen — and simultaneously kept
/// alive off-screen by [TabBarView] for swiping — while another is active,
/// so each is parameterized by its own folder rather than sharing one
/// ambient "current folder" provider.
final messagesForFolderProvider =
Provider.family<List<MailRecord>, String>((ref, folder) {
ref.watch(revisionProvider);
return ref.watch(storeProvider).listMessages(ref.watch(folderProvider));
return ref.watch(storeProvider).listMessages(folder);
});
final unreadProvider = Provider<int>((ref) {
@ -51,6 +47,11 @@ final unreadProvider = Provider<int>((ref) {
return ref.watch(storeProvider).unreadCount();
});
final requestsUnreadProvider = Provider<int>((ref) {
ref.watch(revisionProvider);
return ref.watch(storeProvider).requestsUnreadCount();
});
final contactsProvider = Provider<List<(String, StoredContact)>>((ref) {
ref.watch(revisionProvider);
return ref.watch(storeProvider).allContacts();