fluffychat/lib/pangea/controllers/word_net_controller.dart
wcjord a1f9e6a243
Toolbar practice (#702)
* drafting toolbar with practice

* moved some code around

* turning overlay message content into text buttons for selection, updated toolbar buttons progress bar

* activities displaying and forwarding toolbar

* experimenting with using choice value rather than index for logic

* reimplementation of wordnet results and translation for individual words

* cache and timer

* mostly done with activities in toolbar flow

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
Co-authored-by: choreo development <williamjordan-cooley@Williams-MacBook-Pro-3.local>
2024-09-25 17:01:58 -04:00

83 lines
2 KiB
Dart

import 'package:collection/collection.dart';
import 'package:fluffychat/pangea/constants/language_constants.dart';
import 'package:fluffychat/pangea/repo/word_repo.dart';
import 'package:http/http.dart' as http;
import '../models/word_data_model.dart';
import 'base_controller.dart';
import 'pangea_controller.dart';
class WordController extends BaseController {
late PangeaController _pangeaController;
final List<WordData> _wordData = [];
WordController(PangeaController pangeaController) : super() {
_pangeaController = pangeaController;
}
WordData? getWordDataLocal({
required String word,
required String fullText,
required String? userL1,
required String? userL2,
}) =>
_wordData.firstWhereOrNull(
(e) => e.isMatch(
w: word,
f: fullText,
l1: userL1,
l2: userL2,
),
);
Future<WordData> getWordDataGlobal({
required String word,
required String fullText,
required String? userL1,
required String? userL2,
}) async {
if (userL1 == null ||
userL2 == null ||
userL1 == LanguageKeys.unknownLanguage ||
userL2 == LanguageKeys.unknownLanguage) {
throw http.Response("", 405);
}
final WordData? local = getWordDataLocal(
word: word,
fullText: fullText,
userL1: userL1,
userL2: userL2,
);
if (local != null) return local;
final WordData remote = await WordRepo.getWordNetData(
accessToken: _pangeaController.userController.accessToken,
fullText: fullText,
word: word,
userL1: userL1,
userL2: userL2,
);
_addWordData(remote);
return remote;
}
_addWordData(WordData w) {
final WordData? local = getWordDataLocal(
word: w.word,
fullText: w.fullText,
userL1: w.userL1,
userL2: w.userL2,
);
if (local == null) {
if (_wordData.length > 100) _wordData.clear();
_wordData.add(w);
setState(null);
}
}
}