import 'package:fluent_reader_lite/models/source.dart'; import 'package:fluent_reader_lite/utils/global.dart'; import 'package:fluent_reader_lite/utils/store.dart'; import 'package:flutter/cupertino.dart'; class GroupsModel with ChangeNotifier { Map> _groups = Store.getGroups(); List? uncategorized = Store.getUncategorized(); Map _groupOpenTargets = Store.getGroupOpenTargets(); Map> get groups => _groups; set groups(Map> groups) { _groups = groups; updateUncategorized(); notifyListeners(); Store.setGroups(groups); } void updateUncategorized({bool force = false}) { if (uncategorized != null || force) { final sids = Set.from( Global.sourcesModel.getSources().map((s) => s.id) ); for (var group in _groups.values) { for (var sid in group) { sids.remove(sid); } } uncategorized = sids.toList(); Store.setUncategorized(uncategorized); } } bool get showUncategorized => uncategorized != null; set showUncategorized(bool value) { if (showUncategorized != value) { if (value) { updateUncategorized(force: true); } else { uncategorized = null; Store.setUncategorized(null); } notifyListeners(); } } SourceOpenTarget getGroupOpenTarget(String groupName) { var idx = _groupOpenTargets[groupName]; if (idx == null || idx >= SourceOpenTarget.values.length) { return SourceOpenTarget.Inherit; } return SourceOpenTarget.values[idx]; } void setGroupOpenTarget(String groupName, SourceOpenTarget target) { _groupOpenTargets[groupName] = target.index; Store.setGroupOpenTargets(_groupOpenTargets); notifyListeners(); } String? findGroupForSource(String sourceId) { for (var entry in _groups.entries) { if (entry.value.contains(sourceId)) { return entry.key; } } return null; } }