feat(chats): скрытие чатов групповых звонков + тоггл показа скрытых чатов
This commit is contained in:
@@ -1104,7 +1104,7 @@ class ChatsModule {
|
||||
return parsed;
|
||||
}
|
||||
final row = parsed.toDbRow();
|
||||
row['in_list'] = inList ? 1 : 0;
|
||||
row['in_list'] = !inList ? 0 : (chat['status'] == 'HIDDEN' ? 2 : 1);
|
||||
await AppDatabase.saveChats([row]);
|
||||
_bump();
|
||||
return parsed;
|
||||
@@ -1144,11 +1144,11 @@ class ChatsModule {
|
||||
row['id'] as int: CachedChat.fromDbRow(row),
|
||||
};
|
||||
|
||||
final rows = chats
|
||||
.whereType<Map>()
|
||||
.map(
|
||||
(c) => parseChatRow(
|
||||
c.cast<dynamic, dynamic>(),
|
||||
final rows = <Map<String, dynamic>>[];
|
||||
for (final c in chats.whereType<Map>()) {
|
||||
final map = c.cast<dynamic, dynamic>();
|
||||
final parsed = parseChatRow(
|
||||
map,
|
||||
accountId,
|
||||
currentUserId,
|
||||
contactsMap,
|
||||
@@ -1156,11 +1156,12 @@ class ChatsModule {
|
||||
presenceMap,
|
||||
existing,
|
||||
cachedAt,
|
||||
),
|
||||
)
|
||||
.whereType<CachedChat>()
|
||||
.map((c) => c.toDbRow()..['in_list'] = 1)
|
||||
.toList();
|
||||
);
|
||||
if (parsed == null) continue;
|
||||
final row = parsed.toDbRow();
|
||||
row['in_list'] = map['status'] == 'HIDDEN' ? 2 : 1;
|
||||
rows.add(row);
|
||||
}
|
||||
|
||||
if (rows.isNotEmpty) {
|
||||
await AppDatabase.saveChats(rows);
|
||||
@@ -1171,9 +1172,15 @@ class ChatsModule {
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<CachedChat>> getChats(int accountId) async {
|
||||
Future<List<CachedChat>> getChats(
|
||||
int accountId, {
|
||||
bool includeHidden = false,
|
||||
}) async {
|
||||
try {
|
||||
final rows = await AppDatabase.loadChats(accountId);
|
||||
final rows = await AppDatabase.loadChats(
|
||||
accountId,
|
||||
includeHidden: includeHidden,
|
||||
);
|
||||
final chats = rows.map(CachedChat.fromDbRow).toList();
|
||||
return chats;
|
||||
} catch (e) {
|
||||
|
||||
@@ -9,6 +9,7 @@ class KometSettings {
|
||||
static const _kAntiRead = 'komet_anti_read';
|
||||
static const _kSelfOnlineCheck = 'komet_self_online_check';
|
||||
static const _kHideAllChatsFolder = 'komet_hide_all_chats_folder';
|
||||
static const _kShowHiddenChats = 'komet_show_hidden_chats';
|
||||
|
||||
static final ValueNotifier<bool> viewDeleted = ValueNotifier(false);
|
||||
static final ValueNotifier<bool> viewRedacted = ValueNotifier(false);
|
||||
@@ -17,6 +18,7 @@ class KometSettings {
|
||||
static final ValueNotifier<bool> antiRead = ValueNotifier(false);
|
||||
static final ValueNotifier<bool> selfOnlineCheck = ValueNotifier(true);
|
||||
static final ValueNotifier<bool> hideAllChatsFolder = ValueNotifier(false);
|
||||
static final ValueNotifier<bool> showHiddenChats = ValueNotifier(false);
|
||||
|
||||
static Future<void> load() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
@@ -27,6 +29,7 @@ class KometSettings {
|
||||
antiRead.value = prefs.getBool(_kAntiRead) ?? false;
|
||||
selfOnlineCheck.value = prefs.getBool(_kSelfOnlineCheck) ?? true;
|
||||
hideAllChatsFolder.value = prefs.getBool(_kHideAllChatsFolder) ?? false;
|
||||
showHiddenChats.value = prefs.getBool(_kShowHiddenChats) ?? false;
|
||||
}
|
||||
|
||||
static Future<void> setViewDeleted(bool value) async {
|
||||
@@ -70,4 +73,10 @@ class KometSettings {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setBool(_kHideAllChatsFolder, value);
|
||||
}
|
||||
|
||||
static Future<void> setShowHiddenChats(bool value) async {
|
||||
showHiddenChats.value = value;
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setBool(_kShowHiddenChats, value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -709,11 +709,16 @@ class AppDatabase {
|
||||
);
|
||||
}
|
||||
|
||||
static Future<List<Map<String, dynamic>>> loadChats(int accountId) async {
|
||||
static Future<List<Map<String, dynamic>>> loadChats(
|
||||
int accountId, {
|
||||
bool includeHidden = false,
|
||||
}) async {
|
||||
final db = await _instance;
|
||||
return db.query(
|
||||
'chats_cache',
|
||||
where: 'account_id = ? AND in_list = 1',
|
||||
where: includeHidden
|
||||
? 'account_id = ? AND in_list IN (1, 2)'
|
||||
: 'account_id = ? AND in_list = 1',
|
||||
whereArgs: [accountId],
|
||||
orderBy: 'last_event_time DESC',
|
||||
);
|
||||
|
||||
@@ -549,6 +549,7 @@ class _ChatListScreenState extends State<ChatListScreen>
|
||||
AppStories.current.addListener(_onStoriesEnabledChanged);
|
||||
storiesModule.storiesChanged.addListener(_onStoriesDataChanged);
|
||||
KometSettings.hideAllChatsFolder.addListener(_requestReload);
|
||||
KometSettings.showHiddenChats.addListener(_requestReload);
|
||||
_maybeLoadStories();
|
||||
_typingSub = api.pushStream
|
||||
.where((p) => p.opcode == Opcode.notifTyping)
|
||||
@@ -709,7 +710,10 @@ class _ChatListScreenState extends State<ChatListScreen>
|
||||
}
|
||||
|
||||
try {
|
||||
final loadedChats = await chats.getChats(p.id);
|
||||
final loadedChats = await chats.getChats(
|
||||
p.id,
|
||||
includeHidden: KometSettings.showHiddenChats.value,
|
||||
);
|
||||
var folders = await FoldersModule.loadFolders(p.id);
|
||||
final foldersKnown = await FoldersModule.hasReceivedFoldersList(p.id);
|
||||
final contactIds = (await ContactsModule.getContacts(p.id))
|
||||
@@ -1153,6 +1157,7 @@ class _ChatListScreenState extends State<ChatListScreen>
|
||||
AppStories.current.removeListener(_onStoriesEnabledChanged);
|
||||
storiesModule.storiesChanged.removeListener(_onStoriesDataChanged);
|
||||
KometSettings.hideAllChatsFolder.removeListener(_requestReload);
|
||||
KometSettings.showHiddenChats.removeListener(_requestReload);
|
||||
_loginSub?.cancel();
|
||||
_stateSub?.cancel();
|
||||
_typingSub?.cancel();
|
||||
|
||||
@@ -86,6 +86,18 @@ class KometSettingsScreen extends StatelessWidget {
|
||||
onChanged: KometSettings.setHideAllChatsFolder,
|
||||
),
|
||||
),
|
||||
ValueListenableBuilder<bool>(
|
||||
valueListenable: KometSettings.showHiddenChats,
|
||||
builder: (context, value, _) => SettingsToggleTile(
|
||||
icon: Symbols.visibility_lock,
|
||||
label: 'Show hidden chats',
|
||||
subtitle:
|
||||
'Показывать скрытые чаты (например, от групповых '
|
||||
'звонков), которые обычно не отображаются в списке',
|
||||
value: value,
|
||||
onChanged: KometSettings.setShowHiddenChats,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
|
||||
Reference in New Issue
Block a user