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<String, List<String>> _groups = Store.getGroups();
List<String>? uncategorized = Store.getUncategorized();
Map<String, int> _groupOpenTargets = Store.getGroupOpenTargets();
Map<String, List<String>> get groups => _groups;
set groups(Map<String, List<String>> groups) {
_groups = groups;
updateUncategorized();
notifyListeners();
Store.setGroups(groups);
}
void updateUncategorized({bool force = false}) {
if (uncategorized != null || force) {
final sids = Set<String>.from(
Global.sourcesModel.getSources().map<String>((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;
}
}