diff --git a/lib/models/word_search/word_search_sense.dart b/lib/models/word_search/word_search_sense.dart index 275d3da..ac50b48 100644 --- a/lib/models/word_search/word_search_sense.dart +++ b/lib/models/word_search/word_search_sense.dart @@ -2,6 +2,7 @@ import 'package:jadb/models/jmdict/jmdict_dialect.dart'; import 'package:jadb/models/jmdict/jmdict_field.dart'; import 'package:jadb/models/jmdict/jmdict_misc.dart'; import 'package:jadb/models/jmdict/jmdict_pos.dart'; +import 'package:jadb/models/word_search/word_search_sense_language_source.dart'; import 'package:jadb/models/word_search/word_search_xref_entry.dart'; class WordSearchSense { @@ -38,7 +39,7 @@ class WordSearchSense { // TODO: there is a lot more info to collect in the languageSource data /// Information about the the origin of the word, if loaned from another language. - final List languageSource; + final List languageSource; // TODO: add example sentences @@ -106,6 +107,8 @@ class WordSearchSense { misc: (json['misc'] as List).map((e) => JMdictMisc.fromJson(e)).toList(), info: List.from(json['info']), - languageSource: List.from(json['languageSource']), + languageSource: (json['languageSource'] as List) + .map((e) => WordSearchSenseLanguageSource.fromJson(e)) + .toList(), ); } diff --git a/lib/models/word_search/word_search_sense_language_source.dart b/lib/models/word_search/word_search_sense_language_source.dart new file mode 100644 index 0000000..01c70e5 --- /dev/null +++ b/lib/models/word_search/word_search_sense_language_source.dart @@ -0,0 +1,30 @@ +/// A reference to a foreign language where this sense originates from. +class WordSearchSenseLanguageSource { + final String language; + final String? phrase; + final bool fullyDescribesSense; + final bool constructedFromSmallerWords; + + const WordSearchSenseLanguageSource({ + required this.language, + this.phrase, + this.fullyDescribesSense = true, + this.constructedFromSmallerWords = false, + }); + + Map toJson() => { + 'language': language, + 'phrase': phrase, + 'fullyDescribesSense': fullyDescribesSense, + 'constructedFromSmallerWords': constructedFromSmallerWords, + }; + + factory WordSearchSenseLanguageSource.fromJson(Map json) => + WordSearchSenseLanguageSource( + language: json['language'], + phrase: json['phrase'], + fullyDescribesSense: json['fullyDescribesSense'] ?? true, + constructedFromSmallerWords: + json['constructedFromSmallerWords'] ?? false, + ); +} diff --git a/lib/search/word_search.dart b/lib/search/word_search.dart index 02234c8..701776c 100644 --- a/lib/search/word_search.dart +++ b/lib/search/word_search.dart @@ -8,6 +8,7 @@ import 'package:jadb/models/jmdict/jmdict_reading_info.dart'; import 'package:jadb/models/word_search/word_search_result.dart'; import 'package:jadb/models/word_search/word_search_ruby.dart'; import 'package:jadb/models/word_search/word_search_sense.dart'; +import 'package:jadb/models/word_search/word_search_sense_language_source.dart'; import 'package:jadb/models/word_search/word_search_sources.dart'; import 'package:jadb/models/word_search/word_search_xref_entry.dart'; import 'package:jadb/util/sqlite_utils.dart'; @@ -492,8 +493,15 @@ List _regroup_senses({ .toList(), misc: miscs.map((e) => JMdictMisc.fromId(e['misc'] as String)).toList(), info: infos.map((e) => e['info'] as String).toList(), - languageSource: - languageSources.map((e) => e['language'] as String).toList(), + languageSource: languageSources + .map((e) => WordSearchSenseLanguageSource( + language: e['language'] as String, + phrase: e['phrase'] as String?, + fullyDescribesSense: e['fullyDescribesSense'] == 1, + constructedFromSmallerWords: + e['constructedFromSmallerWords'] == 1, + )) + .toList(), ); result.add(resultSense);