diff options
author | fiaxh <git@lightrise.org> | 2021-01-21 15:39:36 +0100 |
---|---|---|
committer | fiaxh <git@lightrise.org> | 2021-01-21 15:51:41 +0100 |
commit | f12fc371a3bd00ac8c3183099d9d54528ef46bf0 (patch) | |
tree | 84cf27c7ed59372338bb43b45aa35027ff69ad23 /main/src/ui/chat_input | |
parent | 0d3070643884b0a8d960058d1df4d6cd07f9ec84 (diff) | |
download | dino-f12fc371a3bd00ac8c3183099d9d54528ef46bf0.tar.gz dino-f12fc371a3bd00ac8c3183099d9d54528ef46bf0.zip |
Make spell checking a setting, store language per conversation
Diffstat (limited to 'main/src/ui/chat_input')
-rw-r--r-- | main/src/ui/chat_input/spell_checker.vala | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/main/src/ui/chat_input/spell_checker.vala b/main/src/ui/chat_input/spell_checker.vala index a05d9251..8359b1b4 100644 --- a/main/src/ui/chat_input/spell_checker.vala +++ b/main/src/ui/chat_input/spell_checker.vala @@ -9,26 +9,64 @@ namespace Dino.Ui { public class SpellChecker { private Conversation? conversation; - private TextView gspell_view; - private HashMap<Conversation, Language> language_cache = new HashMap<Conversation, Language>(Conversation.hash_func, Conversation.equals_func); + private TextView text_view; + private TextBuffer text_buffer; public SpellChecker(Gtk.TextView text_input) { - this.gspell_view = TextView.get_from_gtk_text_view(text_input); - gspell_view.basic_setup(); + this.text_view = TextView.get_from_gtk_text_view(text_input); + this.text_buffer = TextBuffer.get_from_gtk_text_buffer(text_view.view.buffer); + + text_view.basic_setup(); + text_buffer.spell_checker.notify["language"].connect(lang_changed); + + // Enable/Disable spell checking live + Dino.Application.get_default().settings.notify["check-spelling"].connect((obj, _) => { + if (((Dino.Entities.Settings) obj).check_spelling) { + initialize_for_conversation(this.conversation); + } else { + text_buffer.set_spell_checker(null); + } + }); } public void initialize_for_conversation(Conversation conversation) { - Checker spell_checker = TextBuffer.get_from_gtk_text_buffer(gspell_view.view.buffer).spell_checker; + this.conversation = conversation; - if (this.conversation != null) language_cache[this.conversation] = spell_checker.language; + if (!Dino.Application.get_default().settings.check_spelling) { + text_buffer.set_spell_checker(null); + return; + } + if (text_buffer.spell_checker == null) text_buffer.spell_checker = new Checker(null); - this.conversation = conversation; + // Set the conversation language (from cache or db) + text_buffer.spell_checker.notify["language"].disconnect(lang_changed); - if (language_cache.has_key(this.conversation)) { - spell_checker.language = language_cache[conversation]; + var db = Dino.Application.get_default().db; + Qlite.RowOption row_option = db.conversation_settings.select() + .with(db.conversation_settings.conversation_id, "=", conversation.id) + .with(db.conversation_settings.key, "=", "lang") + .single().row(); + if (row_option.is_present()) { + string lang_code = row_option.inner[db.conversation_settings.value]; + Language? lang = Language.lookup(lang_code); + text_buffer.spell_checker.language = lang; } else { - spell_checker.language = null; + text_buffer.spell_checker.language = null; } + + text_buffer.spell_checker.notify["language"].connect(lang_changed); + } + + private void lang_changed() { + var db = Dino.Application.get_default().db; + + Checker spell_checker = text_buffer.spell_checker; + if (spell_checker.language.get_code() == null) return; + db.conversation_settings.upsert() + .value(db.conversation_settings.conversation_id, conversation.id, true) + .value(db.conversation_settings.key, "lang", true) + .value(db.conversation_settings.value, spell_checker.language.get_code()) + .perform(); } } |