aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosty <frostinator33@airmail.cc>2026-10-26 10:21:57 -0400
committerfrosty <frostinator33@airmail.cc>2026-10-26 10:21:57 -0400
commit74aecd8b0986d07b50b7ce310d64e645b8b54e38 (patch)
tree560e6434f183eb54cd779936f3a4c9575146a066
parent3d7e90d401da02d430a87db0ec7e1db3a6f1a68f (diff)
parent4436001bb361ad4f9e4e05819214ecf0ea77c063 (diff)
Merge 'upstream/master'
-rw-r--r--.github/workflows/build.yml57
-rw-r--r--build-aux/version.py (renamed from libdino/version.py)19
-rw-r--r--crypto-vala/crypto-vala.deps2
-rw-r--r--crypto-vala/meson.build23
-rw-r--r--crypto-vala/src/error.vala15
-rw-r--r--crypto-vala/src/random.vala5
-rw-r--r--libdino/dino.deps3
-rw-r--r--libdino/meson.build107
-rw-r--r--libdino/src/application.vala39
-rw-r--r--libdino/src/crypto/cipher.vala19
-rw-r--r--libdino/src/crypto/cipher_converter.vala (renamed from crypto-vala/src/cipher_converter.vala)52
-rw-r--r--libdino/src/crypto/dtls_srtp.vala146
-rw-r--r--libdino/src/crypto/error.vala11
-rw-r--r--libdino/src/crypto/gnu/cipher.vala (renamed from crypto-vala/src/cipher.vala)35
-rw-r--r--libdino/src/crypto/gnu/dtls_srtp.vala (renamed from plugins/ice/src/dtls_srtp.vala)202
-rw-r--r--libdino/src/crypto/gnu/omemo.c (renamed from plugins/omemo/src/native/helper.c)80
-rw-r--r--libdino/src/crypto/gnu/utils.vala21
-rw-r--r--libdino/src/crypto/omemo/context.h (renamed from plugins/omemo/vapi/libgcrypt.vapi)0
-rw-r--r--libdino/src/crypto/omemo/context.vala (renamed from plugins/omemo/src/native/context.vala)10
-rw-r--r--libdino/src/crypto/omemo/helper.c64
-rw-r--r--libdino/src/crypto/omemo/helper.h (renamed from plugins/omemo/src/native/helper.h)1
-rw-r--r--libdino/src/crypto/omemo/simple_iks.vala (renamed from plugins/omemo/src/native/simple_iks.vala)26
-rw-r--r--libdino/src/crypto/omemo/simple_pks.vala (renamed from plugins/omemo/src/native/simple_pks.vala)22
-rw-r--r--libdino/src/crypto/omemo/simple_spks.vala (renamed from plugins/omemo/src/native/simple_spks.vala)22
-rw-r--r--libdino/src/crypto/omemo/simple_ss.vala (renamed from plugins/omemo/src/native/simple_ss.vala)27
-rw-r--r--libdino/src/crypto/omemo/store.vala (renamed from plugins/omemo/src/native/store.vala)62
-rw-r--r--libdino/src/crypto/omemo/util.vala (renamed from plugins/omemo/src/native/util.vala)4
-rw-r--r--libdino/src/crypto/openssl/cipher.vala156
-rw-r--r--libdino/src/crypto/openssl/dtls_srtp.vala202
-rw-r--r--libdino/src/crypto/openssl/omemo.c313
-rw-r--r--libdino/src/crypto/openssl/utils.c49
-rw-r--r--libdino/src/crypto/openssl/utils.h8
-rw-r--r--libdino/src/crypto/openssl/utils.vala19
-rw-r--r--libdino/src/crypto/srtp.vala (renamed from crypto-vala/src/srtp.vala)2
-rw-r--r--libdino/src/entity/conversation.vala31
-rw-r--r--libdino/src/entity/file_transfer_group.vala53
-rw-r--r--libdino/src/file_transfer/file_manager2.vala252
-rw-r--r--libdino/src/file_transfer/http_transfer.vala319
-rw-r--r--libdino/src/plugin/loader.vala4
-rw-r--r--libdino/src/qlite/column.vala (renamed from qlite/src/column.vala)2
-rw-r--r--libdino/src/qlite/database.vala (renamed from qlite/src/database.vala)2
-rw-r--r--libdino/src/qlite/delete_builder.vala (renamed from qlite/src/delete_builder.vala)2
-rw-r--r--libdino/src/qlite/insert_builder.vala (renamed from qlite/src/insert_builder.vala)2
-rw-r--r--libdino/src/qlite/query_builder.vala (renamed from qlite/src/query_builder.vala)2
-rw-r--r--libdino/src/qlite/row.vala (renamed from qlite/src/row.vala)9
-rw-r--r--libdino/src/qlite/statement_builder.vala (renamed from qlite/src/statement_builder.vala)2
-rw-r--r--libdino/src/qlite/table.vala (renamed from qlite/src/table.vala)2
-rw-r--r--libdino/src/qlite/update_builder.vala (renamed from qlite/src/update_builder.vala)2
-rw-r--r--libdino/src/qlite/upsert_builder.vala (renamed from qlite/src/upsert_builder.vala)2
-rw-r--r--libdino/src/service/avatar_manager.vala18
-rw-r--r--libdino/src/service/call_store.vala2
-rw-r--r--libdino/src/service/chat_interaction.vala4
-rw-r--r--libdino/src/service/contact_model.vala1
-rw-r--r--libdino/src/service/content_item_store.vala36
-rw-r--r--libdino/src/service/counterpart_interaction_manager.vala9
-rw-r--r--libdino/src/service/database.vala93
-rw-r--r--libdino/src/service/entity_capabilities_storage.vala71
-rw-r--r--libdino/src/service/entity_info.vala33
-rw-r--r--libdino/src/service/fallback_body.vala1
-rw-r--r--libdino/src/service/file_manager.vala44
-rw-r--r--libdino/src/service/file_transfer_storage.vala59
-rw-r--r--libdino/src/service/history_sync.vala2
-rw-r--r--libdino/src/service/ice.vala (renamed from plugins/ice/src/transport_parameters.vala)159
-rw-r--r--libdino/src/service/message_correction.vala20
-rw-r--r--libdino/src/service/message_deletion.vala1
-rw-r--r--libdino/src/service/message_processor.vala10
-rw-r--r--libdino/src/service/message_storage.vala120
-rw-r--r--libdino/src/service/module_manager.vala6
-rw-r--r--libdino/src/service/muc_manager.vala49
-rw-r--r--libdino/src/service/occupant_id_store.vala2
-rw-r--r--libdino/src/service/reactions.vala13
-rw-r--r--libdino/src/service/replies.vala2
-rw-r--r--libdino/src/service/search_processor.vala4
-rw-r--r--libdino/src/service/stateless_file_sharing.vala177
-rw-r--r--libdino/src/service/stream_interactor.vala5
-rw-r--r--libdino/src/service/util.vala13
-rw-r--r--libdino/src/version.c.in4
-rw-r--r--libdino/src/version.vala.in5
-rw-r--r--libdino/tests/common.vala29
-rw-r--r--libdino/tests/curve25519.vala (renamed from plugins/omemo/tests/native/curve25519.vala)5
-rw-r--r--libdino/tests/hkdf.vala (renamed from plugins/omemo/tests/native/hkdf.vala)5
-rw-r--r--libdino/tests/jid.vala39
-rw-r--r--libdino/tests/session_builder.vala (renamed from plugins/omemo/tests/native/session_builder.vala)5
-rw-r--r--libdino/vapi/gnutls.vapi (renamed from plugins/ice/vapi/gnutls.vapi)0
-rw-r--r--libdino/vapi/libgcrypt.vapi (renamed from crypto-vala/vapi/libgcrypt.vapi)0
-rw-r--r--libdino/vapi/libomemo-c.vapi (renamed from plugins/omemo/vapi/libomemo-c.vapi)48
-rw-r--r--libdino/vapi/libsrtp2.vapi (renamed from crypto-vala/vapi/libsrtp2.vapi)0
-rw-r--r--libdino/vapi/metadata/Nice-0.1.metadata (renamed from plugins/ice/vapi/metadata/Nice-0.1.metadata)0
-rw-r--r--libdino/vapi/nice.vapi (renamed from plugins/ice/vapi/nice.vapi)0
-rw-r--r--libdino/vapi/openssl.vapi322
-rw-r--r--main/data/contact_details_dialog.ui (renamed from plugins/omemo/data/contact_details_dialog.ui)0
-rw-r--r--main/data/encryption_preferences_entry.ui (renamed from plugins/omemo/data/encryption_preferences_entry.ui)0
-rw-r--r--main/data/gresource.xml3
-rw-r--r--main/data/manage_key_dialog.ui (renamed from plugins/omemo/data/manage_key_dialog.ui)0
-rw-r--r--main/data/style.css5
-rw-r--r--main/meson.build162
-rw-r--r--main/po/ar.po376
-rw-r--r--main/po/ca.po352
-rw-r--r--main/po/cs.po328
-rw-r--r--main/po/da.po266
-rw-r--r--main/po/de.po418
-rw-r--r--main/po/dino.pot257
-rw-r--r--main/po/el.po333
-rw-r--r--main/po/en.po256
-rw-r--r--main/po/eo.po331
-rw-r--r--main/po/es.po418
-rw-r--r--main/po/et.po313
-rw-r--r--main/po/eu.po413
-rw-r--r--main/po/fa.po325
-rw-r--r--main/po/fi.po327
-rw-r--r--main/po/fr.po407
-rw-r--r--main/po/fur.po274
-rw-r--r--main/po/gl.po410
-rw-r--r--main/po/hi.po257
-rw-r--r--main/po/hu.po342
-rw-r--r--main/po/hy.po4
-rw-r--r--main/po/ia.po35
-rw-r--r--main/po/id.po331
-rw-r--r--main/po/ie.po373
-rw-r--r--main/po/is.po44
-rw-r--r--main/po/isv.po260
-rw-r--r--main/po/it.po425
-rw-r--r--main/po/ja.po376
-rw-r--r--main/po/ka.po257
-rw-r--r--main/po/kab.po272
-rw-r--r--main/po/ko.po45
-rw-r--r--main/po/lb.po416
-rw-r--r--main/po/lt.po383
-rw-r--r--main/po/lv.po35
-rw-r--r--main/po/nb.po418
-rw-r--r--main/po/nl.po422
-rw-r--r--main/po/oc.po336
-rw-r--r--main/po/pl.po397
-rw-r--r--main/po/pt.po337
-rw-r--r--main/po/pt_BR.po392
-rw-r--r--main/po/ro.po417
-rw-r--r--main/po/ru.po397
-rw-r--r--main/po/si.po4
-rw-r--r--main/po/sq.po331
-rw-r--r--main/po/sv.po384
-rw-r--r--main/po/ta.po308
-rw-r--r--main/po/th.po266
-rw-r--r--main/po/tr.po386
-rw-r--r--main/po/uk.po333
-rw-r--r--main/po/vi.po327
-rw-r--r--main/po/zh_CN.po366
-rw-r--r--main/po/zh_TW.po352
-rw-r--r--main/src/main.vala13
-rw-r--r--main/src/plugins/omemo/dtls_srtp_verification_draft.vala (renamed from plugins/omemo/src/dtls_srtp_verification_draft.vala)0
-rw-r--r--main/src/plugins/omemo/file_transfer/file_decryptor.vala (renamed from plugins/omemo/src/file_transfer/file_decryptor.vala)4
-rw-r--r--main/src/plugins/omemo/file_transfer/file_encryptor.vala (renamed from plugins/omemo/src/file_transfer/file_encryptor.vala)8
-rw-r--r--main/src/plugins/omemo/jingle/jet_omemo.vala (renamed from plugins/omemo/src/jingle/jet_omemo.vala)11
-rw-r--r--main/src/plugins/omemo/jingle/jingle_helper.vala (renamed from plugins/omemo/src/jingle/jingle_helper.vala)0
-rw-r--r--main/src/plugins/omemo/logic/database.vala (renamed from plugins/omemo/src/logic/database.vala)2
-rw-r--r--main/src/plugins/omemo/logic/decrypt.vala (renamed from plugins/omemo/src/logic/decrypt.vala)6
-rw-r--r--main/src/plugins/omemo/logic/encrypt.vala (renamed from plugins/omemo/src/logic/encrypt.vala)7
-rw-r--r--main/src/plugins/omemo/logic/manager.vala (renamed from plugins/omemo/src/logic/manager.vala)6
-rw-r--r--main/src/plugins/omemo/logic/pre_key_store.vala48
-rw-r--r--main/src/plugins/omemo/logic/session_store.vala69
-rw-r--r--main/src/plugins/omemo/logic/signed_pre_key_store.vala48
-rw-r--r--main/src/plugins/omemo/logic/trust_manager.vala (renamed from plugins/omemo/src/logic/trust_manager.vala)7
-rw-r--r--main/src/plugins/omemo/plugin.vala (renamed from plugins/omemo/src/plugin.vala)12
-rw-r--r--main/src/plugins/omemo/protocol/bundle.vala (renamed from plugins/omemo/src/protocol/bundle.vala)4
-rw-r--r--main/src/plugins/omemo/protocol/message_flag.vala (renamed from plugins/omemo/src/protocol/message_flag.vala)0
-rw-r--r--main/src/plugins/omemo/protocol/stream_module.vala (renamed from plugins/omemo/src/protocol/stream_module.vala)14
-rw-r--r--main/src/plugins/omemo/trust_level.vala (renamed from plugins/omemo/src/trust_level.vala)0
-rw-r--r--main/src/plugins/omemo/ui/bad_messages_populator.vala (renamed from plugins/omemo/src/ui/bad_messages_populator.vala)2
-rw-r--r--main/src/plugins/omemo/ui/call_encryption_entry.vala (renamed from plugins/omemo/src/ui/call_encryption_entry.vala)5
-rw-r--r--main/src/plugins/omemo/ui/contact_details_provider.vala (renamed from plugins/omemo/src/ui/contact_details_provider.vala)1
-rw-r--r--main/src/plugins/omemo/ui/device_notification_populator.vala (renamed from plugins/omemo/src/ui/device_notification_populator.vala)0
-rw-r--r--main/src/plugins/omemo/ui/encryption_list_entry.vala (renamed from plugins/omemo/src/ui/encryption_list_entry.vala)5
-rw-r--r--main/src/plugins/omemo/ui/encryption_preferences_entry.vala (renamed from plugins/omemo/src/ui/encryption_preferences_entry.vala)21
-rw-r--r--main/src/plugins/omemo/ui/manage_key_dialog.vala (renamed from plugins/omemo/src/ui/manage_key_dialog.vala)8
-rw-r--r--main/src/plugins/omemo/ui/own_notifications.vala (renamed from plugins/omemo/src/ui/own_notifications.vala)0
-rw-r--r--main/src/plugins/omemo/ui/util.vala (renamed from plugins/omemo/src/ui/util.vala)0
-rw-r--r--main/src/plugins/openpgp/contact_details_provider.vala (renamed from plugins/openpgp/src/contact_details_provider.vala)0
-rw-r--r--main/src/plugins/openpgp/database.vala (renamed from plugins/openpgp/src/database.vala)3
-rw-r--r--main/src/plugins/openpgp/encryption_list_entry.vala (renamed from plugins/openpgp/src/encryption_list_entry.vala)0
-rw-r--r--main/src/plugins/openpgp/encryption_preferences_entry.vala (renamed from plugins/openpgp/src/encryption_preferences_entry.vala)0
-rw-r--r--main/src/plugins/openpgp/file_transfer/file_decryptor.vala (renamed from plugins/openpgp/src/file_transfer/file_decryptor.vala)0
-rw-r--r--main/src/plugins/openpgp/file_transfer/file_encryptor.vala (renamed from plugins/openpgp/src/file_transfer/file_encryptor.vala)0
-rw-r--r--main/src/plugins/openpgp/gpgme_fix.c (renamed from plugins/openpgp/src/gpgme_fix.c)2
-rw-r--r--main/src/plugins/openpgp/gpgme_fix.h (renamed from plugins/openpgp/src/gpgme_fix.h)0
-rw-r--r--main/src/plugins/openpgp/gpgme_helper.vala (renamed from plugins/openpgp/src/gpgme_helper.vala)0
-rw-r--r--main/src/plugins/openpgp/manager.vala (renamed from plugins/openpgp/src/manager.vala)0
-rw-r--r--main/src/plugins/openpgp/plugin.vala (renamed from plugins/openpgp/src/plugin.vala)5
-rw-r--r--main/src/plugins/openpgp/stream_module.vala (renamed from plugins/openpgp/src/stream_module.vala)0
-rw-r--r--main/src/plugins/openpgp/util.vala (renamed from plugins/openpgp/src/util.vala)0
-rw-r--r--main/src/plugins/rtp/codec_util.vala (renamed from plugins/rtp/src/codec_util.vala)2
-rw-r--r--main/src/plugins/rtp/device.vala (renamed from plugins/rtp/src/device.vala)0
-rw-r--r--main/src/plugins/rtp/gst_fixes.c (renamed from plugins/rtp/src/gst_fixes.c)0
-rw-r--r--main/src/plugins/rtp/module.vala (renamed from plugins/rtp/src/module.vala)0
-rw-r--r--main/src/plugins/rtp/participant.vala (renamed from plugins/rtp/src/participant.vala)0
-rw-r--r--main/src/plugins/rtp/plugin.vala (renamed from plugins/rtp/src/plugin.vala)2
-rw-r--r--main/src/plugins/rtp/stream.vala (renamed from plugins/rtp/src/stream.vala)43
-rw-r--r--main/src/plugins/rtp/video_widget.vala (renamed from plugins/rtp/src/video_widget.vala)15
-rw-r--r--main/src/plugins/rtp/voice_processor.vala (renamed from plugins/rtp/src/voice_processor.vala)0
-rw-r--r--main/src/plugins/rtp/voice_processor_native.cpp (renamed from plugins/rtp/src/voice_processor_native.cpp)0
-rw-r--r--main/src/ui/application.vala11
-rw-r--r--main/src/ui/chat_input/chat_input_controller.vala8
-rw-r--r--main/src/ui/conversation_content_view/content_populator.vala2
-rw-r--r--main/src/ui/conversation_content_view/file_default_widget.vala40
-rw-r--r--main/src/ui/conversation_content_view/file_group_widget.vala120
-rw-r--r--main/src/ui/conversation_content_view/file_image_widget.vala105
-rw-r--r--main/src/ui/conversation_content_view/file_transmission_progress.vala19
-rw-r--r--main/src/ui/conversation_content_view/file_widget.vala71
-rw-r--r--main/src/ui/conversation_selector/conversation_selector.vala10
-rw-r--r--main/src/ui/conversation_selector/conversation_selector_row.vala19
-rw-r--r--main/src/ui/conversation_view.vala21
-rw-r--r--main/src/ui/conversation_view_controller.vala4
-rw-r--r--main/src/ui/main_window.vala29
-rw-r--r--main/src/ui/util/data_forms.vala2
-rw-r--r--main/src/ui/util/helper.vala11
-rw-r--r--main/src/ui/widgets/avatar_picture.vala111
-rw-r--r--main/src/ui/widgets/fixed_ratio_picture.vala2
-rw-r--r--main/src/windows/conversation_details.vala4
-rw-r--r--main/vapi/gpg-error.vapi (renamed from plugins/openpgp/vapi/gpg-error.vapi)0
-rw-r--r--main/vapi/gpgme.vapi (renamed from plugins/openpgp/vapi/gpgme.vapi)2
-rw-r--r--main/vapi/gstreamer-base-1.0.vapi (renamed from plugins/rtp/vapi/gstreamer-base-1.0.vapi)0
-rw-r--r--main/vapi/gstreamer-rtp-1.0.vapi (renamed from plugins/rtp/vapi/gstreamer-rtp-1.0.vapi)0
-rw-r--r--main/vapi/gstreamer-video-1.0.vapi (renamed from plugins/rtp/vapi/gstreamer-video-1.0.vapi)0
-rw-r--r--main/vapi/libgcrypt.vapi (renamed from plugins/rtp/vapi/webrtc-audio-processing.vapi)0
-rw-r--r--main/vapi/libomemo-c.vapi692
-rw-r--r--main/vapi/libqrencode.vapi (renamed from plugins/omemo/vapi/libqrencode.vapi)0
-rw-r--r--main/vapi/webrtc-audio-processing.vapi0
-rw-r--r--meson.build133
-rw-r--r--meson_options.txt23
-rw-r--r--plugins/http-files/meson.build22
-rw-r--r--plugins/http-files/src/file_provider.vala194
-rw-r--r--plugins/http-files/src/file_sender.vala198
-rw-r--r--plugins/http-files/src/plugin.vala32
-rw-r--r--plugins/http-files/src/register_plugin.vala3
-rw-r--r--plugins/ice/meson.build29
-rw-r--r--plugins/ice/src/module.vala55
-rw-r--r--plugins/ice/src/plugin.vala104
-rw-r--r--plugins/ice/src/register_plugin.vala3
-rw-r--r--plugins/ice/src/util.vala18
-rw-r--r--plugins/meson.build5
-rw-r--r--plugins/notification-sound/meson.build3
-rw-r--r--plugins/omemo/data/gresource.xml8
-rw-r--r--plugins/omemo/meson.build92
-rw-r--r--plugins/omemo/po/LINGUAS44
-rw-r--r--plugins/omemo/po/ar.po366
-rw-r--r--plugins/omemo/po/ca.po339
-rw-r--r--plugins/omemo/po/cs.po315
-rw-r--r--plugins/omemo/po/da.po253
-rw-r--r--plugins/omemo/po/de.po398
-rw-r--r--plugins/omemo/po/dino-omemo.pot250
-rw-r--r--plugins/omemo/po/el.po320
-rw-r--r--plugins/omemo/po/en.po241
-rw-r--r--plugins/omemo/po/eo.po318
-rw-r--r--plugins/omemo/po/es.po405
-rw-r--r--plugins/omemo/po/et.po309
-rw-r--r--plugins/omemo/po/eu.po401
-rw-r--r--plugins/omemo/po/fa.po312
-rw-r--r--plugins/omemo/po/fi.po314
-rw-r--r--plugins/omemo/po/fr.po394
-rw-r--r--plugins/omemo/po/fur.po267
-rw-r--r--plugins/omemo/po/gl.po398
-rw-r--r--plugins/omemo/po/hi.po248
-rw-r--r--plugins/omemo/po/hu.po330
-rw-r--r--plugins/omemo/po/id.po318
-rw-r--r--plugins/omemo/po/ie.po360
-rw-r--r--plugins/omemo/po/isv.po254
-rw-r--r--plugins/omemo/po/it.po405
-rw-r--r--plugins/omemo/po/ja.po365
-rw-r--r--plugins/omemo/po/ka.po250
-rw-r--r--plugins/omemo/po/kab.po265
-rw-r--r--plugins/omemo/po/lb.po396
-rw-r--r--plugins/omemo/po/lt.po374
-rw-r--r--plugins/omemo/po/meson.build1
-rw-r--r--plugins/omemo/po/nb.po403
-rw-r--r--plugins/omemo/po/nl.po402
-rw-r--r--plugins/omemo/po/oc.po323
-rw-r--r--plugins/omemo/po/pl.po386
-rw-r--r--plugins/omemo/po/pt.po324
-rw-r--r--plugins/omemo/po/pt_BR.po379
-rw-r--r--plugins/omemo/po/ro.po406
-rw-r--r--plugins/omemo/po/ru.po386
-rw-r--r--plugins/omemo/po/sq.po318
-rw-r--r--plugins/omemo/po/sv.po371
-rw-r--r--plugins/omemo/po/ta.po304
-rw-r--r--plugins/omemo/po/th.po259
-rw-r--r--plugins/omemo/po/tr.po373
-rw-r--r--plugins/omemo/po/uk.po321
-rw-r--r--plugins/omemo/po/vi.po314
-rw-r--r--plugins/omemo/po/zh_CN.po349
-rw-r--r--plugins/omemo/po/zh_TW.po340
-rw-r--r--plugins/omemo/src/logic/pre_key_store.vala45
-rw-r--r--plugins/omemo/src/logic/session_store.vala49
-rw-r--r--plugins/omemo/src/logic/signed_pre_key_store.vala45
-rw-r--r--plugins/omemo/src/register_plugin.vala3
-rw-r--r--plugins/omemo/tests/native/common.vala92
-rw-r--r--plugins/omemo/tests/native/testcase.vala80
-rw-r--r--plugins/openpgp/data/gresource.xml5
-rw-r--r--plugins/openpgp/meson.build47
-rw-r--r--plugins/openpgp/po/LINGUAS48
-rw-r--r--plugins/openpgp/po/ar.po62
-rw-r--r--plugins/openpgp/po/ca.po59
-rw-r--r--plugins/openpgp/po/cs.po60
-rw-r--r--plugins/openpgp/po/da.po60
-rw-r--r--plugins/openpgp/po/de.po59
-rw-r--r--plugins/openpgp/po/dino-openpgp.pot48
-rw-r--r--plugins/openpgp/po/el.po60
-rw-r--r--plugins/openpgp/po/en.po39
-rw-r--r--plugins/openpgp/po/eo.po61
-rw-r--r--plugins/openpgp/po/es.po64
-rw-r--r--plugins/openpgp/po/et.po51
-rw-r--r--plugins/openpgp/po/eu.po61
-rw-r--r--plugins/openpgp/po/fa.po60
-rw-r--r--plugins/openpgp/po/fi.po60
-rw-r--r--plugins/openpgp/po/fr.po61
-rw-r--r--plugins/openpgp/po/fur.po48
-rw-r--r--plugins/openpgp/po/gl.po61
-rw-r--r--plugins/openpgp/po/hi.po46
-rw-r--r--plugins/openpgp/po/hu.po61
-rw-r--r--plugins/openpgp/po/ia.po46
-rw-r--r--plugins/openpgp/po/id.po60
-rw-r--r--plugins/openpgp/po/ie.po60
-rw-r--r--plugins/openpgp/po/is.po60
-rw-r--r--plugins/openpgp/po/isv.po48
-rw-r--r--plugins/openpgp/po/it.po59
-rw-r--r--plugins/openpgp/po/ja.po61
-rw-r--r--plugins/openpgp/po/ka.po48
-rw-r--r--plugins/openpgp/po/kab.po48
-rw-r--r--plugins/openpgp/po/ko.po61
-rw-r--r--plugins/openpgp/po/lb.po59
-rw-r--r--plugins/openpgp/po/lt.po61
-rw-r--r--plugins/openpgp/po/lv.po46
-rw-r--r--plugins/openpgp/po/meson.build1
-rw-r--r--plugins/openpgp/po/nb.po64
-rw-r--r--plugins/openpgp/po/nl.po59
-rw-r--r--plugins/openpgp/po/oc.po60
-rw-r--r--plugins/openpgp/po/pl.po62
-rw-r--r--plugins/openpgp/po/pt.po60
-rw-r--r--plugins/openpgp/po/pt_BR.po60
-rw-r--r--plugins/openpgp/po/ro.po62
-rw-r--r--plugins/openpgp/po/ru.po62
-rw-r--r--plugins/openpgp/po/sq.po60
-rw-r--r--plugins/openpgp/po/sv.po60
-rw-r--r--plugins/openpgp/po/ta.po51
-rw-r--r--plugins/openpgp/po/th.po48
-rw-r--r--plugins/openpgp/po/tr.po60
-rw-r--r--plugins/openpgp/po/uk.po61
-rw-r--r--plugins/openpgp/po/vi.po60
-rw-r--r--plugins/openpgp/po/zh_CN.po65
-rw-r--r--plugins/openpgp/po/zh_TW.po61
-rw-r--r--plugins/openpgp/src/register_plugin.vala3
-rw-r--r--plugins/rtp/meson.build92
-rw-r--r--plugins/rtp/src/register_plugin.vala3
-rw-r--r--qlite/meson.build27
-rw-r--r--qlite/qlite.deps3
-rw-r--r--xmpp-vala/meson.build6
-rw-r--r--xmpp-vala/src/core/direct_tls_xmpp_stream.vala2
-rw-r--r--xmpp-vala/src/core/module_flag.vala10
-rw-r--r--xmpp-vala/src/core/stanza_attribute.vala16
-rw-r--r--xmpp-vala/src/core/stanza_node.vala92
-rw-r--r--xmpp-vala/src/core/stanza_reader.vala11
-rw-r--r--xmpp-vala/src/core/stream_connect.vala10
-rw-r--r--xmpp-vala/src/file_content_type.vala8
-rw-r--r--xmpp-vala/src/module/bookmarks_provider.vala8
-rw-r--r--xmpp-vala/src/module/iq/module.vala31
-rw-r--r--xmpp-vala/src/module/sasl.vala14
-rw-r--r--xmpp-vala/src/module/session.vala10
-rw-r--r--xmpp-vala/src/module/xep/0004_data_forms.vala8
-rw-r--r--xmpp-vala/src/module/xep/0030_service_discovery/module.vala19
-rw-r--r--xmpp-vala/src/module/xep/0045_muc/flag.vala17
-rw-r--r--xmpp-vala/src/module/xep/0045_muc/module.vala95
-rw-r--r--xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala4
-rw-r--r--xmpp-vala/src/module/xep/0048_bookmarks.vala10
-rw-r--r--xmpp-vala/src/module/xep/0049_private_xml_storage.vala4
-rw-r--r--xmpp-vala/src/module/xep/0054_vcard/module.vala2
-rw-r--r--xmpp-vala/src/module/xep/0060_pubsub.vala10
-rw-r--r--xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala6
-rw-r--r--xmpp-vala/src/module/xep/0077_in_band_registration.vala6
-rw-r--r--xmpp-vala/src/module/xep/0082_date_time_profiles.vala4
-rw-r--r--xmpp-vala/src/module/xep/0084_user_avatars.vala11
-rw-r--r--xmpp-vala/src/module/xep/0115_entity_capabilities.vala5
-rw-r--r--xmpp-vala/src/module/xep/0166_jingle/component.vala12
-rw-r--r--xmpp-vala/src/module/xep/0166_jingle/content.vala12
-rw-r--r--xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala7
-rw-r--r--xmpp-vala/src/module/xep/0166_jingle/session.vala7
-rw-r--r--xmpp-vala/src/module/xep/0176_jingle_ice_udp/transport_parameters.vala6
-rw-r--r--xmpp-vala/src/module/xep/0177_jingle_raw_udp.vala4
-rw-r--r--xmpp-vala/src/module/xep/0191_blocking_command.vala8
-rw-r--r--xmpp-vala/src/module/xep/0199_ping.vala2
-rw-r--r--xmpp-vala/src/module/xep/0215_external_service_discovery.vala2
-rw-r--r--xmpp-vala/src/module/xep/0234_jingle_file_transfer.vala2
-rw-r--r--xmpp-vala/src/module/xep/0260_jingle_socks5_bytestreams.vala10
-rw-r--r--xmpp-vala/src/module/xep/0261_jingle_in_band_bytestreams.vala4
-rw-r--r--xmpp-vala/src/module/xep/0272_muji.vala17
-rw-r--r--xmpp-vala/src/module/xep/0280_message_carbons.vala12
-rw-r--r--xmpp-vala/src/module/xep/0313_2_message_archive_management.vala4
-rw-r--r--xmpp-vala/src/module/xep/0313_message_archive_management.vala2
-rw-r--r--xmpp-vala/src/module/xep/0363_http_file_upload.vala30
-rw-r--r--xmpp-vala/src/module/xep/0388_extensible_sasl_profile.vala24
-rw-r--r--xmpp-vala/src/module/xep/0392_consistent_color/hsluv.vala59
-rw-r--r--xmpp-vala/src/module/xep/0402_bookmarks2.vala6
-rw-r--r--xmpp-vala/src/module/xep/0410_muc_self_ping.vala18
-rw-r--r--xmpp-vala/src/module/xep/0425_message_moderation.vala18
-rw-r--r--xmpp-vala/src/module/xep/0447_stateless_file_sharing.vala2
-rw-r--r--xmpp-vala/src/module/xep/0461_replies.vala1
-rw-r--r--xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala37
-rw-r--r--xmpp-vala/src/weak_map.vala2
-rw-r--r--xmpp-vala/tests/color.vala20
-rw-r--r--xmpp-vala/tests/common.vala13
-rw-r--r--xmpp-vala/tests/stanza.vala48
-rw-r--r--xmpp-vala/tests/testcase.vala13
-rw-r--r--xmpp-vala/tests/weak_map.vala (renamed from libdino/tests/weak_map.vala)12
409 files changed, 20800 insertions, 21062 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index eab33a0e..cb46bccc 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -11,7 +11,7 @@ jobs:
sudo apt-get remove libunwind-14-dev
sudo apt-get install -y build-essential gettext libadwaita-1-dev libcanberra-dev libgcrypt20-dev libgee-0.8-dev libgpgme-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgtk-4-dev libnice-dev libnotify-dev libqrencode-dev libomemo-c-dev libsoup-3.0-dev libsqlite3-dev libsrtp2-dev libwebrtc-audio-processing-dev meson valac
- name: "Checkout sources"
- uses: actions/checkout@v4
+ uses: actions/checkout@v7
with:
fetch-depth: 0
- name: "Setup matchers"
@@ -25,7 +25,58 @@ jobs:
run: meson compile -C build
- name: "Test"
run: meson test -C build
+ build-minimal:
+ needs: build
+ name: "Build with minimal features"
+ runs-on: ubuntu-24.04
+ steps:
+ - name: "Setup dependencies"
+ run: |
+ sudo apt-get update
+ sudo apt-get remove libunwind-14-dev
+ sudo apt-get install -y build-essential gettext libadwaita-1-dev libcanberra-dev libgcrypt20-dev libgee-0.8-dev libgtk-4-dev libnice-dev libnotify-dev libsoup-3.0-dev libsqlite3-dev libsrtp2-dev meson valac
+ - name: "Checkout sources"
+ uses: actions/checkout@v7
+ with:
+ fetch-depth: 0
+ - name: "Setup matchers"
+ run: |
+ echo '::add-matcher::${{ github.workspace }}/.github/matchers/gcc-problem-matcher.json'
+ echo '::add-matcher::${{ github.workspace }}/.github/matchers/vala-problem-matcher.json'
+ echo '::add-matcher::${{ github.workspace }}/.github/matchers/meson-problem-matcher.json'
+ - name: "Configure"
+ run: meson setup -Domemo=disabled -Drtp=disabled build
+ - name: "Build"
+ run: meson compile -C build
+ - name: "Test"
+ run: meson test -C build
+ build-openssl:
+ needs: build
+ name: "Build with OpenSSL"
+ runs-on: ubuntu-24.04
+ steps:
+ - name: "Setup dependencies"
+ run: |
+ sudo apt-get update
+ sudo apt-get remove libunwind-14-dev
+ sudo apt-get install -y build-essential gettext libadwaita-1-dev libcanberra-dev libssl-dev libgee-0.8-dev libgpgme-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgtk-4-dev libnice-dev libnotify-dev libqrencode-dev libomemo-c-dev libsoup-3.0-dev libsqlite3-dev libsrtp2-dev libwebrtc-audio-processing-dev meson valac
+ - name: "Checkout sources"
+ uses: actions/checkout@v7
+ with:
+ fetch-depth: 0
+ - name: "Setup matchers"
+ run: |
+ echo '::add-matcher::${{ github.workspace }}/.github/matchers/gcc-problem-matcher.json'
+ echo '::add-matcher::${{ github.workspace }}/.github/matchers/vala-problem-matcher.json'
+ echo '::add-matcher::${{ github.workspace }}/.github/matchers/meson-problem-matcher.json'
+ - name: "Configure"
+ run: meson setup -Dcrypto-backend=openssl build
+ - name: "Build"
+ run: meson compile -C build
+ - name: "Test"
+ run: meson test -C build
build-vala-nightly:
+ needs: build
name: "Build with Vala Nightly"
runs-on: ubuntu-24.04
steps:
@@ -47,7 +98,7 @@ jobs:
popd
rm -rf vala-nightly
- name: "Checkout sources"
- uses: actions/checkout@v4
+ uses: actions/checkout@v7
with:
fetch-depth: 0
- name: "Setup matchers"
@@ -77,7 +128,7 @@ jobs:
runs-on: ${{ matrix.variant.runner }}
steps:
- name: "Checkout sources"
- uses: actions/checkout@v4
+ uses: actions/checkout@v7
with:
fetch-depth: 0
- name: "Build"
diff --git a/libdino/version.py b/build-aux/version.py
index 87490d18..45fdfcd3 100644
--- a/libdino/version.py
+++ b/build-aux/version.py
@@ -54,11 +54,26 @@ def main():
p = argparse.ArgumentParser(description="Compute the Dino version")
p.add_argument("--git-repo", help="Path to checked out git repository")
p.add_argument("--git", help="Path to git executable", default="git")
+ p.add_argument("--depfile", help="Create depfile")
+ p.add_argument("--deptarget", help="Target in depfile")
p.add_argument("version_file", metavar="VERSION_FILE",
help="Use this file's contents as version if the file exists")
args, unknown = p.parse_known_args()
- version = compute_version(args.version_file, args.git_repo, args.git)
- print(version)
+ if args.depfile:
+ with open(args.depfile, mode='w') as f:
+ f.write("version.stamp: ")
+ f.write(args.git_repo + "/VERSION ")
+ f.write(args.git_repo + "/.git/HEAD ")
+ try:
+ with open(args.git_repo + "/.git/HEAD") as f2:
+ head = f2.read().strip()
+ if head.startswith("ref:"):
+ f.write(args.git_repo + "/.git/" + head[4:].strip())
+ except FileNotFoundError:
+ pass
+ else:
+ version = compute_version(args.version_file, args.git_repo, args.git)
+ print(version)
if __name__ == "__main__":
diff --git a/crypto-vala/crypto-vala.deps b/crypto-vala/crypto-vala.deps
deleted file mode 100644
index c029e7af..00000000
--- a/crypto-vala/crypto-vala.deps
+++ /dev/null
@@ -1,2 +0,0 @@
-gio-2.0
-glib-2.0
diff --git a/crypto-vala/meson.build b/crypto-vala/meson.build
deleted file mode 100644
index d659dfa8..00000000
--- a/crypto-vala/meson.build
+++ /dev/null
@@ -1,23 +0,0 @@
-dependencies = [
- dep_gio,
- dep_glib,
- dep_libgcrypt,
- dep_libsrtp2,
-]
-sources = files(
- 'src/cipher.vala',
- 'src/cipher_converter.vala',
- 'src/error.vala',
- 'src/random.vala',
- 'src/srtp.vala',
-)
-c_args = [
- '-DG_LOG_DOMAIN="crypto-vala"',
-]
-vala_args = [
- '--vapidir', meson.current_source_dir() / 'vapi',
-]
-lib_crypto_vala = library('crypto-vala', sources, c_args: c_args, vala_args: vala_args, dependencies: dependencies, version: '0.0', install: true, install_dir: [true, true, true], install_rpath: default_install_rpath)
-dep_crypto_vala = declare_dependency(link_with: lib_crypto_vala, include_directories: include_directories('.'))
-
-install_data('crypto-vala.deps', install_dir: get_option('datadir') / 'vala/vapi', install_tag: 'devel') # TODO: workaround for https://github.com/mesonbuild/meson/issues/9756
diff --git a/crypto-vala/src/error.vala b/crypto-vala/src/error.vala
deleted file mode 100644
index 5007d725..00000000
--- a/crypto-vala/src/error.vala
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace Crypto {
-
-public errordomain Error {
- ILLEGAL_ARGUMENTS,
- GCRYPT,
- AUTHENTICATION_FAILED,
- UNKNOWN
-}
-
-internal void may_throw_gcrypt_error(GCrypt.Error e) throws Error {
- if (((int)e) != 0) {
- throw new Crypto.Error.GCRYPT(e.to_string());
- }
-}
-} \ No newline at end of file
diff --git a/crypto-vala/src/random.vala b/crypto-vala/src/random.vala
deleted file mode 100644
index 3f5d3ba9..00000000
--- a/crypto-vala/src/random.vala
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Crypto {
-public static void randomize(uint8[] buffer) {
- GCrypt.Random.randomize(buffer);
-}
-} \ No newline at end of file
diff --git a/libdino/dino.deps b/libdino/dino.deps
index 372dc9bf..b14c7d54 100644
--- a/libdino/dino.deps
+++ b/libdino/dino.deps
@@ -1,5 +1,6 @@
gee-0.8
+gio-2.0
glib-2.0
gmodule-2.0
-qlite
+sqlite3
xmpp-vala
diff --git a/libdino/meson.build b/libdino/meson.build
index f83878e4..0053d5ab 100644
--- a/libdino/meson.build
+++ b/libdino/meson.build
@@ -1,17 +1,4 @@
-# version_vala
-version_py = files('version.py')[0]
-if meson.version().version_compare('>=1.4.0')
- version_py_path = version_py.full_path()
-else
- version_py_path = meson.current_source_dir() / 'version.py'
-endif
-command = [prog_python, version_py_path, version_file_path, '--git-repo', meson.current_source_dir()]
-if prog_git.found()
- command += ['--git', prog_git]
-endif
-# We add those dummy args to ensure meson sees the dependency
-command += [version_py, version_file]
-version_vala = vcs_tag(command: command, input: 'src/version.vala.in', output: 'version.vala', replace_string: '%VERSION%')
+version_c = configure_file(input: 'src/version.c.in', output: 'version.c', configuration: {'VERSION': meson.project_version()})
# libdino
dependencies = [
@@ -20,7 +7,10 @@ dependencies = [
dep_gio,
dep_glib,
dep_gmodule,
- dep_qlite,
+ dep_libsoup,
+ dep_libsrtp2,
+ dep_nice,
+ dep_sqlite3,
dep_xmpp_vala
]
sources = files(
@@ -28,16 +18,34 @@ sources = files(
'src/dbus/login1.vala',
'src/dbus/notifications.vala',
'src/dbus/upower.vala',
+ 'src/crypto/cipher.vala',
+ 'src/crypto/cipher_converter.vala',
+ 'src/crypto/dtls_srtp.vala',
+ 'src/crypto/error.vala',
+ 'src/crypto/srtp.vala',
'src/entity/account.vala',
'src/entity/call.vala',
'src/entity/conversation.vala',
'src/entity/encryption.vala',
'src/entity/file_transfer.vala',
+ 'src/entity/file_transfer_group.vala',
'src/entity/message.vala',
'src/entity/settings.vala',
+ 'src/file_transfer/file_manager2.vala',
+ 'src/file_transfer/http_transfer.vala',
'src/plugin/interfaces.vala',
'src/plugin/loader.vala',
'src/plugin/registry.vala',
+ 'src/qlite/column.vala',
+ 'src/qlite/database.vala',
+ 'src/qlite/delete_builder.vala',
+ 'src/qlite/insert_builder.vala',
+ 'src/qlite/query_builder.vala',
+ 'src/qlite/row.vala',
+ 'src/qlite/statement_builder.vala',
+ 'src/qlite/table.vala',
+ 'src/qlite/update_builder.vala',
+ 'src/qlite/upsert_builder.vala',
'src/service/avatar_manager.vala',
'src/service/blocking_manager.vala',
'src/service/call_store.vala',
@@ -51,12 +59,12 @@ sources = files(
'src/service/conversation_manager.vala',
'src/service/counterpart_interaction_manager.vala',
'src/service/database.vala',
- 'src/service/entity_capabilities_storage.vala',
'src/service/entity_info.vala',
'src/service/fallback_body.vala',
'src/service/file_manager.vala',
'src/service/file_transfer_storage.vala',
'src/service/history_sync.vala',
+ 'src/service/ice.vala',
'src/service/jingle_file_transfers.vala',
'src/service/message_correction.vala',
'src/service/message_deletion.vala',
@@ -83,18 +91,73 @@ sources = files(
'src/util/util.vala',
'src/util/weak_timeout.vala',
)
-sources += [version_vala]
-c_args = [
+
+sources += [version_c]
+
+if crypto_backend == 'gnu'
+ dependencies += [ dep_libgcrypt, dep_gnutls ]
+ sources += files(
+ 'src/crypto/gnu/cipher.vala',
+ 'src/crypto/gnu/dtls_srtp.vala',
+ 'src/crypto/gnu/utils.vala',
+ )
+elif crypto_backend == 'openssl'
+ dependencies += [ dep_openssl ]
+ sources += files(
+ 'src/crypto/openssl/cipher.vala',
+ 'src/crypto/openssl/dtls_srtp.vala',
+ 'src/crypto/openssl/utils.c',
+ 'src/crypto/openssl/utils.vala',
+ )
+endif
+
+if get_option('omemo').allowed() and dep_libomemo_c.found()
+ dependencies += [dep_libomemo_c]
+ sources += files(
+ 'src/crypto/omemo/context.vala',
+ 'src/crypto/omemo/helper.c',
+ 'src/crypto/omemo/simple_iks.vala',
+ 'src/crypto/omemo/simple_pks.vala',
+ 'src/crypto/omemo/simple_spks.vala',
+ 'src/crypto/omemo/simple_ss.vala',
+ 'src/crypto/omemo/store.vala',
+ 'src/crypto/omemo/util.vala',
+ )
+
+ if crypto_backend == 'gnu'
+ sources += files(
+ 'src/crypto/gnu/omemo.c',
+ )
+ elif crypto_backend == 'openssl'
+ sources += files(
+ 'src/crypto/openssl/omemo.c',
+ )
+ endif
+endif
+
+c_args = vala_c_args + [
'-DDINO_SYSTEM_LIBDIR_NAME="@0@"'.format(get_option('prefix') / get_option('libdir')),
'-DDINO_SYSTEM_PLUGIN_DIR="@0@"'.format(get_option('prefix') / get_option('libdir') / get_option('plugindir')),
'-DG_LOG_DOMAIN="libdino"',
]
-vala_args = []
-if meson.get_compiler('vala').version().version_compare('=0.56.11')
- vala_args += ['-D', 'VALA_0_56_11']
-endif
+vala_args = [
+ '--vapidir', meson.current_source_dir() / 'vapi',
+]
lib_dino = library('libdino', sources, c_args: c_args, vala_args: vala_args, include_directories: include_directories('src'), dependencies: dependencies, name_prefix: '', version: '0.0', install: true, install_dir: [true, true, true], install_rpath: default_install_rpath)
dep_dino = declare_dependency(link_with: lib_dino, include_directories: include_directories('.', 'src'))
install_data('dino.deps', install_dir: get_option('datadir') / 'vala/vapi', install_tag: 'devel') # TODO: workaround for https://github.com/mesonbuild/meson/issues/9756
install_headers('src/dino_i18n.h')
+
+if get_option('omemo').allowed() and dep_libomemo_c.found()
+ test_sources = [
+ 'tests/common.vala',
+ 'tests/testcase.vala',
+
+ 'tests/curve25519.vala',
+ 'tests/hkdf.vala',
+ 'tests/session_builder.vala',
+ ]
+ exe_lib_dino_test = executable('libdino-omemo-test', test_sources, c_args: c_args, vala_args: vala_args, dependencies: dependencies + dep_dino, install: false)
+ test('Tests for libdino OMEMO', exe_lib_dino_test)
+endif \ No newline at end of file
diff --git a/libdino/src/application.vala b/libdino/src/application.vala
index 536ca949..13bcd471 100644
--- a/libdino/src/application.vala
+++ b/libdino/src/application.vala
@@ -2,10 +2,12 @@ using Dino.Entities;
namespace Dino {
-public string get_version() { return VERSION; }
+public extern unowned string get_version();
+
public string get_short_version() {
- if (!VERSION.contains("~")) return VERSION;
- return VERSION.split("~")[0] + "+";
+ string version = get_version();
+ if (!version.contains("~")) return version;
+ return version.split("~")[0] + "+";
}
public interface Application : GLib.Application {
@@ -48,6 +50,7 @@ public interface Application : GLib.Application {
AvatarManager.start(stream_interactor, db);
RosterManager.start(stream_interactor, db);
FileManager.start(stream_interactor, db);
+ FileManager2.start(stream_interactor, db);
CallStore.start(stream_interactor, db);
ContentItemStore.start(stream_interactor, db);
ChatInteraction.start(stream_interactor);
@@ -133,6 +136,36 @@ public interface Application : GLib.Application {
stream_interactor.get_module(PresenceManager.IDENTITY).request_subscription(conversation.account, conversation.counterpart);
});
add_action(accept_subscription_action);
+
+ SimpleAction open_file_action = new SimpleAction("file_open_externally", VariantType.INT32);
+ open_file_action.activate.connect((variant) => {
+ int file_transfer_id = variant.get_int32();
+ FileTransfer file_transfer = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_by_id(file_transfer_id, null);
+
+ try{
+ AppInfo.launch_default_for_uri(file_transfer.get_file().get_uri(), null);
+ } catch (Error err) {
+ warning("Failed to open %s - %s", file_transfer.get_file().get_uri(), err.message);
+ }
+ });
+ add_action(open_file_action);
+
+ SimpleAction download_file_action = new SimpleAction("file_start_download", VariantType.INT32);
+ download_file_action.activate.connect((variant) => {
+ int file_transfer_id = variant.get_int32();
+ FileTransfer file_transfer = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_by_id(file_transfer_id, null);
+
+ stream_interactor.get_module(FileManager.IDENTITY).download_file.begin(file_transfer);
+ });
+ add_action(download_file_action);
+
+ SimpleAction cancel_file_action = new SimpleAction("file_cancel_download", VariantType.INT32);
+ cancel_file_action.activate.connect((variant) => {
+ int file_transfer_id = variant.get_int32();
+ FileTransfer file_transfer = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_by_id(file_transfer_id, null);
+ file_transfer.cancellable.cancel();
+ });
+ add_action(cancel_file_action);
}
protected void add_connection(Account account) {
diff --git a/libdino/src/crypto/cipher.vala b/libdino/src/crypto/cipher.vala
new file mode 100644
index 00000000..89282144
--- /dev/null
+++ b/libdino/src/crypto/cipher.vala
@@ -0,0 +1,19 @@
+namespace Dino.Crypto {
+
+public interface SymmetricCipher {
+ public abstract void set_key(uint8[] key) throws Error;
+ public abstract void set_iv(uint8[] iv) throws Error;
+ public abstract void reset() throws Error;
+}
+
+public interface SymmetricCipherEncryption : SymmetricCipher, Object {
+ public abstract int encrypt(uint8[] output, uint8[] input) throws Error;
+ public abstract uint8[] get_tag(size_t taglen) throws Error;
+}
+
+public interface SymmetricCipherDecryption : SymmetricCipher, Object {
+ public abstract int decrypt(uint8[] output, uint8[] input) throws Error;
+ public abstract void check_tag(uint8[] tag) throws Error;
+}
+
+}
diff --git a/crypto-vala/src/cipher_converter.vala b/libdino/src/crypto/cipher_converter.vala
index 5fb1f548..c2404c6d 100644
--- a/crypto-vala/src/cipher_converter.vala
+++ b/libdino/src/crypto/cipher_converter.vala
@@ -1,18 +1,14 @@
using GLib;
-namespace Crypto {
-public abstract class SymmetricCipherConverter : Converter, Object {
- internal SymmetricCipher cipher;
- internal size_t attached_taglen;
+namespace Dino.Crypto {
- public abstract ConverterResult convert(uint8[] inbuf, uint8[] outbuf, ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws IOError;
+public class SymmetricCipherEncrypter : Converter, Object {
+ private SymmetricCipherEncryption cipher;
+ private size_t attached_taglen;
- public uint8[] get_tag(size_t taglen) throws Error {
- return cipher.get_tag(taglen);
- }
-
- public void check_tag(uint8[] tag) throws Error {
- cipher.check_tag(tag);
+ public SymmetricCipherEncrypter(owned SymmetricCipherEncryption cipher, size_t attached_taglen = 0) {
+ this.cipher = (owned) cipher;
+ this.attached_taglen = attached_taglen;
}
public void reset() {
@@ -22,15 +18,12 @@ public abstract class SymmetricCipherConverter : Converter, Object {
warning(@"$(e.domain) error while resetting cipher: $(e.message)");
}
}
-}
-public class SymmetricCipherEncrypter : SymmetricCipherConverter {
- public SymmetricCipherEncrypter(owned SymmetricCipher cipher, size_t attached_taglen = 0) {
- this.cipher = (owned) cipher;
- this.attached_taglen = attached_taglen;
+ public uint8[] get_tag(size_t taglen) throws Error {
+ return ((SymmetricCipherEncryption)cipher).get_tag(taglen);
}
- public override ConverterResult convert(uint8[] inbuf, uint8[] outbuf, ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws IOError {
+ public ConverterResult convert(uint8[] inbuf, uint8[] outbuf, ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws IOError {
if (inbuf.length > outbuf.length) {
throw new IOError.NO_SPACE("CipherConverter needs at least the size of input as output space");
}
@@ -39,7 +32,7 @@ public class SymmetricCipherEncrypter : SymmetricCipherConverter {
}
try {
if (inbuf.length > 0) {
- cipher.encrypt(outbuf, inbuf);
+ ((SymmetricCipherEncryption)cipher).encrypt(outbuf, inbuf);
}
bytes_read = inbuf.length;
bytes_written = inbuf.length;
@@ -60,13 +53,28 @@ public class SymmetricCipherEncrypter : SymmetricCipherConverter {
}
}
-public class SymmetricCipherDecrypter : SymmetricCipherConverter {
- public SymmetricCipherDecrypter(owned SymmetricCipher cipher, size_t attached_taglen = 0) {
+public class SymmetricCipherDecrypter : Converter, Object {
+ private SymmetricCipherDecryption cipher;
+ private size_t attached_taglen;
+
+ public SymmetricCipherDecrypter(owned SymmetricCipherDecryption cipher, size_t attached_taglen = 0) {
this.cipher = (owned) cipher;
this.attached_taglen = attached_taglen;
}
- public override ConverterResult convert(uint8[] inbuf, uint8[] outbuf, ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws IOError {
+ public void reset() {
+ try {
+ cipher.reset();
+ } catch (Crypto.Error e) {
+ warning(@"$(e.domain) error while resetting cipher: $(e.message)");
+ }
+ }
+
+ public void check_tag(uint8[] tag) throws Error {
+ ((SymmetricCipherDecryption)cipher).check_tag(tag);
+ }
+
+ public ConverterResult convert(uint8[] inbuf, uint8[] outbuf, ConverterFlags flags, out size_t bytes_read, out size_t bytes_written) throws IOError {
if (inbuf.length > outbuf.length + attached_taglen) {
throw new IOError.NO_SPACE("CipherConverter needs at least the size of input as output space");
}
@@ -78,7 +86,7 @@ public class SymmetricCipherDecrypter : SymmetricCipherConverter {
try {
inbuf.length -= (int) attached_taglen;
if (inbuf.length > 0) {
- cipher.decrypt(outbuf, inbuf);
+ ((SymmetricCipherDecryption)cipher).decrypt(outbuf, inbuf);
}
bytes_read = inbuf.length;
bytes_written = inbuf.length;
diff --git a/libdino/src/crypto/dtls_srtp.vala b/libdino/src/crypto/dtls_srtp.vala
new file mode 100644
index 00000000..884f1a43
--- /dev/null
+++ b/libdino/src/crypto/dtls_srtp.vala
@@ -0,0 +1,146 @@
+namespace Dino.Crypto.DtlsSrtp {
+
+public abstract class CredentialsCapsule : Object {
+ public uint8[] own_fingerprint;
+}
+
+public abstract class AbstractHandler {
+
+ public signal void send_data(uint8[] data);
+
+ public bool ready { get {
+ return srtp_session.has_encrypt && srtp_session.has_decrypt;
+ }}
+
+ public Mode mode { get; set; default = Mode.CLIENT; }
+ public uint8[] own_fingerprint { get; private set; }
+ public uint8[] peer_fingerprint { get; set; }
+ public string peer_fp_algo { get; set; }
+
+ protected CredentialsCapsule credentials;
+ protected Cond buffer_cond = Cond();
+ protected Mutex buffer_mutex = Mutex();
+ protected Gee.LinkedList<Bytes> buffer_queue = new Gee.LinkedList<Bytes>();
+
+ protected bool running = false;
+ protected bool stop = false;
+ protected bool restart = false;
+
+ protected Crypto.Srtp.Session srtp_session = new Crypto.Srtp.Session();
+
+ protected AbstractHandler.with_cert(CredentialsCapsule creds) {
+ this.credentials = creds;
+ this.own_fingerprint = creds.own_fingerprint;
+ }
+
+ public uint8[]? process_incoming_data(uint component_id, uint8[] data) throws Crypto.Error {
+ if (data[0] >= 128) {
+ if (!srtp_session.has_decrypt) {
+ debug("Received data before SRTP session is ready, dropping.");
+ return null;
+ }
+ if (component_id == 1) {
+ if (data.length >= 2 && data[1] >= 192 && data[1] < 224) {
+ return srtp_session.decrypt_rtcp(data);
+ }
+ return srtp_session.decrypt_rtp(data);
+ }
+ if (component_id == 2) return srtp_session.decrypt_rtcp(data);
+ }
+ if (component_id == 1 && data.length >= 1 && (data[0] >= 20 && data[0] < 64)) {
+ on_data_rec(data);
+ return null;
+ }
+ debug("Dropping unknown data from component %u", component_id);
+ return null;
+ }
+
+ public uint8[]? process_outgoing_data(uint component_id, uint8[] data) throws Crypto.Error {
+ if (srtp_session.has_encrypt) {
+ if (component_id == 1) {
+ if (data.length >= 2 && data[1] >= 192 && data[1] < 224) {
+ return srtp_session.encrypt_rtcp(data);
+ }
+ return srtp_session.encrypt_rtp(data);
+ }
+ if (component_id == 2) return srtp_session.encrypt_rtcp(data);
+ }
+ return null;
+ }
+
+ public void on_data_rec(owned uint8[] data) {
+ buffer_mutex.lock();
+ buffer_queue.add(new Bytes.take(data));
+ buffer_cond.signal();
+ buffer_mutex.unlock();
+ }
+
+ public void stop_dtls_connection() {
+ buffer_mutex.lock();
+ stop = true;
+ buffer_cond.signal();
+ buffer_mutex.unlock();
+ }
+
+ protected Bytes get_buffer_if_present () {
+ buffer_mutex.lock();
+ if (buffer_queue.size == 0) {
+ buffer_mutex.unlock();
+ return null;
+ }
+ Bytes res = buffer_queue.remove_at(0);
+ buffer_mutex.unlock();
+ return res;
+ }
+
+ public async Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection() {
+ MainContext context = MainContext.current_source().get_context();
+ var thread = new Thread<Xmpp.Xep.Jingle.ContentEncryption>("dtls-connection", () => {
+ // Check we can start working on the thread
+ buffer_mutex.lock();
+ if (stop) {
+ restart = true;
+ buffer_mutex.unlock();
+ return null;
+ }
+ if (running || ready) {
+ buffer_mutex.unlock();
+ return null;
+ }
+ running = true;
+ restart = false;
+ buffer_mutex.unlock();
+
+ // Actual work
+ var res = setup_dtls_connection_thread();
+
+ // Callback
+ Source source = new IdleSource();
+ source.set_callback(setup_dtls_connection.callback);
+ source.attach(context);
+ return res;
+ });
+ yield;
+ return thread.join();
+ }
+
+ protected abstract Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection_thread();
+}
+
+private string format_fingerprint(uint8[] fingerprint) {
+ var sb = new StringBuilder();
+ for (int i = 0; i < fingerprint.length; i++) {
+ sb.append("%02X".printf(fingerprint[i]));
+ if (i < fingerprint.length - 1) {
+ sb.append(":");
+ }
+ }
+ return sb.str;
+}
+
+
+public enum Mode {
+ CLIENT, SERVER
+}
+
+}
diff --git a/libdino/src/crypto/error.vala b/libdino/src/crypto/error.vala
new file mode 100644
index 00000000..2458ae4a
--- /dev/null
+++ b/libdino/src/crypto/error.vala
@@ -0,0 +1,11 @@
+namespace Dino.Crypto {
+
+public errordomain Error {
+ ILLEGAL_ARGUMENTS,
+ GCRYPT,
+ OPENSSL,
+ AUTHENTICATION_FAILED,
+ UNKNOWN
+}
+
+}
diff --git a/crypto-vala/src/cipher.vala b/libdino/src/crypto/gnu/cipher.vala
index 306dafa8..41f15837 100644
--- a/crypto-vala/src/cipher.vala
+++ b/libdino/src/crypto/gnu/cipher.vala
@@ -1,13 +1,7 @@
-namespace Crypto {
-public class SymmetricCipher {
- private GCrypt.Cipher.Cipher cipher;
+namespace Dino.Crypto {
- public static bool supports(string algo_name) {
- GCrypt.Cipher.Algorithm algo;
- GCrypt.Cipher.Mode mode;
- GCrypt.Cipher.Flag flags;
- return parse(algo_name, out algo, out mode, out flags);
- }
+internal class SymmetricCipherGcrypt : SymmetricCipher, SymmetricCipherEncryption, SymmetricCipherDecryption, Object {
+ private GCrypt.Cipher.Cipher cipher;
private static unowned string mode_to_string(GCrypt.Cipher.Mode mode) {
switch (mode) {
@@ -96,21 +90,17 @@ public class SymmetricCipher {
}
}
- public SymmetricCipher(string algo_name) throws Error {
+ public SymmetricCipherGcrypt(string algo_name) throws Error {
GCrypt.Cipher.Algorithm algo;
GCrypt.Cipher.Mode mode;
GCrypt.Cipher.Flag flags;
if (parse(algo_name, out algo, out mode, out flags)) {
- this.gcrypt(algo, mode, flags);
+ may_throw_gcrypt_error(GCrypt.Cipher.Cipher.open(out this.cipher, algo, mode, flags));
} else {
throw new Error.ILLEGAL_ARGUMENTS(@"The algorithm $algo_name is not supported");
}
}
- private SymmetricCipher.gcrypt(GCrypt.Cipher.Algorithm algo, GCrypt.Cipher.Mode mode, GCrypt.Cipher.Flag flags) throws Error {
- may_throw_gcrypt_error(GCrypt.Cipher.Cipher.open(out this.cipher, algo, mode, flags));
- }
-
public void set_key(uint8[] key) throws Error {
may_throw_gcrypt_error(cipher.set_key(key));
}
@@ -119,10 +109,6 @@ public class SymmetricCipher {
may_throw_gcrypt_error(cipher.set_iv(iv));
}
- public void set_counter_vector(uint8[] ctr) throws Error {
- may_throw_gcrypt_error(cipher.set_counter_vector(ctr));
- }
-
public void reset() throws Error {
may_throw_gcrypt_error(cipher.reset());
}
@@ -137,16 +123,15 @@ public class SymmetricCipher {
may_throw_gcrypt_error(cipher.check_tag(tag));
}
- public void encrypt(uint8[] output, uint8[] input) throws Error {
+ public int encrypt(uint8[] output, uint8[] input) throws Error {
may_throw_gcrypt_error(cipher.encrypt(output, input));
+ return input.length;
}
- public void decrypt(uint8[] output, uint8[] input) throws Error {
+ public int decrypt(uint8[] output, uint8[] input) throws Error {
may_throw_gcrypt_error(cipher.decrypt(output, input));
- }
-
- public void sync() throws Error {
- may_throw_gcrypt_error(cipher.sync());
+ return input.length;
}
}
+
}
diff --git a/plugins/ice/src/dtls_srtp.vala b/libdino/src/crypto/gnu/dtls_srtp.vala
index c9813b7e..f6f0a24e 100644
--- a/plugins/ice/src/dtls_srtp.vala
+++ b/libdino/src/crypto/gnu/dtls_srtp.vala
@@ -1,156 +1,68 @@
using GnuTLS;
-namespace Dino.Plugins.Ice.DtlsSrtp {
+namespace Dino.Crypto.DtlsSrtp {
-public class CredentialsCapsule {
- public uint8[] own_fingerprint;
- public X509.Certificate[] own_cert;
- public X509.PrivateKey private_key;
+public class CredentialsCapsuleGnuTLS : CredentialsCapsule {
+ internal X509.Certificate[] own_cert;
+ internal X509.PrivateKey private_key;
}
-public class Handler {
-
- public signal void send_data(uint8[] data);
-
- public bool ready { get {
- return srtp_session.has_encrypt && srtp_session.has_decrypt;
- }}
-
- public Mode mode { get; set; default = Mode.CLIENT; }
- public uint8[] own_fingerprint { get; private set; }
- public uint8[] peer_fingerprint { get; set; }
- public string peer_fp_algo { get; set; }
-
- private CredentialsCapsule credentials;
- private Cond buffer_cond = Cond();
- private Mutex buffer_mutex = Mutex();
- private Gee.LinkedList<Bytes> buffer_queue = new Gee.LinkedList<Bytes>();
-
- private bool running = false;
- private bool stop = false;
- private bool restart = false;
-
- private Crypto.Srtp.Session srtp_session = new Crypto.Srtp.Session();
-
- public Handler.with_cert(CredentialsCapsule creds) {
- this.credentials = creds;
- this.own_fingerprint = creds.own_fingerprint;
- }
-
- public uint8[]? process_incoming_data(uint component_id, uint8[] data) throws Crypto.Error {
- if (data[0] >= 128) {
- if (!srtp_session.has_decrypt) {
- debug("Received data before SRTP session is ready, dropping.");
- return null;
- }
- if (component_id == 1) {
- if (data.length >= 2 && data[1] >= 192 && data[1] < 224) {
- return srtp_session.decrypt_rtcp(data);
- }
- return srtp_session.decrypt_rtp(data);
- }
- if (component_id == 2) return srtp_session.decrypt_rtcp(data);
- }
- if (component_id == 1 && data.length >= 1 && (data[0] >= 20 && data[0] < 64)) {
- on_data_rec(data);
- return null;
- }
- debug("Dropping unknown data from component %u", component_id);
- return null;
- }
-
- public uint8[]? process_outgoing_data(uint component_id, uint8[] data) throws Crypto.Error {
- if (srtp_session.has_encrypt) {
- if (component_id == 1) {
- if (data.length >= 2 && data[1] >= 192 && data[1] < 224) {
- return srtp_session.encrypt_rtcp(data);
- }
- return srtp_session.encrypt_rtp(data);
- }
- if (component_id == 2) return srtp_session.encrypt_rtcp(data);
- }
- return null;
- }
+private uint8[] get_fingerprint(X509.Certificate certificate, DigestAlgorithm digest_algo) {
+ uint8[] buf = new uint8[512];
+ size_t buf_out_size = 512;
+ certificate.get_fingerprint(digest_algo, buf, ref buf_out_size);
- public void on_data_rec(owned uint8[] data) {
- buffer_mutex.lock();
- buffer_queue.add(new Bytes.take(data));
- buffer_cond.signal();
- buffer_mutex.unlock();
+ uint8[] ret = new uint8[buf_out_size];
+ for (int i = 0; i < buf_out_size; i++) {
+ ret[i] = buf[i];
}
+ return ret;
+}
- internal static CredentialsCapsule generate_credentials() throws GLib.Error {
- int err = 0;
+public CredentialsCapsule generate_credentials () throws GLib.Error {
+ int err = 0;
- X509.PrivateKey private_key = X509.PrivateKey.create();
- err = private_key.generate(PKAlgorithm.ECDSA, 256);
- throw_if_error(err);
+ X509.PrivateKey private_key = X509.PrivateKey.create ();
+ err = private_key.generate (PKAlgorithm.ECDSA, 256);
+ throw_if_error (err);
- var start_time = new DateTime.now_local().add_days(-1);
- var end_time = start_time.add_days(2);
+ var start_time = new DateTime.now_local().add_days(-1);
+ var end_time = start_time.add_days (2);
- X509.Certificate cert = X509.Certificate.create();
- cert.set_key(private_key);
- cert.set_version(1);
- cert.set_activation_time ((time_t) start_time.to_unix ());
- cert.set_expiration_time ((time_t) end_time.to_unix ());
+ X509.Certificate cert = X509.Certificate.create ();
+ cert.set_key (private_key);
+ cert.set_version (1);
+ cert.set_activation_time ((time_t) start_time.to_unix ());
+ cert.set_expiration_time ((time_t) end_time.to_unix ());
- uint32 serial = 1;
- cert.set_serial(&serial, sizeof(uint32));
+ uint32 serial = 1;
+ cert.set_serial (&serial, sizeof(uint32));
- cert.sign(cert, private_key);
+ cert.sign (cert, private_key);
- uint8[] own_fingerprint = get_fingerprint(cert, DigestAlgorithm.SHA256);
- X509.Certificate[] own_cert = new X509.Certificate[] { (owned)cert };
+ uint8[] own_fingerprint = get_fingerprint (cert, DigestAlgorithm.SHA256);
+ X509.Certificate[] own_cert = new X509.Certificate[] { (owned)cert };
- var creds = new CredentialsCapsule();
- creds.own_fingerprint = own_fingerprint;
- creds.own_cert = (owned) own_cert;
- creds.private_key = (owned) private_key;
+ var creds = new CredentialsCapsuleGnuTLS();
+ creds.own_fingerprint = own_fingerprint;
+ creds.own_cert = (owned) own_cert;
+ creds.private_key = (owned) private_key;
- return creds;
- }
+ return creds;
+}
- public void stop_dtls_connection() {
- buffer_mutex.lock();
- stop = true;
- buffer_cond.signal();
- buffer_mutex.unlock();
- }
+public class Handler : AbstractHandler {
- public async Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection() {
- MainContext context = MainContext.current_source().get_context();
- var thread = new Thread<Xmpp.Xep.Jingle.ContentEncryption>("dtls-connection", () => {
- var res = setup_dtls_connection_thread();
- Source source = new IdleSource();
- source.set_callback(setup_dtls_connection.callback);
- source.attach(context);
- return res;
- });
- yield;
- return thread.join();
+ public Handler.with_cert(CredentialsCapsule creds) {
+ base.with_cert(creds);
}
- private Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection_thread() {
- buffer_mutex.lock();
- if (stop) {
- restart = true;
- buffer_mutex.unlock();
- return null;
- }
- if (running || ready) {
- buffer_mutex.unlock();
- return null;
- }
- running = true;
- restart = false;
- buffer_mutex.unlock();
-
+ protected override Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection_thread() {
InitFlags server_or_client = mode == Mode.SERVER ? InitFlags.SERVER : InitFlags.CLIENT;
- debug("Setting up DTLS connection. We're %s", mode.to_string());
+ debug("Setting up DTLS connection using GnuTLS. We're %s", mode.to_string());
CertificateCredentials cert_cred = CertificateCredentials.create();
- int err = cert_cred.set_x509_key(credentials.own_cert, credentials.private_key);
+ int err = cert_cred.set_x509_key(((CredentialsCapsuleGnuTLS)credentials).own_cert, ((CredentialsCapsuleGnuTLS)credentials).private_key);
throw_if_error(err);
Session? session = Session.create(server_or_client | InitFlags.DATAGRAM);
@@ -330,32 +242,4 @@ public class Handler {
}
}
-private uint8[] get_fingerprint(X509.Certificate certificate, DigestAlgorithm digest_algo) {
- uint8[] buf = new uint8[512];
- size_t buf_out_size = 512;
- certificate.get_fingerprint(digest_algo, buf, ref buf_out_size);
-
- uint8[] ret = new uint8[buf_out_size];
- for (int i = 0; i < buf_out_size; i++) {
- ret[i] = buf[i];
- }
- return ret;
-}
-
-private string format_fingerprint(uint8[] fingerprint) {
- var sb = new StringBuilder();
- for (int i = 0; i < fingerprint.length; i++) {
- sb.append("%02X".printf(fingerprint[i]));
- if (i < fingerprint.length - 1) {
- sb.append(":");
- }
- }
- return sb.str;
-}
-
-
-public enum Mode {
- CLIENT, SERVER
-}
-
-}
+} \ No newline at end of file
diff --git a/plugins/omemo/src/native/helper.c b/libdino/src/crypto/gnu/omemo.c
index 2d808cde..765e3d79 100644
--- a/plugins/omemo/src/native/helper.c
+++ b/libdino/src/crypto/gnu/omemo.c
@@ -1,74 +1,6 @@
-#include "helper.h"
-
+#include "../omemo/helper.h"
#include <gcrypt.h>
-signal_type_base* signal_type_ref_vapi(void* instance) {
- g_return_val_if_fail(instance != NULL, NULL);
- signal_type_ref(instance);
- return instance;
-}
-
-signal_type_base* signal_type_unref_vapi(void* instance) {
- g_return_val_if_fail(instance != NULL, NULL);
- signal_type_unref(instance);
- return NULL;
-}
-
-signal_protocol_address* signal_protocol_address_new(const gchar* name, int32_t device_id) {
- g_return_val_if_fail(name != NULL, NULL);
- signal_protocol_address* address = malloc(sizeof(signal_protocol_address));
- address->device_id = -1;
- address->name = NULL;
- signal_protocol_address_set_name(address, name);
- signal_protocol_address_set_device_id(address, device_id);
- return address;
-}
-
-void signal_protocol_address_free(signal_protocol_address* ptr) {
- g_return_if_fail(ptr != NULL);
- if (ptr->name) {
- g_free((void*)ptr->name);
- }
- return free(ptr);
-}
-
-void signal_protocol_address_set_name(signal_protocol_address* self, const gchar* name) {
- g_return_if_fail(self != NULL);
- g_return_if_fail(name != NULL);
- gchar* n = g_malloc(strlen(name)+1);
- memcpy(n, name, strlen(name));
- n[strlen(name)] = 0;
- if (self->name) {
- g_free((void*)self->name);
- }
- self->name = n;
- self->name_len = strlen(n);
-}
-
-gchar* signal_protocol_address_get_name(signal_protocol_address* self) {
- g_return_val_if_fail(self != NULL, NULL);
- g_return_val_if_fail(self->name != NULL, 0);
- gchar* res = g_malloc(sizeof(char) * (self->name_len + 1));
- memcpy(res, self->name, self->name_len);
- res[self->name_len] = 0;
- return res;
-}
-
-int32_t signal_protocol_address_get_device_id(signal_protocol_address* self) {
- g_return_val_if_fail(self != NULL, -1);
- return self->device_id;
-}
-
-void signal_protocol_address_set_device_id(signal_protocol_address* self, int32_t device_id) {
- g_return_if_fail(self != NULL);
- self->device_id = device_id;
-}
-
-int signal_vala_randomize(uint8_t *data, size_t len) {
- gcry_randomize(data, len, GCRY_STRONG_RANDOM);
- return SG_SUCCESS;
-}
-
int signal_vala_random_generator(uint8_t *data, size_t len, void *user_data) {
gcry_randomize(data, len, GCRY_STRONG_RANDOM);
return SG_SUCCESS;
@@ -124,7 +56,7 @@ void signal_vala_hmac_sha256_cleanup(void *hmac_context, void *user_data) {
}
}
-const int aes_cipher(int cipher, size_t key_len, int* algo, int* mode) {
+static int aes_cipher(int cipher, size_t key_len, int* algo, int* mode) {
switch (key_len) {
case 16:
*algo = GCRY_CIPHER_AES128;
@@ -306,8 +238,7 @@ no_error:
return SG_SUCCESS;
}
-void setup_signal_vala_crypto_provider(signal_context *context)
-{
+void setup_signal_vala_crypto_provider(signal_context *context) {
gcry_check_version(NULL);
signal_crypto_provider provider = {
@@ -316,10 +247,6 @@ void setup_signal_vala_crypto_provider(signal_context *context)
.hmac_sha256_update_func = signal_vala_hmac_sha256_update,
.hmac_sha256_final_func = signal_vala_hmac_sha256_final,
.hmac_sha256_cleanup_func = signal_vala_hmac_sha256_cleanup,
- .sha512_digest_init_func = NULL,
- .sha512_digest_update_func = NULL,
- .sha512_digest_final_func = NULL,
- .sha512_digest_cleanup_func = NULL,
.encrypt_func = signal_vala_encrypt,
.decrypt_func = signal_vala_decrypt,
.user_data = 0
@@ -327,3 +254,4 @@ void setup_signal_vala_crypto_provider(signal_context *context)
signal_context_set_crypto_provider(context, &provider);
}
+
diff --git a/libdino/src/crypto/gnu/utils.vala b/libdino/src/crypto/gnu/utils.vala
new file mode 100644
index 00000000..8a25ab27
--- /dev/null
+++ b/libdino/src/crypto/gnu/utils.vala
@@ -0,0 +1,21 @@
+namespace Dino.Crypto {
+
+public static void randomize(uint8[] buffer) {
+ GCrypt.Random.randomize(buffer);
+}
+
+internal void may_throw_gcrypt_error(GCrypt.Error e) throws Error {
+ if (((int)e) != 0) {
+ throw new Crypto.Error.GCRYPT(e.to_string());
+ }
+}
+
+public SymmetricCipherEncryption create_symmetric_cipher_encryption(string algo_name) throws Error {
+ return new SymmetricCipherGcrypt(algo_name);
+}
+
+public SymmetricCipherDecryption create_symmetric_cipher_decryption(string algo_name) throws Error {
+ return new SymmetricCipherGcrypt(algo_name);
+}
+
+}
diff --git a/plugins/omemo/vapi/libgcrypt.vapi b/libdino/src/crypto/omemo/context.h
index e69de29b..e69de29b 100644
--- a/plugins/omemo/vapi/libgcrypt.vapi
+++ b/libdino/src/crypto/omemo/context.h
diff --git a/plugins/omemo/src/native/context.vala b/libdino/src/crypto/omemo/context.vala
index b1f5945b..3238dc3d 100644
--- a/plugins/omemo/src/native/context.vala
+++ b/libdino/src/crypto/omemo/context.vala
@@ -1,7 +1,9 @@
-namespace Omemo {
+using Omemo;
+
+namespace Dino.Crypto.Omemo {
public class Context {
- internal NativeContext native_context;
+ public NativeContext native_context;
private RecMutex mutex = RecMutex();
static void locking_function_lock(void* user_data) {
@@ -29,10 +31,6 @@ public class Context {
return new Store(this);
}
- public void randomize(uint8[] data) throws Error {
- throw_by_code(native_random(data));
- }
-
public SignedPreKeyRecord generate_signed_pre_key(IdentityKeyPair identity_key_pair, int32 id, uint64 timestamp = 0) throws Error {
if (timestamp == 0) timestamp = new DateTime.now_utc().to_unix();
SignedPreKeyRecord res;
diff --git a/libdino/src/crypto/omemo/helper.c b/libdino/src/crypto/omemo/helper.c
new file mode 100644
index 00000000..1fafd2b0
--- /dev/null
+++ b/libdino/src/crypto/omemo/helper.c
@@ -0,0 +1,64 @@
+#include "src/crypto/omemo/helper.h"
+
+signal_type_base* signal_type_ref_vapi(void* instance) {
+ g_return_val_if_fail(instance != NULL, NULL);
+ signal_type_ref(instance);
+ return instance;
+}
+
+signal_type_base* signal_type_unref_vapi(void* instance) {
+ g_return_val_if_fail(instance != NULL, NULL);
+ signal_type_unref(instance);
+ return NULL;
+}
+
+signal_protocol_address* signal_protocol_address_new(const gchar* name, int32_t device_id) {
+ g_return_val_if_fail(name != NULL, NULL);
+ signal_protocol_address* address = malloc(sizeof(signal_protocol_address));
+ address->device_id = -1;
+ address->name = NULL;
+ signal_protocol_address_set_name(address, name);
+ signal_protocol_address_set_device_id(address, device_id);
+ return address;
+}
+
+void signal_protocol_address_free(signal_protocol_address* ptr) {
+ g_return_if_fail(ptr != NULL);
+ if (ptr->name) {
+ g_free((void*)ptr->name);
+ }
+ return free(ptr);
+}
+
+void signal_protocol_address_set_name(signal_protocol_address* self, const gchar* name) {
+ g_return_if_fail(self != NULL);
+ g_return_if_fail(name != NULL);
+ gchar* n = g_malloc(strlen(name)+1);
+ memcpy(n, name, strlen(name));
+ n[strlen(name)] = 0;
+ if (self->name) {
+ g_free((void*)self->name);
+ }
+ self->name = n;
+ self->name_len = strlen(n);
+}
+
+gchar* signal_protocol_address_get_name(signal_protocol_address* self) {
+ g_return_val_if_fail(self != NULL, NULL);
+ g_return_val_if_fail(self->name != NULL, 0);
+ gchar* res = g_malloc(sizeof(char) * (self->name_len + 1));
+ memcpy(res, self->name, self->name_len);
+ res[self->name_len] = 0;
+ return res;
+}
+
+int32_t signal_protocol_address_get_device_id(signal_protocol_address* self) {
+ g_return_val_if_fail(self != NULL, -1);
+ return self->device_id;
+}
+
+void signal_protocol_address_set_device_id(signal_protocol_address* self, int32_t device_id) {
+ g_return_if_fail(self != NULL);
+ self->device_id = device_id;
+}
+
diff --git a/plugins/omemo/src/native/helper.h b/libdino/src/crypto/omemo/helper.h
index 3cc21d8a..cbbe220f 100644
--- a/plugins/omemo/src/native/helper.h
+++ b/libdino/src/crypto/omemo/helper.h
@@ -17,7 +17,6 @@ gchar* signal_protocol_address_get_name(signal_protocol_address* self);
void signal_protocol_address_set_device_id(signal_protocol_address* self, int32_t device_id);
int32_t signal_protocol_address_get_device_id(signal_protocol_address* self);
-int signal_vala_randomize(uint8_t *data, size_t len);
int signal_vala_random_generator(uint8_t *data, size_t len, void *user_data);
int signal_vala_hmac_sha256_init(void **hmac_context, const uint8_t *key, size_t key_len, void *user_data);
int signal_vala_hmac_sha256_update(void *hmac_context, const uint8_t *data, size_t data_len, void *user_data);
diff --git a/plugins/omemo/src/native/simple_iks.vala b/libdino/src/crypto/omemo/simple_iks.vala
index 6f752d33..1c9c8a1d 100644
--- a/plugins/omemo/src/native/simple_iks.vala
+++ b/libdino/src/crypto/omemo/simple_iks.vala
@@ -1,12 +1,16 @@
using Gee;
+using Omemo;
-namespace Omemo {
+namespace Dino.Crypto.Omemo {
public class SimpleIdentityKeyStore : IdentityKeyStore {
+ public signal void trusted_identity_added(TrustedIdentity id);
+ public signal void trusted_identity_updated(TrustedIdentity id);
+
public override Bytes identity_key_private { get; set; }
public override Bytes identity_key_public { get; set; }
public override uint32 local_registration_id { get; set; }
- private Map<string, Map<int, IdentityKeyStore.TrustedIdentity>> trusted_identities = new HashMap<string, Map<int, IdentityKeyStore.TrustedIdentity>>();
+ private Map<string, Map<int, TrustedIdentity>> trusted_identities = new HashMap<string, Map<int, TrustedIdentity>>();
public override void save_identity(Address address, uint8[] key) throws Error {
string name = address.name;
@@ -19,7 +23,7 @@ public class SimpleIdentityKeyStore : IdentityKeyStore {
trusted_identity_added(trusted_identities[name][address.device_id]);
}
} else {
- trusted_identities[name] = new HashMap<int, IdentityKeyStore.TrustedIdentity>();
+ trusted_identities[name] = new HashMap<int, TrustedIdentity>();
trusted_identities[name][address.device_id] = new TrustedIdentity.by_address(address, key);
trusted_identity_added(trusted_identities[name][address.device_id]);
}
@@ -35,6 +39,22 @@ public class SimpleIdentityKeyStore : IdentityKeyStore {
}
return true;
}
+
+ public class TrustedIdentity {
+ public uint8[] key { get; set; }
+ public string name { get; private set; }
+ public int device_id { get; private set; }
+
+ public TrustedIdentity(string name, int device_id, uint8[] key) {
+ this.key = key;
+ this.name = name;
+ this.device_id = device_id;
+ }
+
+ public TrustedIdentity.by_address(Address address, uint8[] key) {
+ this(address.name, address.device_id, key);
+ }
+ }
}
}
diff --git a/plugins/omemo/src/native/simple_pks.vala b/libdino/src/crypto/omemo/simple_pks.vala
index 900985ea..f22def89 100644
--- a/plugins/omemo/src/native/simple_pks.vala
+++ b/libdino/src/crypto/omemo/simple_pks.vala
@@ -1,9 +1,13 @@
using Gee;
+using Omemo;
-namespace Omemo {
+namespace Dino.Crypto.Omemo {
public class SimplePreKeyStore : PreKeyStore {
- private Map<uint32, PreKeyStore.Key> pre_key_map = new HashMap<uint32, PreKeyStore.Key>();
+ public signal void pre_key_stored(Key key);
+ public signal void pre_key_deleted(Key key);
+
+ private Map<uint32, Key> pre_key_map = new HashMap<uint32, Key>();
public override uint8[]? load_pre_key(uint32 pre_key_id) throws Error {
if (contains_pre_key(pre_key_id)) {
@@ -13,7 +17,7 @@ public class SimplePreKeyStore : PreKeyStore {
}
public override void store_pre_key(uint32 pre_key_id, uint8[] record) throws Error {
- PreKeyStore.Key key = new Key(pre_key_id, record);
+ Key key = new Key(pre_key_id, record);
pre_key_map[pre_key_id] = key;
pre_key_stored(key);
}
@@ -23,11 +27,21 @@ public class SimplePreKeyStore : PreKeyStore {
}
public override void delete_pre_key(uint32 pre_key_id) throws Error {
- PreKeyStore.Key key;
+ Key key;
if (pre_key_map.unset(pre_key_id, out key)) {
pre_key_deleted(key);
}
}
+
+ public class Key {
+ public uint32 key_id { get; private set; }
+ public uint8[] record { get; private set; }
+
+ public Key(uint32 key_id, uint8[] record) {
+ this.key_id = key_id;
+ this.record = record;
+ }
+ }
}
} \ No newline at end of file
diff --git a/plugins/omemo/src/native/simple_spks.vala b/libdino/src/crypto/omemo/simple_spks.vala
index 772a7322..b4a1b610 100644
--- a/plugins/omemo/src/native/simple_spks.vala
+++ b/libdino/src/crypto/omemo/simple_spks.vala
@@ -1,9 +1,13 @@
using Gee;
+using Omemo;
-namespace Omemo {
+namespace Dino.Crypto.Omemo {
public class SimpleSignedPreKeyStore : SignedPreKeyStore {
- private Map<uint32, SignedPreKeyStore.Key> pre_key_map = new HashMap<uint32, SignedPreKeyStore.Key>();
+ public signal void signed_pre_key_stored(Key key);
+ public signal void signed_pre_key_deleted(Key key);
+
+ private Map<uint32, Key> pre_key_map = new HashMap<uint32, Key>();
public override uint8[]? load_signed_pre_key(uint32 pre_key_id) throws Error {
if (contains_signed_pre_key(pre_key_id)) {
@@ -13,7 +17,7 @@ public class SimpleSignedPreKeyStore : SignedPreKeyStore {
}
public override void store_signed_pre_key(uint32 pre_key_id, uint8[] record) throws Error {
- SignedPreKeyStore.Key key = new Key(pre_key_id, record);
+ Key key = new Key(pre_key_id, record);
pre_key_map[pre_key_id] = key;
signed_pre_key_stored(key);
}
@@ -23,11 +27,21 @@ public class SimpleSignedPreKeyStore : SignedPreKeyStore {
}
public override void delete_signed_pre_key(uint32 pre_key_id) throws Error {
- SignedPreKeyStore.Key key;
+ Key key;
if (pre_key_map.unset(pre_key_id, out key)) {
signed_pre_key_deleted(key);
}
}
+
+ public class Key {
+ public uint32 key_id { get; private set; }
+ public uint8[] record { get; private set; }
+
+ public Key(uint32 key_id, uint8[] record) {
+ this.key_id = key_id;
+ this.record = record;
+ }
+ }
}
} \ No newline at end of file
diff --git a/plugins/omemo/src/native/simple_ss.vala b/libdino/src/crypto/omemo/simple_ss.vala
index 26bc8e56..8c095c6d 100644
--- a/plugins/omemo/src/native/simple_ss.vala
+++ b/libdino/src/crypto/omemo/simple_ss.vala
@@ -1,14 +1,17 @@
using Gee;
+using Omemo;
-namespace Omemo {
+namespace Dino.Crypto.Omemo {
public class SimpleSessionStore : SessionStore {
+ public signal void session_stored(Session session);
+ public signal void session_removed(Session session);
- private Map<string, ArrayList<SessionStore.Session>> session_map = new HashMap<string, ArrayList<SessionStore.Session>>();
+ private Map<string, ArrayList<Session>> session_map = new HashMap<string, ArrayList<Session>>();
public override uint8[]? load_session(Address address) throws Error {
if (session_map.has_key(address.name)) {
- foreach (SessionStore.Session session in session_map[address.name]) {
+ foreach (Session session in session_map[address.name]) {
if (session.device_id == address.device_id) return session.record;
}
}
@@ -18,7 +21,7 @@ public class SimpleSessionStore : SessionStore {
public override IntList get_sub_device_sessions(string name) throws Error {
IntList res = new IntList();
if (session_map.has_key(name)) {
- foreach (SessionStore.Session session in session_map[name]) {
+ foreach (Session session in session_map[name]) {
res.add(session.device_id);
}
}
@@ -30,16 +33,16 @@ public class SimpleSessionStore : SessionStore {
delete_session(address);
}
if (!session_map.has_key(address.name)) {
- session_map[address.name] = new ArrayList<SessionStore.Session>();
+ session_map[address.name] = new ArrayList<Session>();
}
- SessionStore.Session session = new Session() { name = address.name, device_id = address.device_id, record = record };
+ Session session = new Session() { name = address.name, device_id = address.device_id, record = record };
session_map[address.name].add(session);
session_stored(session);
}
public override bool contains_session(Address address) throws Error {
if (!session_map.has_key(address.name)) return false;
- foreach (SessionStore.Session session in session_map[address.name]) {
+ foreach (Session session in session_map[address.name]) {
if (session.device_id == address.device_id) return true;
}
return false;
@@ -47,7 +50,7 @@ public class SimpleSessionStore : SessionStore {
public override void delete_session(Address address) throws Error {
if (!session_map.has_key(address.name)) throw_by_code(ErrorCode.UNKNOWN, "No session found");
- foreach (SessionStore.Session session in session_map[address.name]) {
+ foreach (Session session in session_map[address.name]) {
if (session.device_id == address.device_id) {
session_map[address.name].remove(session);
if (session_map[address.name].size == 0) {
@@ -61,7 +64,7 @@ public class SimpleSessionStore : SessionStore {
public override void delete_all_sessions(string name) throws Error {
if (session_map.has_key(name)) {
- foreach (SessionStore.Session session in session_map[name]) {
+ foreach (Session session in session_map[name]) {
session_map[name].remove(session);
if (session_map[name].size == 0) {
session_map.unset(name);
@@ -70,6 +73,12 @@ public class SimpleSessionStore : SessionStore {
}
}
}
+
+ public class Session {
+ public string name;
+ public int device_id;
+ public uint8[] record;
+ }
}
} \ No newline at end of file
diff --git a/plugins/omemo/src/native/store.vala b/libdino/src/crypto/omemo/store.vala
index b1861d93..746c07d7 100644
--- a/plugins/omemo/src/native/store.vala
+++ b/libdino/src/crypto/omemo/store.vala
@@ -1,38 +1,18 @@
-namespace Omemo {
+using Omemo;
+
+namespace Dino.Crypto.Omemo {
public abstract class IdentityKeyStore : Object {
public abstract Bytes identity_key_private { get; set; }
public abstract Bytes identity_key_public { get; set; }
public abstract uint32 local_registration_id { get; set; }
- public signal void trusted_identity_added(TrustedIdentity id);
- public signal void trusted_identity_updated(TrustedIdentity id);
-
public abstract void save_identity(Address address, uint8[] key) throws Error ;
public abstract bool is_trusted_identity(Address address, uint8[] key) throws Error ;
-
- public class TrustedIdentity {
- public uint8[] key { get; set; }
- public string name { get; private set; }
- public int device_id { get; private set; }
-
- public TrustedIdentity(string name, int device_id, uint8[] key) {
- this.key = key;
- this.name = name;
- this.device_id = device_id;
- }
-
- public TrustedIdentity.by_address(Address address, uint8[] key) {
- this(address.name, address.device_id, key);
- }
- }
}
public abstract class SessionStore : Object {
-
- public signal void session_stored(Session session);
- public signal void session_removed(Session session);
public abstract uint8[]? load_session(Address address) throws Error ;
public abstract IntList get_sub_device_sessions(string name) throws Error ;
@@ -44,19 +24,9 @@ public abstract class SessionStore : Object {
public abstract void delete_session(Address address) throws Error ;
public abstract void delete_all_sessions(string name) throws Error ;
-
- public class Session {
- public string name;
- public int device_id;
- public uint8[] record;
- }
}
public abstract class PreKeyStore : Object {
-
- public signal void pre_key_stored(Key key);
- public signal void pre_key_deleted(Key key);
-
public abstract uint8[]? load_pre_key(uint32 pre_key_id) throws Error ;
public abstract void store_pre_key(uint32 pre_key_id, uint8[] record) throws Error ;
@@ -64,23 +34,9 @@ public abstract class PreKeyStore : Object {
public abstract bool contains_pre_key(uint32 pre_key_id) throws Error ;
public abstract void delete_pre_key(uint32 pre_key_id) throws Error ;
-
- public class Key {
- public uint32 key_id { get; private set; }
- public uint8[] record { get; private set; }
-
- public Key(uint32 key_id, uint8[] record) {
- this.key_id = key_id;
- this.record = record;
- }
- }
}
public abstract class SignedPreKeyStore : Object {
-
- public signal void signed_pre_key_stored(Key key);
- public signal void signed_pre_key_deleted(Key key);
-
public abstract uint8[]? load_signed_pre_key(uint32 pre_key_id) throws Error ;
public abstract void store_signed_pre_key(uint32 pre_key_id, uint8[] record) throws Error ;
@@ -88,16 +44,6 @@ public abstract class SignedPreKeyStore : Object {
public abstract bool contains_signed_pre_key(uint32 pre_key_id) throws Error ;
public abstract void delete_signed_pre_key(uint32 pre_key_id) throws Error ;
-
- public class Key {
- public uint32 key_id { get; private set; }
- public uint8[] record { get; private set; }
-
- public Key(uint32 key_id, uint8[] record) {
- this.key_id = key_id;
- this.record = record;
- }
- }
}
public class Store : Object {
@@ -107,7 +53,7 @@ public class Store : Object {
public PreKeyStore pre_key_store { get; set; default = new SimplePreKeyStore(); }
public SignedPreKeyStore signed_pre_key_store { get; set; default = new SimpleSignedPreKeyStore(); }
public uint32 local_registration_id { get { return identity_key_store.local_registration_id; } }
- internal NativeStoreContext native_context {get { return native_store_context_; }}
+ public NativeStoreContext native_context {get { return native_store_context_; }}
private NativeStoreContext native_store_context_;
static int iks_get_identity_key_pair(out Buffer public_data, out Buffer private_data, void* user_data) {
diff --git a/plugins/omemo/src/native/util.vala b/libdino/src/crypto/omemo/util.vala
index be43668d..eca12fbb 100644
--- a/plugins/omemo/src/native/util.vala
+++ b/libdino/src/crypto/omemo/util.vala
@@ -1,4 +1,6 @@
-namespace Omemo {
+using Omemo;
+
+namespace Dino.Crypto.Omemo {
public ECPublicKey generate_public_key(ECPrivateKey private_key) throws Error {
ECPublicKey public_key;
diff --git a/libdino/src/crypto/openssl/cipher.vala b/libdino/src/crypto/openssl/cipher.vala
new file mode 100644
index 00000000..02064770
--- /dev/null
+++ b/libdino/src/crypto/openssl/cipher.vala
@@ -0,0 +1,156 @@
+namespace Dino.Crypto {
+
+internal class SymmetricCipherEncryptionOpenssl : SymmetricCipher, SymmetricCipherEncryption, Object {
+ private OpenSSL.EVP.CipherContext? cipher;
+ private bool is_finalized = false;
+
+ public SymmetricCipherEncryptionOpenssl(string algo_name) throws Error {
+ if (algo_name != "AES-GCM") throw new Error.ILLEGAL_ARGUMENTS(@"The algorithm $algo_name is not supported");
+ cipher = new OpenSSL.EVP.CipherContext();
+ }
+
+ public void set_key(uint8[] key) throws Error {
+ unowned OpenSSL.EVP.Cipher algo;
+ if (key.length == 16) {
+ algo = OpenSSL.EVP.aes_128_gcm();
+ } else if (key.length == 32) {
+ algo = OpenSSL.EVP.aes_256_gcm();
+ } else {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("key length must be 16 or 32 for AES-GCM");
+ }
+ try {
+ cipher.encrypt_init(algo, null, null);
+ cipher.encrypt_init(null, key, null);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ }
+
+ public void set_iv(uint8[] iv) throws Error {
+ if (iv.length != 12) {
+ cipher.ctrl(OpenSSL.EVP.Control.GCM_SET_IVLEN, iv.length, null);
+ }
+ try {
+ cipher.encrypt_init(null, null, iv);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ }
+
+ public void reset() throws Error {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("can't reset OpenSSL cipher context");
+ }
+
+ public uint8[] get_tag(size_t taglen) throws Error {
+ uint8[] tag = new uint8[taglen];
+ if (!is_finalized) {
+ uint8[] empty = new uint8[0];
+ int empty_len = 0;
+ try {
+ cipher.encrypt_final(empty, out empty_len);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ if (empty_len != 0) {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("get_tag called on a stream with remaining data");
+ }
+ }
+ if (cipher.ctrl(OpenSSL.EVP.Control.GCM_GET_TAG, (int)taglen, tag) != 1) {
+ openssl_error();
+ }
+ return tag;
+ }
+
+ public int encrypt(uint8[] output, uint8[] input) throws Error {
+ int output_length = output.length;
+ if (is_finalized) {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("encrypt called after get_tag");
+ }
+ try {
+ cipher.encrypt_update(output, out output_length, input);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ return output_length;
+ }
+}
+
+internal class SymmetricCipherDecryptionOpenssl : SymmetricCipher, SymmetricCipherDecryption, Object {
+ private OpenSSL.EVP.CipherContext? cipher;
+ private bool is_finalized = false;
+
+ public SymmetricCipherDecryptionOpenssl(string algo_name) throws Error {
+ if (algo_name != "AES-GCM") throw new Error.ILLEGAL_ARGUMENTS(@"The algorithm $algo_name is not supported");
+ cipher = new OpenSSL.EVP.CipherContext();
+ try {
+ cipher.decrypt_init(OpenSSL.EVP.aes_128_gcm(), null, null);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ }
+
+ public void set_key(uint8[] key) throws Error {
+ unowned OpenSSL.EVP.Cipher algo;
+ if (key.length == 16) {
+ algo = OpenSSL.EVP.aes_128_gcm();
+ } else if (key.length == 32) {
+ algo = OpenSSL.EVP.aes_256_gcm();
+ } else {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("key length must be 16 or 32 for AES-GCM");
+ }
+ try {
+ cipher.decrypt_init(algo, null, null);
+ cipher.decrypt_init(null, key, null);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ }
+
+ public void set_iv(uint8[] iv) throws Error {
+ if (iv.length != 12) {
+ cipher.ctrl(OpenSSL.EVP.Control.GCM_SET_IVLEN, iv.length, null);
+ }
+ try {
+ cipher.decrypt_init(null, null, iv);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ }
+
+ public void reset() throws Error {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("can't reset OpenSSL cipher context");
+ }
+
+ public void check_tag(uint8[] tag) throws Error {
+ if (cipher.ctrl(OpenSSL.EVP.Control.GCM_SET_TAG, tag.length, tag) != 1) {
+ openssl_error();
+ }
+ if (!is_finalized) {
+ uint8[] empty = new uint8[0];
+ int empty_len = 0;
+ try {
+ cipher.decrypt_final(empty, out empty_len);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ if (empty_len != 0) {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("check_tag called on a stream with remaining data");
+ }
+ }
+ }
+
+ public int decrypt(uint8[] output, uint8[] input) throws Error {
+ if (is_finalized) {
+ throw new Crypto.Error.ILLEGAL_ARGUMENTS("decrypt called after check_tag");
+ }
+ int output_length = output.length;
+ try {
+ cipher.decrypt_update(output, out output_length, input);
+ } catch (GLib.Error e) {
+ throw new Crypto.Error.OPENSSL(e.message);
+ }
+ return output_length;
+ }
+}
+
+}
diff --git a/libdino/src/crypto/openssl/dtls_srtp.vala b/libdino/src/crypto/openssl/dtls_srtp.vala
new file mode 100644
index 00000000..192f0da2
--- /dev/null
+++ b/libdino/src/crypto/openssl/dtls_srtp.vala
@@ -0,0 +1,202 @@
+using OpenSSL;
+
+namespace Dino.Crypto.DtlsSrtp {
+
+public class CredentialsCapsuleOpenSSL : CredentialsCapsule {
+ internal X509.Certificate own_cert;
+ internal EVP.Key private_key;
+}
+
+public CredentialsCapsule generate_credentials () throws GLib.Error {
+ EVP.Key key = new EVP.Key.generate_ecdsa ("prime256v1");
+
+ var start_time = new DateTime.now_local().add_days(-1);
+ var end_time = start_time.add_days (2);
+
+ X509.Certificate cert = new X509.Certificate ();
+ cert.set_public_key (key);
+ cert.set_version (1);
+ cert.not_before.set ((time_t) start_time.to_unix ());
+ cert.not_after.set ((time_t) end_time.to_unix ());
+ cert.serial_number.set (1);
+
+ cert.sign (key, EVP.sha256 ());
+
+ CredentialsCapsuleOpenSSL credentials = new CredentialsCapsuleOpenSSL ();
+ credentials.own_fingerprint = cert.digest (EVP.sha256 ());
+ credentials.own_cert = (owned) cert;
+ credentials.private_key = (owned) key;
+ return credentials;
+}
+
+public class Handler : AbstractHandler {
+
+ public Handler.with_cert (CredentialsCapsule creds) {
+ base.with_cert (creds);
+ }
+
+ protected override Xmpp.Xep.Jingle.ContentEncryption? setup_dtls_connection_thread () {
+ debug("Setting up DTLS connection using OpenSSL. We're %s", mode.to_string());
+ SSL.Context context = new SSL.Context (mode == Mode.SERVER ? SSL.Method.DTLS_SERVER : SSL.Method.DTLS_CLIENT);
+ context.set_tlsext_use_srtp ("SRTP_AES128_CM_SHA1_80");
+ context.use_certificate (((CredentialsCapsuleOpenSSL) credentials).own_cert);
+ context.use_private_key (((CredentialsCapsuleOpenSSL) credentials).private_key);
+ SSL session = new SSL (context);
+ BIO<Handler> bio = new BIO<Handler>(get_handler_based_bio_method());
+ bio.data = this;
+ session.rbio = bio;
+ session.wbio = bio;
+
+ DateTime maximum_time = new DateTime.now_utc().add_seconds(20);
+ int err = 0;
+ if (mode == Mode.SERVER) {
+ session.set_accept_state ();
+ } else {
+ session.set_connect_state ();
+ }
+ do {
+ try {
+ SSL.Error ret = session.do_handshake();
+ switch (ret) {
+ case SSL.Error.NONE:
+ err = 1;
+ break;
+ case SSL.Error.WANT_READ:
+ debug ("DTLS wants to read, but nothing in queue, wait for buffer");
+ buffer_mutex.lock();
+ if (buffer_queue.size == 0) {
+ buffer_cond.wait_until(buffer_mutex, get_monotonic_time() + maximum_time.difference(new DateTime.now_utc()));
+ }
+ buffer_mutex.unlock();
+ err = -1;
+ break;
+ default:
+ warning ("DTLS Error: %s", @"$ret");
+ err = 4;
+ break;
+ }
+ } catch (Error e) {
+ warning ("DTLS Error: %s", e.message);
+ err = e.code;
+ }
+
+ DateTime current_time = new DateTime.now_utc();
+ if (maximum_time.compare(current_time) < 0) {
+ debug ("DTLS handshake timeouted");
+ err = 2;
+ break;
+ }
+ if (stop) {
+ debug ("DTLS handshake stopped");
+ err = 3;
+ break;
+ }
+ } while (err < 0);
+
+ buffer_mutex.lock();
+ if (stop) {
+ stop = false;
+ running = false;
+ bool restart = restart;
+ buffer_mutex.unlock();
+ if (restart) {
+ debug ("Restarting DTLS handshake");
+ return setup_dtls_connection_thread();
+ }
+ return null;
+ }
+ buffer_mutex.unlock();
+ if (err != 1) {
+ debug ("DTLS handshake failed");
+ return null;
+ }
+
+ // TODO: Check peer certificate
+
+ uint8[] km = new uint8[60];
+ session.export_keying_material (km, "EXTRACTOR-dtls_srtp");
+ uint8[] client_key = km[0:16];
+ uint8[] server_key = km[16:32];
+ uint8[] client_salt = km[32:46];
+ uint8[] server_salt = km[46:60];
+
+ debug ("Finished DTLS connection. We're %s", mode.to_string());
+ if (mode == Mode.SERVER) {
+ srtp_session.set_encryption_key (Crypto.Srtp.AES_CM_128_HMAC_SHA1_80, server_key, server_salt);
+ srtp_session.set_decryption_key (Crypto.Srtp.AES_CM_128_HMAC_SHA1_80, client_key, client_salt);
+ } else {
+ srtp_session.set_encryption_key (Crypto.Srtp.AES_CM_128_HMAC_SHA1_80, client_key, client_salt);
+ srtp_session.set_decryption_key (Crypto.Srtp.AES_CM_128_HMAC_SHA1_80, server_key, server_salt);
+ }
+ return new Xmpp.Xep.Jingle.ContentEncryption (Xmpp.Xep.JingleIceUdp.DTLS_NS_URI, "DTLS-SRTP", credentials.own_fingerprint, peer_fingerprint);
+ }
+
+ private int read_impl (BIO<Handler> bio, uint8[] out_buf) {
+ Bytes data = get_buffer_if_present ();
+ if (data == null) {
+ if (!stop) {
+ debug ("No pending buffer in queue, but end not reached yet, set_retry_read");
+ bio.set_retry_read ();
+ }
+ return -1;
+ }
+ if (data.length > out_buf.length) {
+ warning ("Buffer in queue does not fit in out_buf");
+ return -1;
+ }
+ debug ("Read %d bytes from queue", data.length);
+
+ uint8[] data_uint8 = Bytes.unref_to_data((owned) data);
+ Memory.copy (out_buf, data_uint8, data_uint8.length);
+ bio.clear_retry_flags ();
+ return data_uint8.length;
+ }
+
+ private int write_impl (BIO<Handler> bio, uint8[] buf) {
+ debug ("Write %d bytes to network", buf.length);
+ send_data (buf);
+ return buf.length;
+ }
+
+ private long ctrl_impl (BIO<Handler> bio, BIO.ControlCommand cmd, long num, void* ptr) {
+ switch (cmd) {
+ case BIO.ControlCommand.FLUSH:
+ // Datagrams are sent out immediately
+ return 1;
+ case BIO.ControlCommand.DGRAM_SET_NEXT_TIMEOUT:
+ // Datagrams are sent out immediately
+ return 1;
+ case BIO.ControlCommand.DGRAM_GET_MTU_OVERHEAD:
+ // Just some safe estimate
+ return 70;
+ case BIO.ControlCommand.DGRAM_QUERY_MTU:
+ // Just some safe estimate
+ return 1200;
+ case BIO.ControlCommand.WPENDING:
+ // Datagrams are sent out immediately
+ return 0;
+ case BIO.ControlCommand.POP:
+ case BIO.ControlCommand.PUSH:
+ // Ignored
+ return 0;
+ default:
+ warning (@"Unimplemented ctrl cmd:$cmd, num:$num");
+ return 0;
+ }
+ }
+
+ private static BIO.Method<Handler> _handler_based_bio_method_instance = null;
+
+ private static unowned BIO.Method<Handler> get_handler_based_bio_method () {
+ if (_handler_based_bio_method_instance != null) return _handler_based_bio_method_instance;
+ _handler_based_bio_method_instance = new BIO.Method<Handler> (BIO.Type.SOURCE_SINK | BIO.Type.DGRAM, "Dino DTLS Handler BIO");
+ _handler_based_bio_method_instance.read = (bio, out_buf) => bio.data.read_impl (bio, out_buf);
+ _handler_based_bio_method_instance.write = (bio, buf) => bio.data.write_impl (bio, buf);
+ _handler_based_bio_method_instance.ctrl = (bio, cmd, num, ptr) => bio.data.ctrl_impl (bio, cmd, num, ptr);
+ return _handler_based_bio_method_instance;
+ }
+}
+
+
+
+} \ No newline at end of file
diff --git a/libdino/src/crypto/openssl/omemo.c b/libdino/src/crypto/openssl/omemo.c
new file mode 100644
index 00000000..0912c172
--- /dev/null
+++ b/libdino/src/crypto/openssl/omemo.c
@@ -0,0 +1,313 @@
+#include "../omemo/helper.h"
+#include <openssl/evp.h>
+#include <openssl/rand.h>
+
+int signal_vala_random_generator(uint8_t *data, size_t len, void *user_data) {
+ return RAND_bytes(data, len) == 1 ? SG_SUCCESS : SG_ERR_UNKNOWN;
+}
+
+struct SIGNAL_VALA_HMAC_CTX {
+ EVP_PKEY *pkey;
+ EVP_MD_CTX *ctx;
+};
+
+int signal_vala_hmac_sha256_init(void **hmac_context, const uint8_t *key, size_t key_len, void *user_data) {
+ EVP_PKEY *pkey = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL, key, key_len);
+ if (!pkey) {
+ return SG_ERR_NOMEM;
+ }
+ EVP_MD_CTX *ctx = EVP_MD_CTX_new();
+ if (!ctx) {
+ EVP_PKEY_free(pkey);
+ return SG_ERR_NOMEM;
+ }
+ if (EVP_DigestSignInit(ctx, NULL, EVP_sha256(), NULL, pkey) != 1) {
+ EVP_MD_CTX_free(ctx);
+ EVP_PKEY_free(pkey);
+ return SG_ERR_UNKNOWN;
+ }
+
+ struct SIGNAL_VALA_HMAC_CTX *hmac_ctx = malloc(sizeof(*hmac_ctx));
+ hmac_ctx->pkey = pkey;
+ hmac_ctx->ctx = ctx;
+ *hmac_context = hmac_ctx;
+
+ return SG_SUCCESS;
+}
+
+int signal_vala_hmac_sha256_update(void *hmac_context, const uint8_t *data, size_t data_len, void *user_data) {
+ struct SIGNAL_VALA_HMAC_CTX *hmac_ctx = hmac_context;
+ if (EVP_DigestSignUpdate(hmac_ctx->ctx, data, data_len) != 1) {
+ return SG_ERR_UNKNOWN;
+ }
+ return SG_SUCCESS;
+}
+
+int signal_vala_hmac_sha256_final(void *hmac_context, signal_buffer **output, void *user_data) {
+ size_t len;
+ struct SIGNAL_VALA_HMAC_CTX *hmac_ctx = hmac_context;
+ if (EVP_DigestSignFinal(hmac_ctx->ctx, NULL, &len) != 1) {
+ return SG_ERR_UNKNOWN;
+ }
+ signal_buffer *output_buffer = signal_buffer_alloc(len);
+ if (!output_buffer) {
+ return SG_ERR_NOMEM;
+ }
+ size_t another_len = len;
+ if (EVP_DigestSignFinal(hmac_ctx->ctx, signal_buffer_data(output_buffer), &another_len) != 1) {
+ signal_buffer_free(output_buffer);
+ return SG_ERR_UNKNOWN;
+ }
+ if (another_len != len) {
+ signal_buffer_free(output_buffer);
+ return SG_ERR_UNKNOWN;
+ }
+ *output = output_buffer;
+ return SG_SUCCESS;
+}
+
+void signal_vala_hmac_sha256_cleanup(void *hmac_context, void *user_data) {
+ struct SIGNAL_VALA_HMAC_CTX *hmac_ctx = hmac_context;
+ if (hmac_ctx) {
+ EVP_MD_CTX_free(hmac_ctx->ctx);
+ EVP_PKEY_free(hmac_ctx->pkey);
+ free(hmac_ctx);
+ }
+}
+
+static const EVP_CIPHER *aes_cipher(int cipher, size_t key_len) {
+ switch (cipher) {
+ case SG_CIPHER_AES_CBC_PKCS5:
+ switch (key_len) {
+ case 16: return EVP_aes_128_cbc();
+ case 24: return EVP_aes_192_cbc();
+ case 32: return EVP_aes_256_cbc();
+ }
+ break;
+ case SG_CIPHER_AES_CTR_NOPADDING:
+ switch (key_len) {
+ case 16: return EVP_aes_128_ctr();
+ case 24: return EVP_aes_192_ctr();
+ case 32: return EVP_aes_256_ctr();
+ }
+ break;
+ case SG_CIPHER_AES_GCM_NOPADDING:
+ switch (key_len) {
+ case 16: return EVP_aes_128_gcm();
+ case 24: return EVP_aes_192_gcm();
+ case 32: return EVP_aes_256_gcm();
+ }
+ break;
+
+ }
+ return NULL;
+}
+
+int signal_vala_encrypt(signal_buffer **output,
+ int cipher,
+ const uint8_t *key, size_t key_len,
+ const uint8_t *iv, size_t iv_len,
+ const uint8_t *plaintext, size_t plaintext_len,
+ void *user_data) {
+ int result = 0;
+ uint8_t *out_buf = NULL;
+ const EVP_CIPHER *evp_cipher = aes_cipher(cipher, key_len);
+ if (!evp_cipher) {
+ // fprintf(stderr, "invalid AES mode or key size: %zu\n", key_len);
+ return SG_ERR_INVAL;
+ }
+ if (plaintext_len > INT_MAX - EVP_CIPHER_block_size(evp_cipher)) {
+ // fprintf(stderr, "invalid plaintext length: %zu\n", plaintext_len);
+ return SG_ERR_UNKNOWN;
+ }
+ EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
+ int buf_extra = 0;
+
+ if (cipher == SG_CIPHER_AES_GCM_NOPADDING) {
+ // In GCM mode we use the last 16 bytes as auth tag
+ buf_extra += 16;
+
+ if (EVP_EncryptInit_ex(ctx, evp_cipher, NULL, NULL, NULL) != 1) {
+ // fprintf(stderr, "cannot initialize cipher\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, iv_len, NULL) != 1) {
+ // fprintf(stderr, "cannot set iv size\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ if (EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv) != 1) {
+ // fprintf(stderr, "cannot set key/iv\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ } else {
+ // TODO: set ivlen?
+ if (EVP_EncryptInit_ex(ctx, evp_cipher, 0, key, iv) != 1) {
+ // fprintf(stderr, "cannot initialize cipher\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ }
+
+ if (cipher == SG_CIPHER_AES_CTR_NOPADDING || cipher == SG_CIPHER_AES_GCM_NOPADDING) {
+ if (EVP_CIPHER_CTX_set_padding(ctx, 0) != 1) {
+ // fprintf(stderr, "cannot set padding\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ }
+
+ out_buf = malloc(plaintext_len + EVP_CIPHER_block_size(evp_cipher) + buf_extra);
+ if (!out_buf) {
+ // fprintf(stderr, "cannot allocate output buffer\n");
+ result = SG_ERR_NOMEM;
+ goto complete;
+ }
+
+ int out_len = 0;
+ if (EVP_EncryptUpdate(ctx, out_buf, &out_len, plaintext, plaintext_len) != 1) {
+ // fprintf(stderr, "cannot encrypt plaintext\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ int final_len = 0;
+ if (EVP_EncryptFinal_ex(ctx, out_buf + out_len, &final_len) != 1) {
+ // fprintf(stderr, "cannot finish encrypting plaintext\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ if (cipher == SG_CIPHER_AES_GCM_NOPADDING) {
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, 16, out_buf + out_len + final_len) != 1) {
+ // fprintf(stderr, "cannot get tag\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ }
+
+ *output = signal_buffer_create(out_buf, out_len + final_len + buf_extra);
+
+complete:
+ EVP_CIPHER_CTX_free(ctx);
+ if (out_buf) {
+ free(out_buf);
+ }
+ return result;
+}
+
+int signal_vala_decrypt(signal_buffer **output,
+ int cipher,
+ const uint8_t *key, size_t key_len,
+ const uint8_t *iv, size_t iv_len,
+ const uint8_t *ciphertext, size_t ciphertext_len,
+ void *user_data) {
+ int result = 0;
+ uint8_t *out_buf = NULL;
+ const EVP_CIPHER *evp_cipher = aes_cipher(cipher, key_len);
+ if (!evp_cipher) {
+ // fprintf(stderr, "invalid AES mode or key size: %zu\n", key_len);
+ return SG_ERR_INVAL;
+ }
+ if (ciphertext_len > INT_MAX - EVP_CIPHER_block_size(evp_cipher)) {
+ // fprintf(stderr, "invalid ciphertext length: %zu\n", ciphertext_len);
+ return SG_ERR_UNKNOWN;
+ }
+
+ EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
+
+ if (cipher == SG_CIPHER_AES_GCM_NOPADDING) {
+ // In GCM mode we use the last 16 bytes as auth tag
+ ciphertext_len -= 16;
+
+ if (EVP_DecryptInit_ex(ctx, evp_cipher, NULL, NULL, NULL) != 1) {
+ // fprintf(stderr, "cannot initialize cipher\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, iv_len, NULL) != 1) {
+ // fprintf(stderr, "cannot set iv size\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ if (EVP_DecryptInit_ex(ctx, NULL, NULL, key, iv) != 1) {
+ // fprintf(stderr, "cannot set key/iv\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ } else {
+ // TODO: set ivlen?
+ if (EVP_DecryptInit_ex(ctx, evp_cipher, 0, key, iv) != 1) {
+ // fprintf(stderr, "cannot initialize cipher\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ }
+
+ if (cipher == SG_CIPHER_AES_CTR_NOPADDING || cipher == SG_CIPHER_AES_GCM_NOPADDING) {
+ if (EVP_CIPHER_CTX_set_padding(ctx, 0) != 1) {
+ // fprintf(stderr, "cannot set padding\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ }
+
+ out_buf = malloc(ciphertext_len + EVP_CIPHER_block_size(evp_cipher));
+ if (!out_buf) {
+ // fprintf(stderr, "cannot allocate output buffer\n");
+ result = SG_ERR_NOMEM;
+ goto complete;
+ }
+
+ int out_len = 0;
+ if (EVP_DecryptUpdate(ctx, out_buf, &out_len, ciphertext, ciphertext_len) != 1) {
+ // fprintf(stderr, "cannot decrypt ciphertext\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ if (cipher == SG_CIPHER_AES_GCM_NOPADDING) {
+ if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, 16, (void *)(ciphertext + ciphertext_len)) != 1) {
+ // fprintf(stderr, "cannot set tag\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+ }
+
+ int final_len = 0;
+ if (EVP_DecryptFinal_ex(ctx, out_buf + out_len, &final_len) != 1) {
+ // fprintf(stderr, "cannot finish decrypting ciphertexts\n");
+ result = SG_ERR_UNKNOWN;
+ goto complete;
+ }
+
+ *output = signal_buffer_create(out_buf, out_len + final_len);
+
+complete:
+ EVP_CIPHER_CTX_free(ctx);
+ if (out_buf) {
+ free(out_buf);
+ }
+ return result;
+}
+
+void setup_signal_vala_crypto_provider(signal_context *context) {
+ signal_crypto_provider provider = {
+ .random_func = signal_vala_random_generator,
+ .hmac_sha256_init_func = signal_vala_hmac_sha256_init,
+ .hmac_sha256_update_func = signal_vala_hmac_sha256_update,
+ .hmac_sha256_final_func = signal_vala_hmac_sha256_final,
+ .hmac_sha256_cleanup_func = signal_vala_hmac_sha256_cleanup,
+ .encrypt_func = signal_vala_encrypt,
+ .decrypt_func = signal_vala_decrypt,
+ .user_data = 0
+ };
+
+ signal_context_set_crypto_provider(context, &provider);
+}
diff --git a/libdino/src/crypto/openssl/utils.c b/libdino/src/crypto/openssl/utils.c
new file mode 100644
index 00000000..1a84f642
--- /dev/null
+++ b/libdino/src/crypto/openssl/utils.c
@@ -0,0 +1,49 @@
+#include "utils.h"
+#include <openssl/opensslv.h>
+#include <openssl/ec.h>
+
+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x30000000L
+// This is for OpenSSL 3.0.0 and newer
+
+EVP_PKEY *EVP_PKEY_new_generate_ecdsa (const char* curve) {
+ // Generate EVP_PKEY directly
+ EVP_PKEY *pkey = EVP_EC_gen (curve);
+ return pkey;
+}
+
+#else
+// This is for OpenSSL before 3.0.0 and forks of earlier OpenSSL versions like LibreSSL
+
+EVP_PKEY *EVP_PKEY_new_generate_ecdsa (const char* curve) {
+ // Get NID from curve name
+ int nid = OBJ_sn2nid (curve);
+ if (nid == NID_undef) return NULL;
+
+ // Create EC_KEY
+ EC_KEY *ec_key = EC_KEY_new_by_curve_name (nid);
+ if (!ec_key) return NULL;
+
+ // Generate key
+ if (!EC_KEY_generate_key (ec_key)) {
+ EC_KEY_free (ec_key);
+ return NULL;
+ }
+
+ // Create EVP_PKEY
+ EVP_PKEY *pkey = EVP_PKEY_new ();
+ if (!pkey) {
+ EC_KEY_free (ec_key);
+ return NULL;
+ }
+
+ // Assign EC_KEY to EVP_PKEY
+ if (!EVP_PKEY_assign_EC_KEY (pkey, ec_key)) {
+ EC_KEY_free (ec_key);
+ return NULL;
+ }
+
+ // EVP_PKEY_assign_EC_KEY takes ownership of ec_key, no need to free it explicitly
+ return pkey;
+}
+
+#endif
diff --git a/libdino/src/crypto/openssl/utils.h b/libdino/src/crypto/openssl/utils.h
new file mode 100644
index 00000000..bcc6f53a
--- /dev/null
+++ b/libdino/src/crypto/openssl/utils.h
@@ -0,0 +1,8 @@
+#ifndef DINO_OPENSSL_UTILS_H
+#define DINO_OPENSSL_UTILS_H
+
+#include <openssl/evp.h>
+
+EVP_PKEY *EVP_PKEY_new_generate_ecdsa (const char* curve);
+
+#endif //DINO_OPENSSL_UTILS_H \ No newline at end of file
diff --git a/libdino/src/crypto/openssl/utils.vala b/libdino/src/crypto/openssl/utils.vala
new file mode 100644
index 00000000..7a9ed9b6
--- /dev/null
+++ b/libdino/src/crypto/openssl/utils.vala
@@ -0,0 +1,19 @@
+namespace Dino.Crypto {
+
+public static void randomize(uint8[] buffer) {
+ OpenSSL.RAND.bytes(buffer);
+}
+
+internal void openssl_error() throws Error {
+ throw new Crypto.Error.OPENSSL(OpenSSL.ERR.reason_error_string(OpenSSL.ERR.get_error()));
+}
+
+public SymmetricCipherEncryption create_symmetric_cipher_encryption(string algo_name) throws Error {
+ return new SymmetricCipherEncryptionOpenssl(algo_name);
+}
+
+public SymmetricCipherDecryption create_symmetric_cipher_decryption(string algo_name) throws Error {
+ return new SymmetricCipherDecryptionOpenssl(algo_name);
+}
+
+}
diff --git a/crypto-vala/src/srtp.vala b/libdino/src/crypto/srtp.vala
index 22210e37..852dccdc 100644
--- a/crypto-vala/src/srtp.vala
+++ b/libdino/src/crypto/srtp.vala
@@ -1,6 +1,6 @@
using Srtp;
-namespace Crypto.Srtp {
+namespace Dino.Crypto.Srtp {
public const string AES_CM_128_HMAC_SHA1_80 = "AES_CM_128_HMAC_SHA1_80";
public const string AES_CM_128_HMAC_SHA1_32 = "AES_CM_128_HMAC_SHA1_32";
public const string F8_128_HMAC_SHA1_80 = "F8_128_HMAC_SHA1_80";
diff --git a/libdino/src/entity/conversation.vala b/libdino/src/entity/conversation.vala
index e6991973..3853389c 100644
--- a/libdino/src/entity/conversation.vala
+++ b/libdino/src/entity/conversation.vala
@@ -34,7 +34,7 @@ public class Conversation : Object {
}
}
public Encryption encryption { get; set; default = Encryption.UNKNOWN; }
- public Message? read_up_to { get; set; }
+ public int read_up_to_message_id { get; set; default=-1; }
public int read_up_to_item { get; set; default=-1; }
public enum NotifySetting { DEFAULT, ON, OFF, HIGHLIGHT }
@@ -69,9 +69,12 @@ public class Conversation : Object {
int64? last_active = row[db.conversation.last_active];
if (last_active != null) this.last_active = new DateTime.from_unix_utc(last_active);
encryption = (Encryption) row[db.conversation.encryption];
- int? read_up_to = row[db.conversation.read_up_to];
- if (read_up_to != null) this.read_up_to = db.get_message_by_id(read_up_to);
- read_up_to_item = row[db.conversation.read_up_to_item];
+ if (!db.conversation.read_up_to.is_null(row)) {
+ read_up_to_message_id = row[db.conversation.read_up_to];
+ }
+ if (!db.conversation.read_up_to_item.is_null(row)) {
+ read_up_to_item = row[db.conversation.read_up_to_item];
+ }
notify_setting = (NotifySetting) row[db.conversation.notification];
send_typing = (Setting) row[db.conversation.send_typing];
send_marker = (Setting) row[db.conversation.send_marker];
@@ -95,8 +98,8 @@ public class Conversation : Object {
.value(db.conversation.send_typing, send_typing)
.value(db.conversation.send_marker, send_marker)
.value(db.conversation.pinned, pinned);
- if (read_up_to != null) {
- insert.value(db.conversation.read_up_to, read_up_to.id);
+ if (read_up_to_message_id != -1) {
+ insert.value(db.conversation.read_up_to, read_up_to_message_id);
}
if (read_up_to_item != -1) {
insert.value(db.conversation.read_up_to_item, read_up_to_item);
@@ -175,20 +178,10 @@ public class Conversation : Object {
update.set(db.conversation.type_, type_); break;
case "encryption":
update.set(db.conversation.encryption, encryption); break;
- case "read-up-to":
- if (read_up_to != null) {
- update.set(db.conversation.read_up_to, read_up_to.id);
- } else {
- update.set_null(db.conversation.read_up_to);
- }
- break;
+ case "read-up-to-message-id":
+ update.set(db.conversation.read_up_to, read_up_to_message_id); break;
case "read-up-to-item":
- if (read_up_to_item != -1) {
- update.set(db.conversation.read_up_to_item, read_up_to_item);
- } else {
- update.set_null(db.conversation.read_up_to_item);
- }
- break;
+ update.set(db.conversation.read_up_to_item, read_up_to_item); break;
case "nickname":
update.set(db.conversation.resource, nickname); break;
case "active":
diff --git a/libdino/src/entity/file_transfer_group.vala b/libdino/src/entity/file_transfer_group.vala
new file mode 100644
index 00000000..94b9ccb6
--- /dev/null
+++ b/libdino/src/entity/file_transfer_group.vala
@@ -0,0 +1,53 @@
+using Xmpp;
+
+namespace Dino.Entities {
+
+ public class FileTransferGroup : Object {
+ public Gee.ArrayList<FileTransfer> file_transfers = new Gee.ArrayList<FileTransfer>();
+
+ public int id { get; set; default=-1; }
+ public int message_id { get; set; default=-1; }
+
+ private Database? db;
+
+ public FileTransferGroup.from_row(Database db, Qlite.Row row, Gee.ArrayList<FileTransfer> file_transfers) throws InvalidJidError {
+ this.db = db;
+ this.file_transfers = file_transfers;
+
+ id = row[db.file_transfer_group.id];
+ message_id = row[db.file_transfer_group.message_id];
+
+ notify.connect(on_update);
+ }
+
+ public void persist(Database db) {
+ if (id != -1) return;
+
+ this.db = db;
+
+ id = (int) db.file_transfer_group.insert()
+ .value(db.file_transfer_group.message_id, message_id)
+ .perform();
+
+
+ Qlite.InsertBuilder builder = db.file_transfer_group_file_transfer.insert();
+ foreach (FileTransfer file_transfer in file_transfers) {
+ db.file_transfer_group_file_transfer.insert()
+ .value(db.file_transfer_group_file_transfer.file_transfer_group_id, id)
+ .value(db.file_transfer_group_file_transfer.file_transfer_id, file_transfer.id)
+ .perform();
+ }
+
+ notify.connect(on_update);
+ }
+
+ private void on_update(Object o, ParamSpec sp) {
+ Qlite.UpdateBuilder update_builder = db.file_transfer_group.update().with(db.file_transfer_group.id, "=", id);
+ switch (sp.name) {
+ case "message-id":
+ update_builder.set(db.file_transfer_group.message_id, message_id); break;
+ }
+ update_builder.perform();
+ }
+ }
+} \ No newline at end of file
diff --git a/libdino/src/file_transfer/file_manager2.vala b/libdino/src/file_transfer/file_manager2.vala
new file mode 100644
index 00000000..104a170e
--- /dev/null
+++ b/libdino/src/file_transfer/file_manager2.vala
@@ -0,0 +1,252 @@
+using Gdk;
+using Gee;
+
+using Xmpp;
+using Xmpp.Xep;
+using Dino.Entities;
+
+namespace Dino {
+
+ public class FileManager2 : StreamInteractionModule, Object {
+ public static ModuleIdentity<FileManager2> IDENTITY = new ModuleIdentity<FileManager2>("file2");
+ public string id { get { return IDENTITY.id; } }
+
+ public signal void received_file(FileTransfer file_group, Conversation conversation);
+ public signal void received_file_group(FileTransferGroup file_group, Conversation conversation);
+
+ private StreamInteractor stream_interactor;
+ private Database db;
+
+ public const int HTTP_PROVIDER_ID = 0;
+ public const int SFS_PROVIDER_ID = 2;
+
+ public StatelessFileSharing sfs {
+ owned get { return stream_interactor.get_module(StatelessFileSharing.IDENTITY); }
+ private set {}
+ }
+
+ public FileManager fm {
+ owned get { return stream_interactor.get_module(FileManager.IDENTITY); }
+ private set {}
+ }
+
+ public HttpFileTransfers http_ft = null;
+
+ public static void start(StreamInteractor stream_interactor, Database db) {
+ FileManager2 m = new FileManager2(stream_interactor, db);
+ stream_interactor.add_module(m);
+ }
+
+ public static string get_storage_dir() {
+ return Path.build_filename(Dino.get_storage_dir(), "files");
+ }
+
+ private FileManager2(StreamInteractor stream_interactor, Database db) {
+ this.stream_interactor = stream_interactor;
+ this.db = db;
+ this.http_ft = new HttpFileTransfers(stream_interactor, db);
+
+ stream_interactor.get_module(MessageProcessor.IDENTITY).received_pipeline.connect(new ReceivedMessageListener(this));
+ }
+
+ public async void send_files(Gee.List<File> files, Conversation conversation) {
+ bool can_reference_element = conversation.type_ == Conversation.Type.CHAT || (
+ // The stable stanza ID XEP is not clear about an announcing MUC having to attach stanza-ids, thus we also check for MAM, which requires this.
+ stream_interactor.get_module(EntityInfo.IDENTITY).has_feature_cached(conversation.account, conversation.counterpart, Xep.UniqueStableStanzaIDs.NS_URI) &&
+ stream_interactor.get_module(EntityInfo.IDENTITY).has_feature_cached(conversation.account, conversation.counterpart, Xmpp.MessageArchiveManagement.NS_URI)
+ );
+
+ // Share unencrypted files via SFS (only if we'll be able to reference messages)
+ if (conversation.encryption == Encryption.NONE && can_reference_element) {
+ yield send_unencrypted_sfs(files, conversation);
+ } else {
+ foreach (File file in files) {
+ fm.send_file(file, conversation);
+ }
+ }
+ }
+
+// private async void send_file(File file, Conversation conversation) {
+// FileTransfer file_transfer = yield create_init_outgoing_file_transfer(file, conversation);
+// received_file(file_transfer, conversation);
+//
+// try {
+// string file_name = file_transfer.file_name;
+// int64 file_size = file_transfer.size;
+// FileContentType? file_content_type = file_transfer.content_type;
+// print(@"$(file_name) $(file_size) $(file_content_type.get_mime_type())\n");
+//
+// Omemo.OmemoHttpFileMeta? encrypted_file_meta = null;
+//
+// if (conversation.encryption == Encryption.OMEMO) {
+// encrypted_file_meta = omemo_file_encryption.encrypt_file(conversation, file_transfer);
+//// file_name = encrypted_file_meta.file_name;
+// file_size = encrypted_file_meta.size;
+// file_content_type = encrypted_file_meta.content_type;
+// }
+// HttpFileSlot? upload_slot = yield http_ft.request_upload_slot(conversation.account, file_name, file_size, file_content_type);
+// yield http_ft.upload(file_transfer, upload_slot.url_up, upload_slot.headers, file_size);
+//
+// string url_down = upload_slot.url_down;
+//
+// if (conversation.encryption == Encryption.OMEMO) {
+// url_down = omemo_file_encryption.generate_aesgcm_url(upload_slot.url_down, encrypted_file_meta.iv, encrypted_file_meta.key);
+// }
+//
+// // Update current upload progress in the FileTransfer
+// LimitInputStream? limit_stream = file_transfer.input_stream as LimitInputStream;
+// if (limit_stream == null) {
+// limit_stream = new LimitInputStream(file_transfer.input_stream, file_size);
+// file_transfer.input_stream = limit_stream;
+// }
+// if (limit_stream != null) {
+// limit_stream.bind_property("retrieved-bytes", file_transfer, "transferred-bytes", BindingFlags.SYNC_CREATE);
+// }
+//
+// file_transfer.state = FileTransfer.State.IN_PROGRESS;
+//
+// http_ft.send_http_file_message(conversation, file_transfer, url_down, true); // TODO true
+//
+// file_transfer.state = FileTransfer.State.COMPLETE;
+// } catch (Error e) {
+// warning("Send file error: %s", e.message);
+// file_transfer.state = FileTransfer.State.FAILED;
+// }
+// }
+
+ private async void send_unencrypted_sfs(Gee.List<File> files, Conversation conversation) {
+ FileTransferGroup file_transfer_group = new FileTransferGroup();
+ foreach (var file in files) {
+ var file_transfer = yield create_init_outgoing_file_transfer(file, conversation);
+ file_transfer_group.file_transfers.add(file_transfer);
+ }
+
+ stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file_group(file_transfer_group);
+ received_file_group(file_transfer_group, conversation);
+
+ // TODO message-id not known here -> not cached by it
+ var sfs_message = yield sfs.announce_files(file_transfer_group, conversation);
+
+ foreach (var file_transfer in file_transfer_group.file_transfers) {
+ upload_unencrypted_sfs_file.begin(file_transfer, conversation, sfs_message);
+ }
+ }
+
+ private async void upload_unencrypted_sfs_file(FileTransfer file_transfer, Conversation conversation, Message sfs_message) {
+ var upload_slot_data = yield http_ft.request_upload_slot(conversation.account, file_transfer.server_file_name, file_transfer.size, file_transfer.content_type);
+
+ // Upload file
+ yield http_ft.upload(file_transfer, upload_slot_data.url_up, upload_slot_data.headers, file_transfer.size);
+
+ // Wait until we know the server id of the file share message (in MUCs; we get that from the reflected message)
+ if (conversation.type_.is_muc_semantic()) {
+ if (sfs_message.server_id == null) {
+ ulong server_id_notify_id = sfs_message.notify["server-id"].connect(() => {
+ Idle.add(upload_unencrypted_sfs_file.callback);
+ });
+ yield;
+ sfs_message.disconnect(server_id_notify_id);
+ }
+ }
+
+ file_transfer.sfs_sources.add(new Xep.StatelessFileSharing.HttpSource() { url=upload_slot_data.url_down } );
+
+ string attach_to_id = stream_interactor.get_module(MessageStorage.IDENTITY).get_reference_id(sfs_message, conversation);
+ sfs.attach_source(file_transfer, conversation, upload_slot_data.url_down, attach_to_id);
+ }
+
+ private async FileTransfer? create_init_outgoing_file_transfer(File file, Conversation conversation) {
+ FileTransfer file_transfer = yield create_outgoing_file_transfer(file, conversation);
+
+ try {
+ file_transfer.input_stream = yield file.read_async();
+ yield save_file(file_transfer);
+
+ stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file(file_transfer);
+ conversation.last_active = file_transfer.time;
+
+ return file_transfer;
+ } catch (Error e) {
+ file_transfer.state = FileTransfer.State.FAILED;
+ warning("Error saving outgoing file: %s", e.message);
+ return null;
+ }
+ }
+
+ private async FileTransfer create_outgoing_file_transfer(File file, Conversation conversation) {
+ FileTransfer file_transfer = new FileTransfer();
+ file_transfer.account = conversation.account;
+ file_transfer.counterpart = conversation.counterpart;
+ if (conversation.type_.is_muc_semantic()) {
+ file_transfer.ourpart = stream_interactor.get_module(MucManager.IDENTITY).get_own_jid(conversation.counterpart, conversation.account) ?? conversation.account.bare_jid;
+ } else {
+ file_transfer.ourpart = conversation.account.full_jid;
+ }
+ file_transfer.direction = FileTransfer.DIRECTION_SENT;
+ file_transfer.time = new DateTime.now_utc();
+ file_transfer.local_time = new DateTime.now_utc();
+ file_transfer.encryption = conversation.encryption;
+
+ Xep.FileMetadataElement.FileMetadata metadata = new Xep.FileMetadataElement.FileMetadata();
+ foreach (FileMetadataProvider file_metadata_provider in fm.file_metadata_providers) {
+ if (file_metadata_provider.supports_file(file)) {
+ yield file_metadata_provider.fill_metadata(file, metadata);
+ }
+ }
+ file_transfer.file_metadata = metadata;
+ return file_transfer;
+ }
+
+ public async void save_file(FileTransfer file_transfer) throws FileSendError {
+ try {
+ string filename = Random.next_int().to_string("%x") + "_" + file_transfer.file_name;
+ File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename));
+ OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION);
+ yield os.splice_async(file_transfer.input_stream, OutputStreamSpliceFlags.CLOSE_SOURCE | OutputStreamSpliceFlags.CLOSE_TARGET);
+ file_transfer.state = FileTransfer.State.COMPLETE;
+ file_transfer.path = filename;
+ file_transfer.input_stream = new LimitInputStream(yield file.read_async(), file_transfer.size);
+ } catch (Error e) {
+ throw new FileSendError.SAVE_FAILED("Saving file error: %s".printf(e.message));
+ }
+ }
+
+ public bool is_sender_trustworthy(FileTransfer file_transfer, Conversation conversation) {
+ if (file_transfer.direction == FileTransfer.DIRECTION_SENT) return true;
+
+ Jid relevant_jid = conversation.counterpart;
+ if (conversation.type_ == Conversation.Type.GROUPCHAT) {
+ relevant_jid = stream_interactor.get_module(MucManager.IDENTITY).get_real_jid(file_transfer.from, conversation.account);
+ }
+ if (relevant_jid == null) return false;
+
+ bool in_roster = stream_interactor.get_module(RosterManager.IDENTITY).get_roster_item(conversation.account, relevant_jid) != null;
+ return in_roster;
+ }
+
+ private class ReceivedMessageListener : MessageListener {
+
+ public string[] after_actions_const = new string[]{ "STORE" };
+ public override string action_group { get { return "MESSAGE_REINTERPRETING"; } }
+ public override string[] after_actions { get { return after_actions_const; } }
+
+ private FileManager2 outer;
+ private StreamInteractor stream_interactor;
+
+ public ReceivedMessageListener(FileManager2 outer) {
+ this.outer = outer;
+ this.stream_interactor = outer.stream_interactor;
+ }
+
+ public override async bool run(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) {
+ bool is_sfs = yield outer.sfs.try_process_sfs(message, stanza, conversation);
+ if (is_sfs) return true;
+
+ bool is_http = outer.http_ft.try_parse_http_transfer(message, stanza, conversation);
+ if (is_http) return true;
+
+ return false;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/libdino/src/file_transfer/http_transfer.vala b/libdino/src/file_transfer/http_transfer.vala
new file mode 100644
index 00000000..ec97dfb3
--- /dev/null
+++ b/libdino/src/file_transfer/http_transfer.vala
@@ -0,0 +1,319 @@
+using Gee;
+
+using Dino.Entities;
+using Xmpp;
+
+namespace Dino {
+
+ public class HttpFileSlot : FileSendData {
+ public string url_down { get; set; }
+ public string url_up { get; set; }
+ public HashMap<string, string> headers { get; set; }
+ }
+
+ public class HttpFileTransfers : Object {
+
+ private StreamInteractor stream_interactor;
+ private Dino.Database dino_db;
+ private Soup.Session session;
+ private HttpFileProvider http_file_provider;
+ private HttpFileSender http_file_sender;
+ public static Regex http_url_regex = /^https?:\/\/([^\s#]*)$/; // Spaces are invalid in URLs and we can't use fragments for downloads
+ public static Regex omemo_url_regex = /^aesgcm:\/\/(.*)#(([A-Fa-f0-9]{2}){48}|([A-Fa-f0-9]{2}){44})$/;
+ public HashMap<Account, long> max_file_sizes = new HashMap<Account, long>(Account.hash_func, Account.equals_func);
+
+ public FileManager fm {
+ owned get { return stream_interactor.get_module(FileManager.IDENTITY); }
+ private set {}
+ }
+
+ public HttpFileTransfers(StreamInteractor stream_interactor, Dino.Database dino_db) {
+ this.stream_interactor = stream_interactor;
+ this.dino_db = dino_db;
+ this.session = new Soup.Session();
+ this.http_file_provider = new HttpFileProvider(this, stream_interactor);
+ this.http_file_sender = new HttpFileSender(stream_interactor, this);
+ fm.add_provider(http_file_provider);
+ fm.add_sender(http_file_sender);
+
+ session.user_agent = @"Dino/$(Dino.get_short_version()) ";
+
+ stream_interactor.stream_negotiated.connect(on_stream_negotiated);
+ }
+
+ public HttpFileReceiveData? get_file_receive_data(FileTransfer file_transfer) {
+ if (file_transfer.provider == FileManager.SFS_PROVIDER_ID) {
+ if (!file_transfer.sfs_sources.is_empty) {
+ var http_source = file_transfer.sfs_sources.get(0) as Xep.StatelessFileSharing.HttpSource;
+ if (http_source != null) {
+ var receive_data = new HttpFileReceiveData();
+ receive_data.url = http_source.url;
+ return receive_data;
+ }
+ }
+ return null;
+ }
+
+ Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(file_transfer.counterpart.bare_jid, file_transfer.account);
+ if (conversation == null) return null;
+
+ Message? message = stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_id(int.parse(file_transfer.info), conversation);
+ if (message == null) return null;
+
+ var receive_data = new HttpFileReceiveData();
+ receive_data.url = message.body;
+
+ return receive_data;
+ }
+
+ public async InputStream download(FileTransfer file_transfer, HttpFileReceiveData receive_data, int64 file_size = -1) throws IOError {
+ var get_message = new Soup.Message("GET", receive_data.url);
+
+ string transfer_host = Uri.parse(receive_data.url, UriFlags.NONE).get_host();
+ get_message.accept_certificate.connect((peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(transfer_host, peer_cert, errors); });
+ InputStream stream = yield session.send_async(get_message, GLib.Priority.LOW, file_transfer.cancellable);
+
+ if (file_size != -1) {
+ return new LimitInputStream(stream, file_size);
+ } else {
+ return stream;
+ }
+ }
+
+ public bool try_parse_http_transfer(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) {
+ string? oob_url = Xmpp.Xep.OutOfBandData.get_url_from_message(stanza);
+ bool normal_file = oob_url != null && oob_url == message.body && HttpFileTransfers.http_url_regex.match(message.body);
+ bool omemo_file = HttpFileTransfers.omemo_url_regex.match(message.body);
+ if (normal_file || omemo_file) {
+ http_file_provider.on_file_message(message, conversation);
+ return true;
+ }
+ return false;
+ }
+
+ public async HttpFileSlot? request_upload_slot(Account account, string file_name, int64 file_size, FileContentType file_content_type) throws FileSendError {
+ HttpFileSlot upload_slot = new HttpFileSlot();
+ if (upload_slot == null) return null;
+
+ Xmpp.XmppStream? stream = stream_interactor.get_stream(account);
+ if (stream == null) return null;
+
+ try {
+ var slot_result = yield stream_interactor.module_manager.get_module(account, Xmpp.Xep.HttpFileUpload.Module.IDENTITY).request_slot(stream, file_name, file_size, file_content_type);
+ upload_slot.url_down = slot_result.url_get;
+ upload_slot.url_up = slot_result.url_put;
+ upload_slot.headers = slot_result.headers;
+ } catch (Xep.HttpFileUpload.HttpFileTransferError e) {
+ throw new FileSendError.UPLOAD_FAILED("Http file upload XMPP error: %s".printf(e.message));
+ }
+
+ return upload_slot;
+ }
+
+ public async void upload(FileTransfer file_transfer, string upload_url, HashMap<string, string> header_fields, int64 upload_size) throws FileSendError {
+ Xmpp.XmppStream? stream = stream_interactor.get_stream(file_transfer.account);
+ if (stream == null) return;
+
+ var put_message = new Soup.Message("PUT", upload_url);
+
+ string transfer_host = Uri.parse(upload_url, UriFlags.NONE).get_host();
+ put_message.accept_certificate.connect((peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(transfer_host, peer_cert, errors); });
+ put_message.set_request_body(file_transfer.content_type.get_mime_type(), file_transfer.input_stream, (ssize_t) upload_size);
+
+ foreach (var entry in header_fields) {
+ put_message.request_headers.append(entry.key, entry.value);
+ }
+ try {
+ yield session.send_async(put_message, GLib.Priority.LOW, file_transfer.cancellable);
+
+ if (put_message.status_code < 200 || put_message.status_code >= 300) {
+ throw new FileSendError.UPLOAD_FAILED("HTTP status code %s".printf(put_message.status_code.to_string()));
+ }
+ } catch (Error e) {
+ throw new FileSendError.UPLOAD_FAILED("HTTP upload error: %s".printf(e.message));
+ }
+ }
+
+ /** @param use_conversation_encryption With OpenPGP, the file on the server is encrypted and the file transfer is safe even if the message is not encrypted.
+ * With OMEMO, the decryption key is part of the message, thus it has to be encrypted.
+ */
+ public void send_http_file_message(Conversation conversation, FileTransfer file_transfer, string download_url, bool use_conversation_encryption = true) {
+ Entities.Message message = stream_interactor.get_module(MessageProcessor.IDENTITY).create_out_message(download_url, conversation);
+ file_transfer.info = message.id.to_string();
+
+ message.encryption = use_conversation_encryption ? conversation.encryption : Encryption.NONE;
+ stream_interactor.get_module(MessageProcessor.IDENTITY).send_xmpp_message(message, conversation);
+ }
+
+ public async FileMeta request_meta_data(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) throws FileReceiveError {
+ HttpFileReceiveData? http_receive_data = receive_data as HttpFileReceiveData;
+ if (http_receive_data == null) return file_meta;
+
+ var head_message = new Soup.Message("HEAD", http_receive_data.url);
+ head_message.request_headers.append("Accept-Encoding", "identity");
+ string transfer_host = Uri.parse(http_receive_data.url, UriFlags.NONE).get_host();
+ head_message.accept_certificate.connect((peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(transfer_host, peer_cert, errors); });
+
+ try {
+ yield session.send_async(head_message, GLib.Priority.LOW, null);
+ } catch (Error e) {
+ throw new FileReceiveError.GET_METADATA_FAILED("HEAD request failed");
+ }
+
+ string? content_type = null, content_length = null;
+ head_message.response_headers.foreach((name, val) => {
+ if (name.down() == "content-type") content_type = val;
+ if (name.down() == "content-length") content_length = val;
+ });
+ file_meta.content_type = new FileContentType.from_mime_type(content_type);
+ if (content_length != null) {
+ file_meta.size = int64.parse(content_length);
+ }
+
+ return file_meta;
+ }
+
+ private void on_stream_negotiated(Account account, XmppStream stream) {
+ stream_interactor.module_manager.get_module(account, Xmpp.Xep.HttpFileUpload.Module.IDENTITY).feature_available.connect((stream, max_file_size) => {
+ max_file_sizes[account] = max_file_size;
+ http_file_sender.upload_available(account);
+ });
+ }
+
+ public string extract_file_name_from_url(string url) {
+ string ret = url;
+ if (ret.contains("#")) {
+ ret = ret.substring(0, ret.last_index_of("#"));
+ }
+ ret = Uri.unescape_string(ret.substring(ret.last_index_of("/") + 1));
+ return ret;
+ }
+ }
+
+ public class HttpFileProvider : Dino.FileProvider, Object {
+
+ private HttpFileTransfers http_ft;
+ private StreamInteractor stream_interactor;
+
+ public HttpFileProvider(HttpFileTransfers http_ft, StreamInteractor stream_interactor) {
+ this.http_ft = http_ft;
+ this.stream_interactor = stream_interactor;
+ }
+
+ public async FileMeta get_meta_info(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) throws FileReceiveError {
+ return yield http_ft.request_meta_data(file_transfer, receive_data, file_meta);
+ }
+
+ public Encryption get_encryption(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) {
+ return Encryption.NONE;
+ }
+
+ public async InputStream download(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) throws IOError {
+ return yield http_ft.download(file_transfer, (HttpFileReceiveData)receive_data, file_transfer.size);
+ }
+
+ public FileMeta get_file_meta(FileTransfer file_transfer) throws FileReceiveError {
+ if (file_transfer.provider == FileManager.SFS_PROVIDER_ID) {
+ var file_meta = new HttpFileMeta();
+ file_meta.size = file_transfer.size;
+ file_meta.content_type = file_transfer.content_type;
+ file_meta.file_name = file_transfer.file_name;
+ file_meta.message = null;
+ return file_meta;
+ }
+
+ Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(file_transfer.counterpart.bare_jid, file_transfer.account);
+ if (conversation == null) throw new FileReceiveError.GET_METADATA_FAILED("No conversation");
+
+ Message? message = stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_id(int.parse(file_transfer.info), conversation);
+ if (message == null) throw new FileReceiveError.GET_METADATA_FAILED("No message");
+
+ var file_meta = new HttpFileMeta();
+ file_meta.size = file_transfer.size;
+ file_meta.content_type = file_transfer.content_type;
+
+ file_meta.file_name = http_ft.extract_file_name_from_url(message.body);
+
+ file_meta.message = message;
+
+ return file_meta;
+ }
+
+ public FileReceiveData? get_file_receive_data(FileTransfer file_transfer) {
+ return http_ft.get_file_receive_data(file_transfer);
+ }
+
+ public int get_id() { return 0; }
+
+ public void on_file_message(Entities.Message message, Conversation conversation) {
+ var additional_info = message.id.to_string();
+
+ var receive_data = new HttpFileReceiveData();
+ receive_data.url = message.body;
+
+ var file_meta = new HttpFileMeta();
+ file_meta.file_name = http_ft.extract_file_name_from_url(message.body);
+ file_meta.message = message;
+
+ file_incoming(additional_info, message.from, message.time, message.local_time, conversation, receive_data, file_meta);
+ }
+ }
+
+ public class HttpFileSender : FileSender, Object {
+ private StreamInteractor stream_interactor;
+ private HttpFileTransfers http_ft;
+
+ public HttpFileSender(StreamInteractor stream_interactor, HttpFileTransfers http_ft) {
+ this.http_ft = http_ft;
+ }
+
+ public async FileSendData? prepare_send_file(Conversation conversation, FileTransfer file_transfer, FileMeta file_meta) throws FileSendError {
+ HttpFileSendData send_data = new HttpFileSendData();
+ if (send_data == null) return null;
+
+ try {
+ var slot_result = yield http_ft.request_upload_slot(conversation.account, file_transfer.server_file_name, file_meta.size, file_transfer.content_type);
+ send_data.url_down = slot_result.url_down;
+ send_data.url_up = slot_result.url_up;
+ send_data.headers = slot_result.headers;
+ } catch (Xep.HttpFileUpload.HttpFileTransferError e) {
+ throw new FileSendError.UPLOAD_FAILED("Http file upload XMPP error: %s".printf(e.message));
+ }
+
+ return send_data;
+ }
+
+ public async void send_file(Conversation conversation, FileTransfer file_transfer, FileSendData file_send_data, FileMeta file_meta) throws FileSendError {
+ HttpFileSendData http_file_send_data = file_send_data as HttpFileSendData;
+ yield http_ft.upload(file_transfer, http_file_send_data.url_up, http_file_send_data.headers, file_meta.size);
+
+ http_ft.send_http_file_message(conversation, file_transfer, http_file_send_data.url_down, true);
+ }
+
+ public async bool can_send(Conversation conversation, FileTransfer file_transfer) {
+ if (!http_ft.max_file_sizes.has_key(conversation.account)) return false;
+
+ return file_transfer.size < http_ft.max_file_sizes[conversation.account];
+ }
+
+ public async long get_file_size_limit(Conversation conversation) {
+ long? max_size = http_ft.max_file_sizes[conversation.account];
+ if (max_size != null) {
+ return max_size;
+ }
+ return -1;
+ }
+
+ public async bool can_encrypt(Conversation conversation, FileTransfer file_transfer) {
+ return false;
+ }
+
+ public async bool is_upload_available(Conversation conversation) {
+ return http_ft.max_file_sizes.has_key(conversation.account);
+ }
+
+ public int get_id() { return 0; }
+
+ public float get_priority() { return 100; }
+ }
+}
diff --git a/libdino/src/plugin/loader.vala b/libdino/src/plugin/loader.vala
index 8b0d93ad..dc93ee1e 100644
--- a/libdino/src/plugin/loader.vala
+++ b/libdino/src/plugin/loader.vala
@@ -81,6 +81,10 @@ public class Loader : Object {
Info info = new Plugins.Info(type, (owned) module);
infos += info;
+ return load_type(type);
+ }
+
+ public RootInterface load_type(Type type) {
RootInterface plugin = (RootInterface) Object.new (type);
plugins += plugin;
plugin.registered(app);
diff --git a/qlite/src/column.vala b/libdino/src/qlite/column.vala
index 36c8fcff..8f45307f 100644
--- a/qlite/src/column.vala
+++ b/libdino/src/qlite/column.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public abstract class Column<T> {
public const string DEFAULT_TABLE_NAME = "";
diff --git a/qlite/src/database.vala b/libdino/src/qlite/database.vala
index 8b2f447d..e55d5b59 100644
--- a/qlite/src/database.vala
+++ b/libdino/src/qlite/database.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class Database {
private string file_name;
diff --git a/qlite/src/delete_builder.vala b/libdino/src/qlite/delete_builder.vala
index 45e09dc7..df63bba6 100644
--- a/qlite/src/delete_builder.vala
+++ b/libdino/src/qlite/delete_builder.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class DeleteBuilder : StatementBuilder {
diff --git a/qlite/src/insert_builder.vala b/libdino/src/qlite/insert_builder.vala
index 8b14b33f..3383f0e2 100644
--- a/qlite/src/insert_builder.vala
+++ b/libdino/src/qlite/insert_builder.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class InsertBuilder : StatementBuilder {
diff --git a/qlite/src/query_builder.vala b/libdino/src/qlite/query_builder.vala
index 88f05e04..40514fd5 100644
--- a/qlite/src/query_builder.vala
+++ b/libdino/src/qlite/query_builder.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class QueryBuilder : StatementBuilder {
private bool single_result;
diff --git a/qlite/src/row.vala b/libdino/src/qlite/row.vala
index 4671db20..98fc902a 100644
--- a/qlite/src/row.vala
+++ b/libdino/src/qlite/row.vala
@@ -1,7 +1,7 @@
using Gee;
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class Row {
private Map<string, string?> text_map = new HashMap<string, string?>();
@@ -11,8 +11,9 @@ public class Row {
internal Row(Statement stmt) {
for (int i = 0; i < stmt.column_count(); i++) {
string column_name;
- if (stmt.column_origin_name(i) != null) {
- column_name = @"$(stmt.column_table_name(i)).$(stmt.column_origin_name(i))";
+ string origin_name = stmt.column_origin_name(i);
+ if (origin_name != null) {
+ column_name = field_name(origin_name, stmt.column_table_name(i));
} else {
column_name = stmt.column_name(i);
}
@@ -34,7 +35,7 @@ public class Row {
return field[this];
}
- private string field_name(string field, string? table) {
+ private static string field_name(string field, string? table) {
if (table != null) {
return @"$table.$field";
} else {
diff --git a/qlite/src/statement_builder.vala b/libdino/src/qlite/statement_builder.vala
index dca6983e..5c756ab3 100644
--- a/qlite/src/statement_builder.vala
+++ b/libdino/src/qlite/statement_builder.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public abstract class StatementBuilder {
protected Database db;
diff --git a/qlite/src/table.vala b/libdino/src/qlite/table.vala
index a5a57c49..3b75e22e 100644
--- a/qlite/src/table.vala
+++ b/libdino/src/qlite/table.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class Table {
protected Database db;
diff --git a/qlite/src/update_builder.vala b/libdino/src/qlite/update_builder.vala
index 0bf83aee..d371a93a 100644
--- a/qlite/src/update_builder.vala
+++ b/libdino/src/qlite/update_builder.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class UpdateBuilder : StatementBuilder {
diff --git a/qlite/src/upsert_builder.vala b/libdino/src/qlite/upsert_builder.vala
index 79104972..e9a73e4f 100644
--- a/qlite/src/upsert_builder.vala
+++ b/libdino/src/qlite/upsert_builder.vala
@@ -1,6 +1,6 @@
using Sqlite;
-namespace Qlite {
+namespace Dino.Qlite {
public class UpsertBuilder : StatementBuilder {
// INTO [...]
diff --git a/libdino/src/service/avatar_manager.vala b/libdino/src/service/avatar_manager.vala
index 0c98a8f3..d079b70d 100644
--- a/libdino/src/service/avatar_manager.vala
+++ b/libdino/src/service/avatar_manager.vala
@@ -1,9 +1,9 @@
using Gdk;
using Gee;
-using Qlite;
-using Xmpp;
using Dino.Entities;
+using Dino.Qlite;
+using Xmpp;
namespace Dino {
@@ -142,7 +142,7 @@ public class AvatarManager : StreamInteractionModule, Object {
public void unset_avatar(Account account) {
XmppStream stream = stream_interactor.get_stream(account);
if (stream == null) return;
- Xmpp.Xep.UserAvatars.unset_avatar(stream);
+ Xmpp.Xep.UserAvatars.unset_avatar(stream, get_avatar_hash(account, account.bare_jid));
}
private void on_account_added(Account account) {
@@ -157,19 +157,19 @@ public class AvatarManager : StreamInteractionModule, Object {
);
foreach (var entry in get_avatar_hashes(account, Source.USER_AVATARS).entries) {
- on_user_avatar_received(account, entry.key, entry.value);
+ on_user_avatar_received(account, entry.key, entry.value, false);
}
foreach (var entry in get_avatar_hashes(account, Source.VCARD).entries) {
- on_vcard_avatar_received(account, entry.key, entry.value);
+ on_vcard_avatar_received(account, entry.key, entry.value, false);
}
}
- private void on_user_avatar_received(Account account, Jid jid_, string id) {
+ private void on_user_avatar_received(Account account, Jid jid_, string id, bool is_live = true) {
Jid jid = jid_.bare_jid;
if (!user_avatars.has_key(jid) || user_avatars[jid] != id) {
user_avatars[jid] = id;
- set_avatar_hash(account, jid, id, Source.USER_AVATARS);
+ if (is_live) set_avatar_hash(account, jid, id, Source.USER_AVATARS);
}
received_avatar(jid, account);
}
@@ -181,13 +181,13 @@ public class AvatarManager : StreamInteractionModule, Object {
received_avatar(jid, account);
}
- private void on_vcard_avatar_received(Account account, Jid jid_, string id) {
+ private void on_vcard_avatar_received(Account account, Jid jid_, string id, bool is_live = true) {
bool is_gc = stream_interactor.get_module(MucManager.IDENTITY).might_be_groupchat(jid_.bare_jid, account);
Jid jid = is_gc ? jid_ : jid_.bare_jid;
if (!vcard_avatars.has_key(jid) || vcard_avatars[jid] != id) {
vcard_avatars[jid] = id;
- if (jid.is_bare()) { // don't save MUC occupant avatars
+ if (is_live && jid.is_bare()) { // don't save MUC occupant avatars
set_avatar_hash(account, jid, id, Source.VCARD);
}
}
diff --git a/libdino/src/service/call_store.vala b/libdino/src/service/call_store.vala
index bfc8255f..9e32517f 100644
--- a/libdino/src/service/call_store.vala
+++ b/libdino/src/service/call_store.vala
@@ -1,8 +1,8 @@
using Xmpp;
using Gee;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
namespace Dino {
diff --git a/libdino/src/service/chat_interaction.vala b/libdino/src/service/chat_interaction.vala
index b3ec1b93..def9ea86 100644
--- a/libdino/src/service/chat_interaction.vala
+++ b/libdino/src/service/chat_interaction.vala
@@ -170,7 +170,7 @@ public class ChatInteraction : StreamInteractionModule, Object {
if (conversation == null) return false;
Entities.Message? message = stream_interactor.get_module(MessageStorage.IDENTITY).get_last_message(conversation);
if (message == null || message.direction == Entities.Message.DIRECTION_SENT) return false;
- if (message.equals(conversation.read_up_to)) return false;
+ if (message.id == conversation.read_up_to_message_id) return false;
bool sent_marker = yield send_and_mark_message_displayed(conversation, message);
return sent_marker;
@@ -242,7 +242,7 @@ public class ChatInteraction : StreamInteractionModule, Object {
if (message.type_ == Message.Type.GROUPCHAT) return false;
if (message.stanza_id == null) return false;
if (message.direction == Entities.Message.DIRECTION_SENT) return false;
- if (message.equals(conversation.read_up_to)) return false;
+ if (message.id == conversation.read_up_to_message_id) return false;
if (conversation.get_send_marker_setting(stream_interactor) != Conversation.Setting.ON) return false;
XmppStream? stream = stream_interactor.get_stream(conversation.account);
diff --git a/libdino/src/service/contact_model.vala b/libdino/src/service/contact_model.vala
index 33f6126b..3e52e040 100644
--- a/libdino/src/service/contact_model.vala
+++ b/libdino/src/service/contact_model.vala
@@ -1,6 +1,5 @@
using Xmpp;
using Gee;
-using Qlite;
using Dino.Entities;
diff --git a/libdino/src/service/content_item_store.vala b/libdino/src/service/content_item_store.vala
index d74f9b05..5e440c76 100644
--- a/libdino/src/service/content_item_store.vala
+++ b/libdino/src/service/content_item_store.vala
@@ -1,7 +1,7 @@
using Gee;
using Dino.Entities;
-using Qlite;
+using Dino.Qlite;
using Xmpp;
namespace Dino {
@@ -26,6 +26,8 @@ public class ContentItemStore : StreamInteractionModule, Object {
this.db = db;
stream_interactor.get_module(FileManager.IDENTITY).received_file.connect(insert_file_transfer);
+ stream_interactor.get_module(FileManager2.IDENTITY).received_file.connect(insert_file_transfer);
+ stream_interactor.get_module(FileManager2.IDENTITY).received_file_group.connect(insert_file_group);
stream_interactor.get_module(MessageProcessor.IDENTITY).message_received.connect(announce_message);
stream_interactor.get_module(MessageProcessor.IDENTITY).message_sent.connect(announce_message);
stream_interactor.get_module(Calls.IDENTITY).call_incoming.connect(insert_call);
@@ -88,6 +90,13 @@ public class ContentItemStore : StreamInteractionModule, Object {
return call_item;
}
break;
+ case 4:
+ FileTransferGroup? file_group = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_group_by_id(foreign_id, conversation);
+ if (file_group != null) {
+ var file_group_item = new FileGroupItem(file_group, conversation, id);
+ return file_group_item;
+ }
+ break;
default:
warning("Unknown content item type: %i", content_type);
break;
@@ -300,6 +309,16 @@ public class ContentItemStore : StreamInteractionModule, Object {
new_item(item, conversation);
}
+ private void insert_file_group(FileTransferGroup file_group, Conversation conversation) {
+ FileGroupItem item = new FileGroupItem(file_group, conversation, file_group.id);
+ // TODO fix local time
+ item.id = db.add_content_item(conversation, item.time, item.time, 4, file_group.id, false);
+ if (collection_conversations.has_key(conversation)) {
+ collection_conversations.get(conversation).insert_item(item);
+ }
+ new_item(item, conversation);
+ }
+
private void insert_call(Call call, CallState call_state, Conversation conversation) {
CallItem item = new CallItem(call, conversation, -1);
item.id = db.add_content_item(conversation, call.time, call.local_time, 3, call.id, false);
@@ -415,6 +434,21 @@ public class FileItem : ContentItem {
}
}
+public class FileGroupItem : ContentItem {
+ public const string TYPE = "file_group";
+
+ public FileTransferGroup file_group;
+ public Conversation conversation;
+
+ public FileGroupItem(FileTransferGroup file_group, Conversation conversation, int id) {
+ var file_transfer = file_group.file_transfers.get(0);
+ base(id, TYPE, file_transfer.from, file_transfer.time, file_transfer.encryption, Message.Marked.NONE);
+
+ this.file_group = file_group;
+ this.conversation = conversation;
+ }
+}
+
public class CallItem : ContentItem {
public const string TYPE = "call";
diff --git a/libdino/src/service/counterpart_interaction_manager.vala b/libdino/src/service/counterpart_interaction_manager.vala
index f60cfb20..d6ca73a9 100644
--- a/libdino/src/service/counterpart_interaction_manager.vala
+++ b/libdino/src/service/counterpart_interaction_manager.vala
@@ -159,8 +159,13 @@ public class CounterpartInteractionManager : StreamInteractionModule, Object {
public bool mark_displayed_up_to_message(Conversation conversation, Message message) {
// Don't move read marker backwards because we get old info from another client
- if (conversation.read_up_to != null && conversation.read_up_to.local_time.compare(message.local_time) > 0) return false;
- conversation.read_up_to = message;
+ if (conversation.read_up_to_message_id != -1) {
+ Message read_up_to_message = stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_id(conversation.read_up_to_message_id, conversation);
+ if (read_up_to_message.local_time.compare(message.local_time) > 0) {
+ return false;
+ }
+ }
+ conversation.read_up_to_message_id = message.id;
ContentItem? content_item = stream_interactor.get_module(ContentItemStore.IDENTITY).get_content_item_for_message(conversation, message);
if (content_item == null) return true;
diff --git a/libdino/src/service/database.vala b/libdino/src/service/database.vala
index b38ccfca..30032e2c 100644
--- a/libdino/src/service/database.vala
+++ b/libdino/src/service/database.vala
@@ -1,13 +1,13 @@
using Gee;
-using Qlite;
using Xmpp;
using Dino.Entities;
+using Dino.Qlite;
namespace Dino {
public class Database : Qlite.Database {
- private const int VERSION = 33;
+ private const int VERSION = 35;
public class AccountTable : Table {
public Column<int> id = new Column.Integer("id") { primary_key = true, auto_increment = true };
@@ -49,6 +49,7 @@ public class Database : Qlite.Database {
base(db, "entity");
init({id, account_id, jid_id, resource, caps_hash, last_seen});
unique({account_id, jid_id, resource}, "IGNORE");
+ index("entity_account_jid_resource_idx", {account_id, jid_id, resource});
}
}
@@ -225,6 +226,28 @@ public class Database : Qlite.Database {
}
}
+ public class FileTransferGroupTable : Table {
+ public Column<int> id = new Column.Integer("id") { primary_key = true, auto_increment = true };
+ public Column<int> message_id = new Column.Integer("message_id");
+
+ internal FileTransferGroupTable(Database db) {
+ base(db, "file_transfer_group");
+ init({id, message_id});
+ index("file_transfer_group_message_id_idx", {message_id});
+ }
+ }
+
+ public class FileTransferGroupFileTransferTable : Table {
+ public Column<int> file_transfer_group_id = new Column.Integer("file_transfer_group_id");
+ public Column<int> file_transfer_id = new Column.Integer("file_transfer_id");
+
+ internal FileTransferGroupFileTransferTable(Database db) {
+ base(db, "file_transfer_group_file_transfer");
+ init({file_transfer_group_id, file_transfer_id});
+ index("file_transfer_group_file_transfer_id_idx", {file_transfer_group_id});
+ }
+ }
+
public class FileHashesTable : Table {
public Column<int> id = new Column.Integer("id");
public Column<string> algo = new Column.Text("algo") { not_null = true };
@@ -354,6 +377,7 @@ public class Database : Qlite.Database {
init({entity, feature});
unique({entity, feature}, "IGNORE");
index("entity_feature_idx", {entity});
+ index("entity_feature_feature_idx", {entity, feature});
}
}
@@ -489,6 +513,8 @@ public class Database : Qlite.Database {
public RealJidTable real_jid { get; private set; }
public OccupantIdTable occupantid { get; private set; }
public FileTransferTable file_transfer { get; private set; }
+ public FileTransferGroupTable file_transfer_group { get; private set; }
+ public FileTransferGroupFileTransferTable file_transfer_group_file_transfer { get; private set; }
public FileHashesTable file_hashes { get; private set; }
public FileThumbnailsTable file_thumbnails { get; private set; }
public SourcesTable sfs_sources { get; private set; }
@@ -525,6 +551,8 @@ public class Database : Qlite.Database {
occupantid = new OccupantIdTable(this);
real_jid = new RealJidTable(this);
file_transfer = new FileTransferTable(this);
+ file_transfer_group = new FileTransferGroupTable(this);
+ file_transfer_group_file_transfer = new FileTransferGroupFileTransferTable(this);
file_hashes = new FileHashesTable(this);
file_thumbnails = new FileThumbnailsTable(this);
sfs_sources = new SourcesTable(this);
@@ -542,7 +570,7 @@ public class Database : Qlite.Database {
settings = new SettingsTable(this);
account_settings = new AccountSettingsTable(this);
conversation_settings = new ConversationSettingsTable(this);
- init({ account, jid, entity, content_item, message, message_occupant_id, body_meta, message_correction, reply, real_jid, occupantid, file_transfer, file_hashes, file_thumbnails, sfs_sources, call, call_counterpart, conversation, avatar, entity_identity, entity_feature, roster, mam_catchup, reaction, muc_affiliation, muc_affiliation_version, settings, account_settings, conversation_settings });
+ init({ account, jid, entity, content_item, message, message_occupant_id, body_meta, message_correction, reply, real_jid, occupantid, file_transfer, file_transfer_group, file_transfer_group_file_transfer, file_hashes, file_thumbnails, sfs_sources, call, call_counterpart, conversation, avatar, entity_identity, entity_feature, roster, mam_catchup, reaction, muc_affiliation, muc_affiliation_version, settings, account_settings, conversation_settings });
try {
exec("PRAGMA journal_mode = WAL");
@@ -741,65 +769,6 @@ public class Database : Qlite.Database {
.perform();
}
- public Gee.List<Message> get_messages(Jid jid, Account account, Message.Type? type, int count, DateTime? before, DateTime? after, int id) {
- QueryBuilder select = message.select();
-
- if (before != null) {
- if (id > 0) {
- select.where(@"time < ? OR (time = ? AND message.id < ?)", { before.to_unix().to_string(), before.to_unix().to_string(), id.to_string() });
- } else {
- select.with(message.id, "<", id);
- }
- }
- if (after != null) {
- if (id > 0) {
- select.where(@"time > ? OR (time = ? AND message.id > ?)", { after.to_unix().to_string(), after.to_unix().to_string(), id.to_string() });
- } else {
- select.with(message.time, ">", (long) after.to_unix());
- }
- if (id > 0) {
- select.with(message.id, ">", id);
- }
- } else {
- select.order_by(message.time, "DESC");
- }
-
- select.with(message.counterpart_id, "=", get_jid_id(jid))
- .with(message.account_id, "=", account.id)
- .limit(count);
- if (jid.resourcepart != null) {
- select.with(message.counterpart_resource, "=", jid.resourcepart);
- }
- if (type != null) {
- select.with(message.type_, "=", (int) type);
- }
-
- select.outer_join_with(real_jid, real_jid.message_id, message.id);
- select.outer_join_with(message_correction, message_correction.message_id, message.id);
-
- LinkedList<Message> ret = new LinkedList<Message>();
- foreach (Row row in select) {
- try {
- ret.insert(0, new Message.from_row(this, row));
- } catch (InvalidJidError e) {
- warning("Ignoring message with invalid Jid: %s", e.message);
- }
- }
- return ret;
- }
-
- public Message? get_message_by_id(int id) {
- Row? row = message.row_with(message.id, id).inner;
- if (row != null) {
- try {
- return new Message.from_row(this, row);
- } catch (InvalidJidError e) {
- warning("Ignoring message with invalid Jid: %s", e.message);
- }
- }
- return null;
- }
-
public ArrayList<Conversation> get_conversations(Account account) {
ArrayList<Conversation> ret = new ArrayList<Conversation>();
foreach (Row row in conversation.select().with(conversation.account_id, "=", account.id)) {
diff --git a/libdino/src/service/entity_capabilities_storage.vala b/libdino/src/service/entity_capabilities_storage.vala
deleted file mode 100644
index c6d0bbbd..00000000
--- a/libdino/src/service/entity_capabilities_storage.vala
+++ /dev/null
@@ -1,71 +0,0 @@
-using Gee;
-using Qlite;
-using Xmpp;
-using Xmpp.Xep.ServiceDiscovery;
-
-namespace Dino {
-
-public class EntityCapabilitiesStorage : Xep.EntityCapabilities.Storage, Object {
-
- private Database db;
- private HashMap<string, Gee.List<string>> features_cache = new HashMap<string, Gee.List<string>>();
- private HashMap<string, Identity> identity_cache = new HashMap<string, Identity>();
-
- public EntityCapabilitiesStorage(Database db) {
- this.db = db;
- }
-
- public void store_features(string entity, Gee.List<string> features) {
- if (features_cache.has_key(entity)) return;
-
- foreach (string feature in features) {
- db.entity_feature.insert()
- .value(db.entity_feature.entity, entity)
- .value(db.entity_feature.feature, feature)
- .perform();
- }
- }
-
- public void store_identities(string entity, Gee.Set<Identity> identities) {
- foreach (Identity identity in identities) {
- if (identity.category == Identity.CATEGORY_CLIENT) {
- db.entity_identity.insert()
- .value(db.entity_identity.entity, entity)
- .value(db.entity_identity.category, identity.category)
- .value(db.entity_identity.type, identity.type_)
- .value(db.entity_identity.entity_name, identity.name)
- .perform();
- return;
- }
- }
- }
-
- public Gee.List<string> get_features(string entity) {
- Gee.List<string>? features = features_cache[entity];
- if (features != null) {
- return features;
- }
-
- features = new ArrayList<string>();
- foreach (Row row in db.entity_feature.select({db.entity_feature.feature}).with(db.entity_feature.entity, "=", entity)) {
- features.add(row[db.entity_feature.feature]);
- }
- features_cache[entity] = features;
- return features;
- }
-
- public Identity? get_identities(string entity) {
- Identity? identity = identity_cache[entity];
- if (identity != null) {
- return identity;
- }
-
- RowOption row = db.entity_identity.select().with(db.entity_identity.entity, "=", entity).single().row();
- if (row.is_present()) {
- identity = new Identity(row[db.entity_identity.category], row[db.entity_identity.type], row[db.entity_identity.entity_name]);
- }
- identity_cache[entity] = identity;
- return identity;
- }
-}
-}
diff --git a/libdino/src/service/entity_info.vala b/libdino/src/service/entity_info.vala
index 53d14b15..e9a20df1 100644
--- a/libdino/src/service/entity_info.vala
+++ b/libdino/src/service/entity_info.vala
@@ -1,6 +1,6 @@
using Gee;
using Dino.Entities;
-using Qlite;
+using Dino.Qlite;
using Xmpp;
using Xmpp.Xep;
using Xmpp.Xep.ServiceDiscovery;
@@ -12,7 +12,6 @@ public class EntityInfo : StreamInteractionModule, Object {
private StreamInteractor stream_interactor;
private Database db;
- private EntityCapabilitiesStorage entity_capabilities_storage;
private Dino.Entities.Settings settings;
private HashMap<Jid, string> entity_caps_hashes = new HashMap<Jid, string>(Jid.hash_func, Jid.equals_func);
@@ -40,7 +39,6 @@ public class EntityInfo : StreamInteractionModule, Object {
private EntityInfo(StreamInteractor stream_interactor, Database db, Dino.Entities.Settings settings) {
this.stream_interactor = stream_interactor;
this.db = db;
- this.entity_capabilities_storage = new EntityCapabilitiesStorage(db);
this.settings = settings;
stream_interactor.account_added.connect(on_account_added);
@@ -58,18 +56,32 @@ public class EntityInfo : StreamInteractionModule, Object {
Timeout.add_seconds(60 * 60, () => { remove_old_entities(); return true; });
}
- public async Gee.Set<Identity>? get_identities(Account account, Jid jid) {
+ public Gee.Set<Identity>? get_identities_offline(Account account, Jid jid) {
if (jid_identity.has_key(jid)) {
return jid_identity[jid];
}
- string? hash = entity_caps_hashes[jid];
- if (hash != null) {
- Gee.Set<Identity>? identities = get_stored_identities(hash);
- if (identities != null) return identities;
+ var qry = db.entity.select()
+ .with(db.entity.account_id, "=", account.id)
+ .with(db.entity.jid_id, "=", db.get_jid_id(jid))
+ .with(db.entity.resource, "=", jid.resourcepart ?? "")
+ .join_with(db.entity_identity, db.entity.caps_hash, db.entity_identity.entity);
+
+ HashSet<Identity> identities = new HashSet<Identity>(Identity.hash_func, Identity.equals_func);
+
+ foreach (Row row in qry) {
+ var identity = new Identity(row[db.entity_identity.category], row[db.entity_identity.type], row[db.entity_identity.entity_name]);
+ identities.add(identity);
}
- ServiceDiscovery.InfoResult? info_result = yield get_info_result(account, jid, hash);
+ return identities;
+ }
+
+ public async Gee.Set<Identity>? get_identities(Account account, Jid jid) {
+ var identities = get_identities_offline(account, jid);
+ if (identities != null) return identities;
+
+ ServiceDiscovery.InfoResult? info_result = yield get_info_result(account, jid, entity_caps_hashes[jid]);
if (info_result != null) {
return info_result.identities;
}
@@ -261,7 +273,7 @@ public class EntityInfo : StreamInteractionModule, Object {
return identities;
}
- private async ServiceDiscovery.InfoResult? get_info_result(Account account, Jid jid, string? hash = null) {
+ public async ServiceDiscovery.InfoResult? get_info_result(Account account, Jid jid, string? hash = null) {
XmppStream? stream = stream_interactor.get_stream(account);
if (stream == null) return null;
@@ -298,7 +310,6 @@ public class EntityInfo : StreamInteractionModule, Object {
}
private void initialize_modules(Account account, ArrayList<XmppStreamModule> modules) {
- modules.add(new Xep.EntityCapabilities.Module(entity_capabilities_storage));
var entity_time_module = modules.first_match((it) => it is EntityTime.Module) as EntityTime.Module;
if (entity_time_module != null) {
settings.bind_property("share-time", entity_time_module, "enabled", BindingFlags.SYNC_CREATE);
diff --git a/libdino/src/service/fallback_body.vala b/libdino/src/service/fallback_body.vala
index 0ce89ade..09aa839a 100644
--- a/libdino/src/service/fallback_body.vala
+++ b/libdino/src/service/fallback_body.vala
@@ -1,5 +1,4 @@
using Gee;
-using Qlite;
using Xmpp;
using Xmpp.Xep;
diff --git a/libdino/src/service/file_manager.vala b/libdino/src/service/file_manager.vala
index 964278a5..60b7fafa 100644
--- a/libdino/src/service/file_manager.vala
+++ b/libdino/src/service/file_manager.vala
@@ -16,17 +16,22 @@ public class FileManager : StreamInteractionModule, Object {
private StreamInteractor stream_interactor;
private Database db;
- private Gee.List<FileSender> file_senders = new ArrayList<FileSender>();
+ public Gee.List<FileSender> file_senders = new ArrayList<FileSender>();
private Gee.List<FileEncryptor> file_encryptors = new ArrayList<FileEncryptor>();
- private Gee.List<FileDecryptor> file_decryptors = new ArrayList<FileDecryptor>();
+ public Gee.List<FileDecryptor> file_decryptors = new ArrayList<FileDecryptor>();
private Gee.List<FileProvider> file_providers = new ArrayList<FileProvider>();
- private Gee.List<FileMetadataProvider> file_metadata_providers = new ArrayList<FileMetadataProvider>();
+ public Gee.List<FileMetadataProvider> file_metadata_providers = new ArrayList<FileMetadataProvider>();
public StatelessFileSharing sfs {
owned get { return stream_interactor.get_module(StatelessFileSharing.IDENTITY); }
private set { }
}
+ public FileManager2 fm2 {
+ owned get { return stream_interactor.get_module(FileManager2.IDENTITY); }
+ private set { }
+ }
+
public static void start(StreamInteractor stream_interactor, Database db) {
FileManager m = new FileManager(stream_interactor, db);
stream_interactor.add_module(m);
@@ -97,7 +102,7 @@ public class FileManager : StreamInteractionModule, Object {
try {
file_transfer.input_stream = yield file.read_async();
- yield save_file(file_transfer);
+ yield fm2.save_file(file_transfer);
stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file(file_transfer);
conversation.last_active = file_transfer.time;
@@ -151,7 +156,7 @@ public class FileManager : StreamInteractionModule, Object {
file_transfer.state = FileTransfer.State.IN_PROGRESS;
- // Update current download progress in the FileTransfer
+ // Update current upload progress in the FileTransfer
LimitInputStream? limit_stream = file_transfer.input_stream as LimitInputStream;
if (limit_stream == null) {
limit_stream = new LimitInputStream(file_transfer.input_stream, file_meta.size);
@@ -216,19 +221,6 @@ public class FileManager : StreamInteractionModule, Object {
file_metadata_providers.add(file_metadata_provider);
}
- public bool is_sender_trustworthy(FileTransfer file_transfer, Conversation conversation) {
- if (file_transfer.direction == FileTransfer.DIRECTION_SENT) return true;
-
- Jid relevant_jid = conversation.counterpart;
- if (conversation.type_ == Conversation.Type.GROUPCHAT) {
- relevant_jid = stream_interactor.get_module(MucManager.IDENTITY).get_real_jid(file_transfer.from, conversation.account);
- }
- if (relevant_jid == null) return false;
-
- bool in_roster = stream_interactor.get_module(RosterManager.IDENTITY).get_roster_item(conversation.account, relevant_jid) != null;
- return in_roster;
- }
-
private async FileMeta get_file_meta(FileProvider file_provider, FileTransfer file_transfer, Conversation conversation, FileReceiveData receive_data_) throws FileReceiveError {
FileReceiveData receive_data = receive_data_;
FileMeta file_meta = file_provider.get_file_meta(file_transfer);
@@ -390,7 +382,7 @@ public class FileManager : StreamInteractionModule, Object {
FileTransfer file_transfer = create_file_transfer_from_provider_incoming(file_provider, info, from, time, local_time, conversation, receive_data, file_meta);
stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file(file_transfer);
- if (is_sender_trustworthy(file_transfer, conversation)) {
+ if (fm2.is_sender_trustworthy(file_transfer, conversation)) {
try {
yield get_file_meta(file_provider, file_transfer, conversation, receive_data);
} catch (Error e) {
@@ -408,20 +400,6 @@ public class FileManager : StreamInteractionModule, Object {
received_file(file_transfer, conversation);
}
- private async void save_file(FileTransfer file_transfer) throws FileSendError {
- try {
- string filename = Random.next_int().to_string("%x") + "_" + file_transfer.file_name;
- File file = File.new_for_path(Path.build_filename(get_storage_dir(), filename));
- OutputStream os = file.create(FileCreateFlags.REPLACE_DESTINATION);
- yield os.splice_async(file_transfer.input_stream, OutputStreamSpliceFlags.CLOSE_SOURCE | OutputStreamSpliceFlags.CLOSE_TARGET);
- file_transfer.state = FileTransfer.State.COMPLETE;
- file_transfer.path = filename;
- file_transfer.input_stream = new LimitInputStream(yield file.read_async(), file_transfer.size);
- } catch (Error e) {
- throw new FileSendError.SAVE_FAILED("Saving file error: %s".printf(e.message));
- }
- }
-
public Message? get_message_for_file_transfer(FileTransfer file_transfer, Conversation conversation) {
if ((file_transfer.provider == 0 || file_transfer.provider == 2) && file_transfer.info != null) {
return stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_id(int.parse(file_transfer.info), conversation);
diff --git a/libdino/src/service/file_transfer_storage.vala b/libdino/src/service/file_transfer_storage.vala
index 64bb6b81..33ebcbce 100644
--- a/libdino/src/service/file_transfer_storage.vala
+++ b/libdino/src/service/file_transfer_storage.vala
@@ -1,8 +1,8 @@
using Xmpp;
using Gee;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
namespace Dino {
@@ -15,6 +15,8 @@ namespace Dino {
private WeakMap<int, FileTransfer> files_by_db_id = new WeakMap<int, FileTransfer>();
private WeakMap<int, FileTransfer> files_by_message_id = new WeakMap<int, FileTransfer>();
+ private WeakMap<int, FileTransferGroup> file_group_by_db_id = new WeakMap<int, FileTransferGroup>();
+ private WeakMap<int, FileTransferGroup> file_group_by_message_id = new WeakMap<int, FileTransferGroup>();
private WeakMap<string, FileTransfer> files_by_message_and_file_id = new WeakMap<string, FileTransfer>();
public static void start(StreamInteractor stream_interactor, Database db) {
@@ -32,7 +34,13 @@ namespace Dino {
cache_file(file_transfer);
}
- public FileTransfer? get_file_by_id(int id, Conversation conversation) {
+ public void add_file_group(FileTransferGroup file_group) {
+ file_group.persist(db);
+ cache_file_group(file_group);
+ }
+
+ // `conversation` should be provided, otherwise the FileTransfer.ourpart might be wrong
+ public FileTransfer? get_file_by_id(int id, Conversation? conversation) {
FileTransfer? file_transfer = files_by_db_id[id];
if (file_transfer != null) {
return file_transfer;
@@ -58,6 +66,29 @@ namespace Dino {
return create_file_from_row_opt(row_option, conversation);
}
+ public FileTransferGroup? get_file_group_by_id(int id, Conversation conversation) {
+ FileTransferGroup? file_group = file_group_by_db_id[id];
+ if (file_group != null) {
+ return file_group;
+ }
+
+ RowOption row_option = db.file_transfer_group.select().with(db.file_transfer_group.id, "=", id).row();
+ return row_option.is_present() ? create_file_group_from_row(row_option.inner, conversation) : null;
+ }
+
+ public FileTransferGroup get_file_group_by_message_id(int id, Conversation conversation) {
+ FileTransferGroup? file_group = file_group_by_message_id[id];
+ if (file_group != null) {
+ return file_group;
+ }
+
+ foreach (Row row in db.file_transfer_group.select().with(db.file_transfer_group.message_id, "=", id)) {
+ return create_file_group_from_row(row, conversation);
+ }
+
+ return null;
+ }
+
public FileTransfer get_files_by_message_and_file_id(int message_id, string file_sharing_id, Conversation conversation) {
string combined_identifier = message_id.to_string() + file_sharing_id;
FileTransfer? file_transfer = files_by_message_and_file_id[combined_identifier];
@@ -79,13 +110,13 @@ namespace Dino {
return null;
}
- private FileTransfer? create_file_from_row_opt(RowOption row_opt, Conversation conversation) {
+ private FileTransfer? create_file_from_row_opt(RowOption row_opt, Conversation? conversation) {
if (!row_opt.is_present()) return null;
try {
FileTransfer file_transfer = new FileTransfer.from_row(db, row_opt.inner, FileManager.get_storage_dir());
- if (conversation.type_.is_muc_semantic()) {
+ if (conversation != null && conversation.type_.is_muc_semantic()) {
file_transfer.ourpart = conversation.counterpart.with_resource(file_transfer.ourpart.resourcepart);
}
@@ -97,6 +128,21 @@ namespace Dino {
return null;
}
+ private FileTransferGroup? create_file_group_from_row(Row file_transfer_group_row, Conversation conversation) {
+ QueryBuilder query = db.file_transfer_group_file_transfer.select()
+ .with(db.file_transfer_group_file_transfer.file_transfer_group_id, "=", file_transfer_group_row[db.file_transfer_group.id]);
+ var file_transfers = new ArrayList<FileTransfer>();
+ foreach (Qlite.Row row in query) {
+ FileTransfer file_transfer = get_file_by_id(row[db.file_transfer_group_file_transfer.file_transfer_id], conversation);
+ file_transfers.add(file_transfer);
+ }
+ if (file_transfers.size == 0) return null;
+
+ FileTransferGroup file_group = new FileTransferGroup.from_row(db, file_transfer_group_row, file_transfers);
+ cache_file_group(file_group);
+ return file_group;
+ }
+
private void cache_file(FileTransfer file_transfer) {
files_by_db_id[file_transfer.id] = file_transfer;
@@ -109,5 +155,10 @@ namespace Dino {
}
}
}
+
+ private void cache_file_group(FileTransferGroup file_group) {
+ file_group_by_db_id[file_group.id] = file_group;
+// file_group_by_message_id[file_group.message_id] = file_group;
+ }
}
} \ No newline at end of file
diff --git a/libdino/src/service/history_sync.vala b/libdino/src/service/history_sync.vala
index 9bd3f54f..a7a99d2d 100644
--- a/libdino/src/service/history_sync.vala
+++ b/libdino/src/service/history_sync.vala
@@ -3,7 +3,7 @@ using Gee;
using Xmpp;
using Xmpp.Xep;
using Dino.Entities;
-using Qlite;
+using Dino.Qlite;
public class Dino.HistorySync {
diff --git a/plugins/ice/src/transport_parameters.vala b/libdino/src/service/ice.vala
index 66dde8b1..0e168be9 100644
--- a/plugins/ice/src/transport_parameters.vala
+++ b/libdino/src/service/ice.vala
@@ -1,9 +1,153 @@
using Gee;
+
+using Dino.Crypto;
using Xmpp;
using Xmpp.Xep;
+private extern const size_t NICE_ADDRESS_STRING_LEN;
+
+public class Dino.IceUdpModule : Xmpp.Xep.JingleIceUdp.Module {
+
+ public string? stun_ip = null;
+ public uint stun_port = 0;
+ public string? turn_ip = null;
+ public Xep.ExternalServiceDiscovery.Service? turn_service = null;
+
+ private static weak Nice.Agent? agent;
+ private HashMap<string, DtlsSrtp.CredentialsCapsule> cerds = new HashMap<string, DtlsSrtp.CredentialsCapsule>();
+
+ private uint timeout = 0;
+
+ public override void attach(XmppStream stream) {
+ base.attach(stream);
+ external_discovery_refresh_services.begin(stream);
+ }
+ public override void detach(XmppStream stream) {
+ base.detach(stream);
+ stop_external_discovery_refresh_services();
+ }
+
+ private Nice.Agent get_agent() {
+ Nice.Agent? agent = this.agent;
+ if (agent == null) {
+ Nice.debug_enable(true);
+ agent = new Nice.Agent(MainContext.@default(), Nice.Compatibility.RFC5245);
+ if (stun_ip != null) {
+ agent.stun_server = stun_ip;
+ agent.stun_server_port = stun_port;
+ }
+ agent.ice_tcp = false;
+ agent.set_software("Dino");
+ agent.weak_ref(agent_unweak);
+ this.agent = agent;
+ debug("STUN server for libnice %s %u", agent.stun_server, agent.stun_server_port);
+ }
+ return agent;
+ }
+
+ private void agent_unweak() {
+ this.agent = null;
+ }
+
+ public override Jingle.TransportParameters create_transport_parameters(XmppStream stream, uint8 components, Jid local_full_jid, Jid peer_full_jid) {
+ DtlsSrtp.CredentialsCapsule? cred = get_create_credentials(local_full_jid, peer_full_jid);
+ return new IceUdpTransportParameters(get_agent(), cred, turn_service, turn_ip, components, local_full_jid, peer_full_jid);
+ }
+
+ public override Jingle.TransportParameters parse_transport_parameters(XmppStream stream, uint8 components, Jid local_full_jid, Jid peer_full_jid, StanzaNode transport) throws Jingle.IqError {
+ DtlsSrtp.CredentialsCapsule? cred = get_create_credentials(local_full_jid, peer_full_jid);
+ return new IceUdpTransportParameters(get_agent(), cred, turn_service, turn_ip, components, local_full_jid, peer_full_jid, transport);
+ }
+
+ private DtlsSrtp.CredentialsCapsule? get_create_credentials(Jid local_full_jid, Jid peer_full_jid) {
+ string from_to_id = local_full_jid.to_string() + peer_full_jid.to_string();
+ try {
+ if (!cerds.has_key(from_to_id)) cerds[from_to_id] = DtlsSrtp.generate_credentials();
+ } catch (GLib.Error e) {
+ warning("Error creating dtls credentials: %s", e.message);
+ }
+ return cerds[from_to_id];
+ }
+
+ private void stop_external_discovery_refresh_services() {
+ if (timeout != 0) {
+ Source.remove(timeout);
+ timeout = 0;
+ }
+ }
-public class Dino.Plugins.Ice.TransportParameters : JingleIceUdp.IceUdpTransportParameters {
+ private async void external_discovery_refresh_services(XmppStream stream) {
+ stop_external_discovery_refresh_services();
+ Gee.List<Xep.ExternalServiceDiscovery.Service> services = yield ExternalServiceDiscovery.request_services(stream);
+ foreach (Xep.ExternalServiceDiscovery.Service service in services) {
+ if (service.transport == "udp" && (service.ty == "stun" || service.ty == "turn")) {
+ InetAddress? ip = yield lookup_ipv4_addess(service.host);
+ if (ip == null) continue;
+
+ if (ip.is_any || ip.is_link_local || ip.is_loopback || ip.is_multicast || ip.is_site_local) {
+ warning("Ignoring STUN/TURN server at %s", service.host);
+ continue;
+ }
+
+ if (service.ty == "stun") {
+ debug("Server offers STUN server: %s:%u, resolved to %s", service.host, service.port, ip.to_string());
+ stun_ip = ip.to_string();
+ stun_port = service.port;
+ } else if (service.ty == "turn") {
+ debug("Server offers TURN server: %s:%u, resolved to %s", service.host, service.port, ip.to_string());
+ turn_ip = ip.to_string();
+ turn_service = service;
+ }
+ }
+ }
+ if (stun_ip == null) {
+ InetAddress ip = yield lookup_ipv4_addess("stun.dino.im");
+ if (ip == null) return;
+
+ debug("Using fallback STUN server: stun.dino.im:7886, resolved to %s", ip.to_string());
+
+ stun_ip = ip.to_string();
+ stun_port = 7886;
+ }
+
+ // Refresh TURN credentials before they expire
+ if (turn_service != null) {
+ DateTime? expires = turn_service.expires;
+ if (expires != null) {
+ uint refresh_delay = (uint) (expires.to_unix() - new DateTime.now_utc().to_unix()) / 2;
+
+ if (refresh_delay >= 300 && refresh_delay <= (int64) uint.MAX) { // 5 min < refetch < max
+ debug("Re-fetching TURN credentials in %u sec", refresh_delay);
+
+ stop_external_discovery_refresh_services();
+ timeout = Timeout.add_seconds((uint) refresh_delay, () => {
+ timeout = 0;
+ external_discovery_refresh_services.begin(stream);
+ return false;
+ });
+ } else {
+ warning("TURN credentials' expiry time = %u, *not* re-fetching", refresh_delay);
+ }
+ }
+ }
+ }
+
+ private async InetAddress? lookup_ipv4_addess(string host) {
+ try {
+ Resolver resolver = Resolver.get_default();
+ GLib.List<GLib.InetAddress>? ips = yield resolver.lookup_by_name_async(host);
+ foreach (GLib.InetAddress ina in ips) {
+ if (ina.get_family() != SocketFamily.IPV4) continue;
+ return ina;
+ }
+ } catch (GLib.Error e) {
+ warning("Failed looking up IP address of %s", host);
+ }
+ return null;
+ }
+}
+
+public class Dino.IceUdpTransportParameters : JingleIceUdp.IceUdpTransportParameters {
private Nice.Agent agent;
private uint stream_id;
private bool we_want_connection;
@@ -13,6 +157,11 @@ public class Dino.Plugins.Ice.TransportParameters : JingleIceUdp.IceUdpTransport
private MainContext thread_context;
private MainLoop thread_loop;
+ private static bool is_component_ready(Nice.Agent agent, uint stream_id, uint component_id) {
+ var state = agent.get_component_state(stream_id, component_id);
+ return state == Nice.ComponentState.CONNECTED || state == Nice.ComponentState.READY;
+ }
+
private class DatagramConnection : Jingle.DatagramConnection {
private Nice.Agent agent;
private DtlsSrtp.Handler? dtls_srtp_handler;
@@ -20,7 +169,7 @@ public class Dino.Plugins.Ice.TransportParameters : JingleIceUdp.IceUdpTransport
private string? error;
private ulong datagram_received_id;
- public DatagramConnection(Nice.Agent agent, DtlsSrtp.Handler? dtls_srtp_handler, uint stream_id, uint8 component_id) {
+ internal DatagramConnection(Nice.Agent agent, DtlsSrtp.Handler? dtls_srtp_handler, uint stream_id, uint8 component_id) {
this.agent = agent;
this.dtls_srtp_handler = dtls_srtp_handler;
this.stream_id = stream_id;
@@ -63,7 +212,7 @@ public class Dino.Plugins.Ice.TransportParameters : JingleIceUdp.IceUdpTransport
}
}
- public TransportParameters(Nice.Agent agent, DtlsSrtp.CredentialsCapsule? credentials, Xep.ExternalServiceDiscovery.Service? turn_service, string? turn_ip, uint8 components, Jid local_full_jid, Jid peer_full_jid, StanzaNode? node = null) {
+ internal IceUdpTransportParameters(Nice.Agent agent, DtlsSrtp.CredentialsCapsule? credentials, Xep.ExternalServiceDiscovery.Service? turn_service, string? turn_ip, uint8 components, Jid local_full_jid, Jid peer_full_jid, StanzaNode? node = null) {
base(components, local_full_jid, peer_full_jid, node);
this.we_want_connection = (node == null);
this.agent = agent;
@@ -124,11 +273,11 @@ public class Dino.Plugins.Ice.TransportParameters : JingleIceUdp.IceUdpTransport
agent.gather_candidates(stream_id);
}
- private static DtlsSrtp.Handler setup_dtls(TransportParameters tp, DtlsSrtp.CredentialsCapsule credentials) {
+ private static DtlsSrtp.Handler setup_dtls(IceUdpTransportParameters tp, DtlsSrtp.CredentialsCapsule credentials) {
var weak_self = WeakRef(tp);
DtlsSrtp.Handler dtls_srtp = new DtlsSrtp.Handler.with_cert(credentials);
dtls_srtp.send_data.connect((data) => {
- TransportParameters self = (TransportParameters) weak_self.get();
+ IceUdpTransportParameters self = (IceUdpTransportParameters) weak_self.get();
if (self != null) self.agent.send(self.stream_id, 1, data);
});
return dtls_srtp;
diff --git a/libdino/src/service/message_correction.vala b/libdino/src/service/message_correction.vala
index 77625c72..5f04bdbc 100644
--- a/libdino/src/service/message_correction.vala
+++ b/libdino/src/service/message_correction.vala
@@ -3,7 +3,7 @@ using Gee;
using Xmpp;
using Xmpp.Xep;
using Dino.Entities;
-using Qlite;
+using Dino.Qlite;
namespace Dino {
@@ -29,7 +29,6 @@ public class MessageCorrection : StreamInteractionModule, MessageListener {
public MessageCorrection(StreamInteractor stream_interactor, Database db) {
this.stream_interactor = stream_interactor;
this.db = db;
- stream_interactor.account_added.connect(on_account_added);
stream_interactor.get_module(MessageProcessor.IDENTITY).received_pipeline.connect(this);
stream_interactor.get_module(MessageProcessor.IDENTITY).build_message_stanza.connect(check_add_correction_node);
stream_interactor.get_module(PresenceManager.IDENTITY).received_offline_presence.connect((jid, account) => {
@@ -232,23 +231,6 @@ public class MessageCorrection : StreamInteractionModule, MessageListener {
return -1;
}
- private void on_account_added(Account account) {
- Gee.List<Conversation> conversations = stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations(account);
- foreach (Conversation conversation in conversations) {
- if (conversation.type_ != Conversation.Type.CHAT) continue;
-
- HashMap<Jid, Message> last_conversation_messages = new HashMap<Jid, Message>(Jid.hash_func, Jid.equals_func);
- Gee.List<Message> messages = stream_interactor.get_module(MessageStorage.IDENTITY).get_messages(conversation);
- for (int i = messages.size - 1; i > 0; i--) {
- Message message = messages[i];
- if (!last_conversation_messages.has_key(message.from) && message.edit_to == null) {
- last_conversation_messages[message.from] = message;
- }
- }
- last_messages[conversation] = last_conversation_messages;
- }
- }
-
private void cache_unmatched_correction(ContentItem content_item, Conversation conversation) {
MessageItem message_item = content_item as MessageItem;
if (message_item == null || message_item.message.edit_to == null) return;
diff --git a/libdino/src/service/message_deletion.vala b/libdino/src/service/message_deletion.vala
index 4467311e..0060a7e2 100644
--- a/libdino/src/service/message_deletion.vala
+++ b/libdino/src/service/message_deletion.vala
@@ -3,7 +3,6 @@ using Gee;
using Xmpp;
using Xmpp.Xep;
using Dino.Entities;
-using Qlite;
namespace Dino {
diff --git a/libdino/src/service/message_processor.vala b/libdino/src/service/message_processor.vala
index b9c23240..7997af67 100644
--- a/libdino/src/service/message_processor.vala
+++ b/libdino/src/service/message_processor.vala
@@ -3,7 +3,7 @@ using Gee;
using Xmpp;
using Xmpp.Xep;
using Dino.Entities;
-using Qlite;
+using Dino.Qlite;
namespace Dino {
@@ -472,12 +472,8 @@ public class MessageProcessor : StreamInteractionModule, Object {
// Set an origin ID if a MUC doen't guarantee to keep IDs
if (conversation.type_ == Conversation.Type.GROUPCHAT) {
- Xep.Muc.Flag? flag = stream.get_flag(Xep.Muc.Flag.IDENTITY);
- if (flag == null) {
- message.marked = Entities.Message.Marked.UNSENT;
- return;
- }
- if(!flag.has_room_feature(conversation.counterpart, Xep.Muc.Feature.STABLE_ID)) {
+ var supports_stable_ids = stream_interactor.get_module(EntityInfo.IDENTITY).has_feature_cached(conversation.account, conversation.counterpart, Xep.Muc.FEATURE_STABLE_ID);
+ if(!supports_stable_ids) {
UniqueStableStanzaIDs.set_origin_id(new_message, message.stanza_id);
}
}
diff --git a/libdino/src/service/message_storage.vala b/libdino/src/service/message_storage.vala
index d6b8d6e3..0bcbe533 100644
--- a/libdino/src/service/message_storage.vala
+++ b/libdino/src/service/message_storage.vala
@@ -1,8 +1,8 @@
using Xmpp;
using Gee;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
namespace Dino {
@@ -35,41 +35,82 @@ public class MessageStorage : StreamInteractionModule, Object {
cache_message(message, conversation);
}
- public Gee.List<Message> get_messages(Conversation conversation, int count = 50) {
- var query = db.message.select()
+ public Message? get_last_message(Conversation conversation) {
+ Gee.List<Message> messages = get_messages(conversation, 1);
+
+ if (messages.size > 0) {
+ return messages[0];
+ }
+
+ return null;
+ }
+
+ public Message? get_last_message_by_sent_resource(Conversation conversation, string resource) {
+ RowOption row = db.message.select({db.message.id})
.with(db.message.account_id, "=", conversation.account.id)
.with(db.message.counterpart_id, "=", db.get_jid_id(conversation.counterpart))
.with(db.message.type_, "=", (int) Util.get_message_type_for_conversation(conversation))
+ .with(db.message.our_resource, "=", resource)
+ .with(db.message.direction, "=", Message.DIRECTION_SENT)
.order_by(db.message.time, "DESC")
- .outer_join_with(db.message_occupant_id, db.message_occupant_id.message_id, db.message.id)
- .outer_join_with(db.message_correction, db.message_correction.message_id, db.message.id)
- .outer_join_with(db.reply, db.reply.message_id, db.message.id)
- .limit(count);
+ .single().row();
+ return get_message_by_id_row_opt(row, conversation);
+ }
- Gee.List<Message> ret = new LinkedList<Message>(Message.equals_func);
- foreach (Row row in query) {
- Message? message = messages_by_db_id[row[db.message.id]];
- if (message == null) {
- message = create_message_from_row(row, conversation);
+ public Gee.List<Message> get_messages(Conversation conversation, int count = 50, Message.Type? type = null, DateTime? before = null, DateTime? after = null, int id = 0) {
+ QueryBuilder select = db.message.select();
+
+ if (before != null) {
+ if (id > 0) {
+ select.where(@"time < ? OR (time = ? AND message.id < ?)", { before.to_unix().to_string(), before.to_unix().to_string(), id.to_string() });
+ } else {
+ select.with(db.message.id, "<", id);
}
- ret.insert(0, message);
+ }
+ if (after != null) {
+ if (id > 0) {
+ select.where(@"time > ? OR (time = ? AND message.id > ?)", { after.to_unix().to_string(), after.to_unix().to_string(), id.to_string() });
+ } else {
+ select.with(db.message.time, ">", (long) after.to_unix());
+ }
+ if (id > 0) {
+ select.with(db.message.id, ">", id);
+ }
+ } else {
+ select.order_by(db.message.time, "DESC");
}
- return ret;
- }
+ select.with(db.message.counterpart_id, "=", db.get_jid_id(conversation.counterpart))
+ .with(db.message.account_id, "=", conversation.account.id)
+ .limit(count);
+ if (conversation.counterpart.resourcepart != null) {
+ select.with(db.message.counterpart_resource, "=", conversation.counterpart.resourcepart);
+ }
+ if (type != null) {
+ select.with(db.message.type_, "=", (int) type);
+ }
- public Message? get_last_message(Conversation conversation) {
- Gee.List<Message> messages = get_messages(conversation, 1);
+ select.outer_join_with(db.real_jid, db.real_jid.message_id, db.message.id);
+ select.outer_join_with(db.message_correction, db.message_correction.message_id, db.message.id);
+ select.outer_join_with(db.message_occupant_id, db.message_occupant_id.message_id, db.message.id);
+ select.outer_join_with(db.reply, db.reply.message_id, db.message.id);
- if (messages.size > 0) {
- return messages[0];
+ LinkedList<Message> ret = new LinkedList<Message>();
+ foreach (Row row in select) {
+ try {
+ Message? message = messages_by_db_id[row[db.message.id]];
+ if (message == null) {
+ message = create_message_from_row(row, conversation);
+ }
+ } catch (InvalidJidError e) {
+ warning("Ignoring message with invalid Jid: %s", e.message);
+ }
}
-
- return null;
+ return ret;
}
public Gee.List<MessageItem> get_messages_before_message(Conversation? conversation, DateTime before, int id, int count = 20) {
- Gee.List<Message> db_messages = db.get_messages(conversation.counterpart, conversation.account, Util.get_message_type_for_conversation(conversation), count, before, null, id);
+ Gee.List<Message> db_messages = get_messages(conversation, count, Util.get_message_type_for_conversation(conversation), before, null, id);
Gee.List<MessageItem> ret = new ArrayList<MessageItem>();
foreach (Message message in db_messages) {
ret.add(new MessageItem(message, conversation, -1));
@@ -78,7 +119,7 @@ public class MessageStorage : StreamInteractionModule, Object {
}
public Gee.List<MessageItem> get_messages_after_message(Conversation? conversation, DateTime after, int id, int count = 20) {
- Gee.List<Message> db_messages = db.get_messages(conversation.counterpart, conversation.account, Util.get_message_type_for_conversation(conversation), count, null, after, id);
+ Gee.List<Message> db_messages = get_messages(conversation, count, Util.get_message_type_for_conversation(conversation), null, after, id);
Gee.List<MessageItem> ret = new ArrayList<MessageItem>();
foreach (Message message in db_messages) {
ret.add(new MessageItem(message, conversation, -1));
@@ -86,6 +127,11 @@ public class MessageStorage : StreamInteractionModule, Object {
return ret;
}
+ private Message? get_message_by_id_row_opt(RowOption row_option, Conversation conversation) {
+ if (!row_option.is_present()) return null;
+ return get_message_by_id(row_option[db.message.id], conversation);
+ }
+
public Message? get_message_by_id(int id, Conversation conversation) {
Message? message = messages_by_db_id[id];
if (message != null) {
@@ -93,9 +139,11 @@ public class MessageStorage : StreamInteractionModule, Object {
}
RowOption row_option = db.message.select().with(db.message.id, "=", id)
+ .outer_join_with(db.real_jid, db.real_jid.message_id, db.message.id)
.outer_join_with(db.message_occupant_id, db.message_occupant_id.message_id, db.message.id)
.outer_join_with(db.message_correction, db.message_correction.message_id, db.message.id)
.outer_join_with(db.reply, db.reply.message_id, db.message.id)
+ .single()
.row();
return create_message_from_row_opt(row_option, conversation);
@@ -103,9 +151,9 @@ public class MessageStorage : StreamInteractionModule, Object {
public Message? get_message_by_referencing_id(string id, Conversation conversation) {
if (conversation.type_ == Conversation.Type.CHAT) {
- return stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_stanza_id(id, conversation);
+ return get_message_by_stanza_id(id, conversation);
} else {
- return stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_server_id(id, conversation);
+ return get_message_by_server_id(id, conversation);
}
}
@@ -117,15 +165,12 @@ public class MessageStorage : StreamInteractionModule, Object {
}
}
- var query = db.message.select()
+ var query = db.message.select({db.message.id})
.with(db.message.account_id, "=", conversation.account.id)
.with(db.message.counterpart_id, "=", db.get_jid_id(conversation.counterpart))
.with(db.message.type_, "=", (int) Util.get_message_type_for_conversation(conversation))
.with(db.message.stanza_id, "=", stanza_id)
- .order_by(db.message.time, "DESC")
- .outer_join_with(db.message_occupant_id, db.message_occupant_id.message_id, db.message.id)
- .outer_join_with(db.message_correction, db.message_correction.message_id, db.message.id)
- .outer_join_with(db.reply, db.reply.message_id, db.message.id);
+ .order_by(db.message.time, "DESC");
if (conversation.counterpart.resourcepart != null) {
query.with(db.message.counterpart_resource, "=", conversation.counterpart.resourcepart);
@@ -133,7 +178,7 @@ public class MessageStorage : StreamInteractionModule, Object {
RowOption row_option = query.single().row();
- return create_message_from_row_opt(row_option, conversation);
+ return get_message_by_id_row_opt(row_option, conversation);
}
public Message? get_message_by_server_id(string server_id, Conversation conversation) {
@@ -144,25 +189,20 @@ public class MessageStorage : StreamInteractionModule, Object {
}
}
- var query = db.message.select()
+ var query = db.message.select({db.message.id})
.with(db.message.account_id, "=", conversation.account.id)
.with(db.message.counterpart_id, "=", db.get_jid_id(conversation.counterpart))
.with(db.message.type_, "=", (int) Util.get_message_type_for_conversation(conversation))
.with(db.message.server_id, "=", server_id)
- .order_by(db.message.time, "DESC")
- .outer_join_with(db.message_occupant_id, db.message_occupant_id.message_id, db.message.id)
- .outer_join_with(db.message_correction, db.message_correction.message_id, db.message.id)
- .outer_join_with(db.reply, db.reply.message_id, db.message.id);
+ .order_by(db.message.time, "DESC");
- if (conversation.counterpart.resourcepart == null) {
- query.with_null(db.message.counterpart_resource);
- } else {
+ if (conversation.counterpart.resourcepart != null) {
query.with(db.message.counterpart_resource, "=", conversation.counterpart.resourcepart);
}
RowOption row_option = query.single().row();
- return create_message_from_row_opt(row_option, conversation);
+ return get_message_by_id_row_opt(row_option, conversation);
}
private Message? create_message_from_row_opt(RowOption row_option, Conversation conversation) {
diff --git a/libdino/src/service/module_manager.vala b/libdino/src/service/module_manager.vala
index 5ba4fe80..a6efe629 100644
--- a/libdino/src/service/module_manager.vala
+++ b/libdino/src/service/module_manager.vala
@@ -69,6 +69,7 @@ public class ModuleManager {
module_map[account].add(new Presence.Module());
module_map[account].add(new Xmpp.MessageModule());
module_map[account].add(new Xmpp.MessageArchiveManagement.Module());
+ module_map[account].add(new Xep.EntityCapabilities.Module());
module_map[account].add(new Xep.MessageCarbons.Module());
module_map[account].add(new Xep.BitsOfBinary.Module());
module_map[account].add(new Xep.Muc.Module());
@@ -84,7 +85,7 @@ public class ModuleManager {
module_map[account].add(new Xep.InBandRegistration.Module());
module_map[account].add(new Xep.HttpFileUpload.Module());
module_map[account].add(new Xep.Reactions.Module());
- module_map[account].add(new Xep.Socks5Bytestreams.Module());
+ module_map[account].add(new Xep.Socks5Bytestreams.Module.with_local_ip_address_handler(Util.get_local_ip_addresses));
module_map[account].add(new Xep.InBandBytestreams.Module());
module_map[account].add(new Xep.Jingle.Module());
module_map[account].add(new Xep.JingleSocks5Bytestreams.Module());
@@ -96,11 +97,12 @@ public class ModuleManager {
module_map[account].add(new Xep.JingleMessageInitiation.Module());
module_map[account].add(new Xep.OccupantIds.Module());
module_map[account].add(new Xep.MessageRetraction.Module());
- module_map[account].add(new Xep.JingleRawUdp.Module());
+ module_map[account].add(new Xep.JingleRawUdp.Module.with_local_ip_address_handler(Util.get_local_ip_addresses));
module_map[account].add(new Xep.Muji.Module());
module_map[account].add(new Xep.CallInvites.Module());
module_map[account].add(new Xep.Coin.Module());
module_map[account].add(new Xep.MessageDisplayedSynchronization.Module());
+ module_map[account].add(new IceUdpModule());
initialize_account_modules(account, module_map[account]);
}
}
diff --git a/libdino/src/service/muc_manager.vala b/libdino/src/service/muc_manager.vala
index b47a52bf..4959074b 100644
--- a/libdino/src/service/muc_manager.vala
+++ b/libdino/src/service/muc_manager.vala
@@ -108,19 +108,11 @@ public class MucManager : StreamInteractionModule, Object {
joined_conversation.nickname = nick;
stream_interactor.get_module(ConversationManager.IDENTITY).start_conversation(joined_conversation);
- bool can_do_affiliation_versioning = yield entity_info.has_feature(account, jid, Xmpp.Xep.MucAffiliationsVersioning.NS_URI);
- if (!can_do_affiliation_versioning) {
- stream.get_module(Xep.Muc.Module.IDENTITY).fetch_affiliations.begin(stream, jid.bare_jid, () => {
- muc_affiliations.clear_affiliations(account, jid);
- persist_muc_affiliations(account, jid.bare_jid);
- });
- }
-
if (can_do_mam) {
var history_sync = stream_interactor.get_module(MessageProcessor.IDENTITY).history_sync;
if (conversation == null) {
// We never joined the conversation before, just fetch the latest MAM page
- yield history_sync.fetch_latest_page(account, jid.bare_jid, null, new DateTime.from_unix_utc(0), cancellable);
+ history_sync.fetch_latest_page.begin(account, jid.bare_jid, null, new DateTime.from_unix_utc(0), cancellable);
} else {
// Fetch everything up to the last time the user actively joined
if (!mucs_sync_cancellables.has_key(account)) {
@@ -137,6 +129,17 @@ public class MucManager : StreamInteractionModule, Object {
}
}
}
+
+ bool can_do_affiliation_versioning = yield entity_info.has_feature(account, jid, Xmpp.Xep.MucAffiliationsVersioning.NS_URI);
+ if (!can_do_affiliation_versioning) {
+ stream.get_module(Xep.Muc.Module.IDENTITY).fetch_affiliations.begin(stream, jid.bare_jid, () => {
+ muc_affiliations.clear_affiliations(account, jid);
+ persist_muc_affiliations(account, jid.bare_jid);
+ });
+ }
+
+ room_info_updated(account, jid); // EntityInfo.has_feature trigged a disco query
+
} else if (res.muc_error != null) {
// Join failed
enter_errors[jid] = res.muc_error;
@@ -254,19 +257,11 @@ public class MucManager : StreamInteractionModule, Object {
//the term `private room` is a short hand for members-only+non-anonymous rooms
public bool is_private_room(Account account, Jid jid) {
var entity_info = stream_interactor.get_module(EntityInfo.IDENTITY);
- return entity_info.has_feature_offline(account, jid, "muc_membersonly") && entity_info.has_feature_offline(account, jid, "muc_nonanonymous");
+ return entity_info.has_feature_offline(account, jid, Xep.Muc.FEATURE_MEMBERS_ONLY) && entity_info.has_feature_offline(account, jid, Xep.Muc.FEATURE_NON_ANONYMOUS);
}
public bool is_moderated_room(Account account, Jid jid) {
- XmppStream? stream = stream_interactor.get_stream(account);
- if (stream == null) {
- return false;
- }
- Xep.Muc.Flag? flag = stream.get_flag(Xep.Muc.Flag.IDENTITY);
- if (flag == null) {
- return false;
- }
- return flag.has_room_feature(jid, Xep.Muc.Feature.MODERATED);
+ return stream_interactor.get_module(EntityInfo.IDENTITY).has_feature_cached(account, jid, Xep.Muc.FEATURE_MODERATED);
}
public bool is_public_room(Account account, Jid jid) {
@@ -332,9 +327,13 @@ public class MucManager : StreamInteractionModule, Object {
}
public string? get_room_name(Account account, Jid jid) {
- Xep.Muc.Flag? flag = get_muc_flag(account);
- if (flag != null) {
- return flag.get_room_name(jid);
+ var identities = stream_interactor.get_module(EntityInfo.IDENTITY).get_identities_offline(account, jid);
+ if (identities == null) return null;
+
+ foreach (var identity in identities) {
+ if (identity.category == "conference") {
+ return identity.name;
+ }
}
return null;
}
@@ -471,8 +470,10 @@ public class MucManager : StreamInteractionModule, Object {
private_room_occupants_updated(account, muc_jid);
}
});
- stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).room_info_updated.connect( (stream, muc_jid) => {
- room_info_updated(account, muc_jid);
+ stream_interactor.module_manager.get_module(account, Xep.Muc.Module.IDENTITY).room_info_changed.connect( (stream, muc_jid) => {
+ stream_interactor.get_module(EntityInfo.IDENTITY).get_info_result.begin(account, muc_jid, null, () => {
+ room_info_updated(account, muc_jid);
+ });
});
stream_interactor.module_manager.get_module(account, Xep.OccupantIds.Module.IDENTITY).received_own_occupant_id.connect( (stream, jid, occupant_id) => {
if (!own_occupant_ids.has_key(account)) {
diff --git a/libdino/src/service/occupant_id_store.vala b/libdino/src/service/occupant_id_store.vala
index 662b9cbb..d2849652 100644
--- a/libdino/src/service/occupant_id_store.vala
+++ b/libdino/src/service/occupant_id_store.vala
@@ -1,8 +1,8 @@
using Xmpp;
using Gee;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
namespace Dino {
diff --git a/libdino/src/service/reactions.vala b/libdino/src/service/reactions.vala
index 16849c68..a8df614e 100644
--- a/libdino/src/service/reactions.vala
+++ b/libdino/src/service/reactions.vala
@@ -1,9 +1,9 @@
using Gee;
-using Qlite;
+using Dino.Entities;
+using Dino.Qlite;
using Xmpp;
using Xmpp.Xep;
-using Dino.Entities;
public class Dino.Reactions : StreamInteractionModule, Object {
public static ModuleIdentity<Reactions> IDENTITY = new ModuleIdentity<Reactions>("reactions");
@@ -296,15 +296,6 @@ public class Dino.Reactions : StreamInteractionModule, Object {
}
}
- private Message? get_message_for_reaction(Conversation conversation, string message_id) {
- // Query message from a specific account and counterpart. This also makes sure it's a valid reaction for the message.
- if (conversation.type_ == Conversation.Type.CHAT) {
- return stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_stanza_id(message_id, conversation);
- } else {
- return stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_server_id(message_id, conversation);
- }
- }
-
private void process_reaction_for_message(int content_item_id, ReactionInfo reaction_info) {
Account account = reaction_info.conversation.account;
MessageStanza stanza = reaction_info.stanza;
diff --git a/libdino/src/service/replies.vala b/libdino/src/service/replies.vala
index ea10cf88..95c28ef1 100644
--- a/libdino/src/service/replies.vala
+++ b/libdino/src/service/replies.vala
@@ -1,9 +1,9 @@
using Gee;
-using Qlite;
using Xmpp;
using Xmpp.Xep;
using Dino.Entities;
+using Dino.Qlite;
public class Dino.Replies : StreamInteractionModule, Object {
public static ModuleIdentity<Replies> IDENTITY = new ModuleIdentity<Replies>("reply");
diff --git a/libdino/src/service/search_processor.vala b/libdino/src/service/search_processor.vala
index 2b5ebe49..aaec990a 100644
--- a/libdino/src/service/search_processor.vala
+++ b/libdino/src/service/search_processor.vala
@@ -1,8 +1,8 @@
using Gee;
-using Xmpp;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
+using Xmpp;
namespace Dino {
diff --git a/libdino/src/service/stateless_file_sharing.vala b/libdino/src/service/stateless_file_sharing.vala
index 15e1ddfe..6e97a5ce 100644
--- a/libdino/src/service/stateless_file_sharing.vala
+++ b/libdino/src/service/stateless_file_sharing.vala
@@ -16,11 +16,16 @@ public class Dino.StatelessFileSharing : StreamInteractionModule, Object {
private set { }
}
- public FileManager file_manager {
+ public FileManager fm {
owned get { return stream_interactor.get_module(FileManager.IDENTITY); }
private set { }
}
+ public FileManager2 fm2 {
+ owned get { return stream_interactor.get_module(FileManager2.IDENTITY); }
+ private set { }
+ }
+
public Database db {
owned get { return Application.get_default().db; }
private set { }
@@ -30,7 +35,7 @@ public class Dino.StatelessFileSharing : StreamInteractionModule, Object {
this.stream_interactor = stream_interactor;
this.db = db;
- stream_interactor.get_module(MessageProcessor.IDENTITY).received_pipeline.connect(new ReceivedMessageListener(this));
+ stream_interactor.get_module(MessageProcessor.IDENTITY).build_message_stanza.connect(check_add_sfs_element);
}
public static void start(StreamInteractor stream_interactor, Database db) {
@@ -38,7 +43,81 @@ public class Dino.StatelessFileSharing : StreamInteractionModule, Object {
stream_interactor.add_module(m);
}
- public async void create_file_transfer(Conversation conversation, Message message, string? file_sharing_id, Xep.FileMetadataElement.FileMetadata metadata, Gee.List<Xep.StatelessFileSharing.Source>? sources) {
+ public async Entities.Message announce_files(FileTransferGroup file_group, Conversation conversation) {
+ Entities.Message file_share_message = stream_interactor.get_module(MessageProcessor.IDENTITY).create_out_message(null, conversation);
+ stream_interactor.get_module(MessageStorage.IDENTITY).add_message(file_share_message, conversation);
+ file_group.message_id = file_share_message.id;
+
+ foreach (var file_transfer in file_group.file_transfers) {
+ file_transfer.provider = SFS_PROVIDER_ID;
+ file_transfer.info = file_share_message.id.to_string();
+ file_transfer.file_sharing_id = Xmpp.random_uuid();
+ }
+
+ stream_interactor.get_module(MessageProcessor.IDENTITY).send_xmpp_message(file_share_message, conversation);
+
+ return file_share_message;
+ }
+
+ public async void attach_source(FileTransfer file_transfer, Conversation conversation, string http_url, string to_sfs_id) {
+ MessageStanza stanza = new MessageStanza() { to = conversation.counterpart, type_ = conversation.type_ == GROUPCHAT ? MessageStanza.TYPE_GROUPCHAT : MessageStanza.TYPE_CHAT };
+ stanza.body = http_url;
+ Xep.OutOfBandData.add_url_to_message(stanza, http_url);
+ var sources = new ArrayList<Xep.StatelessFileSharing.Source>();
+ sources.add(new Xep.StatelessFileSharing.HttpSource() { url = http_url });
+ Xep.StatelessFileSharing.set_sfs_attachment(stanza, to_sfs_id, file_transfer.file_sharing_id, sources);
+
+ var stream = stream_interactor.get_stream(conversation.account);
+ if (stream == null) throw new FileSendError.UPLOAD_FAILED("No stream");
+
+ stream.get_module(MessageModule.IDENTITY).send_message.begin(stream, stanza);
+ }
+
+ public async bool try_process_sfs(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) {
+ Gee.List<Xep.StatelessFileSharing.FileShare> file_shares = Xep.StatelessFileSharing.get_file_shares(stanza);
+ if (file_shares != null) {
+ // For now, only accept file shares that have at least one supported hash
+ foreach (Xep.StatelessFileSharing.FileShare file_share in file_shares) {
+ if (!Xep.CryptographicHashes.has_supported_hashes(file_share.metadata.hashes)) {
+ return false;
+ }
+ }
+
+ if (file_shares.size > 0) {
+ var file_transfers = new ArrayList<FileTransfer>();
+ foreach (Xep.StatelessFileSharing.FileShare file_share in file_shares) {
+ var file_transfer = yield create_incoming_file_transfer(conversation, message, file_share.id, file_share.metadata, file_share.sources);
+ file_transfers.add(file_transfer);
+ stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file(file_transfer);
+ }
+ var file_group = new FileTransferGroup() {
+ message_id = message.id,
+ file_transfers = file_transfers
+ };
+ stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file_group(file_group);
+
+ fm2.received_file_group(file_group, conversation);
+ }
+ return true;
+ }
+
+ var source_attachments = Xep.StatelessFileSharing.get_source_attachments(stanza);
+ if (source_attachments != null) {
+ foreach (var source_attachment in source_attachments) {
+ on_received_sources(stanza.from, conversation, source_attachment.to_message_id, source_attachment.to_file_transfer_id, source_attachment.sources);
+ return true;
+ }
+ }
+
+ // Don't process messages that are fallback for legacy clients
+ if (Xep.StatelessFileSharing.is_sfs_fallback_message(stanza)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public async FileTransfer create_incoming_file_transfer(Conversation conversation, Message message, string? file_sharing_id, Xep.FileMetadataElement.FileMetadata metadata, Gee.List<Xep.StatelessFileSharing.Source>? sources) {
FileTransfer file_transfer = new FileTransfer();
file_transfer.file_sharing_id = file_sharing_id;
file_transfer.account = message.account;
@@ -57,7 +136,8 @@ public class Dino.StatelessFileSharing : StreamInteractionModule, Object {
stream_interactor.get_module(FileTransferStorage.IDENTITY).add_file(file_transfer);
conversation.last_active = file_transfer.time;
- file_manager.received_file(file_transfer, conversation);
+
+ return file_transfer;
}
public void on_received_sources(Jid from, Conversation conversation, string attach_to_message_id, string? attach_to_file_id, Gee.List<Xep.StatelessFileSharing.Source> sources) {
@@ -74,9 +154,9 @@ public class Dino.StatelessFileSharing : StreamInteractionModule, Object {
// "If no <hash/> is provided or the <hash/> elements provided use unsupported algorithms, receiving clients MUST ignore
// any attached sources from other senders and only obtain the file from the sources announced by the original sender."
- // For now we only allow the original sender
- if (from.equals(file_transfer.from) && Xep.CryptographicHashes.get_supported_hashes(file_transfer.hashes).is_empty) {
- warning("Ignoring sfs source: Not from original sender or no known file hashes");
+ // For now we don't allow source attachments for file shares without hashes. TODO extend this
+ if (Xep.CryptographicHashes.get_supported_hashes(file_transfer.hashes).is_empty) {
+ warning("Ignoring sfs source: No known file hashes");
return;
}
@@ -84,85 +164,26 @@ public class Dino.StatelessFileSharing : StreamInteractionModule, Object {
file_transfer.add_sfs_source(source);
}
- if (file_manager.is_sender_trustworthy(file_transfer, conversation) && file_transfer.state == FileTransfer.State.NOT_STARTED && file_transfer.size >= 0 && file_transfer.size < 5000000) {
- file_manager.download_file(file_transfer);
+ if (fm2.is_sender_trustworthy(file_transfer, conversation) && file_transfer.state == FileTransfer.State.NOT_STARTED && file_transfer.size >= 0 && file_transfer.size < 5000000) {
+ fm.download_file(file_transfer);
}
}
- /*
- public async void create_sfs_for_legacy_transfer(FileProvider file_provider, string info, Jid from, DateTime time, DateTime local_time, Conversation conversation, FileReceiveData receive_data, FileMeta file_meta) {
- FileTransfer file_transfer = file_manager.create_file_transfer_from_provider_incoming(file_provider, info, from, time, local_time, conversation, receive_data, file_meta);
-
- HttpFileReceiveData? http_receive_data = receive_data as HttpFileReceiveData;
- if (http_receive_data == null) return;
+ private void check_add_sfs_element(Entities.Message message, Xmpp.MessageStanza message_stanza, Conversation conversation) {
+ if (message.encryption != Encryption.NONE) return;
- var sources = new ArrayList<Xep.StatelessFileSharing.Source>();
- Xep.StatelessFileSharing.HttpSource source = new Xep.StatelessFileSharing.HttpSource();
- source.url = http_receive_data.url;
- sources.add(source);
-
- if (file_manager.is_jid_trustworthy(from, conversation)) {
- try {
- file_meta = yield file_provider.get_meta_info(file_transfer, http_receive_data, file_meta);
- } catch (Error e) {
- warning("Http meta request failed: %s", e.message);
+ // Check if it's a FileTransferGroup
+ FileTransferGroup? file_group = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_group_by_message_id(message.id, conversation);
+ if (file_group != null) {
+ print("check added file group\n");
+ foreach (FileTransfer file_transfer in file_group.file_transfers) {
+ Xep.StatelessFileSharing.set_sfs_element(message_stanza, file_transfer.file_sharing_id, file_transfer.file_metadata, file_transfer.sfs_sources);
}
- }
- var metadata = new Xep.FileMetadataElement.FileMetadata();
- metadata.size = file_meta.size;
- metadata.name = file_meta.file_name;
- metadata.mime_type = file_meta.mime_type;
+ Xep.MessageProcessingHints.set_message_hint(message_stanza, Xep.MessageProcessingHints.HINT_STORE);
- file_transfer.provider = SFS_PROVIDER_ID;
- file_transfer.file_metadata = metadata;
- file_transfer.sfs_sources = sources;
- }
- */
-
- private class ReceivedMessageListener : MessageListener {
-
- public string[] after_actions_const = new string[]{ "STORE" };
- public override string action_group { get { return "MESSAGE_REINTERPRETING"; } }
- public override string[] after_actions { get { return after_actions_const; } }
-
- private StatelessFileSharing outer;
- private StreamInteractor stream_interactor;
-
- public ReceivedMessageListener(StatelessFileSharing outer) {
- this.outer = outer;
- this.stream_interactor = outer.stream_interactor;
+ return;
}
- public override async bool run(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) {
- Gee.List<Xep.StatelessFileSharing.FileShare> file_shares = Xep.StatelessFileSharing.get_file_shares(stanza);
- if (file_shares != null) {
- // For now, only accept file shares that have at least one supported hash
- foreach (Xep.StatelessFileSharing.FileShare file_share in file_shares) {
- if (!Xep.CryptographicHashes.has_supported_hashes(file_share.metadata.hashes)) {
- return false;
- }
- }
- foreach (Xep.StatelessFileSharing.FileShare file_share in file_shares) {
- outer.create_file_transfer(conversation, message, file_share.id, file_share.metadata, file_share.sources);
- }
- return true;
- }
-
- var source_attachments = Xep.StatelessFileSharing.get_source_attachments(stanza);
- if (source_attachments != null) {
- foreach (var source_attachment in source_attachments) {
- outer.on_received_sources(stanza.from, conversation, source_attachment.to_message_id, source_attachment.to_file_transfer_id, source_attachment.sources);
- return true;
- }
- }
-
- // Don't process messages that are fallback for legacy clients
- if (Xep.StatelessFileSharing.is_sfs_fallback_message(stanza)) {
- return true;
- }
-
- return false;
- }
}
} \ No newline at end of file
diff --git a/libdino/src/service/stream_interactor.vala b/libdino/src/service/stream_interactor.vala
index 2ac13103..2cd0c45c 100644
--- a/libdino/src/service/stream_interactor.vala
+++ b/libdino/src/service/stream_interactor.vala
@@ -100,12 +100,7 @@ public class ModuleIdentity<T> : Object {
}
public T? cast(StreamInteractionModule module) {
-#if VALA_0_56_11
- // We can't typecheck due to compiler bug
- return (T) module;
-#else
return module.get_type().is_a(typeof(T)) ? (T?) module : null;
-#endif
}
public bool matches(StreamInteractionModule module) {
diff --git a/libdino/src/service/util.vala b/libdino/src/service/util.vala
index e85e2005..577bc6cc 100644
--- a/libdino/src/service/util.vala
+++ b/libdino/src/service/util.vala
@@ -1,9 +1,6 @@
using Dino.Entities;
-using Qlite;
-namespace Dino {
-
-public class Util {
+namespace Dino.Util {
public static Message.Type get_message_type_for_conversation(Conversation conversation) {
switch (conversation.type_) {
case Conversation.Type.CHAT:
@@ -42,6 +39,12 @@ public class Util {
}
return false;
}
-}
+ public static Gee.List<string> get_local_ip_addresses() {
+ Gee.List<string> result = new Gee.ArrayList<string>();
+ foreach (string ip_address in Nice.interfaces_get_local_ips(false)) {
+ result.add(ip_address);
+ }
+ return result;
+ }
}
diff --git a/libdino/src/version.c.in b/libdino/src/version.c.in
new file mode 100644
index 00000000..44603c04
--- /dev/null
+++ b/libdino/src/version.c.in
@@ -0,0 +1,4 @@
+const char* dino_get_version ()
+{
+ return "@VERSION@";
+} \ No newline at end of file
diff --git a/libdino/src/version.vala.in b/libdino/src/version.vala.in
deleted file mode 100644
index 2711d4a6..00000000
--- a/libdino/src/version.vala.in
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Dino {
-
-public const string VERSION = "%VERSION%";
-
-}
diff --git a/libdino/tests/common.vala b/libdino/tests/common.vala
index 2a0b189b..d443e214 100644
--- a/libdino/tests/common.vala
+++ b/libdino/tests/common.vala
@@ -3,10 +3,35 @@ namespace Dino.Test {
int main(string[] args) {
GLib.Test.init(ref args);
GLib.Test.set_nonfatal_assertions();
- TestSuite.get_root().add_suite(new WeakMapTest().get_suite());
+ TestSuite.get_root().add_suite(new Curve25519().get_suite());
+ TestSuite.get_root().add_suite(new SessionBuilderTest().get_suite());
+ TestSuite.get_root().add_suite(new HKDF().get_suite());
return GLib.Test.run();
}
+Dino.Crypto.Omemo.Store setup_test_store_context(Dino.Crypto.Omemo.Context global_context) {
+ Dino.Crypto.Omemo.Store store = global_context.create_store();
+ try {
+ store.identity_key_store.local_registration_id = (Random.next_int() % 16380) + 1;
+
+ Omemo.ECKeyPair key_pair = global_context.generate_key_pair();
+ store.identity_key_store.identity_key_private = new Bytes(key_pair.private.serialize());
+ store.identity_key_store.identity_key_public = new Bytes(key_pair.public.serialize());
+ } catch (Error e) {
+ fail_if_reached();
+ }
+ return store;
+}
+
+Omemo.ECPublicKey? create_test_ec_public_key(Dino.Crypto.Omemo.Context context) {
+ try {
+ return context.generate_key_pair().public;
+ } catch (Error e) {
+ fail_if_reached();
+ return null;
+ }
+}
+
bool fail_if(bool exp, string? reason = null) {
if (exp) {
if (reason != null) GLib.Test.message(reason);
@@ -27,7 +52,7 @@ void fail_if_not_error_code(ErrorFunc func, int expectedCode, string? reason = n
func();
fail_if_reached(@"$(reason + ": " ?? "")no error thrown");
} catch (Error e) {
- fail_if_not_eq_int(e.code, expectedCode, @"$(reason + ": " ?? "")catched unexpected error");
+ fail_if_not_eq_int(e.code, expectedCode, @"$(reason + ": " ?? "")caught unexpected error");
}
}
diff --git a/plugins/omemo/tests/native/curve25519.vala b/libdino/tests/curve25519.vala
index 84c244d2..8d5c1c90 100644
--- a/plugins/omemo/tests/native/curve25519.vala
+++ b/libdino/tests/curve25519.vala
@@ -1,4 +1,7 @@
-namespace Omemo.Test {
+using Dino.Crypto.Omemo;
+using Omemo;
+
+namespace Dino.Test {
class Curve25519 : Gee.TestCase {
diff --git a/plugins/omemo/tests/native/hkdf.vala b/libdino/tests/hkdf.vala
index 84257054..45196365 100644
--- a/plugins/omemo/tests/native/hkdf.vala
+++ b/libdino/tests/hkdf.vala
@@ -1,4 +1,7 @@
-namespace Omemo.Test {
+using Dino.Crypto.Omemo;
+using Omemo;
+
+namespace Dino.Test {
class HKDF : Gee.TestCase {
diff --git a/libdino/tests/jid.vala b/libdino/tests/jid.vala
deleted file mode 100644
index 072d41a5..00000000
--- a/libdino/tests/jid.vala
+++ /dev/null
@@ -1,39 +0,0 @@
-using Dino.Entities;
-
-namespace Dino.Test {
-
-class JidTest : Gee.TestCase {
-
- public JidTest() {
- base("Jid");
- add_test("parse", test_parse);
- add_test("components", test_components);
- add_test("with_res", test_with_res);
- }
-
- private void test_parse() {
- Jid jid = Jid.from_string("user@example.com/res");
- fail_if(jid.localpart != "user");
- fail_if(jid.domainpart != "example.com");
- fail_if(jid.resourcepart != "res");
- fail_if(jid.to_string() != "user@example.com/res");
- }
-
- private void test_components() {
- Jid jid = new Jid.components("user", "example.com", "res");
- fail_if(jid.localpart != "user");
- fail_if(jid.domainpart != "example.com");
- fail_if(jid.resourcepart != "res");
- fail_if(jid.to_string() != "user@example.com/res");
- }
-
- private void test_with_res() {
- Jid jid = new Jid.with_resource("user@example.com", "res");
- fail_if(jid.localpart != "user");
- fail_if(jid.domainpart != "example.com");
- fail_if(jid.resourcepart != "res");
- fail_if(jid.to_string() != "user@example.com/res");
- }
-}
-
-}
diff --git a/plugins/omemo/tests/native/session_builder.vala b/libdino/tests/session_builder.vala
index 2215db86..bd4ae386 100644
--- a/plugins/omemo/tests/native/session_builder.vala
+++ b/libdino/tests/session_builder.vala
@@ -1,4 +1,7 @@
-namespace Omemo.Test {
+using Dino.Crypto.Omemo;
+using Omemo;
+
+namespace Dino.Test {
class SessionBuilderTest : Gee.TestCase {
Address alice_address;
diff --git a/plugins/ice/vapi/gnutls.vapi b/libdino/vapi/gnutls.vapi
index 86a8c401..86a8c401 100644
--- a/plugins/ice/vapi/gnutls.vapi
+++ b/libdino/vapi/gnutls.vapi
diff --git a/crypto-vala/vapi/libgcrypt.vapi b/libdino/vapi/libgcrypt.vapi
index 0fa69a02..0fa69a02 100644
--- a/crypto-vala/vapi/libgcrypt.vapi
+++ b/libdino/vapi/libgcrypt.vapi
diff --git a/plugins/omemo/vapi/libomemo-c.vapi b/libdino/vapi/libomemo-c.vapi
index 34bb0202..8a2b17d3 100644
--- a/plugins/omemo/vapi/libomemo-c.vapi
+++ b/libdino/vapi/libomemo-c.vapi
@@ -51,7 +51,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "signal_type_base", ref_function="signal_type_ref_vapi", unref_function="signal_type_unref_vapi", cheader_filename="omemo/signal_protocol_types.h,native/helper.h")]
+ [CCode (cname = "signal_type_base", ref_function="signal_type_ref_vapi", unref_function="signal_type_unref_vapi", cheader_filename="omemo/signal_protocol_types.h,src/crypto/omemo/helper.h")]
public class TypeBase {
}
@@ -117,7 +117,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "session_pre_key", cprefix = "session_pre_key_", cheader_filename = "omemo/session_pre_key.h,native/helper.h")]
+ [CCode (cname = "session_pre_key", cprefix = "session_pre_key_", cheader_filename = "omemo/session_pre_key.h,src/crypto/omemo/helper.h")]
public class PreKeyRecord : TypeBase {
public static int create(out PreKeyRecord pre_key, uint32 id, ECKeyPair key_pair);
//public static int deserialize(out PreKeyRecord pre_key, uint8[] data, NativeContext global_context);
@@ -182,7 +182,7 @@ namespace Omemo {
* Address of an OMEMO message recipient
*/
[Compact]
- [CCode (cname = "signal_protocol_address", cprefix = "signal_protocol_address_", cheader_filename = "omemo/signal_protocol.h,native/helper.h")]
+ [CCode (cname = "signal_protocol_address", cprefix = "signal_protocol_address_", cheader_filename = "omemo/signal_protocol.h,src/crypto/omemo/helper.h")]
public class Address {
public Address(string name, int32 device_id);
public int32 device_id { get; set; }
@@ -202,7 +202,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "ec_public_key", cprefix = "ec_public_key_", cheader_filename = "omemo/curve.h,native/helper.h")]
+ [CCode (cname = "ec_public_key", cprefix = "ec_public_key_", cheader_filename = "omemo/curve.h,src/crypto/omemo/helper.h")]
public class ECPublicKey : TypeBase {
[CCode (cname = "curve_generate_public_key")]
public static int generate(out ECPublicKey public_key, ECPrivateKey private_key);
@@ -237,7 +237,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "ec_private_key", cprefix = "ec_private_key_", cheader_filename = "omemo/curve.h,native/helper.h")]
+ [CCode (cname = "ec_private_key", cprefix = "ec_private_key_", cheader_filename = "omemo/curve.h,src/crypto/omemo/helper.h")]
public class ECPrivateKey : TypeBase {
[CCode (instance_pos = 1, cname = "ec_private_key_serialize")]
private int serialize_([CCode (pos = 0)] out Buffer buffer);
@@ -255,7 +255,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "ec_key_pair", cprefix="ec_key_pair_", cheader_filename = "omemo/curve.h,native/helper.h")]
+ [CCode (cname = "ec_key_pair", cprefix="ec_key_pair_", cheader_filename = "omemo/curve.h,src/crypto/omemo/helper.h")]
public class ECKeyPair : TypeBase {
public static int create(out ECKeyPair key_pair, ECPublicKey public_key, ECPrivateKey private_key);
public ECPublicKey public { get; }
@@ -267,7 +267,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "ratchet_identity_key_pair", cprefix = "ratchet_identity_key_pair_", cheader_filename = "omemo/ratchet.h,native/helper.h")]
+ [CCode (cname = "ratchet_identity_key_pair", cprefix = "ratchet_identity_key_pair_", cheader_filename = "omemo/ratchet.h,src/crypto/omemo/helper.h")]
public class IdentityKeyPair : TypeBase {
public static int create(out IdentityKeyPair key_pair, ECPublicKey public_key, ECPrivateKey private_key);
public int serialze(out Buffer buffer);
@@ -343,7 +343,7 @@ namespace Omemo {
}
[Compact]
- [CCode (cname = "ciphertext_message", cprefix = "ciphertext_message_", cheader_filename = "omemo/protocol.h,native/helper.h")]
+ [CCode (cname = "ciphertext_message", cprefix = "ciphertext_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
public abstract class CiphertextMessage : TypeBase {
public CiphertextType type { get; }
[CCode (cname = "ciphertext_message_get_serialized")]
@@ -353,7 +353,7 @@ namespace Omemo {
}}
}
[Compact]
- [CCode (cname = "signal_message", cprefix = "signal_message_", cheader_filename = "omemo/protocol.h,native/helper.h")]
+ [CCode (cname = "signal_message", cprefix = "signal_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
public class OmemoMessage : CiphertextMessage {
public ECPublicKey sender_ratchet_key { get; }
public uint8 message_version { get; }
@@ -363,7 +363,7 @@ namespace Omemo {
public static int is_legacy(uint8[] data);
}
[Compact]
- [CCode (cname = "pre_key_signal_message", cprefix = "pre_key_signal_message_", cheader_filename = "omemo/protocol.h,native/helper.h")]
+ [CCode (cname = "pre_key_signal_message", cprefix = "pre_key_signal_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
public class PreKeyOmemoMessage : CiphertextMessage {
public uint8 message_version { get; }
public ECPublicKey identity_key { get; }
@@ -374,14 +374,14 @@ namespace Omemo {
public OmemoMessage message { get; }
}
[Compact]
- [CCode (cname = "sender_key_message", cprefix = "sender_key_message_", cheader_filename = "omemo/protocol.h,native/helper.h")]
+ [CCode (cname = "sender_key_message", cprefix = "sender_key_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
public class SenderKeyMessage : CiphertextMessage {
public uint32 key_id { get; }
public uint32 iteration { get; }
public Buffer ciphertext { get; }
}
[Compact]
- [CCode (cname = "sender_key_distribution_message", cprefix = "sender_key_distribution_message_", cheader_filename = "omemo/protocol.h,native/helper.h")]
+ [CCode (cname = "sender_key_distribution_message", cprefix = "sender_key_distribution_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
public class SenderKeyDistributionMessage : CiphertextMessage {
public uint32 id { get; }
public uint32 iteration { get; }
@@ -389,7 +389,7 @@ namespace Omemo {
public ECPublicKey signature_key { get; }
}
- [CCode (cname = "signal_vala_encrypt", cheader_filename = "native/helper.h")]
+ [CCode (cname = "signal_vala_encrypt", cheader_filename = "src/crypto/omemo/helper.h")]
private static int aes_encrypt_(out Buffer output, int cipher, uint8[] key, uint8[] iv, uint8[] plaintext, void *user_data);
[CCode (cname = "signal_vala_encrypt_")]
@@ -399,7 +399,7 @@ namespace Omemo {
return buf.data;
}
- [CCode (cname = "signal_vala_decrypt", cheader_filename = "native/helper.h")]
+ [CCode (cname = "signal_vala_decrypt", cheader_filename = "src/crypto/omemo/helper.h")]
private static int aes_decrypt_(out Buffer output, int cipher, uint8[] key, uint8[] iv, uint8[] ciphertext, void *user_data);
[CCode (cname = "signal_vala_decrypt_")]
@@ -472,17 +472,17 @@ namespace Omemo {
public void* user_data;
}
[CCode (has_target = false)]
- public delegate int LoadSessionFunc(out Buffer record, out Buffer user_record, Address address, void* user_data);
+ public delegate int LoadSessionFunc(out Buffer record, out Buffer user_record, [CCode (type = "const signal_protocol_address *")] Address address, void* user_data);
[CCode (has_target = false)]
- public delegate int GetSubDeviceSessionsFunc(out IntList sessions, [CCode (array_length_type = "size_t")] char[] name, void* user_data);
+ public delegate int GetSubDeviceSessionsFunc(out IntList sessions, [CCode (array_length_type = "size_t", type = "const char *")] char[] name, void* user_data);
[CCode (has_target = false)]
- public delegate int StoreSessionFunc(Address address, [CCode (array_length_type = "size_t")] uint8[] record, [CCode (array_length_type = "size_t")] uint8[] user_record, void* user_data);
+ public delegate int StoreSessionFunc([CCode (type = "const signal_protocol_address *")] Address address, [CCode (array_length_type = "size_t")] uint8[] record, [CCode (array_length_type = "size_t")] uint8[] user_record, void* user_data);
[CCode (has_target = false)]
- public delegate int ContainsSessionFunc(Address address, void* user_data);
+ public delegate int ContainsSessionFunc([CCode (type = "const signal_protocol_address *")] Address address, void* user_data);
[CCode (has_target = false)]
- public delegate int DeleteSessionFunc(Address address, void* user_data);
+ public delegate int DeleteSessionFunc([CCode (type = "const signal_protocol_address *")] Address address, void* user_data);
[CCode (has_target = false)]
- public delegate int DeleteAllSessionsFunc([CCode (array_length_type = "size_t")] char[] name, void* user_data);
+ public delegate int DeleteAllSessionsFunc([CCode (array_length_type = "size_t", type = "const char *")] char[] name, void* user_data);
[Compact]
[CCode (cname = "signal_protocol_identity_key_store", cheader_filename = "omemo/signal_protocol.h")]
@@ -499,9 +499,9 @@ namespace Omemo {
[CCode (has_target = false)]
public delegate int GetLocalRegistrationIdFunc(void* user_data, out uint32 registration_id);
[CCode (has_target = false)]
- public delegate int SaveIdentityFunc(Address address, [CCode (array_length_type = "size_t")] uint8[] key, void* user_data);
+ public delegate int SaveIdentityFunc([CCode (type = "const signal_protocol_address *")] Address address, [CCode (array_length_type = "size_t")] uint8[] key, void* user_data);
[CCode (has_target = false)]
- public delegate int IsTrustedIdentityFunc(Address address, [CCode (array_length_type = "size_t")] uint8[] key, void* user_data);
+ public delegate int IsTrustedIdentityFunc([CCode (type = "const signal_protocol_address *")] Address address, [CCode (array_length_type = "size_t")] uint8[] key, void* user_data);
[Compact]
[CCode (cname = "signal_protocol_pre_key_store", cheader_filename = "omemo/signal_protocol.h")]
@@ -687,8 +687,6 @@ namespace Omemo {
public ssize_t derive_secrets([CCode (array_length = false)] out uint8[] output, uint8[] input_key_material, uint8[] salt, uint8[] info, size_t output_len);
}
- [CCode (cname = "setup_signal_vala_crypto_provider", cheader_filename = "native/helper.h")]
+ [CCode (cname = "setup_signal_vala_crypto_provider", cheader_filename = "src/crypto/omemo/helper.h")]
public static void setup_crypto_provider(NativeContext context);
- [CCode (cname = "signal_vala_randomize", cheader_filename = "native/helper.h")]
- public static int native_random(uint8[] data);
}
diff --git a/crypto-vala/vapi/libsrtp2.vapi b/libdino/vapi/libsrtp2.vapi
index f8f2d297..f8f2d297 100644
--- a/crypto-vala/vapi/libsrtp2.vapi
+++ b/libdino/vapi/libsrtp2.vapi
diff --git a/plugins/ice/vapi/metadata/Nice-0.1.metadata b/libdino/vapi/metadata/Nice-0.1.metadata
index 7fcf046a..7fcf046a 100644
--- a/plugins/ice/vapi/metadata/Nice-0.1.metadata
+++ b/libdino/vapi/metadata/Nice-0.1.metadata
diff --git a/plugins/ice/vapi/nice.vapi b/libdino/vapi/nice.vapi
index 540e2b4e..540e2b4e 100644
--- a/plugins/ice/vapi/nice.vapi
+++ b/libdino/vapi/nice.vapi
diff --git a/libdino/vapi/openssl.vapi b/libdino/vapi/openssl.vapi
new file mode 100644
index 00000000..57e4022c
--- /dev/null
+++ b/libdino/vapi/openssl.vapi
@@ -0,0 +1,322 @@
+[CCode (cprefix = "")]
+namespace OpenSSL {
+ [CCode (cprefix = "ASN1_", lower_case_cprefix = "ASN1_", cheader_filename = "openssl/asn1.h")]
+ namespace ASN1 {
+ [Compact]
+ [CCode (cname = "ASN1_INTEGER", lower_case_cprefix = "ASN1_INTEGER_", cprefix = "ASN1_INTEGER_", free_function = "ASN1_INTEGER_free")]
+ public class Integer {
+ public bool @set (long v);
+ }
+
+ [Compact]
+ [CCode (cname = "ASN1_TIME", lower_case_cprefix = "ASN1_TIME_", cprefix = "ASN1_TIME_", copy_function = "ASN1_TIME_dup", free_function = "ASN1_STRING_free")]
+ public class Time {
+ public bool @set (time_t t);
+ }
+ }
+ [Compact]
+ [CCode (cname = "BIO", lower_case_cprefix = "BIO_", cprefix = "BIO_", ref_function = "BIO_up_ref", ref_function_void = true, unref_function = "BIO_free", cheader_filename = "openssl/bio.h", simple_generics = true)]
+ public class BIO<T> {
+ [Compact]
+ [CCode (cname = "BIO_METHOD", lower_case_cprefix = "BIO_meth_", cprefix = "BIO_meth_", unref_function = "BIO_meth_free", simple_generics = true)]
+ public class Method<T> {
+ public Method (Type type, string name);
+ [CCode (has_target = false)]
+ public delegate int WriteFunc<T> (BIO<T> bio, [CCode (type = "const char *", array_length_type = "int")] uint8[] buf);
+ [CCode (has_target = false)]
+ public delegate int ReadFunc<T> (BIO<T> bio, [CCode (type = "char *", array_length_type = "int")] uint8[] out_buf);
+ [CCode (has_target = false, simple_generics = true)]
+ public delegate long CtrlFunc<T> (BIO<T> bio, ControlCommand cmd, long num, void* ptr);
+ public WriteFunc<T> write { get; set; }
+ public ReadFunc<T> read { get; set; }
+ public CtrlFunc<T> ctrl { get; set; }
+ }
+
+ [Flags]
+ [CCode (cname = "int")]
+ public enum Type {
+ SOURCE_SINK,
+ DGRAM,
+ }
+
+ [CCode (cname = "int", cprefix = "BIO_CTRL_", has_type_id = false)]
+ public enum ControlCommand {
+ RESET,
+ EOF,
+ SET,
+ GET,
+ PUSH,
+ POP,
+ GET_CLOSE,
+ SET_CLOSE,
+ PENDING,
+ FLUSH,
+ DUP,
+ WPENDING,
+
+ DGRAM_QUERY_MTU,
+ DGRAM_GET_MTU,
+ DGRAM_SET_MTU,
+ DGRAM_SET_PEER,
+ DGRAM_SET_NEXT_TIMEOUT,
+ DGRAM_GET_PEER,
+ DGRAM_GET_FALLBACK_MTU,
+ DGRAM_SET_DONT_FRAG,
+ DGRAM_GET_MTU_OVERHEAD,
+ }
+
+ public BIO (Method<T> type);
+ public T data { get; set; }
+
+ public void clear_retry_flags ();
+ public void set_retry_read ();
+ public bool should_read ();
+ }
+
+ [CCode (cprefix = "ERR_", lower_case_cprefix = "ERR_", cheader_filename = "openssl/err.h")]
+ namespace ERR {
+ public ulong get_error ();
+ public unowned string lib_error_string (ulong error);
+ public unowned string reason_error_string (ulong error);
+ }
+
+ [CCode (cprefix = "EVP_", lower_case_cprefix = "EVP_", cheader_filename = "openssl/evp.h")]
+ namespace EVP {
+ [Compact]
+ [CCode (cname = "EVP_PKEY", lower_case_cprefix = "EVP_PKEY_", cprefix = "EVP_PKEY_", ref_function = "EVP_PKEY_up_ref", ref_function_void = true, unref_function = "EVP_PKEY_free")]
+ public class Key {
+ public Key ();
+ [CCode (cheader_filename = "crypto/openssl/utils.h")]
+ public Key.generate_ecdsa (string curve);
+ }
+ [Compact]
+ [CCode (cname = "EVP_MD", lower_case_cprefix = "EVP_MD_", cprefix = "EVP_MD_", ref_function = "EVP_MD_up_ref", ref_function_void = true, unref_function = "EVP_MD_free")]
+ public class MessageDigest {
+ }
+
+ [Compact]
+ [CCode (cname = "EVP_CIPHER", lower_case_cprefix = "EVP_CIPHER_", cprefix = "EVP_CIPHER_", ref_function = "EVP_CIPHER_up_ref", ref_function_void = true, unref_function = "EVP_CIPHER_free")]
+ public class Cipher {
+
+ }
+
+ [Compact]
+ [CCode (cname = "EVP_CIPHER_CTX", lower_case_cprefix = "EVP_CIPHER_CTX_", cprefix = "EVP_CIPHER_CTX_", free_function = "EVP_CIPHER_CTX_free")]
+ public class CipherContext {
+ public CipherContext ();
+
+ [CCode (simple_generics = true)]
+ public int ctrl<T>(Control cmd, int p1, T? p2);
+
+ [CCode (cname = "EVP_EncryptInit")]
+ private int encrypt_init_ (Cipher? cipher, [CCode (array_length = false)] uint8[]? key, [CCode (array_length = false)] uint8[]? iv);
+ public void encrypt_init (Cipher? cipher, uint8[]? key, uint8[]? iv) throws GLib.Error {
+ throw_if_error (encrypt_init_ (cipher, key, iv));
+ }
+ [CCode (cname = "EVP_EncryptUpdate")]
+ private int encrypt_update_ ([CCode (array_length = false)] uint8[] out, out int out_len, uint8[] in);
+ public void encrypt_update (uint8[] out, out int out_len, uint8[] in) throws GLib.Error {
+ throw_if_error (encrypt_update_ (@out, out out_len, in));
+ }
+ [CCode (cname = "EVP_EncryptFinal")]
+ private int encrypt_final_ ([CCode (array_length = false)] uchar[] out, out int out_len);
+ public void encrypt_final (uint8[] out, out int out_len) throws GLib.Error {
+ throw_if_error (encrypt_final_ (@out, out out_len));
+ }
+
+ [CCode (cname = "EVP_DecryptInit")]
+ private int decrypt_init_ (Cipher? cipher, [CCode (array_length = false)] uint8[]? key, [CCode (array_length = false)] uint8[]? iv);
+ public void decrypt_init (Cipher? cipher, uint8[]? key, uint8[]? iv) throws GLib.Error {
+ throw_if_error (decrypt_init_ (cipher, key, iv));
+ }
+ [CCode (cname = "EVP_DecryptUpdate")]
+ private int decrypt_update_ ([CCode (array_length = false)] uchar[] out, out int out_len, uint8[] in);
+ public void decrypt_update (uint8[] out, out int out_len, uint8[] in) throws GLib.Error {
+ throw_if_error (decrypt_update_ (@out, out out_len, in));
+ }
+ [CCode (cname = "EVP_DecryptFinal")]
+ private int decrypt_final_ ([CCode (array_length = false)] uchar[] out, out int out_len);
+ public void decrypt_final (uint8[] out, out int out_len) throws GLib.Error {
+ throw_if_error (decrypt_final_ (@out, out out_len));
+ }
+
+ public int reset();
+ public int set_key_length (int keylen);
+ public int set_padding (int pad);
+ }
+
+ [CCode (cname = "int", cprefix = "EVP_CTRL_", has_type_id = false)]
+ public enum Control {
+ INIT,
+ SET_KEY_LENGTH,
+ GET_RC2_KEY_BITS,
+ SET_RC2_KEY_BITS,
+ GET_RC5_ROUNDS,
+ SET_RC5_ROUNDS,
+ RAND_KEY,
+ PBE_PRF_NID,
+ COPY,
+ AEAD_SET_IVLEN,
+ AEAD_GET_TAG,
+ AEAD_SET_TAG,
+ AEAD_SET_IV_FIXED,
+ GCM_SET_IVLEN,
+ GCM_GET_TAG,
+ GCM_SET_TAG,
+ GCM_SET_IV_FIXED,
+ GCM_IV_GEN,
+ CCM_SET_IVLEN,
+ CCM_GET_TAG,
+ CCM_SET_TAG,
+ CCM_SET_IV_FIXED,
+ CCM_SET_L,
+ CCM_SET_MSGLEN,
+ AEAD_TLS1_AAD,
+ AEAD_SET_MAC_KEY,
+ GCM_SET_IV_INV,
+ TLS1_1_MULTIBLOCK_AAD,
+ TLS1_1_MULTIBLOCK_ENCRYPT,
+ TLS1_1_MULTIBLOCK_DECRYPT,
+ TLS1_1_MULTIBLOCK_MAX_BUFSIZE,
+ SSL3_MASTER_SECRET,
+ SET_SBOX,
+ SBOX_USED,
+ KEY_MESH,
+ BLOCK_PADDING_MODE,
+ SET_PIPELINE_OUTPUT_BUFS,
+ SET_PIPELINE_INPUT_BUFS,
+ SET_PIPELINE_INPUT_LENS,
+ GET_IVLEN,
+ }
+
+ public static unowned Cipher? aes_128_gcm ();
+ public static unowned Cipher? aes_256_gcm ();
+
+ public static unowned MessageDigest sha256 ();
+ }
+
+ [CCode (lower_case_cprefix = "RAND_", cprefix = "RAND_", cheader_filename = "openssl/rand.h")]
+ namespace RAND {
+ public static int bytes (uint8[] buf);
+ public static int priv_bytes (uint8[] buf);
+ }
+
+ [Compact]
+ [CCode (cname = "SSL", lower_case_cprefix = "SSL_", cprefix = "SSL_", ref_function = "SSL_up_ref", ref_function_void = true, unref_function = "SSL_free", cheader_filename = "openssl/ssl.h")]
+ class SSL {
+ [Compact]
+ [CCode (cname = "SSL_CTX", lower_case_cprefix = "SSL_CTX_", cprefix = "SSL_CTX_", ref_function = "SSL_CTX_up_ref", ref_function_void = true, unref_function = "SSL_CTX_free")]
+ public class Context {
+ public Context (Method method);
+ public int set_tlsext_use_srtp (string profiles);
+ public int use_certificate (X509.Certificate certificate);
+ [CCode (cname = "SSL_CTX_use_PrivateKey")]
+ public int use_private_key (EVP.Key private_key);
+ }
+
+ [CCode (cname = "const SSL_METHOD*")]
+ public enum Method {
+ [CCode (cname = "DTLS_client_method()")]
+ DTLS_CLIENT,
+ [CCode (cname = "DTLS_server_method()")]
+ DTLS_SERVER,
+ }
+
+ [CCode (cname = "int", has_type_id = false)]
+ public enum Error {
+ NONE,
+ ZERO_RETURN,
+ WANT_READ,
+ WANT_WRITE,
+ WANT_CONNECT,
+ WANT_ACCEPT,
+ WANT_X509_LOOKUP,
+ WANT_ASYNC,
+ WANT_ASYNC_JOB,
+ WANT_CLIENT_HELLO_CB,
+ SYSCALL,
+ SSL
+ }
+
+ public SSL (Context context);
+ public BIO rbio { get; [CCode (cname="SSL_set0_rbio")] owned set; }
+ public BIO wbio { get; [CCode (cname="SSL_set0_wbio")] owned set; }
+
+ [CCode (cname = "SSL_do_handshake")]
+ private int do_handshake_ ();
+ [CCode (cname = "SSL_do_handshake_")]
+ public Error do_handshake () throws GLib.Error {
+ int ret = throw_if_error (do_handshake_ ());
+ return get_error (ret);
+ }
+ [CCode (cname = "SSL_export_keying_material")]
+ private int export_keying_material_ (uint8[] out, string label, size_t llen, [CCode (type = "const unsigned char *")] string context, size_t contextlen, bool use_context);
+ [CCode (cname = "SSL_export_keying_material_")]
+ public void export_keying_material (uint8[] out, string label, string? context = null) throws GLib.Error {
+ throw_if_error (export_keying_material_ (@out, label, label.length, context, context == null ? 0 : context.length, context != null));
+ }
+ public Error get_error (int ret);
+ public void set_accept_state ();
+ public void set_connect_state ();
+ public int want ();
+ }
+
+ [CCode (cprefix = "X509_", lower_case_cprefix = "X509_", cheader_filename = "openssl/x509.h")]
+ namespace X509 {
+ [Compact]
+ [CCode (cname = "X509", lower_case_cprefix = "X509_", cprefix = "X509_", ref_function = "X509_up_ref", ref_function_void = true, unref_function = "X509_free")]
+ public class Certificate {
+ public Certificate ();
+ public ASN1.Time not_before {
+ [CCode (cname = "X509_get_notBefore")]
+ get;
+ [CCode (cname = "X509_set_notBefore")]
+ set;
+ }
+ public ASN1.Time not_after {
+ [CCode (cname = "X509_get_notAfter")]
+ get;
+ [CCode (cname = "X509_set_notAfter")]
+ set;
+ }
+ public ASN1.Integer serial_number {
+ [CCode (cname = "X509_get_serialNumber")]
+ get;
+ [CCode (cname = "X509_set_serialNumber")]
+ set;
+ }
+ [CCode (cname = "X509_digest")]
+ private int digest_ (EVP.MessageDigest type, uchar* md, ref uint len);
+ [CCode (cname = "X509_digest_")]
+ public uint8[] digest (EVP.MessageDigest type, size_t buf_len = 512) throws GLib.Error {
+ uint8[] buf = new uint8[buf_len];
+ uint buf_out_size = (uint) buf_len;
+ throw_if_error (digest_ (type, (uchar*) buf, ref buf_out_size));
+
+ uint8[] ret = new uint8[buf_out_size];
+ for (int i = 0; i < buf_out_size; i++) {
+ ret[i] = buf[i];
+ }
+ return ret;
+ }
+ [CCode (cname = "X509_set_pubkey")]
+ public int set_public_key (EVP.Key public_key);
+ public int set_version (long version);
+ [CCode (cname = "X509_sign")]
+ private int sign_ (EVP.Key private_key, EVP.MessageDigest md);
+ [CCode (cname = "X509_sign_")]
+ public void sign (EVP.Key private_key, EVP.MessageDigest md) throws GLib.Error {
+ throw_if_error (sign_ (private_key, md));
+ }
+ }
+ }
+
+ public int throw_if_error(int res) throws GLib.Error {
+ if (res <= 0) {
+ ulong error = ERR.get_error ();
+ if (error == 0) return res;
+ throw new GLib.Error (-1, (int) error, "%s:%s", ERR.lib_error_string (error), ERR.reason_error_string (error));
+ }
+ return res;
+ }
+} \ No newline at end of file
diff --git a/plugins/omemo/data/contact_details_dialog.ui b/main/data/contact_details_dialog.ui
index 6c357175..6c357175 100644
--- a/plugins/omemo/data/contact_details_dialog.ui
+++ b/main/data/contact_details_dialog.ui
diff --git a/plugins/omemo/data/encryption_preferences_entry.ui b/main/data/encryption_preferences_entry.ui
index 1aa1a541..1aa1a541 100644
--- a/plugins/omemo/data/encryption_preferences_entry.ui
+++ b/main/data/encryption_preferences_entry.ui
diff --git a/main/data/gresource.xml b/main/data/gresource.xml
index 8f23c48a..29d9c7d3 100644
--- a/main/data/gresource.xml
+++ b/main/data/gresource.xml
@@ -9,6 +9,7 @@
<file>add_conversation/select_jid_fragment.ui</file>
<file>call_widget.ui</file>
<file>chat_input.ui</file>
+ <file>contact_details_dialog.ui</file>
<file>conversation_content_view/item_metadata_header.ui</file>
<file>conversation_content_view/view.ui</file>
<file>conversation_details.css</file>
@@ -17,6 +18,7 @@
<file>conversation_row.ui</file>
<file>conversation_view.ui</file>
<file>dino-conversation-list-placeholder-arrow.svg</file>
+ <file>encryption_preferences_entry.ui</file>
<file>file_default_widget.ui</file>
<file>file_input_widget.ui</file>
<file>file_send_overlay.ui</file>
@@ -99,6 +101,7 @@
<file>join_room_dialog2.ui</file>
<file>main_window.ui</file>
<file>main_window_placeholder.ui</file>
+ <file>manage_key_dialog.ui</file>
<file>menu_app.ui</file>
<file>menu_conversation.ui</file>
<file>menu_encryption.ui</file>
diff --git a/plugins/omemo/data/manage_key_dialog.ui b/main/data/manage_key_dialog.ui
index 37f158da..37f158da 100644
--- a/plugins/omemo/data/manage_key_dialog.ui
+++ b/main/data/manage_key_dialog.ui
diff --git a/main/data/style.css b/main/data/style.css
index f3bd082c..7038f901 100644
--- a/main/data/style.css
+++ b/main/data/style.css
@@ -315,6 +315,11 @@ window.dino-main .file-image-widget .file-box-outer button:hover {
border-radius: 100%;
}
+/* Image file group */
+.dino-main .image-group {
+ border-radius: 8px;
+}
+
/* Call widget */
window.dino-main .call-box-outer.incoming {
diff --git a/main/meson.build b/main/meson.build
index 446bb0d2..b733e0c8 100644
--- a/main/meson.build
+++ b/main/meson.build
@@ -8,7 +8,6 @@ dependencies = [
dep_icu_uc,
dep_libadwaita,
dep_m,
- dep_qlite,
dep_xmpp_vala,
meson.get_compiler('vala').find_library('posix'),
]
@@ -50,7 +49,9 @@ sources = files(
'src/ui/conversation_content_view/date_separator_populator.vala',
'src/ui/conversation_content_view/file_default_widget.vala',
'src/ui/conversation_content_view/file_image_widget.vala',
+ 'src/ui/conversation_content_view/file_transmission_progress.c',
'src/ui/conversation_content_view/file_transmission_progress.vala',
+ 'src/ui/conversation_content_view/file_group_widget.vala',
'src/ui/conversation_content_view/file_video_widget.vala',
'src/ui/conversation_content_view/file_widget.vala',
'src/ui/conversation_content_view/item_actions.vala',
@@ -112,7 +113,7 @@ sources += gnome.compile_resources(
source_dir: 'data',
)
-c_args = [
+c_args = vala_c_args + [
'-DG_LOG_DOMAIN="dino"',
'-DGETTEXT_PACKAGE="dino"',
'-DLOCALE_INSTALL_DIR="@0@"'.format(get_option('prefix') / get_option('localedir')),
@@ -120,34 +121,141 @@ c_args = [
vala_args = [
'--vapidir', meson.current_source_dir() / 'vapi',
]
-if dep_gtk4.version() == 'unknown' or dep_gtk4.version().version_compare('>=4.6')
- vala_args += ['-D', 'GTK_4_6']
-endif
-if dep_gtk4.version() == 'unknown' or dep_gtk4.version().version_compare('>=4.8')
- vala_args += ['-D', 'GTK_4_8']
-endif
-if dep_gtk4.version() == 'unknown' or dep_gtk4.version().version_compare('>=4.12')
- vala_args += ['-D', 'GTK_4_12']
-endif
-if dep_gtk4.version() == 'unknown' or dep_gtk4.version().version_compare('>=4.14')
- vala_args += ['-D', 'GTK_4_14']
- sources += files('src/ui/conversation_content_view/file_transmission_progress.c')
-endif
-if dep_libadwaita.version() == 'unknown' or dep_libadwaita.version().version_compare('>=1.4')
- vala_args += ['-D', 'Adw_1_4']
-endif
-if meson.get_compiler('vala').version().version_compare('>=0.56.5') and meson.get_compiler('vala').version().version_compare('<0.58')
- vala_args += ['-D', 'VALA_0_56_GREATER_5']
-endif
-if meson.get_compiler('vala').version().version_compare('>=0.56.11') and meson.get_compiler('vala').version().version_compare('<0.58')
- vala_args += ['-D', 'VALA_0_56_GREATER_11']
+
+if get_option('rtp').allowed() and dep_gstreamer.found() and dep_gstreamer_app.found() and dep_gstreamer_audio.found() and dep_gstreamer_rtp.found() and dep_gstreamer_video.found()
+ dependencies += [
+ dep_gstreamer,
+ dep_gstreamer_app,
+ dep_gstreamer_audio,
+ dep_gstreamer_rtp,
+ dep_gstreamer_video,
+ ]
+
+ sources += files(
+ 'src/plugins/rtp/codec_util.vala',
+ 'src/plugins/rtp/device.vala',
+ 'src/plugins/rtp/gst_fixes.c',
+ 'src/plugins/rtp/module.vala',
+ 'src/plugins/rtp/plugin.vala',
+ 'src/plugins/rtp/stream.vala',
+ 'src/plugins/rtp/video_widget.vala',
+ )
+
+ if dep_webrtc_audio_processing.found() and get_option('voice-processing').allowed()
+ voice_dependencies = [
+ dep_gstreamer_audio,
+ dep_webrtc_audio_processing,
+ ]
+ voice_sources = files(
+ 'src/plugins/rtp/voice_processor_native.cpp',
+ )
+ voice_c_args = ['-DG_LOG_DOMAIN="dino"']
+ if dep_webrtc_audio_processing.version().version_compare('>=2.0')
+ voice_c_args += ['-DWEBRTC2']
+ elif dep_webrtc_audio_processing.version().version_compare('>=1.0')
+ voice_c_args += ['-DWEBRTC1']
+ else
+ voice_c_args += ['-DWEBRTC0']
+ endif
+ lib_rtp_voice_processor = static_library('rtp-voice-processor', voice_sources, c_args: voice_c_args, cpp_args: voice_c_args, dependencies: voice_dependencies, install: false)
+ dep_rtp_voice_processor = declare_dependency(link_with: lib_rtp_voice_processor)
+ vala_args += ['-D', 'WITH_VOICE_PROCESSOR']
+ dependencies += [dep_rtp_voice_processor]
+ sources += files(
+ 'src/plugins/rtp/voice_processor.vala',
+ )
+ endif
+ if get_option('rtp-h264')
+ vala_args += ['-D', 'ENABLE_H264']
+ endif
+ if get_option('rtp-msdk')
+ vala_args += ['-D', 'ENABLE_MSDK']
+ endif
+ if get_option('rtp-vaapi')
+ vala_args += ['-D', 'ENABLE_VAAPI']
+ endif
+ if get_option('rtp-vp9')
+ vala_args += ['-D', 'ENABLE_VP9']
+ endif
+ vala_args += ['-D', 'WITH_RTP']
+
+ summary('Voice/video calls (rtp)', true, bool_yn: true, section: 'Plugins')
+ summary('H264 codec', get_option('rtp-h264'), bool_yn: true, section: 'RTP configuration')
+ summary('VP9 codec', get_option('rtp-vp9'), bool_yn: true, section: 'RTP configuration')
+ summary('Intel MediaSDK', get_option('rtp-msdk'), bool_yn: true, section: 'RTP configuration')
+ summary('Video Acceleration API', get_option('rtp-vaapi'), bool_yn: true, section: 'RTP configuration')
+ summary('Voice preprocessing', dep_webrtc_audio_processing.found() and get_option('voice-processing').allowed(), bool_yn: true, section: 'RTP configuration')
+else
+ summary('Voice/video calls (rtp)', false, bool_yn: true, section: 'Plugins')
endif
-if meson.get_compiler('vala').version().version_compare('=0.56.11')
- vala_args += ['-D', 'VALA_0_56_11']
+
+if get_option('omemo').allowed() and dep_libomemo_c.found() and dep_libqrencode.found()
+ dependencies += [
+ dep_libomemo_c,
+ dep_libqrencode,
+ ]
+ sources += files(
+ 'src/plugins/omemo/dtls_srtp_verification_draft.vala',
+ 'src/plugins/omemo/file_transfer/file_decryptor.vala',
+ 'src/plugins/omemo/file_transfer/file_encryptor.vala',
+ 'src/plugins/omemo/jingle/jet_omemo.vala',
+ 'src/plugins/omemo/jingle/jingle_helper.vala',
+ 'src/plugins/omemo/logic/database.vala',
+ 'src/plugins/omemo/logic/decrypt.vala',
+ 'src/plugins/omemo/logic/encrypt.vala',
+ 'src/plugins/omemo/logic/manager.vala',
+ 'src/plugins/omemo/logic/pre_key_store.vala',
+ 'src/plugins/omemo/logic/session_store.vala',
+ 'src/plugins/omemo/logic/signed_pre_key_store.vala',
+ 'src/plugins/omemo/logic/trust_manager.vala',
+ 'src/plugins/omemo/plugin.vala',
+ 'src/plugins/omemo/protocol/bundle.vala',
+ 'src/plugins/omemo/protocol/message_flag.vala',
+ 'src/plugins/omemo/protocol/stream_module.vala',
+ 'src/plugins/omemo/trust_level.vala',
+ 'src/plugins/omemo/ui/bad_messages_populator.vala',
+ 'src/plugins/omemo/ui/call_encryption_entry.vala',
+ 'src/plugins/omemo/ui/contact_details_provider.vala',
+ 'src/plugins/omemo/ui/device_notification_populator.vala',
+ 'src/plugins/omemo/ui/encryption_list_entry.vala',
+ 'src/plugins/omemo/ui/encryption_preferences_entry.vala',
+ 'src/plugins/omemo/ui/manage_key_dialog.vala',
+ 'src/plugins/omemo/ui/own_notifications.vala',
+ 'src/plugins/omemo/ui/util.vala',
+ )
+ vala_args += ['-D', 'WITH_OMEMO']
+
+ summary('End-to-end encryption using OMEMO (omemo)', true, bool_yn: true, section: 'Plugins')
+else
+ summary('End-to-end encryption using OMEMO (omemo)', false, bool_yn: true, section: 'Plugins')
endif
-if meson.get_compiler('vala').version().version_compare('=0.56.12')
- vala_args += ['-D', 'VALA_0_56_12']
+
+if get_option('openpgp').allowed() and dep_gpgme.found()
+ dependencies += [
+ dep_gpgme,
+ ]
+ sources += files(
+ 'src/plugins/openpgp/contact_details_provider.vala',
+ 'src/plugins/openpgp/database.vala',
+ 'src/plugins/openpgp/encryption_list_entry.vala',
+ 'src/plugins/openpgp/encryption_preferences_entry.vala',
+ 'src/plugins/openpgp/file_transfer/file_decryptor.vala',
+ 'src/plugins/openpgp/file_transfer/file_encryptor.vala',
+ 'src/plugins/openpgp/gpgme_fix.c',
+ 'src/plugins/openpgp/gpgme_helper.vala',
+ 'src/plugins/openpgp/manager.vala',
+ 'src/plugins/openpgp/plugin.vala',
+ 'src/plugins/openpgp/stream_module.vala',
+ 'src/plugins/openpgp/util.vala',
+ 'vapi/gpg-error.vapi',
+ )
+ vala_args += ['-D', 'WITH_OPENPGP']
+
+ summary('End-to-end encryption using PGP (openpgp)', true, bool_yn: true, section: 'Plugins')
+else
+ summary('End-to-end encryption using PGP (openpgp)', false, bool_yn: true, section: 'Plugins')
endif
+
exe_dino = executable('dino', sources, c_args: c_args, vala_args: vala_args, dependencies: dependencies, install: true, install_rpath: default_install_rpath)
install_data('data/icons/scalable/apps/im.dino.Dino-symbolic.svg', install_dir: get_option('datadir') / 'icons/hicolor/symbolic/apps')
diff --git a/main/po/ar.po b/main/po/ar.po
index 2e63f8d3..d47a0aae 100644
--- a/main/po/ar.po
+++ b/main/po/ar.po
@@ -19,6 +19,381 @@ msgstr ""
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr "يستخدم %s جهازًا غير موثوق به. لن ترى رسائل من أجهزة لا تثق بها."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "أدِر الأجهزة"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "لا يثق %s بهذا الجهاز. هذا يعني أنك قد تفقد بعض الرسائل."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "إدارة المفتاح"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr "قارن البصمة حرفًا بحرف مع تلك التي تظهر على جهاز مُراسِلك."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "البصمات غير متطابقة"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "البصمات متطابقة"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "أكِّد"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "تحقق من المفتاح"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"ستميز الرسائل القادمة المرسلة بواسطة %s من الجهاز الذي يستخدم هذا المفتاح "
+"وفقًا لذلك في نافذة الدردشة."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "البصمات غير متطابقة"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"تحقق بأنك تقارن البصمة الصحيحة من فضلك. إن لم تكن البصمات متطابقة فإن حساب "
+"%s قد يكون مخترقًا، ومن المستحسن التفكير برفض هذا المفتاح."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "تحقق مِن بصمة المفتاح"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "قارن بصمة هذا المفتاح مع البصمة المعروضة على جهاز مُراسِلك."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "ارفض المفتاح"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "يحظر الاتصال المشفر مع جهاز المراسل الذي يستخدم هذا المفتاح."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "اقبل المفتاح"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "يسمح بالاتصال المشفر بجهاز المراسل الذي يستخدم هذا المفتاح."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "هذا المفتاح %s حاليًا."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "مقبول"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "ذلك يعني أنه بإمكان %s أن يستخدمه لتلقي وإرسال رسائل مشفرة."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "مُحَقَّق"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "بالإضافة إلى ذلك، فقد تم التحقق من تطابق المفتاح على جهاز المُراسِل."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "مرفوض"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"هذا يعني أنه لن يكون بمقدور %s استخدامه لفك تشفير رسائلك، ولن ترى الرسائل "
+"المشفرة به."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"لن ترى الرسائل المشفرة من جهاز %s الذي يستخدم هذا المفتاح. وبخلاف ذلك، فلن "
+"يتمكن هذا الجهاز من فك تشفير رسائلك بعد الآن."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"سيكون بمقدورك تبادل الرسائل المشفرة مع جهاز %s الذي يستخدم هذا المفتاح."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "أدِر"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "لدى هذا المُراسِل أجهزة جديدة"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "قرار ثقة OMEMO إلزامي"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "هل قمت بإضافة جهاز جديد على حساب %s؟"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO مبدئيًا"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "فَعِّل تعمية OMEMO للمحادثات الجديدة"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "شَفِّر للأجهزة الجديدة"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "شَفِّر تلقائيًا للأجهزة الجديدة من هذا المراسِل."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "المفاتيح الجديدة"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "سَتُقبَل مفاتيح التشفير الجديدة من أجهزتك الأخرى تلقائيًا."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "هذا الجهاز"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "جهاز آخر"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "جهاز"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "قُبِل"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "رُفِض"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "مُحَقَّق"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "جهاز جديد"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"لكل جهاز مفتاح OMEMO خاص به. يمكن فك تعمية الرسائل على جهاز ما إذا كانت "
+"التعمية قد تمت بمفتاحه حصرًا. الرسائل معمَّاة للأجهزة المقبولة."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "إدارة مفاتيح OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "لا أجهزة OMEMO"
+#~ msgstr[1] "جهاز OMEMO واحد"
+#~ msgstr[2] "جهازا OMEMO"
+#~ msgstr[3] "%d أجهزة OMEMO"
+#~ msgstr[4] "%d جهاز OMEMO"
+#~ msgstr[5] "%d جهاز OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "اقبّل المفاتيح الجديدة تلقائيًا"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "ستقبل مفاتيح التشفير الجديدة لهذا المراسل تلقائيًا."
+
+#~ msgid "Own key"
+#~ msgstr "مفتاحك الخاص"
+
+#~ msgid "Associated keys"
+#~ msgstr "المفاتيح المقترِنة"
+
+#~ msgid "Inactive keys"
+#~ msgstr "المفاتيح غير النشِطة"
+
+#~ msgid "Unused"
+#~ msgstr "غير مستخدَم"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "بصمتك الخاصة"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "سيتم توليدها عند أول اتصال"
+
+#~ msgid "Not matching"
+#~ msgstr "غير مطابقة"
+
+#~ msgid "Matching"
+#~ msgstr "مطابقة"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "بمجرد تأكيد ذلك ، سيتم تمييز أية رسائل مستقبلية مرسلة مِن %s باستخدام هذا "
+#~ "المفتاح وفقا لذلك في نافذة الدردشة."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr "توقف عن قبول هذا المفتاح أثناء الاتصال مع المُراسِل المرتبط به."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "ابدأ في قبول هذا المفتاح أثناء الاتصال مع المُراسِل المرتبط به"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "هذا يعني أنه لا يمكن استخدامه مِن طرف %s لاستقبال الرسائل و سيتم تجاهل أية "
+#~ "رسائل بُعِثت به."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "بمجرد التأكيد ، سيتم تجاهل أي رسائل مستقبلية يقوم بإرسالها %s باستخدام "
+#~ "هذا المفتاح ويتصبح كافة رسائلك غير قابلة للقراءة باستخدام هذا المفتاح."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "بمجرد تأكيد هذا المفتاح سوف يكون قابلا للاستخدام من قِبل %s لتلقي وإرسال "
+#~ "الرسائل."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "عند قيام جهة الاتصال هذه باضافة مفاتيح تشفير جديدة إلى حسابها ، قم "
+#~ "بقبولها تلقائيا."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr "عند إضافة مفاتيح تشفير جديدة إلى حسابك ، اقبلها تلقائيا."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "جهاز مجهول (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "أجهزة أخرى"
+
+#~ msgid "- None -"
+#~ msgstr "- لا شيء -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "استعلام GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "أعلن المفتاح"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "خطأ في GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "لا مفتاح متوفر. ولِّد واحدًا!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "مُعَطَّل"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "المفتاح ليس في سلسلة المفاتيح"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "البصمة"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "نشر المفاتيح معطل"
+
+#~ msgid "Select key"
+#~ msgstr "اختيار مفتاح"
+
+#~ msgid "Loading…"
+#~ msgstr "جارٍ التحميل…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1112,6 +1487,7 @@ msgstr "لِج"
msgid "Could not establish a secure connection"
msgstr "تعذّر إنشاء اتصال آمن"
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "عُد"
diff --git a/main/po/ca.po b/main/po/ca.po
index a479112e..489c3e83 100644
--- a/main/po/ca.po
+++ b/main/po/ca.po
@@ -16,6 +16,357 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.13\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s ha estat utilitzant un dispositiu no verificat. No veureu missatges de "
+"dispositius en què no confieu."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gestionar dispositius"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s no confia en aquest dispositiu. Això vol dir que és possible que us "
+"faltin missatges."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gestiona la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Compareu l'empremta, caràcter per caràcter, amb la que es mostra al vostre "
+"dispositiu de contactes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Les empremtes són diferents"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Les empremtes coincideixen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirma"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Comproveu la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Els missatges futurs enviats per %s des del dispositiu que utilitza aquesta "
+"clau es ressaltaran en conseqüència a la finestra de xat."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Les empremtes no es corresponen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Cercioreu-vos que estigueu verificant l'empremta correcta. Si no en "
+"coincideixen, el compte de %s podria trobar-se en perill i heu de considerar "
+"rebutjar aquesta clau."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar l'empremta de la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Compareu l'empremta digital d'aquesta clau amb l'empremta digital que es "
+"mostra al dispositiu del contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rebutja la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Bloqueja la comunicació xifrada amb el dispositiu del contacte que utilitza "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Accepta la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permet la comunicació xifrada amb el dispositiu del contacte que utilitza "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Actualment, aquesta clau ha estat %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "acceptada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Això vol dir que %s pot utilitzar-la per rebre i enviar missatges xifrats."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"A més, s'ha verificat que coincideix amb la clau del dispositiu del contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rebutjada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Això vol dir que %s no pot utilitzar-la per desxifrar els vostres missatges "
+"i no veureu els missatges xifrats amb ella."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"No veureu missatges xifrats del dispositiu de %s que utilitza aquesta clau. "
+"Per contra, aquest dispositiu ja no podrà desxifrar els vostres missatges."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Podreu intercanviar missatges xifrats amb el dispositiu de %s que utilitza "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gestiona"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Aquest contacte té dispositius nous"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Cal una decisió de confiança d'OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Heu afegit un dispositiu nou per al compte %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO per defecte"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Activa l'encriptació OMEMO per a converses noves"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Encripta a nous dispositius"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Encripta automàticament a dispositius nous des d'aquest contacte."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Claus noves"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Les claus de xifratge noves dels altres dispositius s'acceptaran "
+"automàticament."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Aquest dispositiu"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Un altre dispositiu"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Dispositiu"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Acceptada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rebutjada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Nou dispositiu"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Cada dispositiu té la seva pròpia clau OMEMO. Un dispositiu només es pot "
+"desxifrar un missatge si ha estat xifrat per a la seva clau. Només es xifren "
+"els missatges per a dispositius acceptats."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gestió de claus OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d dispositiu OMEMO"
+#~ msgstr[1] "%d dispositius OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Accepta claus noves automàticament"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Les claus de xifratge noves d'aquest contacte s'acceptaran automàticament."
+
+#~ msgid "Own key"
+#~ msgstr "Clau pròpia"
+
+#~ msgid "Associated keys"
+#~ msgstr "Claus associades"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Claus inactives"
+
+#~ msgid "Unused"
+#~ msgstr "No utilitzada"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Empremta pròpia"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Es generarà durant la primera connexió"
+
+#~ msgid "Not matching"
+#~ msgstr "No coincideixen"
+
+#~ msgid "Matching"
+#~ msgstr "Coincideixen"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Després de la confirmació, qualssevol missatges que enviï %s amb aquesta "
+#~ "clau es ressaltarà a la finestra del xat."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Dispositiu desconegut (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Altres dispositius"
+
+#~ msgid "- None -"
+#~ msgstr "- Cap -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "S'està consultant al GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "S'ha produït un error al GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "No hi ha claus disponibles. Genereu una!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "La clau no està al clauer"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Empremta digital"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publicació de claus inhabilitada"
+
+#~ msgid "Select key"
+#~ msgstr "Seleccioneu una clau"
+
+#~ msgid "Loading…"
+#~ msgstr "S'està carregant…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,6 +1445,7 @@ msgstr "Inicia sessió"
msgid "Could not establish a secure connection"
msgstr "No s'ha pogut establir una connexió segura"
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Enrere"
diff --git a/main/po/cs.po b/main/po/cs.po
index b68e0b31..a5386c65 100644
--- a/main/po/cs.po
+++ b/main/po/cs.po
@@ -17,6 +17,332 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s používá nedůvěryhodné zařízení. Zprávy ze zařízení, kterým nedůvěřujete, "
+"se vám nezobrazí."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Spravovat zařízení"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s nedůvěřuje tomuto zařízení. Z tohoto důvodu nemusí vidět některé zprávy."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Spravovat klíč"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Porovnejte otisk klíče, znak po znaku, s tím, který je zobrazen na zařízení "
+"vašeho kontaktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Otisky klíčů se liší"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Otisky klíčů odpovídají"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Potvrdit"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Ověřit klíč"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Budoucí zprávy, s odesílatelem %s, ze zařízení, které používá tento klíč, "
+"budou odpovídajícím způsobem zvýrazněny v okně chatu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Otisky klíčů se neshodují"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Ověřte, zda porovnáváte správný otisk klíče. Pokud se otisky neshodují, účet "
+"%s může být ohrožen a měli byste zvážit zamítnutí tohoto klíče."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Ověření otisku klíče"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Porovnejte otisk tohoto klíče s otiskem zobrazeným na zařízení kontaktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Odmítnout klíč"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Zablokujte šifrovanou komunikaci se zařízením kontaktu, které tento klíč "
+"používá."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Přijmout klíč"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Povolit šifrovanou komunikaci se zařízením kontaktu, které používá tento "
+"klíč."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Tento klíč je v současné době %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "akceptován"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"To znamená, že jej %s může používat k přijímání a odesílání šifrovaných "
+"zpráv."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "ověřen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Navíc bylo ověřeno, že odpovídá klíči v zařízení kontaktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "odmítnut"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"To znamená, že jej %s nemůže použít k dešifrování zpráv a vy neuvidíte "
+"zprávy šifrované tímto klíčem."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Ze zařízení %s, které používá tento klíč, se šifrované zprávy nezobrazí. "
+"Toto zařízení už také nebude schopno rozluštit vaše zprávy."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Budete si moci vyměňovat šifrované zprávy se zařízením %s, které tento klíč "
+"používá."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Spravovat"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Tento kontakt má nová zařízení"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Vyžaduje se rozhodnutí o důvěře OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Přidali jste nové zařízení pro účet %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO ve výchozím stavu"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Zapnout OMEMO šifrování pro nové konverzace"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Šifrovat novým zařízením"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automaticky šifrovat novým zařízením od tohoto kontaktu."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nové klíče"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Nové šifrovací klíče z vašich ostatních zařízení budou automaticky přijímány."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Toto zařízení"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Jiné zařízení"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Zařízení"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Přijat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Odmítnut"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Ověřen"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Nové zařízení"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Každé zařízení má svůj vlastní OMEMO klíč. Pokud jsou tímto klíčem "
+"zašifrované, zprávy je možné rozšifrovat pouze daným zařízením. Zprávy jsou "
+"šifrovány pouze pro přijatá zařízení."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO Správa klíčů"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO zařízení"
+#~ msgstr[1] "%d OMEMO zařízení"
+#~ msgstr[2] "%d OMEMO zařízení"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Automaticky přijímat nové klíče"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Nové šifrovací klíče od tohoto kontaktu budou automaticky přijímány."
+
+#~ msgid "Own key"
+#~ msgstr "Vlastní klíč"
+
+#~ msgid "Associated keys"
+#~ msgstr "Přidružené klíče"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Neaktivní klíče"
+
+#~ msgid "Unused"
+#~ msgstr "Nepoužit"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Otisk vlastního klíče"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Budou generovány při prvním připojení"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Dotazování GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Oznámit klíč"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Chyba v GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nejsou k dispozici žádné klíče. Vygenerujte jeden!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Zakázáno"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Klíč není v klíčence"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Otisk"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publikování klíčů zakázáno"
+
+#~ msgid "Select key"
+#~ msgstr "Vybrat klíč"
+
+#~ msgid "Loading…"
+#~ msgstr "Načítání…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1097,7 +1423,7 @@ msgstr "Přihlásit"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Nepodařilo se navázat zabezpečené připojení"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Zpět"
diff --git a/main/po/da.po b/main/po/da.po
index f67fa88f..4afea682 100644
--- a/main/po/da.po
+++ b/main/po/da.po
@@ -17,6 +17,270 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.4-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Forespørg GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Fejl i GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Ingen nøgler til rådighed. Generer en!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Nøglen er ikke i nøglering"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Nøglepublisering deaktiveret"
+
+#~ msgid "Select key"
+#~ msgstr "Vælg nøgle"
+
+#~ msgid "Loading…"
+#~ msgstr "Henter…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1357,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Kunne ikke oprette en sikker forbindelse"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Tilbage"
diff --git a/main/po/de.po b/main/po/de.po
index 5ee85c98..61f89300 100644
--- a/main/po/de.po
+++ b/main/po/de.po
@@ -13,6 +13,422 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s hat ein nicht akzeptiertes Gerät benutzt. Du wirst Nachrichten von nicht "
+"akzeptierten Geräten nicht sehen."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Geräte verwalten"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s akzeptiert dieses Gerät nicht. Deshalb verpasst du vielleicht Nachrichten."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Schlüssel verwalten"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Vergleiche den Fingerabdruck, Zeichen für Zeichen, mit dem der auf dem Gerät "
+"deines Kontakts angezeigt wird."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fingerabdrücke unterscheiden sich"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fingerabdrücke stimmen überein"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Bestätigen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Schlüssel verifizieren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Zukünftige Nachrichten, die %s von dem Gerät sendet, welches diese Schlüssel "
+"verwendet, werden im Chatfenster entsprechend hervorgehoben."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fingerabdrücke stimmen nicht überein"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Bitte überprüfe, ob du den richtigen Fingerabdruck vergleichst. Wenn die "
+"Fingerabdrücke nicht übereinstimmen, ist das Konto von %s möglicherweise "
+"kompromittiert und du solltest in Betracht ziehen, den Schlüssel abzulehnen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Fingerabdruck überprüfen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Diesen Fingerabdruck mit dem Fingerabdruck vergleichen, der auf dem Gerät "
+"des Kontaktes angezeigt wird."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Schlüssel ablehnen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blockiert die verschlüsselte Kommunikation mit dem Gerät des Kontakts, das "
+"diesen Schlüssel verwendet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Schlüssel akzeptieren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Erlaubt die verschlüsselte Kommunikation mit dem Gerät des Kontakts, das "
+"diesen Schlüssel verwendet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Dieser Schlüssel ist aktuell %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "akzeptiert"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Das bedeutet, er kann von %s zum Empfangen und Senden verschlüsselter "
+"Nachrichten verwendet werden."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "überprüft"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Darüber hinaus wurde überprüft, dass er mit dem Schlüssel auf dem Gerät des "
+"Kontaktes übereinstimmt."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "abgelehnt"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Das bedeutet %s kann ihn nicht benutzen, um deine Nachrichten zu "
+"entschlüsseln, und du wirst damit verschlüsselte Nachrichten nicht sehen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Du wirst verschlüsselte Nachrichten von dem Gerät von %s, welches diesen "
+"Schlüssel benutzt nicht mehr sehen. Umgekehrt kann dieses Gerät deine "
+"Nachrichten nicht mehr entschlüsseln."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Du wirst verschlüsselte Nachrichten mit dem Gerät von %s, welches diesen "
+"Schlüssel verwendet, austauschen können."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Verwalten"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Dieser Kontakt hat neue Geräte"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO-Vertrauensentscheidung erforderlich"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Hast du ein neues Gerät für dein Konto %s hinzugefügt?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO als Standard"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "OMEMO-Verschlüsselung für neue Unterhaltungen aktivieren"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Verschlüsselung für neue Geräte"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automatische Verschlüsselung für neue Geräte von diesem Kontakt."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Neue Schlüssel"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Neue Schlüssel von deinen anderen Geräten werden automatisch akzeptiert."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Dieses Gerät"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Anderes Gerät"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Gerät"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Akzeptiert"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Zurückgewiesen"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verifiziert"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Neues Gerät"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Jedes Gerät hat seinen eigenen OMEMO-Schlüssel. Nachrichten können von einem "
+"Gerät nur entschlüsselt werden, wenn sie mit diesem Schlüssel verschlüsselt "
+"sind. Nachrichten werden nur an akzeptierte Geräte verschlüsselt."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO-Schlüssel Verwaltung"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO Gerät"
+#~ msgstr[1] "%d OMEMO Geräte"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Neue Schlüssel automatisch akzeptieren"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Neue Schlüssel von diesem Kontakt werden automatisch akzeptiert."
+
+#~ msgid "Own key"
+#~ msgstr "Eigener Schlüssel"
+
+#~ msgid "Associated keys"
+#~ msgstr "Zugehörige Schlüssel"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Inaktive Schlüssel"
+
+#~ msgid "Unused"
+#~ msgstr "Unbenutzt"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Eigener Fingerabdruck"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Wird beim ersten Verbinden erzeugt"
+
+#~ msgid "Your contact"
+#~ msgstr "Dein Kontakt"
+
+#~ msgid "Not matching"
+#~ msgstr "Nicht übereinstimmend"
+
+#~ msgid "Matching"
+#~ msgstr "Stimmt überein"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Nach der Bestätigung werden alle mit diesem Schlüssel verschlüsselten "
+#~ "Nachrichten von %s hervorgehoben."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Diesen Schlüssel nicht mehr für die Kommunikation mit dem "
+#~ "Schlüsselbesitzer akzeptieren."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Akzeptiere diesen Schlüssel für die Kommunikation mit dem zugehörigen "
+#~ "Kontakt"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Das bedeutet, dass es von %s nicht verwendet werden kann, um Nachrichten "
+#~ "zu empfangen und alle von ihm gesendeten Nachrichten werden ignoriert."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Nach der Bestätigung werden alle zukünftigen Nachrichten, die von %s mit "
+#~ "diesem Schlüssel gesendet werden, ignoriert und keine Ihrer Nachrichten "
+#~ "ist mit diesem Schlüssel lesbar."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Sobald bestätigt, kann %s diesen Schlüssel zum Senden und Empfangen von "
+#~ "Nachrichten verwenden."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Wenn dieser Kontakt neue Verschlüsselungscodes zu seinem Konto hinzufügt, "
+#~ "werden sie automatisch akzeptiert."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Wenn du einen neuen Schüssel zu deinem Account hinzufügst, wird dieser "
+#~ "automatisch akzeptiert."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Diesen Schlüssel für die Kommunikation mit dem entsprechenden Kontakt "
+#~ "akzeptieren."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Unbekanntes Gerät (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Andere Geräte"
+
+#~ msgid "- None -"
+#~ msgstr "- Keine -"
+
+#~ msgid "OMEMO"
+#~ msgstr "OMEMO"
+
+#~ msgid "Database error"
+#~ msgstr "Datenbank Fehler"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "GnuPG wird abgefragt"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Schlüssel veröffentlichen"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Fehler in GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Keine Schlüssel vorhanden. Erzeuge einen!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Schlüssel nicht im Schlüsselbund"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Fingerabdruck"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Schlüsselveröffentlichung deaktiviert"
+
+#~ msgid "Select key"
+#~ msgstr "Wähle einen Schlüssel"
+
+#~ msgid "Loading…"
+#~ msgstr "Lade…"
+
+#~ msgid "OpenPGP"
+#~ msgstr "OpenPGP"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1091,7 +1507,7 @@ msgstr "Anmelden"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Es konnte keine sichere Verbindung hergestellt werden"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Zurück"
diff --git a/main/po/dino.pot b/main/po/dino.pot
index aaa02bd5..9d4bbed5 100644
--- a/main/po/dino.pot
+++ b/main/po/dino.pot
@@ -18,6 +18,261 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1349,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr ""
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr ""
diff --git a/main/po/el.po b/main/po/el.po
index 8942ff86..0269899d 100644
--- a/main/po/el.po
+++ b/main/po/el.po
@@ -17,6 +17,337 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.18-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s χρησιμοποιεί μια μη αξιόπιστη συσκευή. Δεν θα βλέπετε μηνύματα από "
+"συσκευές που δεν εμπιστεύεστε."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Διαχείριση συσκευών"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s δεν εμπιστεύεται αυτήν τη συσκευή. Αυτό σημαίνει ότι μπορεί να χάσετε "
+"μηνύματα."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Διαχείριση Κλειδιού"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Συγκρίνετε το δακτυλικό αποτύπωμα (fingerprint), χαρακτήρα προς χαρακτήρα, "
+"με αυτό που εμφανίζεται στη συσκευή της επαφής σας."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Τα δακτυλικά αποτυπώματα (fingerprints) διαφέρουν"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Τα δακτυλικά αποτυπώματα (fingerprints) ταιριάζουν"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Επιβεβαίωση"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Επαλήθευση κλειδιού"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Μελλοντικά μηνύματα που αποστέλλονται από %s από τη συσκευή που χρησιμοποιεί "
+"αυτό το κλειδί θα επισημαίνονται ανάλογα στο παράθυρο συνομιλίας."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Τα δακτυλικά αποτυπώματα (fingerprints) δεν ταιριάζουν"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Επαληθεύστε ότι συγκρίνετε το σωστό δακτυλικό αποτύπωμα (fingerprint). Εάν "
+"τα δακτυλικά αποτυπώματα (fingerprints) δεν ταιριάζουν, ο λογαριασμός του %s "
+"μπορεί να παραβιαστεί και θα πρέπει να σκεφτείτε να απορρίψετε αυτό το "
+"κλειδί."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Επαλήθευση δακτυλικού αποτυπώματος (fingerprint) κλειδιού"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Συγκρίνετε το δακτυλικό αποτύπωμα (fingerprint) αυτού του κλειδιού με το "
+"δακτυλικό αποτύπωμα που εμφανίζεται στη συσκευή της επαφής."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Απόρριψη κλειδιού"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Αποκλεισμός κρυπτογραφημένης επικοινωνίας με τη συσκευή της επαφής που "
+"χρησιμοποιεί αυτό το κλειδί."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Αποδοχή κλειδιού"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Να επιτρέπεται η κρυπτογραφημένη επικοινωνία με τη συσκευή της επαφής που "
+"χρησιμοποιεί αυτό το κλειδί."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Αυτό το κλειδί είναι αυτή τη στιγμή %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "δεκτό"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί από το %s για λήψη και αποστολή "
+"κρυπτογραφημένων μηνυμάτων."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "επαληθευμένο"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Επιπλέον, έχει επαληθευτεί ότι ταιριάζει με το κλειδί στη συσκευή της επαφής."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "απορριφθέν"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Αυτό σημαίνει ότι δεν μπορεί να χρησιμοποιηθεί από %s για την "
+"αποκρυπτογράφηση των μηνυμάτων σας και δεν θα βλέπετε μηνύματα "
+"κρυπτογραφημένα με αυτό."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Δεν θα βλέπετε κρυπτογραφημένα μηνύματα από τη συσκευή των %s που "
+"χρησιμοποιούν αυτό το κλειδί. Αντίθετα, αυτή η συσκευή δεν θα μπορεί πλέον "
+"να αποκρυπτογραφήσει τα μηνύματά σας."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Θα μπορείτε να ανταλλάσσετε κρυπτογραφημένα μηνύματα με τη συσκευή των %s "
+"που χρησιμοποιούν αυτό το κλειδί."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Διαχείρηση"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Αυτή η επαφή έχει νέες συσκευές"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Απαιτείται απόφαση εμπιστοσύνης OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Προσθέσατε νέα συσκευή για τον λογαριασμό %s;"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Νέα κλειδιά"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Τα νέα κλειδιά κρυπτογράφησης από τις άλλες συσκευές σας θα γίνονται δεκτά "
+"αυτόματα."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Αποδεκτά"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Απορριφθέντα"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Επαληθευμένα"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Διαχείριση κλειδιών OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO συσκευή"
+#~ msgstr[1] "%d OMEMO συσκευές"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Αυτόματη αποδοχή νέων κλειδιών"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Τα νέα κλειδιά κρυπτογράφησης από αυτήν την επαφή θα γίνονται δεκτά "
+#~ "αυτόματα."
+
+#~ msgid "Own key"
+#~ msgstr "Το κλειδί μου"
+
+#~ msgid "Associated keys"
+#~ msgstr "Συσχετισμένα κλειδιά"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Ανενεργά κλειδιά"
+
+#~ msgid "Unused"
+#~ msgstr "Αχρησιμοποίητα"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Το δακτυλικό μου αποτύπωμα (fingerprint)"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Θα δημιουργηθεί με την πρώτη σύνδεση"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Αναζήτηση στο GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Σφάλμα στο GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Δεν υπάρχουν διαθέσιμα κλειδιά. Δημιουργήστε ένα!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Το κλειδί δεν είναι στο keychain"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Η δημοσίευση του κλειδιού είναι απενεργοποιημένη"
+
+#~ msgid "Select key"
+#~ msgstr "Επιλέξτε κλειδί"
+
+#~ msgid "Loading…"
+#~ msgstr "Φόρτωση…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1095,7 +1426,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Δεν ήταν δυνατή η δημιουργία ασφαλούς σύνδεσης"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Πίσω"
diff --git a/main/po/en.po b/main/po/en.po
index 15fd5845..1ad7cc78 100644
--- a/main/po/en.po
+++ b/main/po/en.po
@@ -8,6 +8,261 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1085,6 +1340,7 @@ msgstr ""
msgid "Could not establish a secure connection"
msgstr ""
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr ""
diff --git a/main/po/eo.po b/main/po/eo.po
index 4cfc0c3b..87d49f57 100644
--- a/main/po/eo.po
+++ b/main/po/eo.po
@@ -18,6 +18,335 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s uzas nefidatan aparaton. Vi ne vidos mesaĝojn el aparatoj, kiujn vi ne "
+"fidas."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Administri aparatojn"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s ne fidas ĉi tiun aparaton. Tio signifas, ke eble mankas al vi mesaĝoj."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Administri Ŝlosilon"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Komparu la fingropremaĵon, signon post signo, kun la fingropremaĵo montrata "
+"sur la aparato de via kontakto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fingropremaĵoj diferencas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fingropremaĵoj kongruas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Konfirmi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Konfirmi ŝlosilon"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Mesaĝoj sendotaj de %s per la aparato kiu uzas ĉi tiun ŝlosilon estos "
+"emfazitaj laŭe en la babila fenestro."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fingropremaĵoj ne kongruas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Bonvolu konfirmi, ke vi komparas la ĝustan fingropremaĵon. Se fingropremaĵoj "
+"ne kongruas, la konto de %s eble estas kompromitita, kaj vi konsideru "
+"rifuzon de ĉi tiu ŝlosilo."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Konfirmi ŝlosilan fingropremaĵon"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Komparu la fingropremaĵon de ĉi tiu ŝlosilo kun la fingropremaĵo montrata "
+"sur la aparato de la kontakto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rifuzi ŝlosilon"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Rifuzi ĉifritan komunikadon al la aparato de la kontakto, kiu uzas ĉi tiun "
+"ŝlosilon."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Akcepti ŝlosilon"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Akcepti ĉifritan komunikadon al la aparato de la kontakto, kiu uzas ĉi tiun "
+"ŝlosilon."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Ĉi tiu ŝlosilo estas aktuale %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "akceptata"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Ĉi tio signifas, ke ĝi povas esti uzata de %s por ricevi kaj sendi ĉifritajn "
+"mesaĝojn."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "konfirmita"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Krome ĝi estis kontrolita pri kongruo kun la ŝlosilo ĉe la aparato de la "
+"kontakto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rifuzita"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Tio signifas, ke ĝi ne povas esti uzata de %s por malĉifri viajn mesaĝojn, "
+"kaj vi ne vidos mesaĝojn ĉifritajn per ĝi."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Vi ne vidos ĉifritajn mesaĝojn el la aparato de %s kiu uzas ĉi tiun "
+"ŝlosilon. Male, tiu aparato ne plu povos malĉifri viajn mesaĝojn."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Vi povos interŝanĝi ĉifritajn mesaĝojn kun la aparato de %s kiu uzas ĉi tiun "
+"ŝlosilon."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Administri"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Ĉi tiu kontakto havas novajn aparatojn"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Necesas OMEMO-decido pri fidindeco"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Ĉu vi aldonis novan aparaton por la konto %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO defaŭlte"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Ŝalti ĉifradon per OMEMO por novaj konversacioj"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Ĉifri por novaj aparatoj"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Aŭtomate ĉifri por novaj aparatoj de ĉi tiu kontakto."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Novaj ŝlosiloj"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Novaj ĉifraj ŝlosiloj de viaj aliaj aparatoj estos aŭtomate akceptitaj."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Ĉi tiu aparato"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Alia aparato"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Aparato"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Akceptita"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rifuzita"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Konfirmita"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Nova aparato"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Ĉiu aparato havas sian OMEMO-ŝlosilon. Mesaĝoj povas esti deĉifritaj de "
+"aparato, nur se ĉifritaj per ĝia ŝlosilo. Mesaĝoj estas ĉifrataj nur por "
+"akceptitaj aparatoj."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Administrado de OMEMO-Ŝlosiloj"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO-aparato"
+#~ msgstr[1] "%d OMEMO-aparatoj"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Aŭtomate akcepti novajn ŝlosilojn"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Novaj ĉifraj ŝlosiloj de ĉi tiu kontakto estos aŭtomate akceptitaj."
+
+#~ msgid "Own key"
+#~ msgstr "Propra ŝlosilo"
+
+#~ msgid "Associated keys"
+#~ msgstr "Asociitaj ŝlosiloj"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Neaktivaj ŝlosiloj"
+
+#~ msgid "Unused"
+#~ msgstr "Ne uzata"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Propra fingropremaĵo"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Estos farita dum unua konekto"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Pridemandante GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Anonca ŝlosilo"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Eraro pri GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Neniu ŝlosilo estas havebla. Faru ŝlosilon!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Malŝaltita"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Ŝlosilo ne en ŝlosilaro"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Fingropremo"
+
+#, fuzzy
+#~ msgid "Key publishing disabled"
+#~ msgstr "Eldonado de ŝlosilo estas malŝaltita"
+
+#~ msgid "Select key"
+#~ msgstr "Elekti ŝlosilon"
+
+#~ msgid "Loading…"
+#~ msgstr "Ŝargante…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1423,7 @@ msgstr "Ensaluti"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Ne povis sekure konekti"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Reen"
diff --git a/main/po/es.po b/main/po/es.po
index 7e46ad82..d24e6513 100644
--- a/main/po/es.po
+++ b/main/po/es.po
@@ -18,6 +18,422 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.7.1-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s ha estado usando un dispositivo poco fiable. No verá mensajes de "
+"dispositivos en los que no confíe."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gestionar dispositivos"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s no confía en este dispositivo. Eso significa que puede que te falten "
+"mensajes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gestionar Clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Compara la huella digital, carácter a carácter, con la huella digital "
+"mostrada en el dispositivo de tus contactos."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Las huellas digitales son diferente"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Las huellas digitales son idénticas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificar clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Los mensajes futuros enviados por %s desde el dispositivo que usa esta clave "
+"serán resaltado en consecuencia en la ventana de conversación."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Huellas digitales no coinciden"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Por favor, verifica que estás comparando la huella digital correcta. Si la "
+"huella digital no coincide con la cuenta %s puede que la clave esté "
+"comprometida y deberías considerar rechazar esta clave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar Huella Digital"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Compara esta huella digital con la huella digital mostrada en el dispositivo "
+"de tu contacto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rechazar clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Bloquear comunicación cifrada con el dispositivo del contacto que usa esta "
+"clave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Aceptar clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permitir comunicación cifrada con el dispositivo del contacto que usa esta "
+"clave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Esta clave está actualmente %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "aceptada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Esto significa que puede ser usada por %s para recibir y enviar mensajes "
+"cifrados."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Además, ha sido verificado que las claves coinciden con la clave del "
+"dispositivo de tu contacto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rechazada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Esto significa que no puede ser usada por %s para descifrar tus mensajes, y "
+"tú no verás los mensajes cifrados con ella."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"No verás los mensajes cifrados desde el dispositivo de %s que usa esta "
+"clave. A la inversa, ese dispositivo ya no podrá descifrar tus mensajes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Tu podrás intercambiar mensajes cifrados con el dispositivo de %s que usa "
+"esta clave."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gestionar"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Este contacto tiene un nuevo dispositivo"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Decisión de confianza requerida para clave OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "¿Añadiste un nuevo dispositivo para la cuenta %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO por defecto"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Habilitar el cifrado de OMEMO para nuevas conversaciones"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Cifrar para nuevos dispositivos"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Cifrar automáticamente los nuevos dispositivos desde este contacto."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nuevas claves"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Las nuevas claves de cifrado de tus otros dispositivos serán aceptadas "
+"automáticamente."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Este dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Otro dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Aceptada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rechazada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Dispositivo nuevo"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Cada dispositivo tiene su propia clave OMEMO. Los mensajes solamente se "
+"pueden descifrar por un dispositivo si se han cifrado para su clave. Los "
+"mensajes solamente se cifran para dispositivos aceptados."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Huellas digitales OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d dispositivo OMEMO"
+#~ msgstr[1] "%d dispositivos OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Automáticamente aceptar nuevas claves"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Las nuevas claves de cifrados para este contacto serán aceptadas "
+#~ "automáticamente."
+
+#~ msgid "Own key"
+#~ msgstr "Mi clave"
+
+#~ msgid "Associated keys"
+#~ msgstr "Claves asociadas"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Claves inactivas"
+
+#~ msgid "Unused"
+#~ msgstr "Sin usar"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Tu huella digital"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Será generada en la primera conexión"
+
+#~ msgid "Your contact"
+#~ msgstr "Tu contacto"
+
+#~ msgid "Not matching"
+#~ msgstr "No coincide"
+
+#~ msgid "Matching"
+#~ msgstr "Coincide"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Una vez confirmada, cualquier futuro mensaje enviado por %s usando esta "
+#~ "clave será resaltado en el ventana de conversación."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Dejar de aceptar esta clave durante la comunicación con este contacto."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Aceptar esta clave durante la comunicación con este contacto"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Esto significa que no puede ser usada por %s para recibir mensajes, y "
+#~ "cualquier mensaje enviado con esta clave será ignorado."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Una vez confirmado, cualquier futuro mensaje enviado por %s usando esta "
+#~ "clave será ignorado y ninguno de tus mensajes será legible usando esta "
+#~ "clave."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Una vez confirmada esta clave será usable por %s para recibir y enviar "
+#~ "mensajes."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Cuando este contacto añada nuevas claves de cifrado a su cuenta, "
+#~ "automáticamente aceptarlas."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Cuando añades nuevas claves de cifrado a tu cuenta, aceptarlas "
+#~ "automáticamente."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr "Aceptar esta clave durante la comunicación con este contacto."
+
+#~ msgid "Reject Key"
+#~ msgstr "Rechazar clave"
+
+#~ msgid "Accept Key"
+#~ msgstr "Aceptar clave"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Dispositivo (0x%.8x) desconocido"
+
+#~ msgid "Other devices"
+#~ msgstr "Otros dispositivos"
+
+#~ msgid "- None -"
+#~ msgstr "- Ninguno -"
+
+#~ msgid "OMEMO"
+#~ msgstr "OMEMO"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Consultando GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+#, fuzzy
+msgid "Announce key"
+msgstr "Anunciar la clave"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Error en GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "No hay claves disponibles. ¡Genera una!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Desactivado"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "La clave no está en la cadena de claves"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+#, fuzzy
+msgid "Fingerprint"
+msgstr "Huella"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publicación de claves desactivada"
+
+#~ msgid "Select key"
+#~ msgstr "Seleccionar clave"
+
+#~ msgid "Loading…"
+#~ msgstr "Cargando…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1510,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "No se pudo establecer una conexión segura"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Volver"
diff --git a/main/po/et.po b/main/po/et.po
index 6eb5088b..47d715a7 100644
--- a/main/po/et.po
+++ b/main/po/et.po
@@ -17,6 +17,317 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s kasutab seadet, mille suhtes puudub usaldus. Sa ei näe sõnumeid "
+"seadmetest, mida sa ei usalda."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Halda seadmeid"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s ei usalda seda seadet. See tähendab, et sa ilmselt ei näe kõiki sõnumeid."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Halda võtmeid"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Võrdle tähemärkide haaval seda sõrmejälge tollega, mida näidatakse teise "
+"osapoole seadmes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Sõrmejäljed erinevad"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Sõrmejäljed on samad"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Kinnita"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verifitseeri võtmed"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Kui kasutaja %s saadab tulevikus sõnumeid seadmest, mis kasutab seda "
+"krüptovõtit, siis need on ka vestlusaknas vastavalt märgitud."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Sõrmejäljed on erinevad"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Palun kontrolli, et sa kindlasti võrdleid õigeid sõrmejälgi. Kui sõrmejäljed "
+"siiski ei klapi, siis võib %s kasutajakonto olla rääderdatud ja sa peaksid "
+"sellise võtme lubamisest keelduma."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verifitseeri võtme sõrmejälge"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Võrdle seda sõrmejälge tollega, mida näidatakse teise osapoole seadmes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Keeldu võtme kasutamisest"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Sellega sa keelad krüptitud suhtluse sinu vestluspartneri seadmega, mis "
+"kasutab seda krüptovõtit."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Nõustu võtme kasutamisega"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Sellega sa lubad krüptitud suhtluse sinu vestluspartneri seadmega, mis "
+"kasutab seda krüptovõtit."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "See krüptovõti on praegu %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "tunnustatud"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"See tähendab, et %s võib teda kasutada krüptitud sõnumite saatmisel ja "
+"vastuvõtmisel."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verifitseeritud"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Lisaks oled sa kontrollinud, et ta vastab krüptovõtmele teise osapoole "
+"seadmes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "keelatud"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"See tähendab, et %s ei saa teda kasutada sinu krüptitud sõnumite lugemisel "
+"ning ka sina ei näe selle võtmega krüptitud sõnumeid."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Sa ei näe %s krüptitud sõnumeid seadmetest, mis kasutavad seda krüptovõtit. "
+"Ja teistpidi pole ka seal seadmes võimalik lugeda sinu krüptitud sõnumeid."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Sa saad nüüd vahetada krüptitud sõnumeid %s seadmetega, kus on kasutusel see "
+"krüptovõti."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Halda"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Sellel kasutajal on uusi seadmeid"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Pead otsustama OMEMO-põhise usalduse osas"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Kas sa lisasid uue seadme kasutajakontole %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO kasutamine vaikimisi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Kasuta OMEMO krüptimist uute vestluste puhul"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Krüpti uute seadmete jaoks"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Krüpti automaatselt selle kasutaja uute seadmete puhul."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Uued krüptovõtmed"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "Sinu muude seadmete uute krüptovõtmetega nõustutakse automaatselt."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "See seade"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Muu seade"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Seade"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Tunnustatud"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Keelatud"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verifitseeritud"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Uus seade"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Igal seadmel on oma OMEMO-võti. Sõnumeid on võimalik dekrüptida vaid "
+"konkreetse sihtvõtme jaoks. Sõnumeid on võimalik krüptida vaid seadmete "
+"jaoks, millega oled nõustunud."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO võtmehaldus"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO seade"
+#~ msgstr[1] "%d OMEMO seadet"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Nõustu uute võtmetega automaatselt"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Sa nõustud selle kasutaja uute krüptovõtmetega automaatselt."
+
+#~ msgid "Own key"
+#~ msgstr "Oma krüptovõti"
+
+#~ msgid "Associated keys"
+#~ msgstr "Seotud krüptovõtmed"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Mitteaktiivsed krüptovõtmed"
+
+#~ msgid "Unused"
+#~ msgstr "Kasutamata"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Pärime GnuPG andmekogust"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Teata võtmest"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG viga"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Võtmeid ei leidu. Palun loo!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Pole kasutusel"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Võtit ei leidu võtmerõngas"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Sõrmejälg"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1404,7 @@ msgstr "Logi sisse"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Turvalise ühendus loomine ei õnnestunud"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Tagasi"
diff --git a/main/po/eu.po b/main/po/eu.po
index 7d2eac49..857d0e34 100644
--- a/main/po/eu.po
+++ b/main/po/eu.po
@@ -18,6 +18,417 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s erabiltzaileak fidagarritasun gutxiko gailu bat erabiltzen egon da. Ez "
+"duzu mezurik ikusiko konfiantza ematen ez dizuten gailuengandik."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gailuak kudeatu"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s erabiltzailea ez da gailu honetaz fidatzen. Honek mezu batzuk gal "
+"ditzakezula esan nahi du."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gakoa kudeatu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Hatz marka konparatu, hizkiz hizki, zure kontaktuaren gailuan ageri "
+"denarekin."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Hatz markak ez datoz bat"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Hatz markak bat datoz"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Baieztatu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Gakoa egiaztatu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"%s erabiltzaileak etorkizunean gako hau erabiltzen duen gailutik bidalitako "
+"mezuak nabarmenduko dira txat leihoan."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Hatz markak ez datoz bat"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Mesedez egiaztatu ezazu hatz marka egokia konparatzen ari zarela. Hatz "
+"markak bat ez badatoz baliteke %s(e)ren kontua arriskuan egotea eta gako hau "
+"ez onartzea kontuan hartu beharko zenuke."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Gakoaren hatz marka egiaztatu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Konpara ezazu gako honen hatz marka kontaktuaren gailuan agertzen den hatz "
+"markarekin."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Gakoa ukatu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Enkriptatutako komunikazioa blokeatu gako hau erabiltzen duen kontaktuaren "
+"gailuarekin."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Gakoa onartu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Enkriptatutako komunikazioa baimendu gako hau erabiltzen duen kontaktuaren "
+"gailuarekin."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Gako hau %s dago une honetan."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "onartuta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Horrek esan nahi du %s-ek erabil dezakeela mezu zifratuak jasotzeko eta "
+"bidaltzeko."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "egiaztatuta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Gainera zure kontaktuaren gailuan ageri den gakoarekin bat datorrela "
+"egiaztatu da."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "ukatuta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Honek esan nahi du %s erabiltzaileak ezin duela erabili zure mezuak "
+"deszifratzeko, eta zuk ez dituzula gako honekin enkriptatutako mezuak "
+"ikusiko."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Ez dituzu ikusiko gako hau erabiltzen duen %s kontaktuaren gailutik "
+"igorritako mezuak. Era berean, hemendik aurrera gailu horrek ez da zure "
+"mezuak deszifratzeko gai izango."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Gako hau erabiltzen duen %s kontaktuaren gailuarekin enkriptatutako mezuak "
+"elkar-trukatzeko gai izango zara."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Kudeatu"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Kontaktu honek gailu berriak ditu"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO konfiantza erabakia behar da"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Gailu berri gehitu duzu %s konturako?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Gako berriak"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Zure beste gailuen enkriptatze gako berriak onartuak izango dira "
+"automatikoki."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Onartuta"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Ukatuta"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Egiaztatuta"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO gakoen kudeaketa"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "OMEMO gailu %d"
+#~ msgstr[1] "%d OMEMO gailu"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Gako berriak automatikoki onartu"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Kontaktu honen enkriptatze gako berriak onartuak izango dira automatikoki."
+
+#~ msgid "Own key"
+#~ msgstr "Norberaren gakoa"
+
+#~ msgid "Associated keys"
+#~ msgstr "Lotutako gakoak"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Gako ez aktiboak"
+
+#~ msgid "Unused"
+#~ msgstr "Ez erabilita"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Norberaren hatz marka"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Lehen konexioan sortuko da"
+
+#~ msgid "Not matching"
+#~ msgstr "Ez datoz bat"
+
+#~ msgid "Matching"
+#~ msgstr "Bat datoz"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Egiaztatu ondoren, %s(e)k gako honekin etorkizunean bidalitako mezu "
+#~ "guztiak behar bezala nabarmenduko dira txat leihoan."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Utzi gako hau onartzeari lotuta dagoen kontaktuarekin hitz egiten duzun "
+#~ "bitartean."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Hasi gako hau onartzen lotuta dagoen kontaktuarekin hitz egiten duzun "
+#~ "bitartean"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Honek esan nahi du %s(e)k ezin duela gakoa mezuak jasotzeko erabili, eta "
+#~ "berak bidalitako edozein mezu alde batera utziko da."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Egiaztatu ondoren, etorkizunean %s(e)k gako hau erabiliz bidalitako "
+#~ "edozein mezu alde batera utziko da eta zure mezuetako bat ere ez da "
+#~ "irakurgarria izango gako hau erabiliz."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Egiaztatu ondoren %s(e)k gako hau mezuak jaso eta bidaltzeko erabili ahal "
+#~ "izango du."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Kontaktu honek enkriptatzeko gako berriak bere kontura gehitzen "
+#~ "dituenean, automatikoki onartu."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Zure kontura enkriptazio gako berriak gehitzen dituzunean, automatikoki "
+#~ "onartu."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Hasi gako hau onartzen lotuta dagoen kontaktuarekin hitz giten duzun "
+#~ "bitartean."
+
+#~ msgid "Reject Key"
+#~ msgstr "Gakoa baztertu"
+
+#~ msgid "Accept Key"
+#~ msgstr "Gakoa onartu"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Gailu ezezaguna (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Beste gailuak"
+
+#~ msgid "- None -"
+#~ msgstr "- Bat ere ez -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "GnuPGri galdetzen"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG akatsa"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Ez dago gakorik eskuragarri. Sortu ezazu bat!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Gakorik ez giltzatakoan"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Gakoa argitaratzea ezgaituta"
+
+#~ msgid "Select key"
+#~ msgstr "Gakoa hautatu"
+
+#~ msgid "Loading…"
+#~ msgstr "Kargatzen…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1095,7 +1506,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Ezin izan da konexio seguru bat ezarri"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Atzera"
diff --git a/main/po/fa.po b/main/po/fa.po
index f810fdad..5b8f40ae 100644
--- a/main/po/fa.po
+++ b/main/po/fa.po
@@ -17,6 +17,329 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s از دستگاهی استفاده می‌کند که اعتبارش را تأیید نکرده‌اید، پیام‌ها از چنین "
+"دستگاه‌هایی قابل مشاهده نیستند."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "مدیریت دستگاه‌ها"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s اعتبار این دستگاه را تأیید نکرده است. این یعنی، ممکن است پیام‌هایی را "
+"دریافت نکنید/نکرده باشید."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "مدیریت کلید"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"اثرانگشت را با آنی که در دستگاه مخاطبتان است مقایسه کنید، کاراکتر به کاراکتر."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "اثرانگشت‌ها متفاوت‌اند"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "اثرانگشت‌ها تطابق دارند"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "تأیید"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "تأیید صحت کلید"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"پیام‌های ارسالی توسط %s از دستگاهی که از این کلید استفاده می‌کند، مطابق آن در "
+"پنجرهٔ گپ مشخص می‌شوند."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "اثرانگشت‌ها تطابق ندارند"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"لطفاً مطمئن شوید که در حال مقایسهٔ اثرانگشت صحیح هستید. اگه اثرانگشت‌ها تطابق "
+"نداشته باشند، ممکن است اطلاعات حساب %s لو رفته باشد و باید رد کردن این کلید "
+"را در نظر بگیرید."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "تأیید صحت اثرانگشت کلید"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"اثرانگشت این کلید را با اثرانگشت نمایش‌داده‌شده در دستگاه مخاطب مقایسه کنید."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "رد کردن کلید"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"ارتباط رمزگذاری‌شده را با دستگاهی که از این کلید استفاده می‌کند، مسدود کنید."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "پذیرش کلید"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"اجازهٔ ارتباط رمزگذاری‌شده را با دستگاهی که از این کلید استفاده می‌کند، بدهید."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "این کلید در حال حاضر %s است."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "پذیرفته شده"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"این یعنی %s می‌تواند از آن برای ارسال و دریافت پیام رمزگذاری‌شده استفاده کند."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "تأیید صحت شده"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "به علاوه تأیید شده که با کلید دستگاه مخاطب تطابق دارد."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "رد شده"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"این یعنی %s نمی‌تواند با آن پیام‌های شما را رمزگشایی کند، و شما پیام‌های "
+"رمزگذاری‌شده با آن را نخواهید دید."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"شما پیام‌های رمزگذاری‌شده را از آن دستگاهِ %s که از این کلید استفاده می‌کند، "
+"نخواهید دید. از سوی دیگر، آن دستگاه نیز پس از این قادر به رمزگشایی پیام‌های "
+"شما نخواهد بود."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"شما قادر به تبادل پیام‌های رمزگذاری‌شده با آن دستگاهِ %s که از این کلید استفاده "
+"می‌کند، هستید."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "مدیریت"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "این مخاطب دستگاه‌های جدیدی دارد"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "تصمیم اعتبار اُمیمو لازم است"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "آیا برای حساب %s یک دستگاه جدید اضافه کرده‌اید؟"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "فعال بودن اُمیمو به صورت پیشفرض"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "فعال کردن رمزگذاری اُمیمو برای مکالمات جدید"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "رمزگذاری با دستگاه های جدید"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "رمزگذاری خودکار با دستگاه های جدید این مخاطب."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "کلیدهای جدید"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"کلیدهای رمزگذاری جدید از دستگاه‌های دیگرتان به طور خودکار پذیرفته می‌شوند."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "این دستگاه"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "دستگاه دیگر"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "دستگاه"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "پذیرفته شده"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "رد شده"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "تأیید صحت شده"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "دستگاه جدید"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"هر دستگاه کلید اُمیمو خود را دارد. پیام ها تنها زمانی می توانند توسط یک "
+"دستگاه رمزگشایی شوند که با کلید همان دستگاه رمزگذاری شده باشند. پیام ها فقط "
+"برای دستگاه های پذیرفته شده رمزگذاری می شوند."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "مدیریت کلید اُمیمو"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d دستگاه OMEMO"
+#~ msgstr[1] "%d دستگاه OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "پذیرش خودکار کلیدهای جدید"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "کلیدهای جدید این مخاطب به طور خودکار پذیرفته می‌شوند."
+
+#~ msgid "Own key"
+#~ msgstr "کلید خود"
+
+#~ msgid "Associated keys"
+#~ msgstr "کلیدهای مرتبط"
+
+#~ msgid "Inactive keys"
+#~ msgstr "کلیدهای غیرفعال"
+
+#~ msgid "Unused"
+#~ msgstr "استفاده نشده"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "اثرانگشت خود"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "در اولین اتصال تولید خواهد شد"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "پرس‌و‌جوی گنوپی‌جی"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "کلید اعلام"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "خطا در گنوپی‌جی"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "هیچ کلیدی در دسترس نیست. یکی تولید کنید!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "غیرفعال شده"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "کلید در دسته‌کلید نیست"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "شناسه"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "انشار کلید غیرفعال‌شده"
+
+#~ msgid "Select key"
+#~ msgstr "انتخاب کلید"
+
+#~ msgid "Loading…"
+#~ msgstr "در حال بارگذاری…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1416,7 @@ msgstr "ورود"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "اتصال ایمن برقرار نشد"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "بازگشت"
diff --git a/main/po/fi.po b/main/po/fi.po
index 9e16a03e..9c40ea83 100644
--- a/main/po/fi.po
+++ b/main/po/fi.po
@@ -18,6 +18,331 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s on käyttänyt laitetta, johon ei luoteta. Et näe viestejä laitteilta, "
+"joihin et luota."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Hallitse laitteita"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s ei luota tähän laitteeseen. Sen seurauksena viestejä saattaa jäädä "
+"puuttumaan."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Hallitse avainta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Vertaa sormenjälkeä merkki kerrallaan vastapuolen laitteella näkyvään "
+"sormenjälkeen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Sormenjäljet eroavat"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Sormenjäljet vastaavat"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Vahvista"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Vahvista avain"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Tulevat viestit käyttäjän %s laitteelta, joka käyttää tätä avainta, "
+"korostetaan asianmukaisesti keskusteluikkunassa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Sormenjäljet eivät vastaa toisiaan"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Varmista, että vertaat oikeita sormenjälkiä. Jos sormenjäljet eivät täsmää, "
+"käyttäjän %s tili saattaa olla vaarantunut, ja sinun tulisi hylätä tämä "
+"avain."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Vahvista avaimen sormenjälki"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Vertaa tämän avaimen sormenjälkeä vastapuolen laitteella näkyvään "
+"sormenjälkeen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Hylkää avain"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Estä salattu yhteydenpito käyttäjän tätä avainta käyttävän laitteen kanssa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Hyväksy avain"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Salli salattu yhteydenpito käyttäjän tätä avainta käyttävän laitteen kanssa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Tämä avain on tällä hetkellä %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "hyväksytty"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Se tarkoittaa, että %s voi käyttää avainta salattujen viestien "
+"vastaanottamiseen ja lähettämiseen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "vahvistettu"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Lisäksi sen on vahvistettu vastaavan vastapuolen laitteen avainta."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "hylätty"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Se tarkoittaa, ettei %s voi käyttää avainta viestien salauksen purkamiseksi, "
+"etkä sinä näe tällä avaimella salattuja viestejä."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Et näe käyttäjän %s laitteelta, joka käyttää tätä avainta, lähetettyjä "
+"salattuja viestejä. Vastavuoroisesti kyseinen laite ei pysty enää purkamaan "
+"viestiesi salausta."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Pystyt viestimään salatuilla viesteillä käyttäjän %s tätä avainta käyttävän "
+"laitteen kanssa."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Hallitse"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Tällä henkilöllä on uusia laitteita"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO-luottamuspäätös vaaditaan"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Lisäsitkö uuden laitteen tilille %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO oletuksena"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Käytä OMEMO-salausta uusissa keskusteluissa"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Salaa uusille laitteille"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Salaa automaattisesti tämän henkilön uusille laitteille."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Uudet avaimet"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "Uudet salausavaimet muilta laitteiltasi hyväksytään automaattisesti."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Tämä laite"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Toinen laite"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Laite"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Hyväksytty"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Hylätty"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Vahvistettu"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Uusi laite"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Jokaisella laitteella on oma OMEMO-avain. Viestien salauksen voi purkaa "
+"laitteella vain jos ne käyttävät sen avainta. Viestit salataan vain "
+"hyväksytyille laitteille."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO-avainhallinta"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO-laite"
+#~ msgstr[1] "%d OMEMO-laitetta"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Hyväksy uudet avaimet automaattisesti"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Uudet salausavaimet tältä henkilöltä hyväksytään automaattisesti."
+
+#~ msgid "Own key"
+#~ msgstr "Oma avain"
+
+#~ msgid "Associated keys"
+#~ msgstr "Liittyvät avaimet"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Epäaktiiviset avaimet"
+
+#~ msgid "Unused"
+#~ msgstr "Käyttämätön"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Oma sormenjälki"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Luodaan ensimmäisellä yhdistyskerralla"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Kysellään GnuPG:tä"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Ilmoita avain"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Virhe GnuPG:ssä"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Ei avaimia saatavilla. Luo avain!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Pois käytöstä"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Avain ei ole avainnipussa"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Sormenjälki"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Avaimen julkaiseminen pois käytöstä"
+
+#~ msgid "Select key"
+#~ msgstr "Valitse avain"
+
+#~ msgid "Loading…"
+#~ msgstr "Ladataan…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1419,7 @@ msgstr "Kirjaudu"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Salattua yhteyttä ei voitu muodostaa"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Takaisin"
diff --git a/main/po/fr.po b/main/po/fr.po
index 1501ddf6..b34deedd 100644
--- a/main/po/fr.po
+++ b/main/po/fr.po
@@ -18,6 +18,411 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s a utilisé un appareil inconnu. Vous ne verrez pas les messages provenant "
+"d'appareils en lesquels vous n’avez pas confiance."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gérer les appareils"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s n’accorde pas sa confiance à cet appareil. Cela signifie que vous manquez "
+"peut-être des messages."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gérer la clé"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Comparez l’empreinte, lettre par lettre, avec celle affichée sur l'appareil "
+"de votre contact."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "L’empreinte ne correspond pas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "L’empreinte correspond"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmer"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Vérifier la clé"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Les prochains messages envoyés par %s depuis l'appareil utilisant cette clé "
+"seront mis en valeur dans la fenêtre de discussion."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Les empreintes ne correspondent pas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Veuillez vérifier que vous comparez la bonne empreinte. Si les empreintes ne "
+"correspondent pas, le compte de %s pourrait être compromis et vous devriez "
+"envisager de rejeter cette clé."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Vérifier l’empreinte de cette clé"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Comparez cette empreinte avec celle affichée sur l'appareil du contact."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rejeter cette clé"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Bloquer les communications chiffrées avec l'appareil du contact qui utilise "
+"cette clé."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Accepter la clé"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Autoriser les communications chiffrées avec l'appareil du contact qui "
+"utilise cette clé."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Cette clé est actuellement %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "acceptée"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Cela signifie qu’elle peut être utilisée par %s pour recevoir et envoyer des "
+"messages."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "vérifiée"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"De plus, vous avez précédemment vérifié que cette clé coïncide avec celle de "
+"l'appareil de ce contact."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rejetée"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Cela signifie qu’elle ne peut pas être utilisée par %s pour déchiffrer vos "
+"messages, et que vous ne verrez pas les messages chiffrés avec."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Vous ne verrez pas les messages de %s provenant de l'appareil qui utilise "
+"cette clé. En retour, ce client ne pourra plus déchiffrer vos messages."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Vous pourrez échanger des messages chiffrés avec l'appareil de %s qui "
+"utilise cette clé."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gérer"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Ce contact a de nouveaux appareils"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Décision de confiance OMEMO requise"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Avez-vous ajouté un nouvel appareil pour le compte %s ?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO par défaut"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Activer le chiffrement OMEMO pour les nouvelles discussions"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Chiffrer pour les nouveaux appareils"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Chiffrer automatiquement pour les nouveaux appareils de ce contact."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nouvelles clés"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Les nouvelles clés de chiffrement de vos autres appareils seront acceptées "
+"automatiquement."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Cet appareil"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Autre appareil"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Appareil"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Acceptée"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rejetée"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Vérifiée"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Nouvel appareil"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Chaque appareil a sa propre clé OMEMO. Les messages ne peuvent être "
+"déchiffrés par un appareil que s’ils sont chiffrés pour sa clé. Les messages "
+"sont chiffrés uniquement pour les appareils acceptés."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gestion des clés OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d appareil OMEMO"
+#~ msgstr[1] "%d appareils OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Accepter automatiquement les nouvelles clés"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Les nouvelles clés de chiffrement de ce contact seront acceptées "
+#~ "automatiquement."
+
+#~ msgid "Own key"
+#~ msgstr "Clé publique personnelle"
+
+#~ msgid "Associated keys"
+#~ msgstr "Clés associées"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Clés inactives"
+
+#~ msgid "Unused"
+#~ msgstr "Inutilisée"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Empreinte publique"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Sera générée lors de la première connexion"
+
+#~ msgid "Your contact"
+#~ msgstr "Votre contact"
+
+#~ msgid "Not matching"
+#~ msgstr "Ne correspond pas"
+
+#~ msgid "Matching"
+#~ msgstr "Correspond"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Après confirmation, tout futur message envoyé par %s utilisant cette clé "
+#~ "sera surligné dans la fenêtre de conversation."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Arrêter d'accepter cette clé durant la communication avec son contact "
+#~ "associé."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Accepter cette clé durant la communication avec son contact associé"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Cela signifie qu'elle ne peut pas être utilisée par %s pour recevoir des "
+#~ "messages, et que les messages envoyés seront ignorés."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Après confirmation, tout futur message envoyé par %s utilisant cette clé "
+#~ "sera ignoré et vos messages ne seront pas lisibles en utilisant cette clé."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Après confirmation, cette clé sera utilisable par %s pour recevoir et "
+#~ "envoyer des messages."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Quand ce contact ajoute une nouvelle clé de chiffrement à son compte, "
+#~ "l'accepter automatiquement."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Accepter automatiquement les nouvelles clés de chiffrements que vous "
+#~ "ajoutez à votre compte."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Accepter cette clé durant la communication avec son contact associé."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Périphérique inconnu (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Autres périphériques"
+
+#~ msgid "- None -"
+#~ msgstr "- Aucun -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Interrogation de GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Annoncer la clé"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Erreur dans GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Aucune clé n’est disponible. Générez-en une !"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "La clé n’est pas dans le trousseau"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Empreinte"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "La publication des clés est désactivée"
+
+#~ msgid "Select key"
+#~ msgstr "Choix d’une clé"
+
+#~ msgid "Loading…"
+#~ msgstr "Chargement…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1097,7 +1502,7 @@ msgstr "Se connecter"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Impossible d’établir une connexion sécurisée"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Retour"
diff --git a/main/po/fur.po b/main/po/fur.po
index 93ad7a68..092e6277 100644
--- a/main/po/fur.po
+++ b/main/po/fur.po
@@ -17,6 +17,278 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"Chel pandolo di %s al doprave un tramai che no si fidin. No tu iodarâs "
+"mesagjos di tramais che no si po fidasi."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gjestis i tramais"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"Chel pandolo di %s no si fide di te. Cuindi tu podaresis pierditi mesagjos."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Dai po gjestis las clâs"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Controle las improntes digitâl, ogni latare, cun chês dal contat sul tramai."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Improntes difarent gnogno"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Brao, las improntes son compagnes"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Va ben"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Controlant la clâf"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"I mesagjos di chel taconele di %s sal dopre il stes tramai cun chist clâf a "
+"saran evidensiâs."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Las improntes no son compagnes totoloto"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Controle ben taconele. Las improntes no coincidin, chel borson di %s al "
+"podares no sei lui e tu varesis di mandalu affnacûl lui e la so clâf."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Controle la clâf dalas improntes digitâl"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "Controle las improntes di chiste clâf cun chês tai contas dal tramai."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Mande affnacûl lui e la clâf"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "Smet di cifrà la comunicasion cul pandolo cal dopre chiste clâf."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Va ben, dami la clâf"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "Permet la comunicasion cifrade cul pandolo cal dopre chiste clâf."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "La clâf a è %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "acetade"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "A voul dì ca si po doprà %s par ricevi e mandà mesagjos cifrâs."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "controlade"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "In pui si è controlâtche la clâf a sevi che dal contat sul tramai."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "mandade indavour"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Al voul dì che %s nola po doprà par decifrà i toi mesagjos, e no tu iodarâs "
+"i mesagjos cifrâs cun che lì."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"No tu iodarâs i mesagjos cifrâs di %s cal dopre chiste clâf. E lui nol "
+"capirà un cai di ce che tu i mandis."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Tu podarâs mandà mesagjos cifrâs cul tramai di %s cal dopre chiste clâf."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gjestis"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Chist gnogno al à un gnouf tramai"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Bisugne acetà o no OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Atu giontât un gnof tramai par il profîl %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO tal met io"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Permet cifradure OMEMO par las gnoves conversasions"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Cifre par i gnoufs tramais"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Cifres su dut par chistu taconele."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Gnoves clâs"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Las gnoves clâs par la cifradure di atris tramais a saran acetades cence "
+"diti un caj."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Chist tramai"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Atri tramai"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Tramai"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "acetade"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Mandât affancûl"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "controlade"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Gnouf tramai"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Ogni tramai al'à la so clâf OMEMO. I mesagjos a podin sei decifrâs nome dal "
+"tramai cun che clâf. E nome su tramais acetâs."
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Cirint su GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Clâf par scomencià"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "No si cumbine cun GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "No son clâs diomadone. Fascint une!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Disabilitât"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Ma diopoi, la clâf no è tal parteclâs"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Improntes digitâl"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1365,7 @@ msgstr "Entre"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "No cumbini a fa un colegament sigûr"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Indavour"
diff --git a/main/po/gl.po b/main/po/gl.po
index eadbff88..abf1db55 100644
--- a/main/po/gl.po
+++ b/main/po/gl.po
@@ -18,6 +18,414 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s estivo utilizando un dispositivo non verificado. Non verás mensaxes "
+"procedentes de dispositivos nos que non confiaches."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Xestionar dispositivos"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s non mostrou confianza neste dispositivo. Porén, poderías botar a faltar "
+"algunha mensaxe."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Xestionar Chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Comparar impresión dixital, caracter a caracter, coa mostrada no dispositivo "
+"do teu contacto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "As impresións dixitais son diferentes"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "As impresións coinciden"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"As mensaxes futuras enviadas por %s desde o dispositivo que usa esta chave "
+"será resaltadas na xanela da conversa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Non coinciden as impresións dixitais"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Comproba que estás comparando a impresión correcta. Se as impresións "
+"dixitais non coinciden, a conta de %s podería estar comprometida e deberías "
+"considerar rexeitar esta chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar a impresión dixital da chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Compara a impresión dixital desta chave coa impresión mostrada no "
+"dispositivo do contacto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rexeitar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Bloquear a comunicación cifrada co dispositivo do contacto que usa esta "
+"chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Aceptar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permitir a comunicación cifrada co dispositivo do contacto que usa esta "
+"chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Esta chave está actualmente %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "aceptada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Esto significa que pode ser utilizada por %s para recibir e enviar mensaxes "
+"cifradas."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verficada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Adicionalmente foi verificada e coincide coa chave no dispositivo do "
+"contacto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rexeitada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Esto significa que non pode ser usada por %s para descifrar as túas "
+"mensaxes, e non verás as mensaxes cifradas con ela."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Non verás as mensaxes cifradas desde o dispositivo de %s que usa esta chave. "
+"De xeito recíproco, ese dispositivo non poderá descifrar as túas."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Poderás intercambiar mensaxes cifradas co dispositivo de %s que usa esta "
+"chave."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Xestionar"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Este contacto ten novos dispositivos"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Precisa decidir sobre a confianza OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Engadiches un novo dispositivo para a conta %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO por defecto"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Activar cifraxe OMEMO para as novas conversas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Cifrar para novos dispositivos"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Cifrar automaticamente para os novos dispositivos de este contacto."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Novas chaves"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Aceptaranse de xeito automático novas chaves de cifraxe do teus dispositivos."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Este dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Outro dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Aceptada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rexeitada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Novo dispositivo"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Cada dispositivo ten a súa propia clave OMEMO. As mensaxes só se poden "
+"descifrar se están cifradas coas claves deles. As mensaxes só se cifran para "
+"os dispositivos aceptados."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Xestión das chaves OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d dispositivo OMEMO"
+#~ msgstr[1] "%d dispositivos OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Aceptar automáticamente novas chaves"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Serán aceptadas de xeito automático novas chaves de cifraxe deste "
+#~ "contacto."
+
+#~ msgid "Own key"
+#~ msgstr "Chave propia"
+
+#~ msgid "Associated keys"
+#~ msgstr "Chaves asociadas"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Chaves non activas"
+
+#~ msgid "Unused"
+#~ msgstr "Sen usar"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Impresión dixital propia"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Crearase na primeira conexión"
+
+#~ msgid "Your contact"
+#~ msgstr "O teu contacto"
+
+#~ msgid "Not matching"
+#~ msgstr "Non coinciden"
+
+#~ msgid "Matching"
+#~ msgstr "Coinciden"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Unha vez confirmada, as futuras mensaxes enviadas por %s utilizando esta "
+#~ "chave será resaltada acorde na ventá de conversa."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Deixar de aceptar esta chave durante a comunicación co contacto asociado "
+#~ "a ela."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Comezar aceptando esta chave durante a comunicación co seu contacto "
+#~ "asociado"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Esto significa que non pode ser utilizada por %s para recibir mensaxes, e "
+#~ "calquera mensaxe enviada con ela será ignorada."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Unha vez confirmada, calquera mensaxe futura enviada por %s utilizando "
+#~ "esta chave será ignorada e ningunha das súas mensaxes serán lexibles "
+#~ "usando esta chave."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Unha vez confirmada esta chave será utilizable por %s para recibir e "
+#~ "enviar mensaxes."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Cando este contacto engade novas chaves de cifrado a súa conta, aceptalas "
+#~ "automáticamente."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Cando engades novas chaves de cifrado a túa conta, aceptalas "
+#~ "automáticamente."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Comezar a aceptar esta chave nas comunicacións co contacto asociado a ela."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Dispositivo descoñecido (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Outros dispositivos"
+
+#~ msgid "- None -"
+#~ msgstr "-Nada-"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Consultando a GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Publicar clave"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Fallo en GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Sen chaves dispoñibles. Crear unha!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Desactivado"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "A chave non está no anel de chaves"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Impresión dixital"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Desactivada a publicación de chaves"
+
+#~ msgid "Select key"
+#~ msgstr "Escolle chave"
+
+#~ msgid "Loading…"
+#~ msgstr "Cargando…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1095,7 +1503,7 @@ msgstr "Acceder"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Non se estableceu unha conexión segura"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Atrás"
diff --git a/main/po/hi.po b/main/po/hi.po
index a0303df0..ff9fbd71 100644
--- a/main/po/hi.po
+++ b/main/po/hi.po
@@ -17,6 +17,261 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.10.3-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1348,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "सुरक्षित कनेक्शन स्थापित नहीं किया जा सका"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "पीछे"
diff --git a/main/po/hu.po b/main/po/hu.po
index cb115f53..ea96e284 100644
--- a/main/po/hu.po
+++ b/main/po/hu.po
@@ -18,6 +18,346 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s nem megbízható eszközt használt. Nem fogja látni az olyan eszközökről "
+"érkező üzeneteket, amelyekben nem bízik meg."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Eszközök kezelése"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s nem bízik meg ebben az eszközben. Ez azt jelenti, hogy lemaradhat néhány "
+"üzenetről."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Kulcs kezelése"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Hasonlítsa össze az ujjlenyomatot karakterről karakterre a partnere eszközén "
+"láthatóval."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Az ujjlenyomatok eltérnek"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Az ujjlenyomatok egyeznek"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Megerősítés"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Kulcs ellenőrzése"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"%s által az ezt a kulcsot használó eszközről küldött jövőbeli üzenetek ennek "
+"megfelelően lesznek kiemelve a csevegésablakban."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Az ujjlenyomatok nem egyeznek"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Ellenőrizze, hogy a megfelelő ujjlenyomatot hasonlítja-e össze. Ha az "
+"ujjlenyomatok nem egyeznek, akkor %s fiókja veszélybe kerülhetett, és "
+"fontolóra kellene vennie a kulcs elutasítását."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Kulcs ujjlenyomatának ellenőrzése"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Hasonlítsa össze ennek a kulcsnak az ujjlenyomatát a partner eszközén "
+"megjelenített ujjlenyomattal."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Kulcs elutasítása"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"A titkosított kommunikáció tiltása a partner eszközével, amely ezt a kulcsot "
+"használja."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Kulcs elfogadása"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"A titkosított kommunikáció engedélyezése a partner eszközével, amely ezt a "
+"kulcsot használja."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Ez a kulcs jelenleg %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "elfogadott"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Ez azt jelenti, hogy %s használhatja titkosított üzenetek fogadásához és "
+"küldéséhez."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "ellenőrzött"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Ezenkívül ellenőrizve lett, hogy a kulcs egyezik a partner eszközén."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "elutasított"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Ez azt jelenti, hogy %s nem használhatja az Ön üzeneteinek visszafejtésére, "
+"és Ön nem fogja látni az azzal titkosított üzeneteket."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Nem fogja látni %s azon eszközéről érkező titkosított üzeneteket, amely ezt "
+"a kulcsot használja. Fordítva, a másik eszköz nem lesz képes többé "
+"visszafejteni az Ön üzeneteit."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Ön képes lesz titkosított üzeneteket váltani %s azon eszközével, amely ezt a "
+"kulcsot használja."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Kezelés"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Ennek a partnernek új eszközei vannak"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO megbízhatósági döntés szükséges"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Hozzáadott egy új eszközt a(z) %s fiókhoz?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO alapértelmezetten"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "OMEMO-titkosítás engedélyezése az új beszélgetésekhez"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Titkosítás az új eszközökre"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automatikus titkosítás az ettől a partnertől származó új eszközökre."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Új kulcsok"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Az egyéb eszközeitől származó új titkosítási kulcsok automatikusan el "
+"lesznek fogadva."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Ez az eszköz"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Másik eszköz"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Eszköz"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Elfogadva"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Elutasítva"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Ellenőrizve"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Új eszköz"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Minden eszköznek saját OMEMO-kulcsa van. Egy eszköz csak akkor tudja "
+"visszafejteni az üzeneteket, ha azok a saját kulcsával lettek titkosítva. Az "
+"üzenetek csak az elfogadott eszközökre vannak titkosítva."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO kulcskezelés"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO-eszköz"
+#~ msgstr[1] "%d OMEMO eszköz"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Új kulcsok automatikus elfogadása"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Az ettől a partnertől származó új titkosítási kulcsok automatikusan el "
+#~ "lesznek fogadva."
+
+#~ msgid "Own key"
+#~ msgstr "Saját kulcs"
+
+#~ msgid "Associated keys"
+#~ msgstr "Hozzárendelt kulcsok"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Inaktív kulcsok"
+
+#~ msgid "Unused"
+#~ msgstr "Nem használt"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Saját ujjlenyomat"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Az első kapcsolódáskor lesz előállítva"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Ismeretlen eszköz (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "További eszközök"
+
+#~ msgid "- None -"
+#~ msgstr "- Nincs -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "A GnuPG lekérése"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Kulcs bejelentése"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Hiba a GnuPG-ben"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nincsenek elérhető kulcsok. Állítson elő egyet!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Letiltva"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "A kulcs nincs a kulcstartóban"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Ujjlenyomat"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Kulcsközzététel letiltva"
+
+#~ msgid "Select key"
+#~ msgstr "Kulcs kiválasztása"
+
+#~ msgid "Loading…"
+#~ msgstr "Betöltés…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1097,7 +1437,7 @@ msgstr "Bejelentkezés"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Nem sikerült kiépíteni biztonságos kapcsolatot"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Vissza"
diff --git a/main/po/hy.po b/main/po/hy.po
index 1f560db7..0ff88fd9 100644
--- a/main/po/hy.po
+++ b/main/po/hy.po
@@ -17,6 +17,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13\n"
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1096,6 +1099,7 @@ msgstr "Մուտք գործել"
msgid "Could not establish a secure connection"
msgstr "Հնարաւոր չէ հաստատել գաղտնի միացում"
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Հետ"
diff --git a/main/po/ia.po b/main/po/ia.po
index 85fd959e..743f41d0 100644
--- a/main/po/ia.po
+++ b/main/po/ia.po
@@ -16,6 +16,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1092,7 +1125,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr ""
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr ""
diff --git a/main/po/id.po b/main/po/id.po
index f8b80337..3362bf42 100644
--- a/main/po/id.po
+++ b/main/po/id.po
@@ -17,6 +17,335 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.16.1-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s telah menggunakan perangkat tidak dikenal. Anda tidak akan melihat pesan "
+"dari perangkat yang tidak Anda kenal."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Atur perangkat"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s tidak mengenali perangkat ini. Artinya, Anda mungkin kehilangan pesan."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Atur kunci"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Bandingkan sidik jari karakter demi karakter, dengan yang tampil di "
+"perangkat kontak Anda."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Sidik jari berbeda"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Sidik jari cocok"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Konfirmasi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verifikasi kunci"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Pesan mendatang yang dikirim oleh %s dari perangkat yang menggunakan kunci "
+"ini akan ditandai di halaman percakapan."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Sidik jari tidak cocok"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Harap Anda memverifikasi sidik jari dengan benar. Jika sidik jari tidak "
+"cocok, akun %s mungkin telah disusupi dan pertimbangkan untuk menolak kunci "
+"ini."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verifikasi sidik jari kunci"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Bandingkan sidik jari kunci ini dengan sidik jari yang ditampilkan perangkat "
+"kontak."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Tolak kunci"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blokir komunikasi terenkripsi dengan perangkat kontak yang menggunakan kunci "
+"ini."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Terima kunci"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Izinkan komunikasi terenkripsi dengan perangkat kontak yang menggunakan "
+"kunci ini."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Status kunci saat ini %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "diterima"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Artinya dapat digunakan oleh %s untuk menerima dan mengirim pesan "
+"terenkripsi."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "Terverifikasi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Telah terverifikasi dengan mencocokkan kunci pada perangkat kontak."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "ditolak"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Artinya tidak dapat digunakan oleh %s untuk menguraikan pesan Anda, dan Anda "
+"tidak akan melihat pesan dienkripsi dengannya."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Anda tidak akan melihat pesan terenkripsi dari perangkat %s yang menggunakan "
+"kunci ini. Sebaliknya, perangkat itu tidak dapat lagi menguraikan pesan Anda."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Anda dapat bertukar pesan terenkripsi dengan perangkat %s yang menggunakan "
+"kunci ini."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Pengaturan"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Kontak memiliki perangkat baru"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Memerlukan persetujuan atas OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Apakah Anda menambahkan perangkat baru untuk akun %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO secara default"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Aktifkan enkripsi OMEMO untuk percakapan baru"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Enkripsi ke perangkat baru"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Enkripsi secara otomatis ke perangkat baru dari kontak ini."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Kunci baru"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Kunci enkripsi baru dari perangkat Anda yang lain akan diterima secara "
+"otomatis."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Perangkat ini"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Perangkat lain"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Perangkat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Diterima"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Ditolak"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Terverifikasi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Perangkat baru"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Setiap perangkat memiliki kunci OMEMO-nya sendiri. Pesan hanya dapat "
+"didekripsi oleh perangkat jika dienkripsi menggunakan kuncinya. Pesan hanya "
+"dienkripsi ke perangkat yang telah diterima."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Pengaturan kunci OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO perangkat"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Otomatis mengkonfirmasi kunci baru"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Kunci enkripsi baru dari kontak ini akan diterima secara otomatis."
+
+#~ msgid "Own key"
+#~ msgstr "Kunci milik sendiri"
+
+#~ msgid "Associated keys"
+#~ msgstr "Kunci terkait"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Kunci non-aktif"
+
+#~ msgid "Unused"
+#~ msgstr "Tidak terpakai"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Sidik jari sendiri"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Akan dibuat pada koneksi pertama"
+
+#~ msgid "Your contact"
+#~ msgstr "Kontak anda"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Menanyakan GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Umumkan kunci"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Kesalahan pada GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Tidak ada kunci tersedia. Buat satu!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Dinonaktifkan"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Kunci tidak ada di rantai kunci"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Sidik jari"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Penerbitan kunci dinonaktifkan"
+
+#~ msgid "Select key"
+#~ msgstr "Pilih kunci"
+
+#~ msgid "Loading…"
+#~ msgstr "Memuat…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1089,7 +1418,7 @@ msgstr "Masuk"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Tidak dapat membuat sambungan aman"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Kembali"
diff --git a/main/po/ie.po b/main/po/ie.po
index a07090df..4ac76a0f 100644
--- a/main/po/ie.po
+++ b/main/po/ie.po
@@ -17,6 +17,377 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gerer aparates"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "%s ne have fide por ti-ci aparate. Vu fórsan manca alcun missages."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gerer li clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Cuidosi compara li fingre-print con ti que es monstrat sur li aparate de vor "
+"contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fingre-printes difere"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fingre-printes es identic"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificar li clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fingre-printes ne es egal"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Ples verificar que vu compara li just fingre-print. Si fingre-printes ne es "
+"egal, li conto de %s posse esser compromettet e vu deve rejecter ti-ci clave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar li fingre-print"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Comparar li fingre-print de ti-ci clave con clave que es monstrat sur li "
+"aparate del contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rejecter li clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blocar ciffrat communication con li aparate del contacte quel usa ti-ci "
+"clave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Acceptar li clave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permisser ciffrat communication con li aparate del contacte quel usa ti-ci "
+"clave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Ti-ci clave es actualmen %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "acceptat"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "To significa que %s posse usar it por reciver e inviar missages."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificat"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Adplu, it ha esset verificat corresponder con li clave sur li aparate del "
+"contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rejectet"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"To significa que %s posse usar it por deciffrar vor missages e que vu ne va "
+"vider li missages ciffrat med it."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gerer"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Ti-ci contacte have nov aparates"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Un decision de confidentie OMEMO es besonat"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Esque vu ha adjuntet un nov aparate por li conto %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nov claves"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Nov claves de ciffration de vor altri aparates va esser acceptat "
+"automaticmen."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Acceptat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rejectet"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gerentie de claves OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d aparate OMEMO"
+#~ msgstr[1] "%d aparates OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Automaticmen acceptar nov claves"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Nov claves de ciffration de ti-ci contacte va esser acceptat automaticmen."
+
+#~ msgid "Own key"
+#~ msgstr "Propri clave"
+
+#~ msgid "Associated keys"
+#~ msgstr "Associat claves"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Ínactiv claves"
+
+#~ msgid "Unused"
+#~ msgstr "Ínusat"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Propri fingre-print"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Va esser generat pos li prim conexion"
+
+#~ msgid "Not matching"
+#~ msgstr "Ne corresponde"
+
+#~ msgid "Matching"
+#~ msgstr "Corresponde"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Pos li confirmation, omni futuri missages inviat per %s con ti-ci clave "
+#~ "va esser colorat correspondmen in li fenestre de conversation."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Cessar acceptar ti-ci clave por communication con su associat contacte."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Acceptar ti-ci clave por communication con su associat contacte"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "To significa que %s ne posse usar it por reciver missages, e su missages "
+#~ "inviat va esser ignorat."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Pos confirmation, omni futuri missages inviat per %s con ti-ci clave va "
+#~ "esser ignorat, e null vor missages va esser leibil con ti-ci clave."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Pos confirmation, ti-ci clave va esser usabil per %s por reciver e inviar "
+#~ "missages."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Quande ti-ci contacte adjunte nov ciffre-claves a su conto, acceptar les "
+#~ "automaticmen."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Quande vu adjunte nov ciffre-claves a vor conto, acceptar les "
+#~ "automaticmen."
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Contactante GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Errore de GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Null claves disponibil. Crea ún!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Clave ne es in li porta-clave"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publication de claves depermisset"
+
+#~ msgid "Select key"
+#~ msgstr "Selecter un clave"
+
+#~ msgid "Loading…"
+#~ msgstr "Cargante…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1464,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Ne successat etablisser un secur conexion"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Retro"
diff --git a/main/po/is.po b/main/po/is.po
index a9828324..dce54a93 100644
--- a/main/po/is.po
+++ b/main/po/is.po
@@ -17,6 +17,48 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n"
"X-Generator: Weblate 4.14-dev\n"
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Að spyrja GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Villa hjá GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Engir lyklar í boði. Búðu einn til!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Lykill ekki í lyklakippu"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Deiling lykla óvirkt"
+
+#~ msgid "Select key"
+#~ msgstr "Veldu lykil"
+
+#~ msgid "Loading…"
+#~ msgstr "Hleður…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1136,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Mistókst að skapa örugga tengingu"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Til baka"
diff --git a/main/po/isv.po b/main/po/isv.po
index cce61ef4..d2e2199e 100644
--- a/main/po/isv.po
+++ b/main/po/isv.po
@@ -17,6 +17,265 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.14.1-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s je upotrěbil(-a) nenadežny ustroj. Vy ne budete viděti soobčenja od "
+"ustrojev, ktore ne imajut dověrjenje."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Upravjenje ustrojami"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s ne dověrjaje tomu ustroju. To označaje, že vy možete ne viděti něktore "
+"soobčenja."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Upravjenje ključem"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Potvrditi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Potvrditi ključ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Prijeti ključ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Tutoj ključ v tutom momentu je %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Poprošenje GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Zadany ključ"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Grěška v GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nema dostupnyh ključev. Sgenerujte jedin!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Izključeno"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Nema ključa v svezku ključev"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Odtisk/odpečatok prsta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,6 +1353,7 @@ msgstr ""
msgid "Could not establish a secure connection"
msgstr ""
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr ""
diff --git a/main/po/it.po b/main/po/it.po
index fd108f67..0c2cc5cb 100644
--- a/main/po/it.po
+++ b/main/po/it.po
@@ -18,6 +18,429 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.3-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s sta usando un dispositivo non verificato. Non vedrai messaggi inviati da "
+"un dispositivo che non hai verificato."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gestisci dispositivi"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s non ha verificato questo dispositivo. Ciò significa che potresti perdere "
+"dei messaggi."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gestisci la chiave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Confronta la fingerprint, carattere per carattere, con quella mostrata sul "
+"dispositivo del tuo contatto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Le impronte non combaciano"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Le impronte combaciano"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Conferma"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verifica la chiave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"I messaggi futuri inviati da %s dal dispositivo che usa questa chiave "
+"saranno evidenziati di conseguenza nella finestra della chat."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Le impronte non corrispondono"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Si prega di verificare che si stia confrontanto la fingerprint corretta. Se "
+"le fingerprint non corrispondono, l'account di %s potrebbe essere "
+"compromesso e si dovrebbe rifiutare questa chiave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verifica la fingerprint della chiave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Confronta la fingerprint di questa chiave con quella mostrata sul "
+"dispositivo del contatto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Chiave rifiutata"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blocca le comunicazioni crittografate con il dispositivo del contatto che "
+"sta usando questa chiave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Chiave accettata"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permetti la comunicazione crittografata con il dispositivo del contatto che "
+"sta usando questa chiave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "La chiave attualmente è %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "accettata"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Questo vuol dire che può essere usata da %s per ricevere ed inviare messaggi."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificata"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Inoltre è stato verificato che corrisponda con la chiave sul dispositivo del "
+"contatto."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rifiutata"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Questo vuol dire che non può essere usata da %s per decifrare i tuoi "
+"messaggi, e tu non vedrai i messaggi crittografati con essa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Non vedrai i messaggi crittografati dal dispositivo di %s che usa questa "
+"chiave. Al contrario, quel dispositivo non sarà più in grado di decifrare i "
+"tuoi messaggi."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Sarai in grado di scambiare messaggi crittografati con il dispositivo di %s "
+"che usa questa chiave."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gestisci"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Questo contatto ha dei nuovi dispositivi"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Una decisione sulla fiducia è necessaria per la chiave OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Hai aggiunto un nuovo dispositivo per l'account %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nuove chiavi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Le nuove chiavi di crittografia dei tuoi altri dispositivi verranno "
+"accettate automaticamente."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Accettata"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rifiutata"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificata"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gestione delle chiavi OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d dispositivo OMEMO"
+#~ msgstr[1] "%d dispositivi OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Accetta automaticamente le nuove chiavi"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Le nuove chiavi di crittografia di questo contatto verranno accettate "
+#~ "automaticamente."
+
+#~ msgid "Own key"
+#~ msgstr "Proprie chiavi"
+
+#~ msgid "Associated keys"
+#~ msgstr "Chiavi associate"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Chiavi inattive"
+
+#~ msgid "Unused"
+#~ msgstr "Inutilizzata"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Propria impronta"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Verrà generata alla prima connessione"
+
+#~ msgid "Your contact"
+#~ msgstr "Il tuo contatto"
+
+#~ msgid "Not matching"
+#~ msgstr "Non corrispondenti"
+
+#~ msgid "Matching"
+#~ msgstr "Corrispondenti"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Una volta confermato, qualsiasi messaggio futuro inviato da %s usando "
+#~ "questa chiave sarà evidenziato di conseguenza nella finestra della "
+#~ "conversazione."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Smetti di accettare questa chiave durante le comunicazioni col contatto "
+#~ "associato."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Inizia ad accettare questa chiave durante le comunicazioni con il "
+#~ "contatto ad essa associato"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Questo vuol dire che non può essere usata da %s per ricevere messaggi, ed "
+#~ "ogni messaggio inviato attraverso di essa sarà ignorato."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Una volta confermato, ogni messaggio futuro inviato da %s usando questa "
+#~ "chiave sarà ignorato e nessuno dei tuoi messaggi sarà leggibile usando "
+#~ "questa chiave."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Una volta confermata questa chiave sarà utilizzabile da %s per ricevere "
+#~ "ed inviare messaggi."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Quando questo contatto aggiunge nuove chiavi di cifratura al proprio "
+#~ "account, accettale automaticamente."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Quando aggiungi nuove chiavi di cifratura al tuo account, accettale "
+#~ "automaticamente."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Inizia ad accettare questa chiave durante le comunicazioni col contatto "
+#~ "associato"
+
+#~ msgid "Reject Key"
+#~ msgstr "Rifiuta la chiave"
+
+#~ msgid "Accept Key"
+#~ msgstr "Accetta la chiave"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Dispositivo sconosciuto (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Altri dispositivi"
+
+#~ msgid "- None -"
+#~ msgstr "- Nessuno -"
+
+#~ msgid "OMEMO"
+#~ msgstr "OMEMO"
+
+#~ msgid "Database error"
+#~ msgstr "Errore del database"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Interrogando GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Errore in GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nessuna chiave disponibile. Generane una!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "La chiave non è nel portachiavi"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Pubblicazione della chiave disabilitata"
+
+#~ msgid "Select key"
+#~ msgstr "Seleziona una chiave"
+
+#~ msgid "Loading…"
+#~ msgstr "Caricamento…"
+
+#~ msgid "OpenPGP"
+#~ msgstr "OpenPGP"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1096,7 +1519,7 @@ msgstr "Accedi"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Impossibile stabilire una connessione sicura"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Indietro"
diff --git a/main/po/ja.po b/main/po/ja.po
index 3ca9c003..a0b40a3f 100644
--- a/main/po/ja.po
+++ b/main/po/ja.po
@@ -18,6 +18,381 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.10.3-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s は信頼されていないデバイスを使用しています。信頼していないデバイスから送信"
+"されたメッセージは閲覧できません。"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "デバイスを管理"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s はこのデバイスを信頼していません。相手がメッセージを正しく受信できない可能"
+"性があります。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "キーを管理"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"以下のフィンガープリントと、お使いのデバイスに表示されているフィンガープリン"
+"トを、1文字ずつ比較してください。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "フィンガープリントが一致しません"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "フィンガープリントが一致します"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "確認"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "キーを確認"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"今後このキーを使ったデバイスから %s が送信するメッセージは、チャットウィンド"
+"ウでハイライト表示されます。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "フィンガープリントが一致しません"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"正しいフィンガープリントを比較しているか確認してください。フィンガープリント"
+"が一致しない場合、%s のアカウントはなりすましの可能性があるので、このキーを拒"
+"否することをおすすめします。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "キーのフィンガープリントを検証"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"このキーのフィンガープリントと、連絡先のデバイスに表示されたフィンガープリン"
+"トを比較します。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "キーを拒否"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "このキーを使った連絡先のデバイスとの暗号化された会話をブロックします。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "キーを許可"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "このキーを使った連絡先のデバイスとの暗号化された会話を許可します。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "このキーは現在%s。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "許可されています"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "このキーを使って、%s は暗号化されたメッセージを送受信できます。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "検証済みです"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "加えて、連絡先のデバイスのキーと一致することを検証済みです。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "拒否されています"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"このキーを使って、%s はあなたのメッセージを解読できなくなります。また、あなた"
+"は、このキーで暗号化されたメッセージを確認できなくなります。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"このキーを使った %s のデバイスから、暗号化されたメッセージを確認できなくなり"
+"ます。逆に、今後そのデバイスでは、あなたのメッセージを解読できなくなります。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"このキーを使った %s のデバイスと、暗号化されたメッセージをやり取りできるよう"
+"になります。"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "管理"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "この連絡先に新しいデバイスが追加されました"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO 信頼選択が必要です"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "アカウント %s に新しいデバイスを追加しましたか?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "既定でOMEMO"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "新しい会話にOMEMO暗号化を有効にする"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "新しいデバイスに対して暗号化"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "この連絡先から新しいデバイスに対して自動的に暗号化を行います。"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "新しいキー"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"あなたのほかのデバイスから発行された新しい暗号化キーが自動的に許可されます。"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "許可"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "拒否"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "検証済み"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "新しいデバイス"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO キー管理"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d 台の OMEMO デバイス"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "自動的に新しいキーを許可"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "この連絡先から発行された新しい暗号化キーが自動的に許可されます。"
+
+#~ msgid "Own key"
+#~ msgstr "自身のキー"
+
+#~ msgid "Associated keys"
+#~ msgstr "関連付けられたキー"
+
+#~ msgid "Inactive keys"
+#~ msgstr "非アクティブなキー"
+
+#~ msgid "Unused"
+#~ msgstr "未使用"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "自身のフィンガープリント"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "最初の接続で生成されます"
+
+#~ msgid "Your contact"
+#~ msgstr "あなたの連絡先"
+
+#~ msgid "Not matching"
+#~ msgstr "一致しない"
+
+#~ msgid "Matching"
+#~ msgstr "一致"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "一度確認すると、今後このキーを使って %s から送信されるメッセージは、チャッ"
+#~ "トウィンドウでハイライト表示されます。"
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "関連付けられた連絡先とトークをする際に、このキーを許可しないようにします。"
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "関連付けられた連絡先とトークをする際に、このキーを許可するようにします"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "このキーを使って %s からのメッセージを受信できません。また、当該アドレスか"
+#~ "らのメッセージはすべて無視されます。"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "一度確認すると、今後このキーを使って %s から送信されるメッセージは無視さ"
+#~ "れ、このキーを使ったご自身のメッセージも読み取れなくなります。"
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "一度確認すると、このキーを使って %s からのメッセージを送受信可能になりま"
+#~ "す。"
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "この連絡先の相手がアカウントに追加する新しい暗号化キーを自動的に許可しま"
+#~ "す。"
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr "アカウントに追加した新しい暗号化キーを自動的に許可します。"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "GnuPG に問い合わせています"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG でのエラー"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "キーがありません。生成しましょう!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "無効"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "キーはキーチェーンにありません"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "キーの発行は無効"
+
+#~ msgid "Select key"
+#~ msgstr "キーを選択"
+
+#~ msgid "Loading…"
+#~ msgstr "読み込んでいます…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,6 +1468,7 @@ msgstr ""
msgid "Could not establish a secure connection"
msgstr "安全な接続を確立できませんでした"
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "戻る"
diff --git a/main/po/ka.po b/main/po/ka.po
index d2c1ef57..82cd60c8 100644
--- a/main/po/ka.po
+++ b/main/po/ka.po
@@ -17,6 +17,261 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "დადასტურება"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "დადასტურებულია"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "გადამოწმებულია"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "უარყოფილია"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "GnuPG-ის გამოთხოვა"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "გასაღების გამოცხადება"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "შეცდომა GnuPG-ში"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "გასაღებები ხელმისაწვდომი არაა. დაგენერირეთ ერთი მაინც!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "გათიშულია"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "გასაღები ბრელოკში არაა"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "ანაბეჭდი"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1348,7 @@ msgstr "შესვლა"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr ""
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "უკან"
diff --git a/main/po/kab.po b/main/po/kab.po
index 5af728ac..79e272d4 100644
--- a/main/po/kab.po
+++ b/main/po/kab.po
@@ -17,6 +17,276 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.16.1-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Sefrek obenkan"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%sur yettkil ara deg yibenk-a. Ayagi anamek-is d akken tzemreḍ ad tɛerqeḍ "
+"iznan."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Sefrek tasarut"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Snemhel adsil umḍin, s usekkil ɣer usekkil, s win i d-yettwaseknen deg ibenk "
+"n unermis-ik·im."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Adsil umḍinen mgaraden"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Adsil umḍinen mṣadan"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Serggeg"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Senqed tasarut"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Iznan n yimal ara yettwaznen sɣur %s seg yibenk i yesseqdacen tasarut-agi ad "
+"ttwabrureqqren deg usfaylu n udiwenni."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Idsilen umḍinen ur mṣadan ara"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Selken adsil umḍin n tsarut"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Snemhel tasarut n udsil umḍin akked udsil umḍin i d-yettwaseknen deg yibenk "
+"n unermis."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Agi tasarut"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Sewḥel taɣwalt tawgelhant akked yibenk n unermis-agi i yesseqdacen tasarut-a."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Qbel tasarut"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "Sireg taywalt uwgelhen s yibenk n unermis i yesseqdac tasarut-a."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Tasarut-agi %s tura."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "yettwaqbel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Ayagi yebɣa ad d-yini dakken yezmer ad yettwaseqdec sɣur %s akken ad yeṭṭef "
+"u ad yazen iznan iwgelhanen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "yettwasenqed"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "yettwagi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Ad tizmireḍ ad tbeddeleḍ iznan iwgelhanen akked yibenk %s i yesseqdacen "
+"tasarut-agi."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Sefrek"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Anermis-a ɣur-s ibenkan imaynuten"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Tettwasra teɣtast n teflest OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Terniḍ ibenk amaynut i umiḍan %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO s wudem amezwer"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Sermed awgelhen OMEMO i idiwenniyen imaynuten"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Wgelhen i yibenkan imaynuten"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Wgelhen s wudem awurman ɣer yibenkan imaynuten n unermis-a."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Tisura timaynutin"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Tisura n uwgelhen timaynutin seg yibenkan-ik nniḍen ad ttwaqeblent s wudem "
+"awurman."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Ibenk-a"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Ibenk nniḍen"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Ibenk"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Yettwaqbel"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Yettwasenqed"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Ibenk amaynut"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Tuttra GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Berreḥ tsarut"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Tuccḍa deg GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Ulac tisura. Sarew-d yiwet!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Arurmid"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Tasarut ulac-itt deg uzrar n tsura"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Adsil umḍin"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1363,7 @@ msgstr "Qqen"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Ur izmir ara ad egg tuqqna taɣelsant"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Tuɣalin"
diff --git a/main/po/ko.po b/main/po/ko.po
index c929e4c3..c58ae762 100644
--- a/main/po/ko.po
+++ b/main/po/ko.po
@@ -17,6 +17,49 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.15-dev\n"
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG에 에러가 있음"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "사용 가능한 키 없음. 하나 생성하세요!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "키가 키체인에 있지 않음"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Key publishing disabled"
+#~ msgstr "키 게재 비활성화됨"
+
+#~ msgid "Select key"
+#~ msgstr "키 선택"
+
+#~ msgid "Loading…"
+#~ msgstr "로딩중…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1096,7 +1139,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "보안 연결을 설정 할 수 없음"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "이전"
diff --git a/main/po/lb.po b/main/po/lb.po
index a86874f6..768c2989 100644
--- a/main/po/lb.po
+++ b/main/po/lb.po
@@ -13,6 +13,420 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.0-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Geräter managen"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Schlëssel verwalten"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Vergläich de Fangerofdrock, Zeeche fir Zeechen, mat dem den um Gerät vum "
+"Kontakt ugewise gëtt."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fangerofdréck stemmen net iwwerteneen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fangerofdréck stemmen iwwerteneen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirméieren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Schlëssel verifizéieren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Zukünfteg Noriichten, déi vum Apparat vum %s, den dëse Schlëssel benotzt, "
+"geschéckt ginn, wäerten deementspriechend am Chatfenster ervirgehuewen ginn."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fangerofdréck stëmmen net iwwerteneen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Wann ech gelift iwwerpréif, ob's du mat dem "
+"korrekte Fangerofdrock vergläichs. Wann Fangerofdréck net iwwerteneestëmmen, "
+"dann ass dem %s säi Konto villäicht kompromettéiert an du solls dëse "
+"Schlëssel verweigeren."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Iwwerpréif Schlëssel Fangerofdrock"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Vergläich de Fangerofdrock vun dësem Schlëssel mam Fangerofdrock den um "
+"Gerät vun dësem Kontakt steet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Schlëssel ofleenen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blockéiert verschlësselt Kommunikatioun mam Apparat vum Kontakt deen dëse "
+"Schlëssel benotzt."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Schlëssel acceptéieren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Erlaabt verschlësselt Kommunikatioun mam Apparat vum Kontakt, deen dëse "
+"Schlëssel benotzt."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Den aktuelle Schlëssel ass %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "akzeptéiert"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Dat bedeit, dass et vum %s ka benotzt gi fir Messagen ze empfänken an ze "
+"verschécken."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verifizéiert"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"De Schlëssel ass zousätzlech iwwerpréift gi mam Schlëssel um Gerät vum "
+"Kontakt iwwerteneen ze stëmmen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "ofgeleent"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Dëst bedeit datt et net vum %s ka benotzt ginn fir är Messagen ze "
+"entschlësselen, an Dir gesitt keng Messagen déi mat dësem verschlësselt sinn."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Dir gesitt net verschlësselt Message vum Apparat vum %s deen dëse Schlëssel "
+"benotzt. Ëmgekéiert kann dëse Apparat net méi Är Messagen entschlësselen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Dir kënnt verschlësselte Messagen austausche mat dem Apparat vum %s deen "
+"dësen Schlëssel benotzt."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Verwalten"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Dëse Kontakt huet nei Geräter"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO Vertrauens Entscheedung noutwenneg"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Hues du een neit Gerät fir %s dobäi gemaach?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nei Schlësselen"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Nei Verschlësslungs Schlëssele vun ären aneren Apparater ginn automatesch "
+"akzeptéiert."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Akzeptéiert"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Ofgeleent"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verifizéiert"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO Schlësselenverwaltung"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO Gerät"
+#~ msgstr[1] "%d OMEMO Geräter"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Automatesch nei Schlësselen akzeptéieren"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Nei Verschlësslungs Schlëssele vun dem Kontakt ginn automatesch "
+#~ "akzeptéiert."
+
+#~ msgid "Own key"
+#~ msgstr "Eegene Schlëssel"
+
+#~ msgid "Associated keys"
+#~ msgstr "Zougehéiereg Schlësselen"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Inaktiv Schlësselen"
+
+#~ msgid "Unused"
+#~ msgstr "Onbenotzt"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Eegene Fangerofdrock"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Gett bei der éischter Connectioun generéiert"
+
+#~ msgid "Not matching"
+#~ msgstr "Stemmt net iwwerteneen"
+
+#~ msgid "Matching"
+#~ msgstr "Stemmt iwwerteneen"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Wann konforméiert, all zukünfteg Messagen déi vum %s mat dësem Schlëssel "
+#~ "geschéckt ginn, ginn deementspriechend am Chatfenster markéiert."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Dëse Schlëssel net méi akzeptéiere wärend der Kommunikatioun mat sengem "
+#~ "verbonnene Kontakt."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Dëse Schlëssel wärend de Conversatioun mat sengem Kontakt benotzen"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Dat bedeit, dass dëse Schlëssel net ka vum %s benotz gi fir Messagen ze "
+#~ "empfänken an all Message déi geschéckt gi ginn ignoréiert."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Wann confirméiert, all zukünfteg Message déi vum %s mat dësem Schlëssel "
+#~ "geschéckt ginn, ginn ignoréiert a keng vun dengem Messagë wäerte liesbar "
+#~ "sinn."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Wann konforméiert ass de Schlëssel vum %s benotzbar fir Messagen ze "
+#~ "empfänken an ze schécken."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Wann dëse Kontakt néi Schlësselen zu sengem Konto bäifüügt, déi "
+#~ "automatesch akzeptéieren."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Wann s du nei Schlëssele bei däin Account bäifüügs, déi automatesch "
+#~ "akzeptéieren."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Dëse Schlëssel wärend der Kommunikatioun mat sengem verbonne Kontakt "
+#~ "akzeptéieren."
+
+#~ msgid "Reject Key"
+#~ msgstr "Schlëssel verweigeren"
+
+#~ msgid "Accept Key"
+#~ msgstr "Schlëssel acceptéieren"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Onbekannt Gerät (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Aner Geräter"
+
+#~ msgid "- None -"
+#~ msgstr "- Keng -"
+
+#~ msgid "OMEMO"
+#~ msgstr "OMEMO"
+
+#~ msgid "Database error"
+#~ msgstr "Datebank Feeler"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "GnuPG gëtt ofgefrot"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Feeler am GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Keng Schlëssele verfügbar. Generéier een!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Schlësselen net am Schlësselbond"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Schlëssel Verëffentlechung ausgeschalt"
+
+#~ msgid "Select key"
+#~ msgstr "Schlëssel auswielen"
+
+#~ msgid "Loading…"
+#~ msgstr "Lueden…"
+
+#~ msgid "OpenPGP"
+#~ msgstr "OpenPGP"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1089,7 +1503,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Konnt keng geséchert Verbindung opbauen"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Zeréck"
diff --git a/main/po/lt.po b/main/po/lt.po
index 226e0dbe..482f6ba2 100644
--- a/main/po/lt.po
+++ b/main/po/lt.po
@@ -18,6 +18,387 @@ msgstr ""
"(n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.15.1\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s naudoja nepatikimą įrenginį. Jūs nematysite žinučių iš įrenginių, kuriais "
+"nepasitikite."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Tvarkyti įrenginius"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s nepasitiki šiuo įrenginiu. Tai reiškia, kad galite nematyti žinučių."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Tvarkyti raktą"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Palyginkite kontrolinį kodą, simbolis po simbolio, su tuo, kuris yra rodomas "
+"jūsų adresato įrenginyje."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Kodas skiriasi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Kodas atitinka"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Patvirtinti"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Patikrinkite raktą"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Nuo šiol žinutės nuo %s išsiųstos iš įrenginio naudojančio šį kontrolinį "
+"kodą bus atitinkamai paryškintos."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Kontroliniai kodai nesutampa"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Įsitikinkite, kad lyginate teisingą kontrolinį kodą. Jei kontroliniai kodai "
+"nesutampa, gali būti, kad %s paskyra yra sukompromituota ir turėtumėte "
+"apsvarstyti galimybę atmesti šį raktą."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Patikrinti rakto kontrolinį kodą"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Palyginti šio rakto kontrolinį kodą su adresato įrenginyje rodomu "
+"kontroliniu kodu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Atmesti raktą"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blokuoti šifruotą bendravimą su kontakto įrenginiu, kuris naudoja šį raktą."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Priimti raktą"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Leisti šifruotą bendravimą su kontakto įrenginiu, kuris naudoja šį raktą."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Šiuo metu šis raktas yra %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "priimtas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Tai reiškia, kad %s gali jį naudoti šifruotų žinučių siuntimui ir gavimui."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "patikrintas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Be to, jis buvo patikrintas ir sutampa su adresato įrenginyje rodomu raktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "atmestas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Tai reiškia, kad %s negali jo naudoti jūsų žinučių iššifravimui ir jūs "
+"nematysite žinučiu užšifruotų šiuo raktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Jūs nematysite šifruotų žinučių išsiustų iš %s įrenginio, kuris naudoją šį "
+"raktą. Tuo pačiu tas įrenginys nebegalės iššifruoti jūsų žinučių."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Jūs galite keistis šifruotomis žinutėmis su %s įrenginiu, kuris naudoja šį "
+"raktą."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Tvarkyti"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Šis adresatas turi naujų įrenginių"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO reikia pasitikėjimo sprendimo"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Ar savo %s paskyrai pridėjote naują įrenginį?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO pagal numatymą"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Įjungti naujiems pokalbiams OMEMO šifravimą"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Šifruoti į naujus įrenginius"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automatiškai šifruoti į naujus įrenginius iš šio adresato."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nauji raktai"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Nauji šifravimo raktai iš jūsų kitų įrenginių bus priimti automatiškai."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Šis įrenginys"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Kitas įrenginys"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Įrenginys"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Priimtas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Atmestas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Patikrintas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Naujas įrenginys"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Kiekvienas įrenginys turi savo nuosavą OMEMO raktą. Įrenginys gali "
+"iššifruoti žinutes tik tuo atveju, jeigu jos yra šifruotos naudojant jo "
+"raktą. Žinutės yra šifruojamos tik priimtiems įrenginiams."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO raktų tvarkymas"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO įrenginys"
+#~ msgstr[1] "%d OMEMO įrenginiai"
+#~ msgstr[2] "%d OMEMO įrenginių"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Automatiškai priimti naujus raktus"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Nauji šifravimo raktai iš šio kontakto bus priimti automatiškai."
+
+#~ msgid "Own key"
+#~ msgstr "Nuosavas raktas"
+
+#~ msgid "Associated keys"
+#~ msgstr "Susieti raktai"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Neaktyvūs raktai"
+
+#~ msgid "Unused"
+#~ msgstr "Nenaudojamas"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Nuosavas kontrolinis kodas"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Bus sugeneruotas pirmojo prisijungimo metu"
+
+#~ msgid "Your contact"
+#~ msgstr "Jūsų adresatas"
+
+#~ msgid "Not matching"
+#~ msgstr "Nesutampa"
+
+#~ msgid "Matching"
+#~ msgstr "Sutampa"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Patikrinus, bet kokios būsimos žinutės, kurias %s išsiųs naudodamas šį "
+#~ "raktą, bus atitinkamai paryškintos pokalbių kambaryje."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr "Nustoti priiminėti šį raktą bendravimo su susietu adresatu metu."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Pradėti priiminėti šį raktą bendravimo su susietu adresatu metu"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Tai reiškia, kad %s negali jo naudoti, kad gautų žinutes, o bet kurių "
+#~ "adresato siunčiamų žinučių bus nepaisoma."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Patvirtinus, bet kurių būsimų žinučių, kurias %s išsiųs naudodamas šį "
+#~ "raktą, bus nepaisoma ir jokių jūsų žinučių nebus įmanoma perskaityti "
+#~ "naudojant šį raktą."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Patvirtinus, šis raktas taps tinkamu naudoti %s, kad gautų ir siųstų "
+#~ "žinutes."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Kai šis adresatas prie savo paskyros pridės naujus šifravimo raktus, "
+#~ "automatiškai juos priimti."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Kai pridedate naujus šifravimo raktus prie savo paskyros, automatiškai "
+#~ "juos priimti."
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Užklausiama GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Paskelbimo raktas"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Klaida GnuPG programoje"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nėra prieinamų raktų. Sugeneruokite!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Išjungta"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Rakto nėra raktinėje"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Kontrolinis kodas"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Rakto paskelbimas išjungtas"
+
+#~ msgid "Select key"
+#~ msgstr "Pasirinkti raktą"
+
+#~ msgid "Loading…"
+#~ msgstr "Įkeliama…"
+
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1098,7 +1479,7 @@ msgstr "Prisijungti"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Nepavyko užmegzti saugaus ryšio"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Atgal"
diff --git a/main/po/lv.po b/main/po/lv.po
index 2d41ae7a..9ef2a1e6 100644
--- a/main/po/lv.po
+++ b/main/po/lv.po
@@ -18,6 +18,39 @@ msgstr ""
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 4.16-dev\n"
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1127,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr ""
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr ""
diff --git a/main/po/nb.po b/main/po/nb.po
index 86b76c66..2a78c0a1 100644
--- a/main/po/nb.po
+++ b/main/po/nb.po
@@ -18,6 +18,422 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s har brukt en ubetrodd enhet. Du vil ikke se meldinger fra enheter du ikke "
+"har tiltro til."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Håndter enheter"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s har ikke tiltro til denne enheten. Det betyr at du kan gå glipp av "
+"meldinger."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Håndter nøkkel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Sammenlign fingeravtrykket, tegn for tegn, med den vist på din kontakts "
+"enhet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fingeravtrykkene stemmer ikke overens"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fingeravtrykkene stemmer overens"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Bekreft"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Bekreft nøkkel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Fremtidige meldinger sendt av %s fra enheten som benytter denne nøkkelen vil "
+"framheves i så måte i sludrevinduet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fingeravtrykkene stemmer ikke overens"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Sjekk at du sammenligner riktig fingeravtrykk. Hvis de ikke stemmer overens, "
+"kan det hende %s sin konto har falt i gale hender, og du bør overveie å "
+"avvise denne nøkkelen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Sjekk nøkkelfingeravtrykk"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Sammenlign dette fingeravtrykket med fingeravtrykket vist på kontaktens "
+"enhet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Avslå nøkkel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blokker kryptert kommunikasjon med kontaktens enhet som benytter denne "
+"nøkkelen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Godta nøkkel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Tillat kryptert kommunikasjon med kontaktens enhet som benytter denne "
+"nøkkelen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Denne nøkkelen er i øyeblikket %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "godtatt"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Dette betyr at den kan brukes av %s til å motta og sende krypterte meldinger."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "bekreftet"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"I tillegg har den blitt bekreftet å samsvare med nøkkelen på kontaktens "
+"enhet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "avslått"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Dette betyr den ikke kan brukes av %s for å fortolke meldingene dine, og du "
+"vil ikke kunne se meldinger kryptert med den."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Du vil ikke se krypterte meldinger fra %s sin enhet som bruker denne "
+"nøkkelen. Denne enheten vil heller ikke kunne fortolke dine meldinger lenger."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Du vil kunne utveksle krypterte meldinger med %s sin enhet som benytter "
+"denne nøkkelen."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Behandle"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Denne kontakten har nye enheter"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO tillitsbeslutning kreves"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "La du til en ny enhet for kontoen %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO som standard"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Aktiver OMEMO-kryptering for nye samtaler"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Krypter til nye enheter"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Krypter automatisk til nye enheter fra denne kontakten."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nye nøkler"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "Nye krypteringsnøkler fra dine andre enheter vil godtas automatisk."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Denne enheten"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Annen enhet"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Enhet"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Godtatt"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Avslått"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Bekreftet"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Ny enhet"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Hver enhet har sin egen OMEMO-nøkkel. Meldinger kan bare dekrypteres av en "
+"enhet hvis de er kryptert til dens nøkkel. Meldinger blir bare kryptert til "
+"godkjente enheter."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO-nøkkelhåndtering"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO-enhet"
+#~ msgstr[1] "%d OMEMO-enheter"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Godta nye nøkler automatisk"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Nye krypteringsnøkler fra denne kontakten vil godtas automatisk."
+
+#~ msgid "Own key"
+#~ msgstr "Egen nøkkel"
+
+#~ msgid "Associated keys"
+#~ msgstr "Tilknyttede nøkler"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Inaktive nøkler"
+
+#~ msgid "Unused"
+#~ msgstr "Ubrukt"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Eget fingeravtrykk"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Vil bli generert ved første tilkobling"
+
+#~ msgid "Your contact"
+#~ msgstr "Din kontakt"
+
+#~ msgid "Not matching"
+#~ msgstr "Samsvarer ikke"
+
+#~ msgid "Matching"
+#~ msgstr "Samsvarer"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Når først bekreftet, vil fremtidige meldinger sendt av %s ved bruk av "
+#~ "denne nøkkelen bli fremhevet tilsvarende i sludrevinduet."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Slutt å godta denne nøkkelen under kommunikasjon med dens tilknyttede "
+#~ "kontakt."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Aksepter heretter denne nøkkelen i kommunikasjon med dens tilhørende "
+#~ "kontakt"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Dette betyr at den ikke kan brukes av %s til å motta meldinger, og enhver "
+#~ "melding sendt på vegne av den vil bli ignorert."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Etter bekreftelsen vil fremtidige meldinger sendt av %s der denne "
+#~ "nøkkelen brukes bli ignorert, og ingen av dine meldinger vil kunne leses "
+#~ "med den."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Når først bekreftet vil denne nøkkelen kunne brukes av %s til å motta og "
+#~ "sende meldinger."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Når denne kontakten legger nye krypteringsnøkler til kontoen sin, godta "
+#~ "dem automatisk."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Godta dem automatisk når du legger nye krypteringsnøkler til kontoen din."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Begynn å godta denne nøkkelen under kommunikasjon med dens tilknyttede "
+#~ "kontakt."
+
+#~ msgid "Reject Key"
+#~ msgstr "Avslå nøkkel"
+
+#~ msgid "Accept Key"
+#~ msgstr "Godta nøkkel"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Ukjent enhet (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Andre enheter"
+
+#~ msgid "- None -"
+#~ msgstr "- Ingen -"
+
+#~ msgid "OMEMO"
+#~ msgstr "OMEMO"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Sender spørring til GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Kunngjør nøkkel"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Feil i GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Ingen nøkler tilgjengelige. Generer én!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Deaktivert"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Nøkkelen finnes ikke i nøkkelknippet"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Fingeravtrykk"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Nøkkelpublisering avskrudd"
+
+#~ msgid "Select key"
+#~ msgstr "Velg nøkkel"
+
+#~ msgid "Loading…"
+#~ msgstr "Laster…"
+
+#~ msgid "OpenPGP"
+#~ msgstr "OpenPGP"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1510,7 @@ msgstr "Logg på"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Kunne ikke etablere sikker forbindelse"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Tilbake"
diff --git a/main/po/nl.po b/main/po/nl.po
index 757e8992..53259f4e 100644
--- a/main/po/nl.po
+++ b/main/po/nl.po
@@ -18,6 +18,426 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s is een onvertrouwd apparaat. Berichten van onvertrouwde apparaten worden "
+"niet getoond."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Apparaten beheren"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "%s vertrouwt dit apparaat niet. Je mist hierdoor mogelijk berichten."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Sleutel beheren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Vergelijk de vingerafdruk, letter voor letter, met die op het apparaat van "
+"je contactpersoon."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Vingerafdrukken wijken af"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Vingerafdrukken komen overeen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Bevestigen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Sleutel verifiëren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Toekomstige berichten van %s van het apparaat dat deze sleutel gebruikt, "
+"worden gemarkeerd in het gespreksvenster."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Vingerafdrukken komen niet overeen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Zorg dat je de juiste vingerafdrukken vergelijkt. Als de vingerafdrukken "
+"niet overeenkomen, kan het zijn dat het account van %s gehackt is. Overweeg "
+"in dat geval deze sleutel te weigeren."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Vingerafdruk van sleutel verifiëren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Vergelijk de vingerafdruk van deze sleutel met de vingerafdruk die wordt "
+"getoond op het apparaat van je contactpersoon."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Sleutel weigeren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blokkeer versleutelde communicatie met het apparaat van deze contactpersoon "
+"dat deze sleutel gebruikt."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Sleutel accepteren"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Sta versleutelde communicatie toe met het apparaat van deze contactpersoon "
+"dat deze sleutel gebruikt."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Deze sleutel is momenteel %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "geaccepteerd"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Dit betekent dat %s deze kan gebruiken om berichten te ontvangen en "
+"versturen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "geverifieerd"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Er is vastgesteld dat deze sleutel overeenkomt met de sleutel op het "
+"apparaat van de contactpersoon."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "geweigerd"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"De sleutel kan niet door %s worden gebruikt om berichten te ont- en "
+"versleutelen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Je ziet geen versleutelde berichten van het apparaat van %s dat deze sleutel "
+"gebruikt. Daarnaast kan het apparaat jouw berichten niet meer ontsleutelen."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Je kunt versleutelde berichten uitwisselen met het apparaat van %s dat deze "
+"sleutel gebruikt."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Beheren"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Deze contactpersoon heeft nieuwe apparaten"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO-vertrouwenskeuze vereist"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Heb je een nieuw apparaat toegevoegd aan %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "Standaard OMEMO"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Zet OMEMO versleuteling aan voor nieuwe gesprekken"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Versleut nieuwe apparaten"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automatisch versleutelen van nieuwe apparaten van dit contact."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nieuwe sleutels"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Nieuwe sleutels van je andere apparaten worden automatisch geaccepteerd."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Dit apparaat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Ander apparaat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Apparaat"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Geaccepteerd"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Geweigerd"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Geverifieerd"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Nieuwe apparaat"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Ieder apparaat beschikt over een eigen OMEMO-sleutel. Berichten kunnen "
+"alleen worden ontsleuteld als beide versleuteld zijn met dezelfde sleutel, "
+"en alleen op goedgekeurde apparaten."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO-sleutelbeheer"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO-apparaat"
+#~ msgstr[1] "%d OMEMO-apparaten"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Nieuwe sleutels automatisch accepteren"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Nieuwe sleutels van deze contactpersoon worden automatisch geaccepteerd."
+
+#~ msgid "Own key"
+#~ msgstr "Mijn sleutel"
+
+#~ msgid "Associated keys"
+#~ msgstr "Geassocieerde sleutels"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Inactieve sleutels"
+
+#~ msgid "Unused"
+#~ msgstr "Ongebruikt"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Mijn vingerafdruk"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Wordt bij de eerste verbinding gegenereerd"
+
+#~ msgid "Your contact"
+#~ msgstr "Je contactpersoon"
+
+#~ msgid "Not matching"
+#~ msgstr "Komen niet overeen"
+
+#~ msgid "Matching"
+#~ msgstr "Komen overeen"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Zodra bevestigd, worden nieuwe berichten verstuurd door %s met deze "
+#~ "sleutel uitgelicht in het chatvenster."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Accepteer niet langer deze sleutel tijdens communicatie met het "
+#~ "bijbehorende contact."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Accepteer deze sleutel tijdens communicatie met het bijbehorende contact"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Dit betekent dat het niet gebruikt kan worden door %s om berichten te "
+#~ "ontvangen. Berichten die hiermee verstuurd worden worden genegeerd."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Zodra bevestigd, worden toekomstige berichten die verstuurd worden door "
+#~ "%s met deze sleutel genegeerd en zullen geen van je berichten leesbaar "
+#~ "zijn met deze sleutel."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Zodra bevestigd kan deze sleutel gebruikt worden door %s om berichten te "
+#~ "ontvangen en te versturen."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Indien dit contact nieuwe encryptiesleutels toevoegt aan hun account, "
+#~ "automatisch accepteren."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Nieuwe encryptiesleutels die aan het account worden toegevoegd "
+#~ "automatisch accepteren."
+
+#, fuzzy
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Accepteer deze sleutel tijdens communicatie met het bijbehorende contact"
+
+#~ msgid "Reject Key"
+#~ msgstr "Sleutel Afwijzen"
+
+#~ msgid "Accept Key"
+#~ msgstr "Sleutel Aanvaarden"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Onbekend apparaat (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Andere apparaten"
+
+#~ msgid "- None -"
+#~ msgstr "- Geen -"
+
+#~ msgid "OMEMO"
+#~ msgstr "OMEMO"
+
+#~ msgid "Database error"
+#~ msgstr "Databasefout"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Bezig met aanroepen van GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Aankondigingssleutel"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Fout in GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Geen sleutels beschikbaar. Genereer een sleutel!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Uitgeschakeld"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Sleutel niet in sleutelbos"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Vingerafdruk"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Sleutelpublicatie uitgeschakeld"
+
+#~ msgid "Select key"
+#~ msgstr "Kies een sleutel"
+
+#~ msgid "Loading…"
+#~ msgstr "Bezig met laden…"
+
+#~ msgid "OpenPGP"
+#~ msgstr "OpenPGP"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1514,7 @@ msgstr "Inloggen"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Kan geen beveiligde verbinding opzetten"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Terug"
diff --git a/main/po/oc.po b/main/po/oc.po
index 75e68655..853f0bb9 100644
--- a/main/po/oc.po
+++ b/main/po/oc.po
@@ -17,6 +17,340 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15.1\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s a utilizat un aparelh desconegut. Veiretz pas los messatges venents de "
+"client que vos fisatz pas."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gerir los aparelhs"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s se fisa pas d’aqueste client. Significa que mancaretz benlèu de messatges."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gestion de las claus"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Comparatz l’emprenta, caractèr per caractèr, amb aquela qu’es afichada al "
+"client de vòstre contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "L’emprenta es diferenta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Las emprentas correspondon"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificar la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Los messatges venents enviat per %s a partir del client utilizant aquesta "
+"clau seràn meses en davant dins la fenèstra del chat."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Las emprentas correspondon pas"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Mercés de verificar que sètz a comparar l’emprenta corrècta. Se l’emprenta "
+"correspond pas, lo compte de %s pòt èsser compromés e deuriatz regetar "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar l’emprenta d’aquesta clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Comparatz aquesta clau amb l’emprenta afichada sus l'aparelh de vòstre "
+"contacte."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Regetar la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blocar las comunicacion chifradas amb lo client del contacte qu’utiliza "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Acceptar la clau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Autorizar las comunicacions chifradas amb lo client del contacte qu’utiliza "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "La clau es actualament %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "acceptada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Aquò significa que èsser utilizada per %s per recebre e enviar de messatges."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Amai, la verificacion de la correspondéncia d’aquesta clau amb la del client "
+"del contacte es estada facha."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "regetada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Aquò significa que pòt pas èsser utilizada per %s per deschifrar vòstres "
+"messatges, veiretz pas mai los messatges chifrats amb ela."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Veiretz pas mai los messatges que venon de l’aparelh de %s qu’utiliza "
+"aquesta clau. Al contrari, aqueste aparelh poirà pas mai deschifrar vòstres "
+"messatges."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Poiretz escambiar de messatges chifrats amb l’aparelh de %s qu’utiliza "
+"aquesta clau."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gerir"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Aqueste contacte a d’aparelhs novèls"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Decision de fisança OMEMO requerida"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Avètz apondut un aparelh novèl pel compte de %s ?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO per defaut"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Activar lo chiframent OMEMO per las discussions novèlas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Chifrar pels aparelhs novèls"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Chifrar automaticament pels aparelhs novèls d'aqueste contacte."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Claus novèlas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Las claus novèlas de deschiframent de vòstres autres aparelhs seràn "
+"automaticament acceptadas."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Aqueste aparelh"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Un autre aparelh"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Aparelh"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Acceptada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Regetada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Aparelh novèl"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Cada aparelh a sa pròpria clau OMEMO. Los messatges pòdon èsser deschifrats "
+"per un aparelh solament se son chifrats amb sa clau. Los messatges son "
+"chifrats unicament pels aparelhs acceptats."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gestion de las claus OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d periferic OMEMO"
+#~ msgstr[1] "%d periferics OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Acceptar automaticament las claus novèlas"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Las claus novèlas de deschiframent d’aqueste contacte seràn "
+#~ "automaticament acceptadas."
+
+#~ msgid "Own key"
+#~ msgstr "Ma clau publica"
+
+#~ msgid "Associated keys"
+#~ msgstr "Claus associadas"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Claus inactivas"
+
+#~ msgid "Unused"
+#~ msgstr "Pas utilizada"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Emprenta publica"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Serà generat a la primièra connexion"
+
+#~ msgid "Your contact"
+#~ msgstr "Vòstre contacte"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Consultacion de GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Anonciar la clau"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Error dins gnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Cap de clau pas disponibla. Generatz-ne una !"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Desactivat"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "La clau es pas al trocèl"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Emprenta"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publicacion de clau desactivada"
+
+#~ msgid "Select key"
+#~ msgstr "Seleccionar una clau"
+
+#~ msgid "Loading…"
+#~ msgstr "Cargament…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1096,7 +1430,7 @@ msgstr "Se connectar"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Establiment impossible d’una connexion segura"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Tornar"
diff --git a/main/po/pl.po b/main/po/pl.po
index b0743181..838a4ee0 100644
--- a/main/po/pl.po
+++ b/main/po/pl.po
@@ -19,6 +19,401 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.8-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s używa niezaufanego urządzenia. Nie będziesz widzieć wiadomości wysłanych "
+"z urządzeń, którym nie ufasz."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Zarządzaj urządzeniami"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s nie ufa temu urządzeniu. Oznacza to, że wiadomości mogą do ciebie nie "
+"docierać."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Zarządzaj kluczem"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Porównaj odcisk klucza, znak po znaku, z tym pokazanym na urządzeniu twojego "
+"kontaktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Odcisk klucza różni się"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Odcisk klucza pasuje"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Potwierdź"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Zweryfikuj klucz"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Przyszłe wiadomości wysyłane przez %s z urządzenia używającego tego klucza "
+"zostaną odpowiednio podświetlone w oknie czatu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Odcisk klucza nie zgadza się"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Proszę zweryfikować, że porównujesz prawidłowy odcisk klucza. Jeśli odciski "
+"nie zgadzają się, konto %s mogło być zaatakowane i należy rozważyć "
+"odrzucenie tego klucza."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Zweryfikuj odcisk klucza"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Porównaj odcisk tego klucza z odciskiem wyświetlonym na urządzeniu kontaktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Odrzuć klucz"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blokuj szyfrowaną komunikację z urządzeniem kontaktu, które korzysta z tego "
+"klucza."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Zaakceptuj klucz"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Zezwól na szyfrowaną komunikację z urządzeniem kontaktu, które korzysta z "
+"tego klucza."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Ten klucz jest obecnie %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "zaakceptowany"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"To znaczy, że może być używany przez %s do odbierania i wysyłania "
+"szyfrowanych wiadomości."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "zweryfikowany"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Dodatkowo zostało sprawdzone, że zgadza się z kluczem na urządzeniu kontaktu."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "odrzucony"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Oznacza to, że %s nie może go użyć do odszyfrowania wiadomości i nie "
+"zobaczysz wiadomości zaszyfrowanych przy jego pomocy."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Nie zobaczysz zaszyfrowanych wiadomości z urządzenia %s, które używa tego "
+"klucza. I odwrotnie, to urządzenie nie będzie już w stanie odszyfrować "
+"Twoich wiadomości."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Będziesz mógł wymieniać zaszyfrowane wiadomości z urządzeniem %s, które "
+"używa tego klucza."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Zarządzaj"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Ten kontakt ma nowe urządzenia"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Decyzja o zaufaniu OMEMO jest potrzebna"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Czy dodałeś nowe urządzenie dla konta %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "Domyślnie OMEMO"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Włącz szyfrowanie za pomocą OMEMO dla nowych konwersacji"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Szyfrowanie nowych urządzeń"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automatycznie szyfruj na nowych urządzeniach od tego kontaktu."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Nowe klucze"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Nowe klucze szyfrowania z innych urządzeń będą akceptowane automatycznie."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Zaakceptowany"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Odrzucony"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Zweryfikowany"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Nowe urządzenie"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Zarządzanie kluczami OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d urządzenie OMEMO"
+#~ msgstr[1] "%d urządzenia OMEMO"
+#~ msgstr[2] "%d urządzeń OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Automatycznie akceptuj nowe klucze"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Nowe klucze szyfrowania od tego kontaktu będą akceptowane automatycznie."
+
+#~ msgid "Own key"
+#~ msgstr "Własny klucz"
+
+#~ msgid "Associated keys"
+#~ msgstr "Pozostałe klucze"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Nieaktywne klucze"
+
+#~ msgid "Unused"
+#~ msgstr "Nieużywany"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Własny odcisk klucza"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Zostanie wygenerowany przy pierwszym połączeniu"
+
+#~ msgid "Not matching"
+#~ msgstr "Odciski nie zgadzają się"
+
+#~ msgid "Matching"
+#~ msgstr "Odciski zgadzają się"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Przyszłe wiadomości wysłane przez %s i szyfrowane tym kluczem będą "
+#~ "odpowiednio zaznaczone w oknie czatu."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Zablokuj szyfrowaną komunikację ze sprzętem kontaktu, który używa ten "
+#~ "klucz."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Włącz szyfrowaną komunikację ze sprzętem kontaktu, który używa ten klucz."
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "To znaczy, że nie może być używany przez %s do rozszyfrowania twoich "
+#~ "wiadomości, a wiadomości szyfrowane nim nie będą u ciebie wyświetlane."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Wiadomości wysłane przez %s ze sprzętu używającego ten klucz nie będą "
+#~ "wyświetlane. Podobnie sprzęt tej osoby nie będzie mógł rozszyfrować "
+#~ "twoich wiadomości."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "To umożliwi wymianę szyfrowanych wiadomości ze sprzętem należącym do %s, "
+#~ "który używaja ten klucz."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Gdy ten kontakt doda nowe klucze szyfrowania do swojego konta, zaakceptuj "
+#~ "je automatycznie."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Gdy dodam nowe klucze szyfrowania do mojego konta, zaakceptuj je "
+#~ "automatycznie."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Nieznane urządzenie (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Pozostałe urządzenia"
+
+#~ msgid "- None -"
+#~ msgstr "- Wybierz -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Odpytuję GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Błąd w GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Brak kluczy. Wygeneruj nowy!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Wyłączono"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Klucz nie znajduje się w pęku kluczy"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publikowanie kluczy wyłączone"
+
+#~ msgid "Select key"
+#~ msgstr "Wybierz klucz"
+
+#~ msgid "Loading…"
+#~ msgstr "Ładowanie…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1101,7 +1496,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Nie udało się nawiązać bezpiecznego połączenia"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Wstecz"
diff --git a/main/po/pt.po b/main/po/pt.po
index 6e4984e6..253578c0 100644
--- a/main/po/pt.po
+++ b/main/po/pt.po
@@ -17,6 +17,341 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.11-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s esteve a usar um aparelho não confiável. Não verá mensagens de aparelhos "
+"nos quais não confia."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gerir aparelhos"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s não confia neste aparelho. Isso significa que pode estar a perder "
+"mensagens."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gerir Chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Compare a impressão digital, caractere a caractere, com aquela mostrada no "
+"aparelho de seu contato."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "As impressões digitais não correspondem uma a outra"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "As impressões digitais correspondem uma a outra"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Mensagens futuras enviadas por %s do aparelho que usa essa chave serão "
+"destacadas no janela de bate papo."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Impressões digitais não correspondem"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Por favor verifique se está a comparar as impressões digitais corretas. Caso "
+"elas não correspondam, a conta do %s pode estar comprometida e deve "
+"considerar rejeitar essa chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar impressão digital da chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Compare a impressão digital dessa chave com a impressão digital exibida no "
+"aparelho do contato."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rejeitar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Bloqueie comunicação criptografada com o aparelho do contato que usa essa "
+"chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Aceitar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permita comunicação criptografada com o aparelho do contato que usa essa "
+"chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Essa chave está atualmente %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "aceita"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Isso significa que ela pode ser usada por %s para enviar e receber mensagens "
+"criptografadas."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Além disso, verificou-se que ela corresponde com a chave no aparelho do "
+"contato."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rejeitada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Isso significa que ela não pode ser usada por %s para decifrar suas "
+"mensagens, e não irá visualizar mensagens criptografadas com ela."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Não irá visualizar mensagens criptografas pelo aparelho de %s que usa essa "
+"chave. Além disso, esse aparelho não será mais capaz de decifrar suas "
+"mensagens."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Poderá trocar mensagem criptografadas com o aparelho de %s que usa essa "
+"chave."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gerir"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Esse contato possui novos aparelhos"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Decisão de confiança OMEMO necessária"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Adicionou um novo aparelho para a conta %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO por padrão"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Ativar a criptografia OMEMO em novas conversas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Criptografar para novos dispositivos"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automaticamente criptografar para novos dispositivos deste contacto."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Chaves novas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Novas chaves de criptografia de seus outros aparelhos serão aceitas "
+"automaticamente."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Este dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Outro dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Aceita"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rejeitada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Dispositivo novo"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Cada dispositivo tem a sua própria chave OMEMO. Mensagens só podem ser "
+"descriptografadas pelo dispositivo se foram criptografadas para as suas "
+"chaves. Mensagens só são criptografadas para dispositivos aceites."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gestão de chave OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d aparelho OMEMO"
+#~ msgstr[1] "%d aparelhos OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Aceitar novas chaves automaticamente"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Novas chaves de criptografia desse contato serão aceitas automaticamente."
+
+#~ msgid "Own key"
+#~ msgstr "Chave própria"
+
+#~ msgid "Associated keys"
+#~ msgstr "Chaves associadas"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Chaves inativas"
+
+#~ msgid "Unused"
+#~ msgstr "Não usada"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Impressão digital própria"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Será gerada na primeira conexão"
+
+#~ msgid "Your contact"
+#~ msgstr "O seu contacto"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Consultando GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Anunciar chave"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Erro no GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nenhuma chave disponível. Gere uma!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Desativado"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "A chave não está no chaveiro"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Impressão digital"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publicação da chave desativada"
+
+#~ msgid "Select key"
+#~ msgstr "Selecionar chave"
+
+#~ msgid "Loading…"
+#~ msgstr "Carregando…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1429,7 @@ msgstr "Autenticar"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Não foi possível estabelecer uma conexão segura"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Voltar"
diff --git a/main/po/pt_BR.po b/main/po/pt_BR.po
index add854a8..fe57a330 100644
--- a/main/po/pt_BR.po
+++ b/main/po/pt_BR.po
@@ -17,6 +17,396 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s tem usado um dispositivo não confiável. Você não verá mensagens de "
+"dispositivos que você não confia."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gerenciar dispositivos"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s não confia nesse dispositivo. Isso significa que você pode estar perdendo "
+"algumas mensagens."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gerenciar Chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Compare a impressão digital, caractere a caractere, com aquela mostrada no "
+"dispositivo de seu contato."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "As impressões digitais não correspondem uma a outra"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "As impressões digitais correspondem uma a outra"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Mensagens futuras enviadas por %s do dispositivo que usa essa chave serão "
+"destacadas no janela de bate papo."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Impressões digitais não correspondem"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Por favor verifique se você está comparando as impressões digitais corretas. "
+"Caso elas não correspondam, a conta do %s pode estar comprometida e você "
+"deve considerar rejeitar essa chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificar impressão digital da chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Compare a impressão digital dessa chave com a impressão digital exibida no "
+"dispositivo do contato."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Rejeitar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Bloqueie comunicação criptografada com o dispositivo do contato que usa essa "
+"chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Aceitar chave"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permita comunicação criptografada com o dispositivo do contato que usa essa "
+"chave."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Essa chave está atualmente %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "aceita"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Isso significa que ela pode ser usada por %s para enviar e receber mensagens "
+"criptografadas."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Além disso, verificou-se que ela corresponde com a chave no dispositivo do "
+"contato."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "rejeitada"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Isso significa que ela não pode ser usada por %s para decifrar suas "
+"mensagens, e você não irá visualizar mensagens criptografadas com ela."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Você não irá visualizar mensagens criptografas pelo dispositivo de %s que "
+"usa essa chave. Além disso, esse dispositivo não será mais capaz de decifrar "
+"suas mensagens."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Você poderá trocar mensagem criptografadas com o dispositivo de %s que usa "
+"essa chave."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gerenciar"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Esse contato possui novos dispositivos"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Decisão de confiança OMEMO necessária"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Você adicionou um novo dispositivo para a conta %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO por padrão"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Ativar a criptografia OMEMO em novas conversas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Criptografar para novos dispositivos"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Automaticamente criptografar para novos dispositivos deste contato."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Chaves novas"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Novas chaves de criptografia de seus outros dispositivos serão aceitas "
+"automaticamente."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Este dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Outro dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Dispositivo"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Aceita"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Rejeitada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificada"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Dispositivo novo"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Cada dispositivo tem sua própria chave OMEMO. Mensagens só podem ser "
+"descriptografadas pelo dispositivo se foram criptografadas para suas chaves. "
+"Mensagens só são criptografadas para dispositivos aceitos."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Gerenciamento de Chave OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d dispositivo OMEMO"
+#~ msgstr[1] "%d dispositivos OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Aceitar novas chaves automaticamente"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Novas chaves de criptografia desse contato serão aceitas automaticamente."
+
+#~ msgid "Own key"
+#~ msgstr "Chave própria"
+
+#~ msgid "Associated keys"
+#~ msgstr "Chaves associadas"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Chaves inativas"
+
+#~ msgid "Unused"
+#~ msgstr "Não usada"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Impressão digital própria"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Será gerada na primeira conexão"
+
+#~ msgid "Your contact"
+#~ msgstr "Seu contato"
+
+#~ msgid "Not matching"
+#~ msgstr "Não correspondem"
+
+#~ msgid "Matching"
+#~ msgstr "Correspondem"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Uma vez confirmada, toda mensagem enviada por %s no futuro será destacada "
+#~ "na janela da conversa."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr "Pare de aceitar essa chave ao se comunicar com o contato associado."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Aceite essa chave ao se comunicar com o contato associado"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Isso significa que ela não pode ser usada por %s para receber mensagens e "
+#~ "qualquer mensagem enviada com ela será ignorada."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Uma vez confirmada, toda mensagem enviada por %s usando essa chave será "
+#~ "ignorada e nenhuma de suas mensagens com ela serão legíveis."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Uma vez confirmada, essa chave poderá ser usada por %s para receber e "
+#~ "enviar mensagens."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Quando esse contato adicionar novas chaves de criptografia à conta, "
+#~ "aceite-as automaticamente."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Quando você adicionar novas chaves de criptografia para sua conta, aceite-"
+#~ "as automaticamente."
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Consultando GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Anunciar chave"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Erro no GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nenhuma chave disponível. Gere uma!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Desativado"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "A chave não está no chaveiro"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Impressão digital"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publicação da chave desativada"
+
+#~ msgid "Select key"
+#~ msgstr "Selecionar chave"
+
+#~ msgid "Loading…"
+#~ msgstr "Carregando…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1095,7 +1485,7 @@ msgstr "Login"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Não foi possível estabelecer uma conexão segura"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Voltar"
diff --git a/main/po/ro.po b/main/po/ro.po
index 527c396d..9847a4cd 100644
--- a/main/po/ro.po
+++ b/main/po/ro.po
@@ -19,6 +19,421 @@ msgstr ""
"20)) ? 1 : 2;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s a utilizat un dispozitiv care nu este de încredere. Nu veți vedea mesaje "
+"de pe dispozitive în care nu aveți încredere."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Gestionare dispozitive"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s nu are încredere în acest dispozitiv. Asta înseamnă că s-ar putea să-ți "
+"lipsească mesaje."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Gestionare cheie"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Comparați amprenta, caracter cu caracter, cu amprenta afișată pe "
+"dispozitivul contactului."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Amprentele diferă"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Amprentele se potrivesc"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Confirmare"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verificare cheie"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Mesajele viitoare trimise de %s de pe dispozitivul care utilizează această "
+"cheie vor fi evidențiate în mod corespunzător în fereastra de chat."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Amprentele nu se potrivesc"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Vă rugäm să verificați dacă se compară amprentele corecte. Dacă nu se "
+"potrivesc amprentele s-ar putea ca %s să aibä un cont compromis și ar trebui "
+"să luați în considerare respingerea acestei chei."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verificare amprentă cheie"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Comparați amprenta cheii cu amprenta afișată pe dispozitivul contactului."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Respingere cheie"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blocați comunicarea criptată cu dispozitivul persoanei de contact care "
+"utilizează această cheie."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Acceptare cheie"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Permiteți comunicarea criptată cu dispozitivul persoanei de contact care "
+"utilizează această cheie."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Cheia este în prezent %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "acceptată"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Aceasta înseamnă că poate fi utilizată de %s pentru a primi și a trimite "
+"mesaje criptate."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verificată"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"În plus, a fost verificată că se potrivește cu cheia de pe dispozitivul "
+"contactului."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "respinsă"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Aceasta înseamnă că nu poate fi utilizată de %s pentru a vă descifra "
+"mesajele și nu veți vedea mesajele criptate cu aceasta."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Nu veți vedea mesaje criptate de la dispozitivul %s care utilizează această "
+"cheie. În schimb, dispozitivul respectiv nu va mai putea descifra mesajele "
+"dumneavoastră."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Veți putea schimba mesaje criptate cu dispozitivul %s care utilizează "
+"această cheie."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Gestionare"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Acest contact are dispozitive noi"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Este necesara luarea unei decizii în privința OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Ați adăugat un nou dispozitiv pentru contul %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO activat implicit"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Activează criptarea OMEMO pentru conversațiile noi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Criptează pentru dispozitive noi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Criptează automat pentru dispozitivele noi ale acestui contact."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Chei noi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Noile chei de criptare de pe celelalte dispozitive ale dumneavoastră vor fi "
+"acceptate automat."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Acest dispozitiv"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Alt dispozitiv"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Dispozitiv"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Acceptată"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Respinsă"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verificată"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Dispozitiv nou"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Fiecare dispozitiv are propria cheie OMEMO. Mesajele pot fi decriptate de un "
+"dispozitiv numai dacă sunt criptate pentru cheia sa. Mesajele sunt criptate "
+"numai pentru dispozitivele acceptate."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Administrare chei OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d dispozitiv OMEMO"
+#~ msgstr[1] "%d dispozitive OMEMO"
+#~ msgstr[2] "%d de dispozitive OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Acceptă automat chei noi"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Noile chei de criptare de la această persoană de contact vor fi acceptate "
+#~ "automat."
+
+#~ msgid "Own key"
+#~ msgstr "Cheie proprie"
+
+#~ msgid "Associated keys"
+#~ msgstr "Chei asociate"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Chei inactive"
+
+#~ msgid "Unused"
+#~ msgstr "Neutilizatä"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Amprentă proprie"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Se va genera la prima conectare"
+
+#~ msgid "Your contact"
+#~ msgstr "Persoana de contact"
+
+#~ msgid "Not matching"
+#~ msgstr "Nu se potrivesc"
+
+#~ msgid "Matching"
+#~ msgstr "Se potrivesc"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Odată confirmată, orice viitoare mesaje trimise de %s folosind această "
+#~ "cheie vor fi evidenţiate în consecință în fereastra de discuție."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Nu mai accepta această cheie în timpul comunicärii cu acest contact "
+#~ "asociat."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Se va accepta această cheie în timpul comunicării cu acest contact asociat"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Aceasta înseamnă că nu poate fi folosită de %s ca să primească mesaje, "
+#~ "iar orice mesaj trimis cu ea v-a fi ignorat."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Odată confirmată, orice viitoare mesaje trimise de %s folosind această "
+#~ "cheie vor fi ignorate și nici un mesaj trimis de dumneavoastră nu se va "
+#~ "putea citii folosid aceastä cheie."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Odată confirmată, aceastä cheie va fi utilizatä de %s pentru a primi și "
+#~ "trimite mesaje."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Când acest contact adäugă chei de criptare noi în contul lor, acestea vor "
+#~ "fi acceptate în mod automat."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Când adäugați chei de criptare noi pentru acest cont, acestea vor fi "
+#~ "acceptate în mod automat."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Acceptă această cheie în timpul comunicării cu acest contact asociat."
+
+#~ msgid "Reject Key"
+#~ msgstr "Respingere cheie"
+
+#~ msgid "Accept Key"
+#~ msgstr "Acceptare cheie"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Dispozitiv necunoscut (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Alte dispozitive"
+
+#~ msgid "- None -"
+#~ msgstr "- Nici unul -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Se interoghează GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Anunță cheie"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Eroare în GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Nici o cheie disponibilă. Generați una!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Dezactivat"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Cheia nu este în șirul de chei"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Amprentă"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Cheie publică dezactivată"
+
+#~ msgid "Select key"
+#~ msgstr "Selectați cheia"
+
+#~ msgid "Loading…"
+#~ msgstr "Se încarcă…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1101,7 +1516,7 @@ msgstr "Autentificare"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Nu s-a putut stabili o conexiune securizată"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Înapoi"
diff --git a/main/po/ru.po b/main/po/ru.po
index 3c9be41e..e18b2957 100644
--- a/main/po/ru.po
+++ b/main/po/ru.po
@@ -19,6 +19,401 @@ msgstr ""
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.17-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s использовал(а) ненадёжное устройство. Вы не будете видеть сообщения от "
+"устройств, которым не доверяете."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Управление устройствами"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s не доверяет этому устройству. Это означает, что у вас могут отсутствовать "
+"сообщения."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Управление ключом"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Сравните отпечаток, символ за символом, с тем, который показан на устройстве "
+"вашего контакта."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Отпечатки отличаются"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Отпечатки схожи"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Подтвердить"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Подтвердить ключ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Будущие сообщения, отправленные %s с устройства, использующего этот ключ, "
+"будут соответствующим образом выделены в окне чата."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Отпечатки не совпадают"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Пожалуйста, проверьте совпадение отпечатков. Если они не совпадают, аккаунт "
+"\"%s\" может быть скомпрометирован, и вам стоит отклонить этот ключ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Подтвердить отпечаток"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "Сверить этот отпечаток с ключом, отображаемым у контакта."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Отклонить ключ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Заблокировать зашифрованную связь с устройством контакта, использующего этот "
+"ключ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Принять ключ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Разрешает зашифрованную связь с устройством контакта, использующего этот "
+"ключ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Ключ был успешно %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "принят"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Это означает, что %s теперь может отправлять и принимать зашифрованные "
+"сообщения."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "проверен"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Также была проведена проверка совпадения ключа."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "отклонён"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Это означает что он не сможетт использоваться %s для расшифровки ваших "
+"сообщений, и вы также не увидите сообщений зашифрованных им."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Вы не увидите зашифрованных сообщений от устройства %s, которое использует "
+"этот ключ. И наоборот, это устройство больше не сможет расшифровывать ваши "
+"сообщения."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Вы сможете обмениваться зашифрованными сообщениями с устройством %s, которое "
+"использует этот ключ."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Настроить"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Этот контакт воспользовался новым устройством"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Требуется решение OMEMO о доверии"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Вы добавляли аккаунт %s на новое устройство?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO по умолчанию"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Включить OMEMO-шифрование для новых бесед"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Шифрование для новых устройств"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Автоматическое шифрование для новых устройств этого контакта."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Новые ключи"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Новые ключи шифрования от других ваших устройств будут приняты автоматически."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Это устройство"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Другое устройство"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Устройство"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Принят"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Отклонён"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Подтверждён"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Новое устройство"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Каждое устройство имеет свой собственный ключ OMEMO. Сообщения могут быть "
+"расшифрованы устройством только в том случае, если они зашифрованы его "
+"ключом. Сообщения зашифрованы только для одобренных устройств."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Управление ключами OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d устройство OMEMO"
+#~ msgstr[1] "%d устройства OMEMO"
+#~ msgstr[2] "%d устройств OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Автоматически принимать новые ключи"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Новые ключи шифрования от этого контакта будут приняты автоматически."
+
+#~ msgid "Own key"
+#~ msgstr "Собственный ключ"
+
+#~ msgid "Associated keys"
+#~ msgstr "Связанные ключи"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Неактивные ключи"
+
+#~ msgid "Unused"
+#~ msgstr "Не используется"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Отпечаток этого устройства"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Будет сгенерирован при первом подключении"
+
+#~ msgid "Your contact"
+#~ msgstr "Ваш контакт"
+
+#~ msgid "Not matching"
+#~ msgstr "Не совпадает"
+
+#~ msgid "Matching"
+#~ msgstr "Совпадает"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "После подтверждения все последующие сообщения, отправленные с %s при "
+#~ "помощи этого ключа, будут соответственно подсвечены в окне чата."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr "Не принимать ключ этого контакта."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "Принять ключ этого контакта"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Это значит, что %s не может отправлять сообщения — все они будут "
+#~ "игнорироваться."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "После подтверждения все будущие сообщения, отправленные %s с "
+#~ "использованием этого ключа, будут игнорироваться и ни одно из ваших "
+#~ "сообщений не сможет быть прочитано с использованием этого ключа."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "После подтверждения этот ключ будет использоваться %s для получения и "
+#~ "отправки сообщений."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Когда этот контакт добавляет новые ключи шифрования в свою учетную "
+#~ "запись, автоматически принимайте их."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Когда вы добавляете новые ключи шифрования в свою учетную запись, "
+#~ "автоматически принимайте их."
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "Неизвестное устройство (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "Другие устройства"
+
+#~ msgid "- None -"
+#~ msgstr "- Нет -"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Запрос GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Объявленный ключ"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Ошибка в GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Нет доступных ключей. Стоило бы сгенерировать один!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Выключено"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Отсутствует ключ в связке"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Отпечаток"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Публикация ключа отключена"
+
+#~ msgid "Select key"
+#~ msgstr "Выбрать ключ"
+
+#~ msgid "Loading…"
+#~ msgstr "Загрузка…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1099,7 +1494,7 @@ msgstr "Войти"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Не удалось установить защищённое соединение"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Назад"
diff --git a/main/po/si.po b/main/po/si.po
index 52810233..595c767b 100644
--- a/main/po/si.po
+++ b/main/po/si.po
@@ -18,6 +18,9 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.1-dev\n"
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1095,6 +1098,7 @@ msgstr ""
msgid "Could not establish a secure connection"
msgstr ""
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "පෙර"
diff --git a/main/po/sq.po b/main/po/sq.po
index 7574a426..d4094b4a 100644
--- a/main/po/sq.po
+++ b/main/po/sq.po
@@ -17,6 +17,335 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s ka përdorur një pajisje jo të besuar. S’do të shihni mesazhe prej "
+"pajisjesh që nuk i besoni."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Administroni pajisje"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s nuk e beson këtë pajisje. Kjo do të thotë, mund të jeni duke humbur "
+"mesazhe."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Administroni Kyç"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Krahasoni shenjën e gishtave, shenjë pas shenje, me atë të shfaqur në "
+"pajisjen e kontaktit tuaj."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Shenjat e gishtave janë të ndryshme"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Shenjat e gishtave përputhen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Ripohojeni"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verifikoni kyç"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Mesazhe të ardhshme dërguar nga %s prej pajisjes që përdor këtë kyç do të "
+"theksohen te dritarja e fjalosjes."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Shenjat e gishtave s’përputhen"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Ju lutemi, verifikoni se po krahasoni shenjat e sakta të gishtave. Nëse "
+"shenjat e gishtave s’përputhen, llogaria e %s mund të komprometohet dhe "
+"duhet të shihni mundësinë e hedhjes poshtë të këtij kyçi."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verifikoni shenja gishtash kyçi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Krahasoni shenjën e gishtit të këtij kyçi me shenjën e gishtit të shfaqur në "
+"pajisjen e kontaktit."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Hidhe tej kyçin"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blloko komunikim të fshehtëzuar me pajisjen e kontaktit që përdor këtë kyç."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Pranoje kyçin"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Lejo komunikim të fshehtëzuar me pajisjen e kontaktit që përdor këtë kyç."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Ky kyç aktualisht është %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "i pranuar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Kjo do të thotë se mund të përdoret nga %s për të marrë dhe dërguar mesazhe "
+"të fshehtëzuara."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "i verifikuar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Për më tepër, është verifikuar për t’u përputhur me kyçin në pajisjen e "
+"kontaktit."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "i hedhur poshtë"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Kjo do të thotë se s’mund të përdoret nga %s për të deshifruar mesazhet "
+"tuaja dhe s’do të shihni dot mesazhe të fshehtëzuara me të."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"S’do të shihni dot mesazhe të fshehtëzuar prej pajisjes së %s që përdor këtë "
+"kyç. Më anë tjetër, ajo pajisje s’do të jetë në gjendje të deshifrojë më "
+"mesazhet tuaja."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Do të jeni në gjendje të shkëmbeni mesazhe të fshehtëzuar me pajisjen e %s "
+"që përdor këtë kyç."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Administroni"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Ky kontakt ka pajisje të reja"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Lypset vendim besimi OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Shtuat një pajisje të re për llogarinë %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO, si parazgjedhje"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Aktivizo fshehtëzim OMEMO për biseda të reja"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Fshehtëzo në pajisje të reja"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Fshehtëzo automatikisht në pajisje të reja nga ky kontakt."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Kyçe të rinj"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Kyçe të rinj fshehtëzimi prej pajisjesh tuaja të tjera do të pranohen "
+"automatikisht."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Këtë pajisje"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Tjetër pajisje"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Pajisje"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Të pranuar"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Të hedhur tej"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Të verifikuar"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Pajisje e re"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Çdo pajisje ka kyçin e vet OMEMO. Mesazhet mund të shfshehtëzohen vetëm nga "
+"një pajisje, nëse janë fshehtëzuar me kyçin e saj."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Administrim Kyçesh OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d pajisje OMEMO"
+#~ msgstr[1] "%d pajisje OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Prano automatikisht kyçe të rinj"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Kyçe të rinj fshehtëzimi nga ky kontakt do të pranohen automatikisht."
+
+#~ msgid "Own key"
+#~ msgstr "Kyç i vet"
+
+#~ msgid "Associated keys"
+#~ msgstr "Kyçe të përshoqëruar"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Kyçe jo aktivë"
+
+#~ msgid "Unused"
+#~ msgstr "Të papërdorur"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Shenjë e vet gishtash"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Do të prodhohet gjatë lidhjes së parë"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Po pyetet GnuPG-ja"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Njoftojeni kyçin"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Gabim në GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "S’ka kyçe gati. Prodhoni një të tillë!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "I çaktivizuar"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Kyç jo në varg kyçesh"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Shenja gishtash"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Publikim kyçesh i çaktivizuar"
+
+#~ msgid "Select key"
+#~ msgstr "Përzgjidhni kyç"
+
+#~ msgid "Loading…"
+#~ msgstr "Po ngarkohet…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1422,7 @@ msgstr "Hyrje"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "S’u vendos dot një lidhje të sigurt"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Mbrapsht"
diff --git a/main/po/sv.po b/main/po/sv.po
index f43ea3e2..af5137dd 100644
--- a/main/po/sv.po
+++ b/main/po/sv.po
@@ -17,6 +17,388 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.7.2-rc\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s har använt en ej betrodd enhet. Du kommer inte se meddelanden från "
+"enheter du inte litar på."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Hantera enheter"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "%s litar inte på den här enheten. Du kanske inte ser alla meddelanden."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Hantera nyckel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Jämför fingeravtrycket, tecken för tecken, med det som visas i din kontakts "
+"enhet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fingeravtrycken matcher ej"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fingeravtrycken matchar"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Bekräfta"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Verifiera nyckel"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Framtida meddelanden skickade av %s från enheten som använder denna nyckel "
+"kommer tydligt att markeras i chattfönstret."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fingeravtrycken överensstämmer inte"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Kontrollera att du jämför rätt fingeravtryck. Om fingeravtrycken inte "
+"stämmer så kan %s konto vara underminerat och du bör överväga att avvisa "
+"denna nyckel."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Verifiera nyckelns fingeravtryck"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Jämför nyckelns fingeravtryck med det fingeravtryck som visas i kontaktens "
+"enhet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Avvisa nyckeln"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Blockera krypterad kommunikation med kontaktens enhet som använder den här "
+"nyckeln."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Acceptera nyckeln"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Tillåt krypterad kommunikation med kontaktens enhet som använder den här "
+"nyckeln."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Denna nyckel är för närvarande %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "accepterad"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Det betyder att den kan användas av %s för att skicka och ta emot krypterade "
+"meddelanden."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "verifierad"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Dessutom har den verifierats så att den överensstämmer med nyckeln på "
+"kontaktens enhet."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "avvisad"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Det innebär att den inte kan användas av %s för att dechiffrera dina "
+"meddelanden och du ser inte meddelanden som krypterats med den."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Du ser inte krypterade meddelanden från enheten %s som använder den här "
+"nyckeln. Omvänt kan den enheten inte dechiffrera dina meddelanden längre."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Du kommer att kunna utbyta krypterade meddelanden med enheten %s som "
+"använder den här nyckeln."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Hantera"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Denna kontakt har nya enheter"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO-tillitsbeslut krävs"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Har du lagt till en ny enhet för kontot %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO som standard"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Aktivera OMEMO kryptering för nya konversationer"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Kryptera nya enheter"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Kryptera automatiskt för nya enheter från den här kontakten."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Ny nyckel"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "Nya krypteringsnycklar från dina andra enheter accepteras automatiskt."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Accepterad"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Avvisad"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Verifierad"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Ny enhet"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO-nyckelhantering"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO-enhet"
+#~ msgstr[1] "%d OMEMO-enheter"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Acceptera automatiskt nya nycklar"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Nya krypteringsnycklar från den här kontakten accepteras automatiskt."
+
+#~ msgid "Own key"
+#~ msgstr "Egen nyckel"
+
+#~ msgid "Associated keys"
+#~ msgstr "Kopplade nycklar"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Inaktiva nycklar"
+
+#~ msgid "Unused"
+#~ msgstr "Oanvänd"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Eget fingeravtryck"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Genereras vid första anslutningstillfället"
+
+#~ msgid "Your contact"
+#~ msgstr "Din kontakt"
+
+#~ msgid "Not matching"
+#~ msgstr "Stämmer ej"
+
+#~ msgid "Matching"
+#~ msgstr "Stämmer"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Om du går vidare så kommer framtida meddelanden från %s med denna nyckel "
+#~ "att markeras i enlighet med nyckelns nya status."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "Sluta acceptera denna nyckel vid kommunikation med den tillhörande "
+#~ "kontakten."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr ""
+#~ "Börja acceptera nyckeln för kommunikation med den tillhörande kontakten"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Det betyder att den inte kan användas av %s för att ta emot meddelanden, "
+#~ "och att alla skickade meddelanden kommer att ignoreras."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Om du går vidare så kommer framtida meddelanden från %s som använder "
+#~ "denna nyckel att ignoreras, och meddelanden från dig blir oläsbara med "
+#~ "denna nyckel."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Om du går vidare så kommer nyckeln kunna användas av %s för att skicka "
+#~ "och ta emot meddelanden."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr "Acceptera automatiskt nya nycklar som läggs till av denna kontakt."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr "Acceptera automatiskt nya nycklar som du läggs till ditt konto."
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Frågar GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Fel i GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Inga nycklar tillgängliga. Generera en!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Inaktiverad"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Nyckeln finns inte i nyckelknippan"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Nyckelpublicering inaktiverad"
+
+#~ msgid "Select key"
+#~ msgstr "Välj nyckel"
+
+#~ msgid "Loading…"
+#~ msgstr "Laddar…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1094,7 +1476,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Kunde inte etablera en säker anslutning"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Tillbaka"
diff --git a/main/po/ta.po b/main/po/ta.po
index c51b5b40..07d9b57d 100644
--- a/main/po/ta.po
+++ b/main/po/ta.po
@@ -17,6 +17,312 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16.1-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s நம்பத்தகாத சாதனத்தைப் பயன்படுத்துகின்றன. நீங்கள் நம்பாத சாதனங்களிலிருந்து செய்திகளை "
+"நீங்கள் காண மாட்டீர்கள்."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "சாதனங்களை நிர்வகிக்கவும்"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "இந்த சாதனத்தை %s நம்பவில்லை. அதாவது, நீங்கள் செய்திகளைக் காணவில்லை."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "விசையை நிர்வகிக்கவும்"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"உங்கள் தொடர்பின் சாதனத்தில் காட்டப்பட்டுள்ள கைரேகை, எழுத்துக்குறி எழுத்துக்குறியை ஒப்பிடுக."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "கைரேகைகள் வேறுபடுகின்றன"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "கைரேகைகள் பொருந்துகின்றன"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "உறுதிப்படுத்தவும்"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "விசையை சரிபார்க்கவும்"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"இந்த விசையைப் பயன்படுத்தும் சாதனத்திலிருந்து %s அனுப்பிய எதிர்கால செய்திகள் அரட்டை "
+"சாளரத்தில் அதற்கேற்ப முன்னிலைப்படுத்தப்படும்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "கைரேகைகள் பொருந்தவில்லை"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"நீங்கள் சரியான கைரேகையை ஒப்பிடுகிறீர்கள் என்பதை சரிபார்க்கவும். கைரேகைகள் பொருந்தவில்லை "
+"என்றால், %s இன் கணக்கு வேறுபாடின்மை செய்யப்படலாம், மேலும் இந்த விசையை நிராகரிப்பதை நீங்கள் "
+"கருத்தில் கொள்ள வேண்டும்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "முக்கிய கைரேகையை சரிபார்க்கவும்"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "இந்த விசையின் கைரேகையை தொடர்பின் சாதனத்தில் காட்டப்படும் கைரேகையுடன் ஒப்பிடுக."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "விசையை நிராகரிக்கவும்"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"இந்த விசையைப் பயன்படுத்தும் தொடர்புகளின் சாதனத்துடன் மறைகுறியாக்கப்பட்ட தகவல்தொடர்புகளைத் "
+"தடுக்கவும்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "சாவியை ஏற்றுக்கொள்"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"இந்த விசையைப் பயன்படுத்தும் தொடர்புகளின் சாதனத்துடன் மறைகுறியாக்கப்பட்ட தகவல்தொடர்புகளை "
+"அனுமதிக்கவும்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "இந்த விசை தற்போது %s ஆகும்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "ஏற்றுக்கொள்ளப்பட்டது"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"இதன் பொருள் மறைகுறியாக்கப்பட்ட செய்திகளைப் பெறுவதற்கும் அனுப்புவதற்கும் %s ஆல் "
+"பயன்படுத்தப்படலாம்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "சரிபார்க்கப்பட்டது"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "கூடுதலாக, தொடர்பின் சாதனத்தில் விசையுடன் பொருந்த இது சரிபார்க்கப்பட்டது."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "நிராகரிக்கப்பட்டது"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"இதன் பொருள் உங்கள் செய்திகளைப் புரிந்துகொள்ள %s ஆல் பயன்படுத்த முடியாது, மேலும் அதனுடன் "
+"குறியாக்கம் செய்யப்பட்ட செய்திகளை நீங்கள் காண மாட்டீர்கள்."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"இந்த விசையைப் பயன்படுத்தும் %s சாதனத்திலிருந்து மறைகுறியாக்கப்பட்ட செய்திகளை நீங்கள் காண "
+"மாட்டீர்கள். மாறாக, அந்த சாதனம் உங்கள் செய்திகளை இனி புரிந்துகொள்ள முடியாது."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"இந்த விசையைப் பயன்படுத்தும் %s சாதனத்துடன் மறைகுறியாக்கப்பட்ட செய்திகளை நீங்கள் "
+"பரிமாறிக்கொள்ள முடியும்."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "நிர்வகிக்கவும்"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "இந்த தொடர்புக்கு புதிய சாதனங்கள் உள்ளன"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "ஓம்மோ நம்பிக்கை முடிவு தேவை"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "கணக்கு %s க்கு புதிய சாதனத்தைச் சேர்த்தீர்களா?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "இயல்பாக ஓம்மோ"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "புதிய உரையாடல்களுக்கான ஓமமோ குறியாக்கத்தை இயக்கவும்"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "புதிய சாதனங்களுக்கு குறியாக்கம்"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "இந்த தொடர்பிலிருந்து புதிய சாதனங்களுக்கு தானாக குறியாக்கம் செய்யுங்கள்."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "புதிய விசைகள்"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "உங்கள் பிற சாதனங்களிலிருந்து புதிய குறியாக்க விசைகள் தானாக ஏற்றுக்கொள்ளப்படும்."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "இந்தக் கருவி"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "பிற கருவி"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "கருவி"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "ஏற்றுக்கொள்ளப்பட்டது"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "நிராகரிக்கப்பட்டது"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "சரிபார்க்கப்பட்டது"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "புதிய சாதனம்"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"ஒவ்வொரு சாதனத்திற்கும் அதன் சொந்த ஓமமோ விசை உள்ளது. செய்திகளை அதன் விசைக்குக் குறியாக்கம் "
+"செய்தால் மட்டுமே அவை மறைகுறியாக்கப்படும். செய்திகள் ஏற்றுக்கொள்ளப்பட்ட சாதனங்களுக்கு மட்டுமே "
+"குறியாக்கம் செய்யப்படுகின்றன."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "ஓமமோ முக்கிய மேலாண்மை"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO சாதனம்"
+#~ msgstr[1] "%d OMEMO சாதனங்கள்"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "புதிய விசைகளை தானாக ஏற்றுக்கொள்ளுங்கள்"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "இந்த தொடர்பிலிருந்து புதிய குறியாக்க விசைகள் தானாக ஏற்றுக்கொள்ளப்படும்."
+
+#~ msgid "Own key"
+#~ msgstr "சொந்த விசை"
+
+#~ msgid "Associated keys"
+#~ msgstr "தொடர்புடைய விசைகள்"
+
+#~ msgid "Inactive keys"
+#~ msgstr "செயலற்ற விசைகள்"
+
+#~ msgid "Unused"
+#~ msgstr "பயன்படுத்தப்படாதது"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Gnupg ஐ வினவுகிறது"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "அறிவிப்பு திறவுகோல்"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "குனுபிசீ இல் பிழை"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "திறவுகோல்கள் எதுவும் கிடைக்கவில்லை. ஒன்றை உருவாக்கு!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "முடக்கப்பட்டது"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "விசை கீச்சினில் இல்லை"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "கைரேகை"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1399,7 @@ msgstr "புகுபதிவு"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "பாதுகாப்பான இணைப்பை நிறுவ முடியவில்லை"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "பின்"
diff --git a/main/po/th.po b/main/po/th.po
index 3fe8a64b..afb0d917 100644
--- a/main/po/th.po
+++ b/main/po/th.po
@@ -17,6 +17,270 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.14-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr "%s ได้ใช้อุปกรณ์ที่ไม่น่าเชื่อถือ คุณจะไม่เห็นข้อความจากอุปกรณ์ที่คุณไม่น่าเชื่อถือ"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "จัดการอุปกรณ์"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "%s ไม่เชื่อถืออุปกรณ์นี้ นั่นหมายความว่าคุณอาจพลาดข้อความ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "จัดการกุญแจ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr "เปรียบเทียบลายนิ้วมือแต่ละอักขระกับลายนิ้วมือที่แสดงบนอุปกรณ์ของผู้ติดต่อของคุณ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "ลายนิ้วมือแตกต่างกัน"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "ลายนิ้วมือตรงกัน"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "ยืนยัน"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "ตรวจสอบคีย์"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr "ข้อความในอนาคตที่ส่งโดย %s จากอุปกรณ์ที่ใช้คีย์นี้จะถูกไฮไลท์ในหน้าต่างแชทตามลำดับ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "ลายนิ้วมือไม่ตรงกัน"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"โปรดตรวจสอบให้แน่ใจว่าคุณกำลังเปรียบเทียบลายนิ้วมือที่ถูกต้อง หากลายนิ้วมือไม่ตรงกัน บัญชีของ %s "
+"อาจถูกบุกรุก และคุณควรพิจารณาปฏิเสธคีย์นี้"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "ตรวจสอบลายนิ้วมือคีย์"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "เปรียบเทียบลายนิ้วมือของคีย์นี้กับลายนิ้วมือที่แสดงบนอุปกรณ์ของผู้ติดต่อ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "ปฏิเสธคีย์"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "บล็อกการสื่อสารที่เข้ารหัสกับอุปกรณ์ของผู้ติดต่อที่ใช้คีย์นี้"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "ยอมรับคีย์"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "อนุญาตให้มีการสื่อสารแบบเข้ารหัสกับอุปกรณ์ของผู้ติดต่อที่ใช้คีย์นี้"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "คีย์นี้ปัจจุบันคือ %s"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "ได้รับการยอมรับ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "ซึ่งหมายความว่าสามารถใช้โดย %s เพื่อรับและส่งข้อความเข้ารหัสได้"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "ตรวจสอบแล้ว"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "นอกจากนี้ ยังได้รับการตรวจสอบว่าตรงกับคีย์บนอุปกรณ์ของผู้ติดต่อแล้ว"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "ถูกปฏิเสธ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"ซึ่งหมายความว่าไม่สามารถใช้ %s เพื่อถอดรหัสข้อความของคุณได้ "
+"และคุณจะไม่เห็นข้อความที่เข้ารหัสด้วยมัน"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"คุณจะไม่เห็นข้อความเข้ารหัสจากอุปกรณ์ของ %s ที่ใช้คีย์นี้ ในทางกลับกัน "
+"อุปกรณ์นั้นจะไม่สามารถถอดรหัสข้อความของคุณได้อีกต่อไป"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr "คุณจะสามารถแลกเปลี่ยนข้อความเข้ารหัสกับอุปกรณ์ %s ที่ใช้คีย์นี้ได้"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "จัดการ"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "ผู้ติดต่อรายนี้มีอุปกรณ์ใหม่"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "จำเป็นต้องมีการตัดสินใจเกี่ยวกับความไว้วางใจของ OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "คุณได้เพิ่มอุปกรณ์ใหม่สำหรับบัญชี %s แล้วหรือยัง?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO ตามค่าเริ่มต้น"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "เปิดใช้งานการเข้ารหัส OMEMO สำหรับการสนทนาใหม่"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "เข้ารหัสไปยังอุปกรณ์ใหม่"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "เข้ารหัสไปยังอุปกรณ์ใหม่จากผู้ติดต่อนี้โดยอัตโนมัติ"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "กุญแจใหม่"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "คีย์การเข้ารหัสใหม่จากอุปกรณ์อื่นของคุณจะได้รับการยอมรับโดยอัตโนมัติ"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "อุปกรณ์นี้"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "อุปกรณ์อื่น ๆ"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "อุปกรณ์"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "ได้รับการยอมรับ"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "ถูกปฏิเสธ"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "ได้รับการยืนยันแล้ว"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "อุปกรณ์ใหม่"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"แต่ละอุปกรณ์จะมีคีย์ OMEMO ของตัวเอง "
+"ข้อความสามารถถอดรหัสได้โดยอุปกรณ์เฉพาะเมื่อเข้ารหัสด้วยคีย์ของอุปกรณ์นั้นๆ เท่านั้น "
+"ข้อความจะถูกเข้ารหัสไปยังอุปกรณ์ที่ได้รับการยอมรับเท่านั้น"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "การสอบถาม GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "กุญแจ"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG ผิดพลาด"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "ไม่มีคีย์ที่ใช้งานได้ สร้างอันใหม่สิ!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "ผิดพลาด"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "กุญแจไม่อยู่ในพวงกุญแจ"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "ลายนิ้วมือ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1092,7 +1356,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr ""
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "กลับ"
diff --git a/main/po/tr.po b/main/po/tr.po
index e60361d1..82aea00a 100644
--- a/main/po/tr.po
+++ b/main/po/tr.po
@@ -17,6 +17,390 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.15-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s güvenilmeyen bir cihaz kullanıyor. Güvenmediğiniz cihazlardan gelen "
+"mesajları görmezsiniz."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Cihazları yönet"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s bu cihaza güvenmiyor. Bu, eksik mesajlarınız olabileceği anlamına gelir."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Anahtarı Yönet"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Parmak izinin her bir karakterini, kişinizin cihazında gösterilen karakterle "
+"karşılaştırın."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Parmak izleri farklı"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Parmak izleri eşleşiyor"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Onayla"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Anahtarı doğrula"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Bu anahtarı kullanan cihazdan %s tarafından gönderilen gelecekteki mesajlar, "
+"sohbet penceresinde vurgulanacaktır."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Parmak izleri uyuşmuyor"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Lütfen doğru parmak izini karşılaştırdığınızdan emin olun. Parmak izleri "
+"eşleşmezse, %s hesabının güvenliği ihlal edilmiş olabilir ve bu anahtarı "
+"reddetmenizi öneririz."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Anahtar parmak izini doğrulayın"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Bu anahtarın parmak izini, kişinin cihazında görüntülenen parmak izi ile "
+"karşılaştırın."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Anahtarı reddet"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "Bu anahtarı kullanan kişinin cihazıyla şifreli iletişimi engelle."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Kabul"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "Bu anahtarı kullanan kişinin cihazıyla şifreli iletişime izin ver."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Bu anahtar şu anda %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "kabul ediliyor"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Bu, şifreli mesajlar almak ve göndermek için %s tarafından kullanılabileceği "
+"anlamına gelir."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "onaylı"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Ayrıca, kişinin cihazındaki anahtarla eşleştiği doğrulandı."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "reddedildi"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Bu, mesajlarınızın şifresini çözmek için %s tarafından kullanılamayacağı ve "
+"onunla şifrelenmiş mesajları göremeyeceğiniz anlamına gelir."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Bu anahtarı kullanan %s cihazından gelen şifreli mesajları görmeyeceksiniz. "
+"Diğer taraftan, o cihaz artık mesajlarınızın şifresini çözemeyecek."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Bu anahtarı kullanan %s cihazıyla şifreli mesaj alışverişi yapabileceksiniz."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Yönet"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Bu kişinin yeni cihazları var"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "OMEMO güven kararı gerekli"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "%s hesabı için yeni bir cihaz eklediniz mi?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "Öntanımlı olarak OMEMO"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Yeni sohbetler için OMEMO şifrelemesini etkinleştir"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Yeni aygıtlara şifrele"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Bu kişiden yeni aygıtlara otomatik olarak şifrele."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Yeni anahtarlar"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Diğer cihazlarınızdan gelen yeni şifreleme anahtarları otomatik olarak kabul "
+"edilecek."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Bu aygıt"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Diğer aygıt"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Aygıt"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Kabul edildi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Reddedildi"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Onaylandı"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Yeni aygıt"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Her aygıtın kendi OMEMO anahtarı vardır. Mesajlar, yalnızca kendi "
+"anahtarıyla şifrelendiyse bir aygıt tarafından şifresi çözülebilir. Mesajlar "
+"yalnızca kabul edilen aygıtlara şifrelenir."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO Anahtar Yönetimi"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d OMEMO aygıtı"
+#~ msgstr[1] "%d OMEMO aygıtı"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Yeni anahtarları otomatik olarak kabul et"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Bu kişiden gelen yeni şifreleme anahtarları otomatik olarak kabul "
+#~ "edilecek."
+
+#~ msgid "Own key"
+#~ msgstr "Kendi anahtarınız"
+
+#~ msgid "Associated keys"
+#~ msgstr "İlişkili anahtarlar"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Etkin olmayan anahtarlar"
+
+#~ msgid "Unused"
+#~ msgstr "Kullanılmamış"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Kendi parmak iziniz"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "İlk bağlantıda oluşturulacak"
+
+#~ msgid "Your contact"
+#~ msgstr "Kişiniz"
+
+#~ msgid "Not matching"
+#~ msgstr "Eşleşmiyor"
+
+#~ msgid "Matching"
+#~ msgstr "Eşleşti"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "Onaylandıktan sonra, bu anahtarı kullanarak %s tarafından gönderilen "
+#~ "gelecek iletiler sohbet penceresinde buna göre vurgulanır."
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr ""
+#~ "İlişkili kişiyle iletişim kurarken bu anahtarı kabul etmeyi durdurun."
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "İlişkili kişiyle iletişim için bu anahtarı kabul edin"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr ""
+#~ "Bu, %s tarafından ileti almak için kullanılamayacağı ve gönderdiği "
+#~ "iletilerin yok sayılacağı anlamına gelir."
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "Onaylandıktan sonra, bu anahtarı kullanarak %s tarafından gönderilen "
+#~ "gelecek iletiler yok sayılır ve iletilerinizden hiçbiri bu anahtar "
+#~ "kullanılarak okunmaz."
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr ""
+#~ "Onaylandıktan sonra bu anahtar %s tarafından mesaj almak ve göndermek "
+#~ "için kullanılabilir."
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr ""
+#~ "Bu kişi hesaplarına yeni şifreleme anahtarları eklediğinde, otomatik "
+#~ "olarak kabul edilir."
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr ""
+#~ "Hesabınıza yeni şifreleme anahtarları eklediğinizde, bunları otomatik "
+#~ "olarak kabul edin."
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "GnuPG sorgu"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Anahtarı yayınla"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG'de Hata"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Anahtar yok. Bir tane oluşturun!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Devre dışı"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Anahtar anahtarlıkta değil"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Parmak izi"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Anahtar yayınlama devre dışı"
+
+#~ msgid "Select key"
+#~ msgstr "Anahtar seçin"
+
+#~ msgid "Loading…"
+#~ msgstr "Yükleniyor…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1093,7 +1477,7 @@ msgstr "Oturum aç"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Güvenli bir bağlantı oluşturulamadı"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Geri"
diff --git a/main/po/uk.po b/main/po/uk.po
index d14a90dd..5138d9b9 100644
--- a/main/po/uk.po
+++ b/main/po/uk.po
@@ -18,6 +18,337 @@ msgstr ""
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.15.1\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s використовував(ла) ненадійний пристрій. Ви не будете бачити повідомлення "
+"від пристроїв, яким не довіряєте."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Керування пристроями"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s не довіряє цьому пристрою. Це означає, що ви можете не отримувати "
+"повідомлення."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Керування ключем"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"Порівняйте відбиток, літеру за літерою з тим, що відібражається на пристрої "
+"вашого контакту."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Відбитки відрізняються"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Відбитки збігаються"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Підтвердити"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Підтвердити ключ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Майбутні повідомлення надіслані %s з пристрія, який використовує цей ключ, "
+"будуть відповідно виделені у вікні чату."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Відбитки не збігаються"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Будьласка перевірте, що ви порівнюєте саме той відбиток. Якщо відбитки не "
+"збігаються, обліковий запис %s може бути скомпрометовано, і вам слід "
+"відхилити цей ключ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Підтвердити відбиток ключа"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"Порівняйте цей відбиток ключа з відбитком, який відображається у пристрої "
+"контакта."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Відхилити ключ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Заблокувати шифрований зв'язок з пристроєм контакта, який викорустовує цей "
+"ключ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Прийняти ключ"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr ""
+"Дозволити шифрований зв'язок з пристроєм контакта, який викорустовує цей "
+"ключ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Цей ключ зараз є %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "прийнято"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Це означає, що %s тепер може приймати та відсилати шифровані повідомлення."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "перевірено"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "Додатково була підтверджена відповідність ключа на пристрої контакту."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "відхилено"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Це означає, що він не може бути задіян %s щоб дешифрувати ваші повідомлення "
+"і ви не зможете побачити повідомлень зашифрованих ним."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Ви не побачете шифровані повідомлення з пристрія %s, що використовує цей "
+"ключ. І навпаки, цей пристрій більше не зможе розшифрувати ваші повідомлення."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Ви можете обмінюватися шифрованими повідомленнями з пристріем %s, що "
+"використовує цей ключ."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Налаштувати"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "У цього контакту з'явилися нові пристрої"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Потрібне рішення OMEMO про довіру"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Чи додавали ви новий пристрій до облікового запису %s?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "OMEMO за замовчуванням"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Увімкнути шифрування OMEMO для нових розмов"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Шифрувати до нових пристроїв"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Одразу шифрувати до нових пристроїв цього контакту."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Нові ключи"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Нові ключи шифрування з ваших інших пристроїв будуть прийматися автоматично."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Цей пристрій"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Інший пристрій"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Пристрій"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Прийнятий"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Відхилений"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Перевірений"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Новий пристрій"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Кожен пристрій має власний ключ OMEMO. Повідомлення можуть бути розшифровані "
+"пристроєм, лише якщо вони зашифровані його ключем. Повідомлення шифруються "
+"лише для підтримуваних пристроїв."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Управління ключами OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d пристрій OMEMO"
+#~ msgstr[1] "%d пристрої OMEMO"
+#~ msgstr[2] "%d пристроїв OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Автоматично прийняти нові ключи"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr ""
+#~ "Нові ключи шифрування від цього контакта будуть прийматися автоматично."
+
+#~ msgid "Own key"
+#~ msgstr "Власний ключ"
+
+#~ msgid "Associated keys"
+#~ msgstr "Асоційовані ключі"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Неактивні ключи"
+
+#~ msgid "Unused"
+#~ msgstr "Невикористаний"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Власний відбиток"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Буде згенеровано при першому з'єднанні"
+
+#~ msgid "Your contact"
+#~ msgstr "Ваш контакт"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Запит до GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "Оголосити ключ"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Помилка у GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Немає доступних ключей. Сгенеріть!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Відсутній ключ у зв’язці"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "Відбиток пальця"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Публікація ключа відключена"
+
+#~ msgid "Select key"
+#~ msgstr "Вибрати ключ"
+
+#~ msgid "Loading…"
+#~ msgstr "Завантаження…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1098,7 +1429,7 @@ msgstr "Логін"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Не вдалося встановити безпечне з'єднання"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Назад"
diff --git a/main/po/vi.po b/main/po/vi.po
index d2fa54f5..b9280d5a 100644
--- a/main/po/vi.po
+++ b/main/po/vi.po
@@ -17,6 +17,331 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.13-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr ""
+"%s đang sử dụng một thiết bị chưa được tin tưởng. Bạn sẽ không nhìn thấy tin "
+"nhắn từ các thiệt bị bạn không tin tưởng."
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "Quản lý thiết bị"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr ""
+"%s không tin tưởng thiết bị này. Điều đó có nghĩa là bạn có thể bị thiếu tin "
+"nhắn."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "Quản lý khóa"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr ""
+"So sánh chuỗi fingerprint từng ký tự một với chuỗi được hiển thị trên thiết "
+"bị của liên hệ của bạn."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "Fingerprints khác nhau"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "Fingerprints trùng khớp"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "Xác nhận"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "Xác thực khoá"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr ""
+"Tin nhắn được gửi trong tương lai bởi %s từ thiết bị sử dụng khoá này sẽ "
+"được làm nổi bật trong cửa sổ trò chuyện."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "Fingerprints không khớp"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"Vui lòng xác minh rằng bạn đang so sánh đúng chuỗi fingerprint. Nếu "
+"fingerprints không khớp, tài khoản của %s có thể đã bị xâm phạm và bạn nên "
+"cân nhắc từ chối khoá này."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "Xác thực khoá fingerprint"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr ""
+"So sáng chuỗi fingerprint của khoá này với chuỗi fingerprint được hiển thị "
+"trên thiết bị của người liên hệ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "Từ chối khoá"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "Chặn liên lạc được mã hóa với thiết bị của liên hệ sử dụng khóa này."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "Chấp nhận khóa"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "Cho phép giao tiếp mã hóa với thiết bị của liên hệ sử dụng khóa này."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "Khoá này hiện %s."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "đã chấp nhận"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr ""
+"Điều này có nghĩa là nó có thể được sử dụng bởi %s để nhận và gửi tin nhắn "
+"được mã hóa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "đã xác thực"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr ""
+"Ngoài ra, nó đã được xác thực trùng khớp với khóa trên thiết bị của người "
+"liên hệ."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "đã bị từ chối"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr ""
+"Điều này có nghĩa là %s không thể sử dụng nó để giải mã tin nhắn của bạn và "
+"bạn sẽ không thấy tin nhắn được mã hóa bằng nó."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"Bạn sẽ không thấy tin nhắn được mã hóa từ thiết bị của %s sử dụng khóa này. "
+"Ngược lại, thiết bị đó cũng sẽ không thể giải mã tin nhắn của bạn nữa."
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr ""
+"Bạn sẽ có thể trao đổi tin nhắn được mã hóa với thiết bị của %s sử dụng khóa "
+"này."
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "Quản lý"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "Liên hệ này có thiết bị mới"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "Yêu cầu quyết định ủy thác OMEMO"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "Bạn đã thêm một thiết bị mới cho tài khoản %s à?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "Mặc định mã hoá OMEMO"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "Kích hoạt mã hoá OMEMO cho những cuộc hội thoại mới"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "Mã hoá cho các thiết bị mới"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "Tự động mã hóa sang các thiết bị mới từ liên hệ này."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "Khoá mới"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr ""
+"Khóa mã hóa mới từ các thiết bị khác của bạn sẽ được chấp nhận tự động."
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "Thiết bị này"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "Thiết bị khác"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "Thiết bị"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "Đã chấp nhận"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "Đã từ chối"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "Đã xác thực"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "Thiết bị mới"
+
+#: main/data/encryption_preferences_entry.ui:8
+#, fuzzy
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"Mỗi thiết bị có một khoá mã hoá OMEMO riêng. Tin nhắn chỉ có thể được giải "
+"mã bởi một thiết bị nếu chúng được mã hóa bằng khóa của thiết bị đó. Tin "
+"nhắn chỉ được mã hóa bởi các thiết bị được chấp nhận."
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "Quản lý khóa OMEMO"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d thiết bị OMEMO"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "Tự động chấp nhận khóa mới"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "Các khóa mã hóa mới từ liên hệ này sẽ được chấp nhận tự động."
+
+#~ msgid "Own key"
+#~ msgstr "Khoá của bạn"
+
+#~ msgid "Associated keys"
+#~ msgstr "Các khóa đã liên kết"
+
+#~ msgid "Inactive keys"
+#~ msgstr "Các khoá không hoạt động"
+
+#~ msgid "Unused"
+#~ msgstr "Chưa được sử dụng"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "Fingerprint đang sở hữu"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "Sẽ được tạo trong lần kết nối đầu tiên"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "Đang truy vấn GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "Lỗi trong GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "Không có khoá khả dụng. Hãy tạo một khoá!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "Đã vô hiệu hoá"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "Khoá không trong chuỗi khoá"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "Công khai khoá đã bị vô hiệu hoá"
+
+#~ msgid "Select key"
+#~ msgstr "Chọn khoá"
+
+#~ msgid "Loading…"
+#~ msgstr "Đang tải…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1096,7 +1421,7 @@ msgstr "Đăng nhập"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "Không thể thiết lập kết nối an toàn"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "Quay lại"
diff --git a/main/po/zh_CN.po b/main/po/zh_CN.po
index c49932e7..dfa4da37 100644
--- a/main/po/zh_CN.po
+++ b/main/po/zh_CN.po
@@ -18,6 +18,370 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.16.1-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr "%s 正在使用未受信任的设备。您将无法查看来自您未信任的设备的消息。"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "管理设备"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "%s 未信任此设备,这意味着您可能会丢失消息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "管理密钥"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr "请将指纹逐个字符与对方设备上显示的指纹进行比对。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "指纹不匹配"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "指纹匹配"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "确认"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "验证密钥"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr "%s 今后从使用此密钥的设备发送的消息将在聊天窗口中相应突出显示。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "指纹不匹配"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"请验证您正在比对的指纹是否正确。如果指纹不匹配,%s 的账号可能已被盗用,您应考"
+"虑拒绝此密钥。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "验证密钥指纹"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "请将此密钥的指纹与对方设备上显示的指纹进行比对。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "拒绝密钥"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "阻止与使用此密钥的对方设备进行加密通信。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "接受密钥"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "允许与使用此密钥的对方设备进行加密通信。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "此密钥当前%s。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "已接受"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "这意味着 %s 可以使用此密钥来接收和发送加密消息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "已验证"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "此外,已验证其与对方设备上的密钥匹配。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "已拒绝"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr "这意味着 %s 无法使用它来解密您的消息,您将无法查看用它加密的消息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"您将无法查看来自 %s 的使用此密钥的设备的加密消息。反之,该设备将无法再解密您"
+"的消息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr "您将能够与 %s 的使用此密钥的设备交换加密消息。"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "管理"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "此联系人有新设备"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "需要 OMEMO 信任决定"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "您是否为账号 %s 添加了新设备?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr "默认使用 OMEMO"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr "为新对话启用 OMEMO 加密"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr "加密新设备"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr "自动加密此联系人的新设备。"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "新密钥"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "将自动接受来自您其他设备的新加密密钥。"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr "此设备"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr "其他设备"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr "设备"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "已接受"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "已拒绝"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "已验证"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr "新设备"
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+"每个设备都有自己的 OMEMO 密钥。设备只能解密对设备密钥加密的消息。消息仅对已接"
+"受的设备进行加密。"
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO 密钥管理"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d 个 OMEMO 设备"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "自动接受新密钥"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "将自动接受来自此联系人的新加密密钥。"
+
+#~ msgid "Own key"
+#~ msgstr "自己的密钥"
+
+#~ msgid "Associated keys"
+#~ msgstr "关联的密钥"
+
+#~ msgid "Inactive keys"
+#~ msgstr "非活动密钥"
+
+#~ msgid "Unused"
+#~ msgstr "不再使用"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "自己的指纹"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "将在第一次连接时生成"
+
+#~ msgid "Your contact"
+#~ msgstr "您的联系人"
+
+#~ msgid "Not matching"
+#~ msgstr "不匹配"
+
+#~ msgid "Matching"
+#~ msgstr "匹配"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "一旦确认,未来由%s使用此密钥发送的任何消息将在聊天窗口中相应突出显示。"
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr "在与其关联的联系人通信期间停止接受此密钥。"
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "在与其关联的联系人通信期间开始接受此密钥"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr "这意味着%s不能使用它来接收消息, 它发送的任何消息都将被忽略。"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "一旦确认,由%s使用此密钥发送的任何未来消息都将被忽略,并且使用此密钥将无法"
+#~ "读取任何消息。"
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr "一旦确认,此密钥将被%s用于接收和发送消息。"
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr "当此联系人向其帐户添加新的加密密钥时,自动接受它们。"
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr "当您向帐户添加新的加密密钥时,会自动接受它们。"
+
+#~ msgid "Unknown device (0x%.8x)"
+#~ msgstr "未知设备 (0x%.8x)"
+
+#~ msgid "Other devices"
+#~ msgstr "其他设备"
+
+#~ msgid "- None -"
+#~ msgstr "- 无 -"
+
+#~ msgid "Database error"
+#~ msgstr "数据库错误"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "正在查询 GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr "公布密钥"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG 错误"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "没有密钥可用。生成一个吧!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr "已禁用"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "密钥不在密钥链中"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr "指纹"
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "已禁用密钥发布功能"
+
+#~ msgid "Select key"
+#~ msgstr "选择密钥"
+
+#~ msgid "Loading…"
+#~ msgstr "载入中…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1090,7 +1454,7 @@ msgstr "登录"
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "无法建立安全连接"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "返回"
diff --git a/main/po/zh_TW.po b/main/po/zh_TW.po
index 9a62f09b..3bc18948 100644
--- a/main/po/zh_TW.po
+++ b/main/po/zh_TW.po
@@ -17,6 +17,356 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.14-dev\n"
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:168
+#, c-format
+msgid ""
+"%s has been using an untrusted device. You won't see messages from devices "
+"that you do not trust."
+msgstr "%s 使用了未信任的裝置。您不會看見來自未被您信任裝置的訊息。"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:169
+msgid "Manage devices"
+msgstr "管理裝置"
+
+#: main/src/plugins/omemo/ui/bad_messages_populator.vala:171
+#, c-format
+msgid ""
+"%s does not trust this device. That means, you might be missing messages."
+msgstr "%s 不信任這部裝置。這意味著您可能會遺漏訊息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:34
+msgid "Manage Key"
+msgstr "管理金鑰"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:35
+msgid ""
+"Compare the fingerprint, character by character, with the one shown on your "
+"contact's device."
+msgstr "將指紋與顯示在聯絡人裝置上的指紋逐個字元地進行比較。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:36
+msgid "Fingerprints differ"
+msgstr "指紋不同"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:37
+msgid "Fingerprints match"
+msgstr "指紋吻合"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:39
+msgid "Confirm"
+msgstr "確定"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:59
+msgid "Verify key"
+msgstr "核驗金鑰"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:60
+#, c-format
+msgid ""
+"Future messages sent by %s from the device that uses this key will be "
+"highlighted accordingly in the chat window."
+msgstr "未來由 %s 從使用了此金鑰的裝置所傳送的訊息都將會在對話視窗內加亮顯示。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:70
+msgid "Fingerprints do not match"
+msgstr "指紋不吻合"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:71
+#, c-format
+msgid ""
+"Please verify that you are comparing the correct fingerprint. If "
+"fingerprints do not match, %s's account may be compromised and you should "
+"consider rejecting this key."
+msgstr ""
+"請確定您正在比較正確的指紋。如果指紋不吻合,%s 的帳號可能不安全,同時您應該考"
+"虑拒絕此金鑰。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid "Verify key fingerprint"
+msgstr "核驗金鑰指紋"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:123
+msgid ""
+"Compare this key's fingerprint with the fingerprint displayed on the "
+"contact's device."
+msgstr "將此金鑰的指紋與顯示在聯絡人裝置上的指紋進行比較。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:151
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:288
+msgid "Reject key"
+msgstr "拒絕金鑰"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:125
+msgid ""
+"Block encrypted communication with the contact's device that uses this key."
+msgstr "封鎖與該聯絡人使用此金鑰的裝置之間的加密通訊。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:159
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:283
+msgid "Accept key"
+msgstr "接收金鑰"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:127
+msgid ""
+"Allow encrypted communication with the contact's device that uses this key."
+msgstr "允許與該聯絡人使用此金鑰的裝置之間的加密通訊。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid "This key is currently %s."
+msgstr "此金鑰目前%s。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+msgid "accepted"
+msgstr "已接收"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:131
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+#, c-format
+msgid "This means it can be used by %s to receive and send encrypted messages."
+msgstr "這表示 %s 可以使用它來傳送及收受加密訊息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid "verified"
+msgstr "已核驗"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:136
+msgid ""
+"Additionally it has been verified to match the key on the contact's device."
+msgstr "此外,已經核驗它與聯絡人裝置上的金鑰吻合。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+msgid "rejected"
+msgstr "已拒絕"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:140
+#, c-format
+msgid ""
+"This means it cannot be used by %s to decipher your messages, and you won't "
+"see messages encrypted with it."
+msgstr "這表示 %s 無法使用它來解密您的訊息,同時您不會看到使用它加密的訊息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:152
+#, c-format
+msgid ""
+"You won't see encrypted messages from the device of %s that uses this key. "
+"Conversely, that device won't be able to decipher your messages anymore."
+msgstr ""
+"您不會看到從 %s 使用此金鑰的裝置所傳送的加密訊息。同時,該裝置亦無法再解密您"
+"的訊息。"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:160
+#, c-format
+msgid ""
+"You will be able to exchange encrypted messages with the device of %s that "
+"uses this key."
+msgstr "您將能夠與 %s 所使用此金鑰的裝置互相傳送加密訊息。"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:73
+msgid "Manage"
+msgstr "管理"
+
+#: main/src/plugins/omemo/ui/device_notification_populator.vala:80
+msgid "This contact has new devices"
+msgstr "此連絡人有新的裝置"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:29
+msgid "OMEMO trust decision required"
+msgstr "需要 OMEMO 信任決策"
+
+#: main/src/plugins/omemo/ui/own_notifications.vala:31
+#, c-format
+msgid "Did you add a new device for account %s?"
+msgstr "您是否有爲帳號 %s 增加新裝置?"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:52
+msgid "OMEMO by default"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:53
+msgid "Enable OMEMO encryption for new conversations"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:54
+msgid "Encrypt to new devices"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:55
+msgid "Automatically encrypt to new devices from this contact."
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:56
+msgid "New keys"
+msgstr "新金鑰"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:100
+msgid ""
+"New encryption keys from your other devices will be accepted automatically."
+msgstr "來自您其它裝置的新加密金鑰將會被自動接收。"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:160
+msgid "This device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Other device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:220
+msgid "Device"
+msgstr ""
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:222
+msgid "Accepted"
+msgstr "已接收"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:225
+msgid "Rejected"
+msgstr "已拒絕"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:228
+msgid "Verified"
+msgstr "已核驗"
+
+#: main/src/plugins/omemo/ui/encryption_preferences_entry.vala:277
+msgid "New device"
+msgstr ""
+
+#: main/data/encryption_preferences_entry.ui:8
+msgid ""
+"Each device has its own OMEMO key. Messages can only be decrypted by a "
+"device if they are encrypted to its key. Messages are only encrypted to "
+"accepted devices."
+msgstr ""
+
+#~ msgid "OMEMO Key Management"
+#~ msgstr "OMEMO 金鑰管理"
+
+#, c-format
+#~ msgid "%d OMEMO device"
+#~ msgid_plural "%d OMEMO devices"
+#~ msgstr[0] "%d 個 OMEMO 裝置"
+
+#~ msgid "Automatically accept new keys"
+#~ msgstr "自動接收新金鑰"
+
+#~ msgid ""
+#~ "New encryption keys from this contact will be accepted automatically."
+#~ msgstr "新的來自此聯絡人的加密金鑰將會被自動接收。"
+
+#~ msgid "Own key"
+#~ msgstr "本裝置金鑰"
+
+#~ msgid "Associated keys"
+#~ msgstr "其它裝置上的金鑰"
+
+#~ msgid "Inactive keys"
+#~ msgstr "長時間未用過的金鑰"
+
+#~ msgid "Unused"
+#~ msgstr "不再使用"
+
+#~ msgid "Own fingerprint"
+#~ msgstr "本裝置指紋"
+
+#~ msgid "Will be generated on first connection"
+#~ msgstr "將會在第一次連線時產生"
+
+#~ msgid "Your contact"
+#~ msgstr "您的聯絡人"
+
+#~ msgid "Not matching"
+#~ msgstr "不吻合"
+
+#~ msgid "Matching"
+#~ msgstr "吻合"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "highlighted accordingly in the chat window."
+#~ msgstr ""
+#~ "一經確定,所有未來由 %s 使用此金鑰傳送的訊息都會在對話視窗內被加亮。"
+
+#~ msgid ""
+#~ "Stop accepting this key during communication with its associated contact."
+#~ msgstr "在與其連結的聯絡人通訊期間停止接收此金鑰。"
+
+#~ msgid ""
+#~ "Start accepting this key during communication with its associated contact"
+#~ msgstr "在與其連結的聯絡人通訊期間開始接收此金鑰"
+
+#~ msgid ""
+#~ "This means it cannot be used by %s to receive messages, and any messages "
+#~ "sent by it will be ignored."
+#~ msgstr "這代表 %s 不能使用它來收受訊息,並且經它傳送的所有訊息都將被忽略。"
+
+#~ msgid ""
+#~ "Once confirmed, any future messages sent by %s using this key will be "
+#~ "ignored and none of your messages will be readable using this key."
+#~ msgstr ""
+#~ "一經確定,所有未來由 %s 使用此金鑰傳送的訊息都會被忽略,並且無法使用此金鑰"
+#~ "讀取您的任何訊息。"
+
+#~ msgid ""
+#~ "Once confirmed this key will be usable by %s to receive and send messages."
+#~ msgstr "一經確定,此金鑰將會被 %s 用於收受及傳送訊息。"
+
+#~ msgid ""
+#~ "When this contact adds new encryption keys to their account, "
+#~ "automatically accept them."
+#~ msgstr "當此聯絡人新增加密金鑰到其帳號時,自動接收它們。"
+
+#~ msgid ""
+#~ "When you add new encryption keys to your account, automatically accept "
+#~ "them."
+#~ msgstr "當您新增加密金鑰到您的帳號時,自動接收它們。"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:18
+msgid "Querying GnuPG"
+msgstr "正在查詢 GnuPG"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:41
+msgid "Announce key"
+msgstr ""
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:32
+msgid "Error in GnuPG"
+msgstr "GnuPG 錯誤"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:36
+msgid "No keys available. Generate one!"
+msgstr "沒有可用的金鑰。生成一個!"
+
+#: main/src/plugins/openpgp/encryption_preferences_entry.vala:45
+msgid "Disabled"
+msgstr ""
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:36
+msgid "Key not in keychain"
+msgstr "密鑰不在密鑰串中"
+
+#: main/src/plugins/openpgp/contact_details_provider.vala:40
+msgid "Fingerprint"
+msgstr ""
+
+#~ msgid "Key publishing disabled"
+#~ msgstr "金鑰發佈已經被禁用"
+
+#~ msgid "Select key"
+#~ msgstr "選擇金鑰"
+
+#~ msgid "Loading…"
+#~ msgstr "載入中…"
+
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:38
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:81
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:87
#: main/src/windows/preferences_window/account_preferences_subpage.vala:64
#: main/src/windows/preferences_window/account_preferences_subpage.vala:131
#: main/src/ui/conversation_view_controller.vala:200
@@ -1089,7 +1439,7 @@ msgstr ""
#: main/data/preferences_window/add_account_dialog.ui:147
msgid "Could not establish a secure connection"
msgstr "無法建立安全連線"
-
+#: main/src/plugins/omemo/ui/manage_key_dialog.vala:166
#: main/data/preferences_window/add_account_dialog.ui:165
msgid "Back"
msgstr "返回"
diff --git a/main/src/main.vala b/main/src/main.vala
index 4a6d31c7..65e9d250 100644
--- a/main/src/main.vala
+++ b/main/src/main.vala
@@ -18,7 +18,18 @@ void main(string[] args) {
Gtk.init();
Dino.Ui.Application app = new Dino.Ui.Application() { search_path_generator=search_path_generator };
Plugins.Loader loader = new Plugins.Loader(app);
- loader.load_all();
+ if (Environment.get_variable("DINO_PLUGINS_LOAD_ALL") == "1") {
+ loader.load_all();
+ }
+#if WITH_RTP
+ loader.load_type(typeof(Plugins.Rtp.Plugin));
+#endif
+#if WITH_OPENPGP
+ loader.load_type(typeof(Plugins.OpenPgp.Plugin));
+#endif
+#if WITH_OMEMO
+ loader.load_type(typeof(Plugins.Omemo.Plugin));
+#endif
app.run(args);
loader.shutdown();
diff --git a/plugins/omemo/src/dtls_srtp_verification_draft.vala b/main/src/plugins/omemo/dtls_srtp_verification_draft.vala
index 09617a2a..09617a2a 100644
--- a/plugins/omemo/src/dtls_srtp_verification_draft.vala
+++ b/main/src/plugins/omemo/dtls_srtp_verification_draft.vala
diff --git a/plugins/omemo/src/file_transfer/file_decryptor.vala b/main/src/plugins/omemo/file_transfer/file_decryptor.vala
index 80303789..8ae0b96b 100644
--- a/plugins/omemo/src/file_transfer/file_decryptor.vala
+++ b/main/src/plugins/omemo/file_transfer/file_decryptor.vala
@@ -1,6 +1,6 @@
using Dino.Entities;
-using Crypto;
+using Dino.Crypto;
using Omemo;
namespace Dino.Plugins.Omemo {
@@ -59,7 +59,7 @@ public class OmemoFileDecryptor : FileDecryptor, Object {
file_transfer.encryption = Encryption.OMEMO;
debug("Decrypting file %s from %s", file_transfer.file_name, file_transfer.server_file_name);
- SymmetricCipher cipher = new SymmetricCipher("AES-GCM");
+ SymmetricCipherDecryption cipher = create_symmetric_cipher_decryption("AES-GCM");
cipher.set_key(key);
cipher.set_iv(iv);
return new ConverterInputStream(encrypted_stream, new SymmetricCipherDecrypter((owned) cipher, 16));
diff --git a/plugins/omemo/src/file_transfer/file_encryptor.vala b/main/src/plugins/omemo/file_transfer/file_encryptor.vala
index 58be7ef1..5f1d6e69 100644
--- a/plugins/omemo/src/file_transfer/file_encryptor.vala
+++ b/main/src/plugins/omemo/file_transfer/file_encryptor.vala
@@ -1,7 +1,7 @@
using Gee;
using Gtk;
-using Crypto;
+using Dino.Crypto;
using Dino.Entities;
using Xmpp;
using Omemo;
@@ -27,11 +27,11 @@ public class OmemoFileEncryptor : Dino.FileEncryptor, Object {
try {
//Create a key and use it to encrypt the file
uint8[] iv = new uint8[IV_SIZE];
- Plugin.get_context().randomize(iv);
+ Crypto.randomize(iv);
uint8[] key = new uint8[KEY_SIZE];
- Plugin.get_context().randomize(key);
+ Crypto.randomize(key);
- SymmetricCipher cipher = new SymmetricCipher("AES-GCM");
+ SymmetricCipherEncryption cipher = create_symmetric_cipher_encryption("AES-GCM");
cipher.set_key(key);
cipher.set_iv(iv);
diff --git a/plugins/omemo/src/jingle/jet_omemo.vala b/main/src/plugins/omemo/jingle/jet_omemo.vala
index 2c364625..07d03f64 100644
--- a/plugins/omemo/src/jingle/jet_omemo.vala
+++ b/main/src/plugins/omemo/jingle/jet_omemo.vala
@@ -1,4 +1,5 @@
-using Crypto;
+using Dino.Crypto;
+using Dino.Crypto.Omemo;
using Dino;
using Dino.Entities;
using Gee;
@@ -93,19 +94,19 @@ public class AesGcmCipher : Jet.Cipher, Object {
}
public Jet.TransportSecret generate_random_secret() {
uint8[] iv = new uint8[default_iv_size];
- Omemo.Plugin.get_context().randomize(iv);
+ Crypto.randomize(iv);
uint8[] key = new uint8[key_size];
- Omemo.Plugin.get_context().randomize(key);
+ Crypto.randomize(key);
return new Jet.TransportSecret(key, iv);
}
public InputStream wrap_input_stream(InputStream input, Jet.TransportSecret secret) requires (secret.transport_key.length == key_size) {
- SymmetricCipher cipher = new SymmetricCipher("AES-GCM");
+ SymmetricCipherDecryption cipher = create_symmetric_cipher_decryption("AES-GCM");
cipher.set_key(secret.transport_key);
cipher.set_iv(secret.initialization_vector);
return new ConverterInputStream(input, new SymmetricCipherDecrypter((owned) cipher, 16));
}
public OutputStream wrap_output_stream(OutputStream output, Jet.TransportSecret secret) requires (secret.transport_key.length == key_size) {
- Crypto.SymmetricCipher cipher = new SymmetricCipher("AES-GCM");
+ SymmetricCipherEncryption cipher = create_symmetric_cipher_encryption("AES-GCM");
cipher.set_key(secret.transport_key);
cipher.set_iv(secret.initialization_vector);
return new ConverterOutputStream(output, new SymmetricCipherEncrypter((owned) cipher, 16));
diff --git a/plugins/omemo/src/jingle/jingle_helper.vala b/main/src/plugins/omemo/jingle/jingle_helper.vala
index ec6c0eca..ec6c0eca 100644
--- a/plugins/omemo/src/jingle/jingle_helper.vala
+++ b/main/src/plugins/omemo/jingle/jingle_helper.vala
diff --git a/plugins/omemo/src/logic/database.vala b/main/src/plugins/omemo/logic/database.vala
index ec5a0924..f2a92259 100644
--- a/plugins/omemo/src/logic/database.vala
+++ b/main/src/plugins/omemo/logic/database.vala
@@ -1,7 +1,7 @@
using Gee;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
namespace Dino.Plugins.Omemo {
diff --git a/plugins/omemo/src/logic/decrypt.vala b/main/src/plugins/omemo/logic/decrypt.vala
index 2861b42f..135ac42c 100644
--- a/plugins/omemo/src/logic/decrypt.vala
+++ b/main/src/plugins/omemo/logic/decrypt.vala
@@ -1,6 +1,8 @@
-using Dino.Entities;
-using Qlite;
using Gee;
+
+using Dino.Crypto.Omemo;
+using Dino.Entities;
+using Dino.Qlite;
using Omemo;
using Xmpp;
diff --git a/plugins/omemo/src/logic/encrypt.vala b/main/src/plugins/omemo/logic/encrypt.vala
index e5d11c69..8994d00d 100644
--- a/plugins/omemo/src/logic/encrypt.vala
+++ b/main/src/plugins/omemo/logic/encrypt.vala
@@ -1,5 +1,6 @@
using Gee;
using Omemo;
+using Dino.Crypto.Omemo;
using Dino.Entities;
using Xmpp;
using Xmpp.Xep.Omemo;
@@ -26,9 +27,9 @@ namespace Dino.Plugins.Omemo {
//Create a key and use it to encrypt the message
uint8[] key = new uint8[KEY_SIZE];
- Plugin.get_context().randomize(key);
+ Crypto.randomize(key);
uint8[] iv = new uint8[IV_SIZE];
- Plugin.get_context().randomize(iv);
+ Crypto.randomize(iv);
uint8[] aes_encrypt_result = aes_encrypt(Cipher.AES_GCM_NOPADDING, key, iv, plaintext.data);
uint8[] ciphertext = aes_encrypt_result[0:aes_encrypt_result.length - 16];
@@ -128,4 +129,4 @@ namespace Dino.Plugins.Omemo {
encryption_data.add_device_key(device_id, device_key.serialized, device_key.type == CiphertextType.PREKEY);
}
}
-} \ No newline at end of file
+}
diff --git a/plugins/omemo/src/logic/manager.vala b/main/src/plugins/omemo/logic/manager.vala
index 71f17aae..358db4e3 100644
--- a/plugins/omemo/src/logic/manager.vala
+++ b/main/src/plugins/omemo/logic/manager.vala
@@ -1,8 +1,10 @@
+using Gee;
+
+using Dino.Crypto.Omemo;
using Dino.Entities;
+using Dino.Qlite;
using Omemo;
-using Qlite;
using Xmpp;
-using Gee;
namespace Dino.Plugins.Omemo {
diff --git a/main/src/plugins/omemo/logic/pre_key_store.vala b/main/src/plugins/omemo/logic/pre_key_store.vala
new file mode 100644
index 00000000..97e27858
--- /dev/null
+++ b/main/src/plugins/omemo/logic/pre_key_store.vala
@@ -0,0 +1,48 @@
+using Dino.Crypto.Omemo;
+using Dino.Qlite;
+using Omemo;
+
+namespace Dino.Plugins.Omemo {
+
+private class BackedPreKeyStore : PreKeyStore {
+ private Database db;
+ private int identity_id;
+
+ public BackedPreKeyStore(Database db, int identity_id) {
+ this.db = db;
+ this.identity_id = identity_id;
+ }
+
+ public override uint8[]? load_pre_key(uint32 pre_key_id) throws Crypto.Error {
+ RowOption row = db.pre_key.select({db.pre_key.record_base64})
+ .with(db.pre_key.identity_id, "=", identity_id)
+ .with(db.pre_key.pre_key_id, "=", (int) pre_key_id)
+ .single().row();
+ if (!row.is_present()) return null;
+ return Base64.decode(row[db.pre_key.record_base64]);
+ }
+
+ public override void store_pre_key(uint32 pre_key_id, uint8[] record) throws Crypto.Error {
+ db.pre_key.upsert()
+ .value(db.pre_key.identity_id, identity_id, true)
+ .value(db.pre_key.pre_key_id, (int) pre_key_id, true)
+ .value(db.pre_key.record_base64, Base64.encode(record))
+ .perform();
+ }
+
+ public override bool contains_pre_key(uint32 pre_key_id) throws Crypto.Error {
+ return db.pre_key.select({db.pre_key.pre_key_id})
+ .with(db.pre_key.identity_id, "=", identity_id)
+ .with(db.pre_key.pre_key_id, "=", (int) pre_key_id)
+ .count() > 0;
+ }
+
+ public override void delete_pre_key(uint32 pre_key_id) throws Crypto.Error {
+ db.pre_key.delete()
+ .with(db.pre_key.identity_id, "=", identity_id)
+ .with(db.pre_key.pre_key_id, "=", (int) pre_key_id)
+ .perform();
+ }
+}
+
+}
diff --git a/main/src/plugins/omemo/logic/session_store.vala b/main/src/plugins/omemo/logic/session_store.vala
new file mode 100644
index 00000000..883e1caa
--- /dev/null
+++ b/main/src/plugins/omemo/logic/session_store.vala
@@ -0,0 +1,69 @@
+using Dino.Crypto.Omemo;
+using Dino.Qlite;
+using Omemo;
+
+namespace Dino.Plugins.Omemo {
+
+private class BackedSessionStore : SessionStore {
+ private Database db;
+ private int identity_id;
+
+ public BackedSessionStore(Database db, int identity_id) {
+ this.db = db;
+ this.identity_id = identity_id;
+ }
+
+ public override uint8[]? load_session(Address address) throws Crypto.Error {
+ RowOption row = db.session.select({db.session.record_base64})
+ .with(db.session.identity_id, "=", identity_id)
+ .with(db.session.address_name, "=", address.name)
+ .with(db.session.device_id, "=", address.device_id)
+ .single().row();
+ if (!row.is_present()) return null;
+ return Base64.decode(row[db.session.record_base64]);
+ }
+
+ public override IntList get_sub_device_sessions(string name) throws Crypto.Error {
+ IntList res = new IntList();
+ foreach (Row row in db.session.select({db.session.device_id})
+ .with(db.session.identity_id, "=", identity_id)
+ .with(db.session.address_name, "=", name)) {
+ res.add(row[db.session.device_id]);
+ }
+ return res;
+ }
+
+ public override void store_session(Address address, uint8[] record) throws Crypto.Error {
+ db.session.upsert()
+ .value(db.session.identity_id, identity_id, true)
+ .value(db.session.address_name, address.name, true)
+ .value(db.session.device_id, address.device_id, true)
+ .value(db.session.record_base64, Base64.encode(record))
+ .perform();
+ }
+
+ public override bool contains_session(Address address) throws Crypto.Error {
+ return db.session.select({db.session.device_id})
+ .with(db.session.identity_id, "=", identity_id)
+ .with(db.session.address_name, "=", address.name)
+ .with(db.session.device_id, "=", address.device_id)
+ .count() > 0;
+ }
+
+ public override void delete_session(Address address) throws Crypto.Error {
+ db.session.delete()
+ .with(db.session.identity_id, "=", identity_id)
+ .with(db.session.address_name, "=", address.name)
+ .with(db.session.device_id, "=", address.device_id)
+ .perform();
+ }
+
+ public override void delete_all_sessions(string name) throws Crypto.Error {
+ db.session.delete()
+ .with(db.session.identity_id, "=", identity_id)
+ .with(db.session.address_name, "=", name)
+ .perform();
+ }
+}
+
+}
diff --git a/main/src/plugins/omemo/logic/signed_pre_key_store.vala b/main/src/plugins/omemo/logic/signed_pre_key_store.vala
new file mode 100644
index 00000000..f4d57550
--- /dev/null
+++ b/main/src/plugins/omemo/logic/signed_pre_key_store.vala
@@ -0,0 +1,48 @@
+using Dino.Crypto.Omemo;
+using Dino.Qlite;
+using Omemo;
+
+namespace Dino.Plugins.Omemo {
+
+private class BackedSignedPreKeyStore : SignedPreKeyStore {
+ private Database db;
+ private int identity_id;
+
+ public BackedSignedPreKeyStore(Database db, int identity_id) {
+ this.db = db;
+ this.identity_id = identity_id;
+ }
+
+ public override uint8[]? load_signed_pre_key(uint32 pre_key_id) throws Crypto.Error {
+ RowOption row = db.signed_pre_key.select({db.signed_pre_key.record_base64})
+ .with(db.signed_pre_key.identity_id, "=", identity_id)
+ .with(db.signed_pre_key.signed_pre_key_id, "=", (int) pre_key_id)
+ .single().row();
+ if (!row.is_present()) return null;
+ return Base64.decode(row[db.signed_pre_key.record_base64]);
+ }
+
+ public override void store_signed_pre_key(uint32 pre_key_id, uint8[] record) throws Crypto.Error {
+ db.signed_pre_key.upsert()
+ .value(db.signed_pre_key.identity_id, identity_id, true)
+ .value(db.signed_pre_key.signed_pre_key_id, (int) pre_key_id, true)
+ .value(db.signed_pre_key.record_base64, Base64.encode(record))
+ .perform();
+ }
+
+ public override bool contains_signed_pre_key(uint32 pre_key_id) throws Crypto.Error {
+ return db.signed_pre_key.select({db.signed_pre_key.signed_pre_key_id})
+ .with(db.signed_pre_key.identity_id, "=", identity_id)
+ .with(db.signed_pre_key.signed_pre_key_id, "=", (int) pre_key_id)
+ .count() > 0;
+ }
+
+ public override void delete_signed_pre_key(uint32 pre_key_id) throws Crypto.Error {
+ db.signed_pre_key.delete()
+ .with(db.signed_pre_key.identity_id, "=", identity_id)
+ .with(db.signed_pre_key.signed_pre_key_id, "=", (int) pre_key_id)
+ .perform();
+ }
+}
+
+}
diff --git a/plugins/omemo/src/logic/trust_manager.vala b/main/src/plugins/omemo/logic/trust_manager.vala
index 8cf1ddeb..f17ade99 100644
--- a/plugins/omemo/src/logic/trust_manager.vala
+++ b/main/src/plugins/omemo/logic/trust_manager.vala
@@ -1,8 +1,9 @@
-using Dino.Entities;
using Gee;
-using Xmpp;
+
+using Dino.Entities;
+using Dino.Qlite;
using Omemo;
-using Qlite;
+using Xmpp;
namespace Dino.Plugins.Omemo {
diff --git a/plugins/omemo/src/plugin.vala b/main/src/plugins/omemo/plugin.vala
index 7b7034c8..34528bde 100644
--- a/plugins/omemo/src/plugin.vala
+++ b/main/src/plugins/omemo/plugin.vala
@@ -1,10 +1,8 @@
using Gee;
+using Dino.Crypto.Omemo;
using Dino.Entities;
using Omemo;
-extern const string GETTEXT_PACKAGE;
-extern const string LOCALE_INSTALL_DIR;
-
namespace Dino.Plugins.Omemo {
public class Plugin : RootInterface, Object {
@@ -72,14 +70,6 @@ public class Plugin : RootInterface, Object {
JingleFileHelperRegistry.instance.add_encryption_helper(Encryption.OMEMO, new JetOmemo.EncryptionHelper(app.stream_interactor));
Manager.start(this.app.stream_interactor, db, trust_manager, encryptors);
-
- string locales_dir;
- if (app.search_path_generator != null) {
- locales_dir = ((!)app.search_path_generator).get_locale_path(GETTEXT_PACKAGE, LOCALE_INSTALL_DIR);
- } else {
- locales_dir = LOCALE_INSTALL_DIR;
- }
- internationalize(GETTEXT_PACKAGE, locales_dir);
}
public void shutdown() {
diff --git a/plugins/omemo/src/protocol/bundle.vala b/main/src/plugins/omemo/protocol/bundle.vala
index b7e2b9cf..abd5269f 100644
--- a/plugins/omemo/src/protocol/bundle.vala
+++ b/main/src/plugins/omemo/protocol/bundle.vala
@@ -58,6 +58,10 @@ public class Bundle {
return list;
}}
+ public bool is_valid { get {
+ return signed_pre_key_id != -1 && signed_pre_key != null && signed_pre_key_signature != null && identity_key != null;
+ }}
+
public class PreKey {
private StanzaNode node;
diff --git a/plugins/omemo/src/protocol/message_flag.vala b/main/src/plugins/omemo/protocol/message_flag.vala
index ba9ea16e..ba9ea16e 100644
--- a/plugins/omemo/src/protocol/message_flag.vala
+++ b/main/src/plugins/omemo/protocol/message_flag.vala
diff --git a/plugins/omemo/src/protocol/stream_module.vala b/main/src/plugins/omemo/protocol/stream_module.vala
index cb68d4b4..3958bc23 100644
--- a/plugins/omemo/src/protocol/stream_module.vala
+++ b/main/src/plugins/omemo/protocol/stream_module.vala
@@ -1,4 +1,5 @@
using Gee;
+using Dino.Crypto.Omemo;
using Xmpp;
using Xmpp.Xep;
using Omemo;
@@ -152,15 +153,20 @@ public class StreamModule : XmppStreamModule {
if (node == null) {
// Device not registered, shouldn't exist
if (ignore_if_non_present) {
- debug("Ignoring device %s/%d: No bundle", jid.bare_jid.to_string(), device_id);
+ warning("Ignoring device %s/%d: No bundle", jid.bare_jid.to_string(), device_id);
stream.get_module(IDENTITY).ignore_device(jid, device_id);
}
bundle_fetch_failed(jid, device_id);
} else {
Bundle bundle = new Bundle(node);
- stream.get_module(IDENTITY).unignore_device(jid, device_id);
- debug("Received bundle for %s/%d: %s", jid.bare_jid.to_string(), device_id, Base64.encode(bundle.identity_key.serialize()));
- bundle_fetched(jid, device_id, bundle);
+ if (bundle.is_valid) {
+ stream.get_module(IDENTITY).unignore_device(jid, device_id);
+ debug("Received bundle for %s/%d: %s", jid.bare_jid.to_string(), device_id, Base64.encode(bundle.identity_key.serialize()));
+ bundle_fetched(jid, device_id, bundle);
+ } else {
+ warning("Ignoring device %s/%d: Invalid bundle", jid.bare_jid.to_string(), device_id);
+ bundle_fetch_failed(jid, device_id);
+ }
}
stream.get_module(IDENTITY).active_bundle_requests.remove(jid.bare_jid.to_string() + @":$device_id");
}
diff --git a/plugins/omemo/src/trust_level.vala b/main/src/plugins/omemo/trust_level.vala
index afcfb0fb..afcfb0fb 100644
--- a/plugins/omemo/src/trust_level.vala
+++ b/main/src/plugins/omemo/trust_level.vala
diff --git a/plugins/omemo/src/ui/bad_messages_populator.vala b/main/src/plugins/omemo/ui/bad_messages_populator.vala
index 9dacba95..c291a422 100644
--- a/plugins/omemo/src/ui/bad_messages_populator.vala
+++ b/main/src/plugins/omemo/ui/bad_messages_populator.vala
@@ -1,8 +1,8 @@
using Gee;
using Gtk;
-using Qlite;
using Dino.Entities;
+using Dino.Qlite;
using Xmpp;
namespace Dino.Plugins.Omemo {
diff --git a/plugins/omemo/src/ui/call_encryption_entry.vala b/main/src/plugins/omemo/ui/call_encryption_entry.vala
index 69b7b686..04f0443c 100644
--- a/plugins/omemo/src/ui/call_encryption_entry.vala
+++ b/main/src/plugins/omemo/ui/call_encryption_entry.vala
@@ -1,6 +1,7 @@
-using Dino.Entities;
using Gtk;
-using Qlite;
+
+using Dino.Entities;
+using Dino.Qlite;
using Xmpp;
namespace Dino.Plugins.Omemo {
diff --git a/plugins/omemo/src/ui/contact_details_provider.vala b/main/src/plugins/omemo/ui/contact_details_provider.vala
index 7c733cd7..1b61f31d 100644
--- a/plugins/omemo/src/ui/contact_details_provider.vala
+++ b/main/src/plugins/omemo/ui/contact_details_provider.vala
@@ -1,6 +1,5 @@
using Gtk;
using Gee;
-using Qlite;
using Dino.Entities;
namespace Dino.Plugins.Omemo {
diff --git a/plugins/omemo/src/ui/device_notification_populator.vala b/main/src/plugins/omemo/ui/device_notification_populator.vala
index 7829d89c..7829d89c 100644
--- a/plugins/omemo/src/ui/device_notification_populator.vala
+++ b/main/src/plugins/omemo/ui/device_notification_populator.vala
diff --git a/plugins/omemo/src/ui/encryption_list_entry.vala b/main/src/plugins/omemo/ui/encryption_list_entry.vala
index 3bb76c52..dfec813a 100644
--- a/plugins/omemo/src/ui/encryption_list_entry.vala
+++ b/main/src/plugins/omemo/ui/encryption_list_entry.vala
@@ -1,6 +1,7 @@
-using Dino.Entities;
using Gtk;
-using Qlite;
+
+using Dino.Entities;
+using Dino.Qlite;
using Xmpp;
namespace Dino.Plugins.Omemo {
diff --git a/plugins/omemo/src/ui/encryption_preferences_entry.vala b/main/src/plugins/omemo/ui/encryption_preferences_entry.vala
index f0aedb6a..7f53a1b2 100644
--- a/plugins/omemo/src/ui/encryption_preferences_entry.vala
+++ b/main/src/plugins/omemo/ui/encryption_preferences_entry.vala
@@ -1,10 +1,12 @@
-using Qlite;
-using Qrencode;
using Gee;
-using Xmpp;
-using Dino.Entities;
using Gtk;
+using Qrencode;
+
+using Dino.Crypto.Omemo;
+using Dino.Entities;
+using Dino.Qlite;
using Omemo;
+using Xmpp;
namespace Dino.Plugins.Omemo {
@@ -27,7 +29,7 @@ public class OmemoPreferencesEntry : Plugins.EncryptionPreferencesEntry {
public override string id { get { return "omemo_preferences_entryption"; }}
}
-[GtkTemplate (ui = "/im/dino/Dino/omemo/encryption_preferences_entry.ui")]
+[GtkTemplate (ui = "/im/dino/Dino/encryption_preferences_entry.ui")]
public class OmemoPreferencesWidget : Adw.PreferencesGroup {
private Plugin plugin;
private Account account;
@@ -165,12 +167,7 @@ public class OmemoPreferencesWidget : Adw.PreferencesGroup {
// Create and set QR code popover
int sid = plugin.db.identity.row_with(plugin.db.identity.account_id, account.id)[plugin.db.identity.device_id];
var iri_query = @"omemo-sid-$(sid)=$(fingerprint)";
-#if GLIB_2_66 && VALA_0_50
string iri = GLib.Uri.join(UriFlags.NONE, "xmpp", null, null, 0, jid.to_string(), iri_query, null);
-#else
- var iri_path_seg = escape_for_iri_path_segment(jid.to_string());
- var iri = @"xmpp:$(iri_path_seg)?$(iri_query)";
-#endif
const int QUIET_ZONE_MODULES = 4; // MUST be at least 4
const int MODULE_SIZE_PX = 4; // arbitrary
@@ -227,6 +224,10 @@ public class OmemoPreferencesWidget : Adw.PreferencesGroup {
case TrustLevel.VERIFIED:
trust_str = _("Verified");
break;
+ case TrustLevel.TRUSTED:
+ case TrustLevel.UNKNOWN:
+ default:
+ break;
}
action_row.add_suffix(new Label(trust_str));
diff --git a/plugins/omemo/src/ui/manage_key_dialog.vala b/main/src/plugins/omemo/ui/manage_key_dialog.vala
index ac8896a5..59e6db24 100644
--- a/plugins/omemo/src/ui/manage_key_dialog.vala
+++ b/main/src/plugins/omemo/ui/manage_key_dialog.vala
@@ -1,9 +1,10 @@
using Gtk;
-using Qlite;
+
+using Dino.Qlite;
namespace Dino.Plugins.Omemo {
-[GtkTemplate (ui = "/im/dino/Dino/omemo/manage_key_dialog.ui")]
+[GtkTemplate (ui = "/im/dino/Dino/manage_key_dialog.ui")]
public class ManageKeyDialog : Gtk.Dialog {
[GtkChild] private unowned Stack manage_stack;
@@ -140,6 +141,9 @@ public class ManageKeyDialog : Gtk.Dialog {
main_desc_label.set_markup(_("This key is currently %s.").printf("<span color='#D91900'>"+_("rejected")+"</span>")+" "+_("This means it cannot be used by %s to decipher your messages, and you won't see messages encrypted with it.").printf(@"<b>$(device[db.identity_meta.address_name])</b>"));
main_action_list.append(accept_row);
break;
+ case TrustLevel.UNKNOWN:
+ default:
+ break;
}
//Row clicked - go to appropriate screen
diff --git a/plugins/omemo/src/ui/own_notifications.vala b/main/src/plugins/omemo/ui/own_notifications.vala
index 7ff10e30..7ff10e30 100644
--- a/plugins/omemo/src/ui/own_notifications.vala
+++ b/main/src/plugins/omemo/ui/own_notifications.vala
diff --git a/plugins/omemo/src/ui/util.vala b/main/src/plugins/omemo/ui/util.vala
index e250ff4d..e250ff4d 100644
--- a/plugins/omemo/src/ui/util.vala
+++ b/main/src/plugins/omemo/ui/util.vala
diff --git a/plugins/openpgp/src/contact_details_provider.vala b/main/src/plugins/openpgp/contact_details_provider.vala
index 353c0b85..353c0b85 100644
--- a/plugins/openpgp/src/contact_details_provider.vala
+++ b/main/src/plugins/openpgp/contact_details_provider.vala
diff --git a/plugins/openpgp/src/database.vala b/main/src/plugins/openpgp/database.vala
index fb575a3b..4c05571e 100644
--- a/plugins/openpgp/src/database.vala
+++ b/main/src/plugins/openpgp/database.vala
@@ -1,6 +1,5 @@
-using Qlite;
-
using Dino.Entities;
+using Dino.Qlite;
using Xmpp;
namespace Dino.Plugins.OpenPgp {
diff --git a/plugins/openpgp/src/encryption_list_entry.vala b/main/src/plugins/openpgp/encryption_list_entry.vala
index cf5da8c4..cf5da8c4 100644
--- a/plugins/openpgp/src/encryption_list_entry.vala
+++ b/main/src/plugins/openpgp/encryption_list_entry.vala
diff --git a/plugins/openpgp/src/encryption_preferences_entry.vala b/main/src/plugins/openpgp/encryption_preferences_entry.vala
index b03f6acd..b03f6acd 100644
--- a/plugins/openpgp/src/encryption_preferences_entry.vala
+++ b/main/src/plugins/openpgp/encryption_preferences_entry.vala
diff --git a/plugins/openpgp/src/file_transfer/file_decryptor.vala b/main/src/plugins/openpgp/file_transfer/file_decryptor.vala
index 2deb5823..2deb5823 100644
--- a/plugins/openpgp/src/file_transfer/file_decryptor.vala
+++ b/main/src/plugins/openpgp/file_transfer/file_decryptor.vala
diff --git a/plugins/openpgp/src/file_transfer/file_encryptor.vala b/main/src/plugins/openpgp/file_transfer/file_encryptor.vala
index 66e93bd9..66e93bd9 100644
--- a/plugins/openpgp/src/file_transfer/file_encryptor.vala
+++ b/main/src/plugins/openpgp/file_transfer/file_encryptor.vala
diff --git a/plugins/openpgp/src/gpgme_fix.c b/main/src/plugins/openpgp/gpgme_fix.c
index bf457a6c..a351bcbc 100644
--- a/plugins/openpgp/src/gpgme_fix.c
+++ b/main/src/plugins/openpgp/gpgme_fix.c
@@ -1,4 +1,4 @@
-#include <gpgme_fix.h>
+#include <src/plugins/openpgp/gpgme_fix.h>
GRecMutex gpgme_global_mutex = {0};
diff --git a/plugins/openpgp/src/gpgme_fix.h b/main/src/plugins/openpgp/gpgme_fix.h
index 714614fc..714614fc 100644
--- a/plugins/openpgp/src/gpgme_fix.h
+++ b/main/src/plugins/openpgp/gpgme_fix.h
diff --git a/plugins/openpgp/src/gpgme_helper.vala b/main/src/plugins/openpgp/gpgme_helper.vala
index 18d07c06..18d07c06 100644
--- a/plugins/openpgp/src/gpgme_helper.vala
+++ b/main/src/plugins/openpgp/gpgme_helper.vala
diff --git a/plugins/openpgp/src/manager.vala b/main/src/plugins/openpgp/manager.vala
index 23cc93c2..23cc93c2 100644
--- a/plugins/openpgp/src/manager.vala
+++ b/main/src/plugins/openpgp/manager.vala
diff --git a/plugins/openpgp/src/plugin.vala b/main/src/plugins/openpgp/plugin.vala
index 32542c21..67b94455 100644
--- a/plugins/openpgp/src/plugin.vala
+++ b/main/src/plugins/openpgp/plugin.vala
@@ -2,9 +2,6 @@ using Gee;
using Dino.Entities;
-extern const string GETTEXT_PACKAGE;
-extern const string LOCALE_INSTALL_DIR;
-
namespace Dino.Plugins.OpenPgp {
public class Plugin : Plugins.RootInterface, Object {
@@ -30,8 +27,6 @@ public class Plugin : Plugins.RootInterface, Object {
app.stream_interactor.get_module(FileManager.IDENTITY).add_file_encryptor(new PgpFileEncryptor(app.stream_interactor));
app.stream_interactor.get_module(FileManager.IDENTITY).add_file_decryptor(new PgpFileDecryptor());
JingleFileHelperRegistry.instance.add_encryption_helper(Encryption.PGP, new JingleFileEncryptionHelperTransferOnly());
-
- internationalize(GETTEXT_PACKAGE, app.search_path_generator.get_locale_path(GETTEXT_PACKAGE, LOCALE_INSTALL_DIR));
}
public void shutdown() { }
diff --git a/plugins/openpgp/src/stream_module.vala b/main/src/plugins/openpgp/stream_module.vala
index 9985df26..9985df26 100644
--- a/plugins/openpgp/src/stream_module.vala
+++ b/main/src/plugins/openpgp/stream_module.vala
diff --git a/plugins/openpgp/src/util.vala b/main/src/plugins/openpgp/util.vala
index 3c7a7594..3c7a7594 100644
--- a/plugins/openpgp/src/util.vala
+++ b/main/src/plugins/openpgp/util.vala
diff --git a/plugins/rtp/src/codec_util.vala b/main/src/plugins/rtp/codec_util.vala
index 12fcfed7..9f21f5a6 100644
--- a/plugins/rtp/src/codec_util.vala
+++ b/main/src/plugins/rtp/codec_util.vala
@@ -280,9 +280,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
}
public static string? get_depay_args(string media, string codec, string encode, JingleRtp.PayloadType? payload_type) {
-#if GST_1_18
if (codec == "vp8") return " wait-for-keyframe=true";
-#endif
return null;
}
diff --git a/plugins/rtp/src/device.vala b/main/src/plugins/rtp/device.vala
index bdb597b6..bdb597b6 100644
--- a/plugins/rtp/src/device.vala
+++ b/main/src/plugins/rtp/device.vala
diff --git a/plugins/rtp/src/gst_fixes.c b/main/src/plugins/rtp/gst_fixes.c
index 86b2b598..86b2b598 100644
--- a/plugins/rtp/src/gst_fixes.c
+++ b/main/src/plugins/rtp/gst_fixes.c
diff --git a/plugins/rtp/src/module.vala b/main/src/plugins/rtp/module.vala
index be153b10..be153b10 100644
--- a/plugins/rtp/src/module.vala
+++ b/main/src/plugins/rtp/module.vala
diff --git a/plugins/rtp/src/participant.vala b/main/src/plugins/rtp/participant.vala
index 1ca13191..1ca13191 100644
--- a/plugins/rtp/src/participant.vala
+++ b/main/src/plugins/rtp/participant.vala
diff --git a/plugins/rtp/src/plugin.vala b/main/src/plugins/rtp/plugin.vala
index a94c0ba0..d09b7edf 100644
--- a/plugins/rtp/src/plugin.vala
+++ b/main/src/plugins/rtp/plugin.vala
@@ -243,13 +243,11 @@ public class Dino.Plugins.Rtp.Plugin : RootInterface, VideoCallPlugin, Object {
device = new Device(this, gst_device);
devices.add(device);
break;
-#if GST_1_16
case Gst.MessageType.DEVICE_CHANGED:
message.parse_device_changed(out gst_device, out old_gst_device);
device = devices.first_match((it) => it.matches(old_gst_device));
if (device != null) device.update(gst_device);
break;
-#endif
case Gst.MessageType.DEVICE_REMOVED:
message.parse_device_removed(out gst_device);
device = devices.first_match((it) => it.matches(gst_device));
diff --git a/plugins/rtp/src/stream.vala b/main/src/plugins/rtp/stream.vala
index aa2b080d..9a46d9ff 100644
--- a/plugins/rtp/src/stream.vala
+++ b/main/src/plugins/rtp/stream.vala
@@ -102,9 +102,7 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
send_rtp.drop = true;
send_rtp.wait_on_eos = false;
send_rtp.new_sample.connect(on_new_sample);
-#if GST_1_20
send_rtp.new_serialized_event.connect(on_new_event);
-#endif
send_rtp.connect("signal::eos", on_eos_static, this);
pipe.add(send_rtp);
@@ -299,7 +297,7 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
bool flip = false;
uint8 rotation = 0;
-#if GST_1_20
+
private bool on_new_event(Gst.App.Sink sink) {
if (sink == null || sink != send_rtp) {
return false;
@@ -349,7 +347,7 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
}
return false;
}
-#endif
+
private Gst.FlowReturn on_new_sample(Gst.App.Sink sink) {
if (sink == null) {
@@ -373,14 +371,11 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
next_timestamp_offset_stamp = get_monotonic_time();
rtp_buffer.unmap();
}
-#if GLIB_2_64
if (our_ssrc != buffer_ssrc) {
warning_once("Sending RTP %s buffer seq %u with SSRC %u when our ssrc is %u", media, buffer_seq, buffer_ssrc, our_ssrc);
}
-#endif
}
-#if GST_1_20
if (sink == send_rtp) {
Xmpp.Xep.JingleRtp.HeaderExtension? ext = header_extensions.first_match((it) => it.uri == "urn:3gpp:video-orientation");
if (ext != null) {
@@ -396,7 +391,6 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
}
}
}
-#endif
prepare_local_crypto();
@@ -574,18 +568,7 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
on_recv_rtcp_data(bytes);
return;
}
-#if GST_1_16
- {
- Gst.Buffer buffer = new Gst.Buffer.wrapped_bytes(bytes);
- Gst.RTP.Buffer rtp_buffer;
- uint buffer_ssrc = 0, buffer_seq = 0;
- if (Gst.RTP.Buffer.map(buffer, Gst.MapFlags.READ, out rtp_buffer)) {
- buffer_ssrc = rtp_buffer.get_ssrc();
- buffer_seq = rtp_buffer.get_seq();
- rtp_buffer.unmap();
- }
- }
-#endif
+
if (push_recv_data) {
prepare_remote_crypto();
@@ -598,15 +581,13 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
return;
}
} else {
-#if GST_1_16
buffer = new Gst.Buffer.wrapped_bytes(bytes);
-#else
- buffer = new Gst.Buffer.wrapped(bytes.get_data());
-#endif
}
Gst.RTP.Buffer rtp_buffer;
if (Gst.RTP.Buffer.map(buffer, Gst.MapFlags.READ, out rtp_buffer)) {
+ uint buffer_ssrc = rtp_buffer.get_ssrc();
+ uint buffer_seq = rtp_buffer.get_seq();
if (rtp_buffer.get_extension()) {
Xmpp.Xep.JingleRtp.HeaderExtension? ext = header_extensions.first_match((it) => it.uri == "urn:3gpp:video-orientation");
if (ext != null) {
@@ -632,12 +613,7 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
rtp_buffer.unmap();
}
-#if VALA_0_50
recv_rtp.push_buffer((owned) buffer);
-#else
- Gst.FlowReturn ret;
- GLib.Signal.emit_by_name(recv_rtp, "push-buffer", buffer, out ret);
-#endif
}
}
@@ -654,19 +630,10 @@ public class Dino.Plugins.Rtp.Stream : Xmpp.Xep.JingleRtp.Stream {
return;
}
} else {
-#if GST_1_16
buffer = new Gst.Buffer.wrapped_bytes(bytes);
-#else
- buffer = new Gst.Buffer.wrapped(bytes.get_data());
-#endif
}
-#if VALA_0_50
recv_rtcp.push_buffer((owned) buffer);
-#else
- Gst.FlowReturn ret;
- GLib.Signal.emit_by_name(recv_rtcp, "push-buffer", buffer, out ret);
-#endif
}
}
diff --git a/plugins/rtp/src/video_widget.vala b/main/src/plugins/rtp/video_widget.vala
index 5557ec76..af6eb14e 100644
--- a/plugins/rtp/src/video_widget.vala
+++ b/main/src/plugins/rtp/video_widget.vala
@@ -75,17 +75,10 @@ public class Dino.Plugins.Rtp.Sink : Gst.Video.Sink {
set_drop_out_of_segment(false);
}
-#if GST_1_20
public override bool set_info(Gst.Caps caps, Gst.Video.Info info) {
this.info = info;
return true;
}
-#else
- public override bool set_caps(Gst.Caps caps) {
- base.set_caps(caps);
- return info.from_caps(caps);
- }
-#endif
public override void get_times(Gst.Buffer buffer, out Gst.ClockTime start, out Gst.ClockTime end) {
if (buffer.pts != -1) {
@@ -250,21 +243,13 @@ public class Dino.Plugins.Rtp.VideoWidget : Gtk.Widget, Dino.Plugins.VideoCallWi
if (connected_device == null) return;
plugin.pause();
pipe.add(sink);
-#if GST_1_20
prepare = Gst.parse_bin_from_description(@"videoflip video-direction=auto name=video_widget_$(id)_orientation ! videoflip method=horizontal-flip name=video_widget_$(id)_flip ! videoconvert name=video_widget_$(id)_convert", true);
-#else
- prepare = Gst.parse_bin_from_description(@"videoflip method=horizontal-flip name=video_widget_$(id)_flip ! videoconvert name=video_widget_$(id)_convert", true);
-#endif
prepare.name = @"video_widget_$(id)_prepare";
-#if GST_1_20
if (prepare is Gst.Bin) {
((Gst.Bin) prepare).get_by_name(@"video_widget_$(id)_flip").get_static_pad("sink").notify["caps"].connect(input_caps_changed);
} else {
-#endif
prepare.get_static_pad("sink").notify["caps"].connect(input_caps_changed);
-#if GST_1_20
}
-#endif
pipe.add(prepare);
connected_device_element = connected_device.link_source();
connected_device_element.link(prepare);
diff --git a/plugins/rtp/src/voice_processor.vala b/main/src/plugins/rtp/voice_processor.vala
index 064684c5..064684c5 100644
--- a/plugins/rtp/src/voice_processor.vala
+++ b/main/src/plugins/rtp/voice_processor.vala
diff --git a/plugins/rtp/src/voice_processor_native.cpp b/main/src/plugins/rtp/voice_processor_native.cpp
index 71cc8a54..71cc8a54 100644
--- a/plugins/rtp/src/voice_processor_native.cpp
+++ b/main/src/plugins/rtp/voice_processor_native.cpp
diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala
index 03128964..cb3d52e4 100644
--- a/main/src/ui/application.vala
+++ b/main/src/ui/application.vala
@@ -126,6 +126,7 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application {
case "join":
show_join_muc_dialog(null, jid);
break;
+ case "roster":
case "message":
Gee.List<Account> accounts = stream_interactor.get_accounts();
Jid parsed_jid = null;
@@ -291,6 +292,16 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application {
call_state.reject();
});
add_action(deny_call_action);
+
+ SimpleAction save_file_action = new SimpleAction("file_open_save_dialog", VariantType.INT32);
+ save_file_action.activate.connect((variant) => {
+ print("action open save dialog\n");
+ int file_transfer_id = variant.get_int32();
+ FileTransfer? file_transfer = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_by_id(file_transfer_id, null);
+
+ window.conversation_view.open_save_file_dialog(file_transfer);
+ });
+ add_action(save_file_action);
}
private void show_preferences_window() {
diff --git a/main/src/ui/chat_input/chat_input_controller.vala b/main/src/ui/chat_input/chat_input_controller.vala
index c93a9e22..afbef637 100644
--- a/main/src/ui/chat_input/chat_input_controller.vala
+++ b/main/src/ui/chat_input/chat_input_controller.vala
@@ -245,11 +245,11 @@ public class ChatInputController : Object {
send_text();
}
- foreach (File file in files_to_send) {
- stream_interactor.get_module(FileManager.IDENTITY).send_file.begin(file, conversation);
+ if (!files_to_send.is_empty) {
+ stream_interactor.get_module(FileManager2.IDENTITY).send_files.begin(files_to_send, conversation);
+ files_to_send = new ArrayList<File>();
+ chat_input.clear_files();
}
- files_to_send = new ArrayList<File>();
- chat_input.clear_files();
}
private void on_text_input_changed() {
diff --git a/main/src/ui/conversation_content_view/content_populator.vala b/main/src/ui/conversation_content_view/content_populator.vala
index ef859bde..4d1b8c90 100644
--- a/main/src/ui/conversation_content_view/content_populator.vala
+++ b/main/src/ui/conversation_content_view/content_populator.vala
@@ -70,6 +70,8 @@ public class ContentProvider : ContentItemCollection, Object {
return new FileMetaItem(content_item, stream_interactor);
} else if (content_item.type_ == CallItem.TYPE) {
return new CallMetaItem(content_item, stream_interactor);
+ } else if (content_item.type_ == FileGroupItem.TYPE) {
+ return new FileGroupMetaItem(content_item, stream_interactor);
}
critical("Got unknown content item type %s", content_item.type_);
return null;
diff --git a/main/src/ui/conversation_content_view/file_default_widget.vala b/main/src/ui/conversation_content_view/file_default_widget.vala
index a21e2afb..1ad3d6c2 100644
--- a/main/src/ui/conversation_content_view/file_default_widget.vala
+++ b/main/src/ui/conversation_content_view/file_default_widget.vala
@@ -51,13 +51,13 @@ public class FileDefaultWidget : Box {
mime_label.label = content_type != null ? content_type.get_description() : null;
}
- public void update_file_info(Xmpp.FileContentType? content_type, FileTransfer.State state, bool direction, int64 size, int64 transferred_bytes) {
- this.state = state;
+ public void update_file_info(FileTransfer file_transfer) {
+ this.state = file_transfer.state;
spinner.stop(); // A hidden spinning spinner still uses CPU. Deactivate asap
- content_type_image.icon_name = get_file_icon_name(content_type);
- string? mime_description = content_type != null ? content_type.get_description() : null;
+ content_type_image.icon_name = get_file_icon_name(file_transfer.content_type);
+ string? mime_description = file_transfer.content_type != null ? file_transfer.content_type.get_description() : null;
switch (state) {
case FileTransfer.State.COMPLETE:
@@ -66,23 +66,31 @@ public class FileDefaultWidget : Box {
// Create a menu
Menu menu_model = new Menu();
- menu_model.append(_("Open"), "file.open");
- menu_model.append(_("Save as…"), "file.save_as");
+
+ MenuItem open_file_item = new MenuItem(_("Open"), "app.file_open_externally");
+ open_file_item.set_action_and_target_value("app.file_open_externally", new Variant.int32(file_transfer.id));
+
+ MenuItem save_as_item = new MenuItem(_("Save as…"), "app.file_save_as");
+ save_as_item.set_action_and_target_value("app.file_open_save_dialog", new Variant.int32(file_transfer.id));
+
+ menu_model.append_item(open_file_item);
+ menu_model.append_item(save_as_item);
+
Gtk.PopoverMenu popover_menu = new Gtk.PopoverMenu.from_model(menu_model);
file_menu.popover = popover_menu;
popover_menu.closed.connect(on_pointer_left);
break;
case FileTransfer.State.IN_PROGRESS:
- if (direction == FileTransfer.DIRECTION_RECEIVED) {
- if (size > 0) {
- int64 progress = transferred_bytes * 100 / size;
- mime_label.label = _("Downloading %s… (%u%%)").printf(get_size_string(size), progress);
+ if (file_transfer.direction == FileTransfer.DIRECTION_RECEIVED) {
+ if (file_transfer.size > 0) {
+ int64 progress = file_transfer.transferred_bytes * 100 / file_transfer.size;
+ mime_label.label = _("Downloading %s… (%u%%)").printf(get_size_string(file_transfer.size), progress);
} else {
- mime_label.label = _("Downloading %s…").printf(get_size_string(size));
+ mime_label.label = _("Downloading %s…").printf(get_size_string(file_transfer.size));
}
} else {
- int64 progress = transferred_bytes * 100 / size;
- mime_label.label = _("Uploading %s… (%u%%)").printf(get_size_string(size), progress);
+ int64 progress = file_transfer.transferred_bytes * 100 / file_transfer.size;
+ mime_label.label = _("Uploading %s… (%u%%)").printf(get_size_string(file_transfer.size), progress);
}
spinner.start();
image_stack.set_visible_child_name("spinner");
@@ -96,9 +104,9 @@ public class FileDefaultWidget : Box {
break;
case FileTransfer.State.NOT_STARTED:
if (mime_description != null) {
- mime_label.label = _("%s offered: %s").printf(mime_description, get_size_string(size));
- } else if (size != -1) {
- mime_label.label = _("File offered: %s").printf(get_size_string(size));
+ mime_label.label = _("%s offered: %s").printf(mime_description, get_size_string(file_transfer.size));
+ } else if (file_transfer.size != -1) {
+ mime_label.label = _("File offered: %s").printf(get_size_string(file_transfer.size));
} else {
mime_label.label = _("File offered");
}
diff --git a/main/src/ui/conversation_content_view/file_group_widget.vala b/main/src/ui/conversation_content_view/file_group_widget.vala
new file mode 100644
index 00000000..80c41a7a
--- /dev/null
+++ b/main/src/ui/conversation_content_view/file_group_widget.vala
@@ -0,0 +1,120 @@
+using Gee;
+using Gdk;
+using Gtk;
+using Pango;
+using Xmpp;
+
+using Dino.Entities;
+
+namespace Dino.Ui {
+
+ public class FileGroupMetaItem : ConversationSummary.ContentMetaItem {
+
+ private StreamInteractor stream_interactor;
+ private FileGroupItem file_group_item;
+
+ public FileGroupMetaItem(ContentItem content_item, StreamInteractor stream_interactor) {
+ base(content_item);
+ this.stream_interactor = stream_interactor;
+ this.file_group_item = content_item as FileGroupItem;
+ }
+
+ public override Object? get_widget(Plugins.ConversationItemWidgetInterface outer, Plugins.WidgetType type) {
+ var file_transfers = file_group_item.file_group.file_transfers;
+
+ if (file_transfers.size > 1 && all_files_images(file_transfers)) {
+ return new ImageGroupWidget(file_transfers);
+ } else {
+ Box box = new Box(Orientation.VERTICAL, 6);
+ foreach (FileTransfer file_transfer in file_transfers) {
+ FileWidget widget = new FileWidget(file_transfer) { halign = Align.START };
+ widget.add_css_class("file-image-widget");
+ FileWidgetController widget_controller = new FileWidgetController(widget, file_transfer, stream_interactor);
+ box.append(widget);
+ }
+ return box;
+ }
+ }
+
+ public override Gee.List<Plugins.MessageAction>? get_item_actions(Plugins.WidgetType type) {
+ Gee.List<Plugins.MessageAction> actions = new ArrayList<Plugins.MessageAction>();
+ return actions;
+ }
+ }
+
+ public class ImageGroupWidget : Box {
+
+ private Gee.ArrayList<FileTransfer> file_transfers;
+
+ public ImageGroupWidget(Gee.ArrayList<FileTransfer> file_transfers) {
+ this.file_transfers = file_transfers;
+
+ if (file_transfers.size == 3) {
+ Box box = new Box(Orientation.HORIZONTAL, 4) {
+ overflow = Overflow.HIDDEN,
+ halign = Align.START
+ };
+ box.add_css_class("image-group");
+
+ var picture1 = new FileImageWidget.from_file_transfer(file_transfers[0], 200);
+ box.append(picture1);
+
+ Box box1 = new Box(Orientation.VERTICAL, 4);
+
+ var picture2 = new FileImageWidget.from_file_transfer(file_transfers[1], 100);
+ box1.append(picture2);
+ var picture3 = new FileImageWidget.from_file_transfer(file_transfers[2], 100);
+ box1.append(picture3);
+ box.append(box1);
+
+ this.append(box);
+ } else {
+ Box box = new Box(Orientation.VERTICAL, 4) {
+ overflow = Overflow.HIDDEN,
+ halign = Align.START
+ };
+ box.add_css_class("image-group");
+
+ Box row_upper_row = new Box(Orientation.HORIZONTAL, 4);
+
+ var picture1 = new FileImageWidget.from_file_transfer(file_transfers[0], 150);
+ row_upper_row.append(picture1);
+
+ var picture2 = new FileImageWidget.from_file_transfer(file_transfers[1], 150);
+ row_upper_row.append(picture2);
+ box.append(row_upper_row);
+
+ if (file_transfers.size >= 4) {
+
+ int size = 150;
+ if (file_transfers.size == 5) size = 99;
+
+ Box row_lower_row = new Box(Orientation.HORIZONTAL, 4);
+
+ var picture3 = new FileImageWidget.from_file_transfer(file_transfers[2], size);
+ row_lower_row.append(picture3);
+
+ var picture4 = new FileImageWidget.from_file_transfer(file_transfers[3], size);
+ row_lower_row.append(picture4);
+
+ if (file_transfers.size == 5) {
+ var picture5 = new FileImageWidget.from_file_transfer(file_transfers[4], size);
+ row_lower_row.append(picture5);
+ }
+
+ box.append(row_lower_row);
+ }
+ this.append(box);
+ }
+ }
+ }
+
+ public static bool all_files_images(Gee.ArrayList<FileTransfer> file_transfers) {
+ foreach (FileTransfer file_transfer in file_transfers) {
+ if (!Dino.Util.is_pixbuf_supported_content_type(file_transfer.content_type)) {
+ return false;
+ }
+ }
+ return true;
+ }
+} \ No newline at end of file
diff --git a/main/src/ui/conversation_content_view/file_image_widget.vala b/main/src/ui/conversation_content_view/file_image_widget.vala
index e936ca25..9f12f892 100644
--- a/main/src/ui/conversation_content_view/file_image_widget.vala
+++ b/main/src/ui/conversation_content_view/file_image_widget.vala
@@ -22,6 +22,8 @@ public class FileImageWidget : Widget {
private Gtk.Box image_overlay_toolbar = new Gtk.Box(Orientation.VERTICAL, 0) { halign=Align.END, valign=Align.START, margin_top=10, margin_start=10, margin_end=10, margin_bottom=10, vexpand=false, visible=false };
private Label file_size_label = new Label(null) { halign=Align.START, valign=Align.END, margin_bottom=4, margin_start=4, visible=false };
+ private int size = -1;
+
private FileTransfer file_transfer;
private FileTransmissionProgress transmission_progress = new FileTransmissionProgress() { halign=Align.CENTER, valign=Align.CENTER, visible=false };
@@ -34,22 +36,6 @@ public class FileImageWidget : Widget {
public FileImageWidget(int MAX_WIDTH=600, int MAX_HEIGHT=300) {
this.halign = Align.START;
- this.add_css_class("file-image-widget");
-
- // Setup menu button overlay
- MenuButton button = new MenuButton();
- button.icon_name = "dino-view-more";
- Menu menu_model = new Menu();
- menu_model.append(_("Open"), "file.open");
- menu_model.append(_("Save as…"), "file.save_as");
- Gtk.PopoverMenu popover_menu = new Gtk.PopoverMenu.from_model(menu_model);
- button.popover = popover_menu;
- image_overlay_toolbar.append(button);
- image_overlay_toolbar.add_css_class("card");
- image_overlay_toolbar.add_css_class("toolbar");
- image_overlay_toolbar.add_css_class("compact-card-toolbar");
- image_overlay_toolbar.set_cursor_from_name("default");
-
file_size_label.add_css_class("file-details");
overlay.set_child(stack);
@@ -65,12 +51,65 @@ public class FileImageWidget : Widget {
gesture_click_controller.button = 1; // listen for left clicks
gesture_click_controller.released.connect(on_image_clicked);
stack.add_controller(gesture_click_controller);
+ }
+
+ public FileImageWidget.from_file_transfer(FileTransfer file_transfer, int size = -1) {
+ this();
+
+ this.file_transfer = file_transfer;
+ this.size = size;
+
+ this.file_transfer.bind_property("size", file_size_label, "label", BindingFlags.SYNC_CREATE, file_size_label_transform);
+ this.file_transfer.bind_property("size", transmission_progress, "file-size", BindingFlags.SYNC_CREATE);
+ this.file_transfer.bind_property("transferred-bytes", transmission_progress, "transferred-size");
+
+ setup_signals(transmission_progress, file_transfer);
+ setup_menu_button();
+
+ file_transfer.notify["state"].connect(refresh_state);
+ file_transfer.sources_changed.connect(refresh_state);
+ refresh_state();
+ }
+
+ private static void setup_signals(FileTransmissionProgress transmission_progress, FileTransfer file_transfer) {
+ var file_transfer_id = file_transfer.id;
+
+ transmission_progress.start_download.connect(() => {
+ Dino.Application.get_default().activate_action("file_start_download", new Variant.int32(file_transfer_id));
+ });
+ transmission_progress.cancel_transfer.connect(() => {
+ Dino.Application.get_default().activate_action("file_cancel_transfer", new Variant.int32(file_transfer_id));
+ });
+ }
+
+ private void setup_menu_button() {
+ MenuButton button = new MenuButton();
+ button.icon_name = "dino-view-more";
+ Menu menu_model = new Menu();
+
+ MenuItem open_file_item = new MenuItem(_("Open"), "app.file_open_externally");
+ open_file_item.set_action_and_target_value("app.file_open_externally", new Variant.int32(file_transfer.id));
+
+ MenuItem save_as_item = new MenuItem(_("Save as…"), "app.file_save_as");
+ save_as_item.set_action_and_target_value("app.file_open_save_dialog", new Variant.int32(file_transfer.id));
+
+ menu_model.append_item(open_file_item);
+ menu_model.append_item(save_as_item);
+
+ Gtk.PopoverMenu popover_menu = new Gtk.PopoverMenu.from_model(menu_model);
+ button.popover = popover_menu;
+ image_overlay_toolbar.append(button);
+ image_overlay_toolbar.add_css_class("card");
+ image_overlay_toolbar.add_css_class("toolbar");
+ image_overlay_toolbar.add_css_class("compact-card-toolbar");
+ image_overlay_toolbar.set_cursor_from_name("default");
EventControllerMotion this_motion_events = new EventControllerMotion();
this.add_controller(this_motion_events);
this_motion_events.enter.connect((controller, x, y) => {
(controller.widget as FileImageWidget).on_motion_event_enter();
});
+
attach_on_motion_event_leave(this_motion_events, button);
}
@@ -88,18 +127,6 @@ public class FileImageWidget : Widget {
file_size_label.visible = file_transfer != null && file_transfer.direction == FileTransfer.DIRECTION_RECEIVED && file_transfer.state == FileTransfer.State.NOT_STARTED && !file_transfer.sfs_sources.is_empty;
}
- public async void set_file_transfer(FileTransfer file_transfer) {
- this.file_transfer = file_transfer;
-
- this.file_transfer.bind_property("size", file_size_label, "label", BindingFlags.SYNC_CREATE, file_size_label_transform);
- this.file_transfer.bind_property("size", transmission_progress, "file-size", BindingFlags.SYNC_CREATE);
- this.file_transfer.bind_property("transferred-bytes", transmission_progress, "transferred-size");
-
- file_transfer.notify["state"].connect(refresh_state);
- file_transfer.sources_changed.connect(refresh_state);
- refresh_state();
- }
-
private static bool file_size_label_transform(Binding binding, Value from_value, ref Value to_value) {
to_value = FileDefaultWidget.get_size_string((int64) from_value);
return true;
@@ -153,7 +180,7 @@ public class FileImageWidget : Widget {
}
public async void load_from_file(File file, string file_name) throws GLib.Error {
- FixedRatioPicture image = new FixedRatioPicture() { min_width=100, min_height=100, max_width=600, max_height=300 };
+ FixedRatioPicture image = create_picture();
FileInputStream file_stream = null;
try {
@@ -201,7 +228,7 @@ public class FileImageWidget : Widget {
throw new Error(-1, 0, "Error scaling preview image");
}
- FixedRatioPicture image = new FixedRatioPicture() { min_width=100, min_height=100, max_width=600, max_height=300 };
+ FixedRatioPicture image = create_picture();
image.paintable = Texture.for_pixbuf(pixbuf);
stack.add_child(image);
stack.set_visible_child(image);
@@ -216,12 +243,12 @@ public class FileImageWidget : Widget {
if (n_press == 1) {
image_overlay_toolbar.visible = !image_overlay_toolbar.visible;
} else if (n_press == 2) {
- this.activate_action("file.open", null);
+ Dino.Application.get_default().activate_action("file_open_externally", new Variant.int32(file_transfer.id));
image_overlay_toolbar.visible = false;
}
break;
default:
- this.activate_action("file.open", null);
+ Dino.Application.get_default().activate_action("file_open_externally", new Variant.int32(file_transfer.id));
image_overlay_toolbar.visible = false;
break;
}
@@ -237,6 +264,20 @@ public class FileImageWidget : Widget {
(file_transfer.state == FileTransfer.State.COMPLETE || file_transfer.thumbnails.size > 0);
}
+ private FixedRatioPicture create_picture() {
+ if (size == -1) {
+ return new FixedRatioPicture() {
+ min_width=100, max_width=600,
+ min_height=100, max_height=300
+ };
+ } else {
+ return new FixedRatioPicture() {
+ height_request = size, width_request = size,
+ content_fit = ContentFit.COVER, halign = Align.START
+ };
+ }
+ }
+
public override void dispose() {
if (overlay != null && overlay.parent != null) overlay.unparent();
base.dispose();
diff --git a/main/src/ui/conversation_content_view/file_transmission_progress.vala b/main/src/ui/conversation_content_view/file_transmission_progress.vala
index e3f33448..3d893f52 100644
--- a/main/src/ui/conversation_content_view/file_transmission_progress.vala
+++ b/main/src/ui/conversation_content_view/file_transmission_progress.vala
@@ -9,6 +9,9 @@ namespace Dino.Ui {
public class FileTransmissionProgress : Adw.Bin {
+ public signal void start_download();
+ public signal void cancel_transfer();
+
public enum State {
UNKNOWN_SOURCE,
DOWNLOAD_NOT_STARTED,
@@ -81,9 +84,7 @@ namespace Dino.Ui {
}
}
-#if GTK_4_14
private static extern Gsk.Path create_progress_arc(Gsk.Path circle, float percentage);
-#endif
public override void snapshot(Gtk.Snapshot snapshot) {
base.snapshot(snapshot);
@@ -94,7 +95,6 @@ namespace Dino.Ui {
float line_width = (float) LINE_WIDTH;
snapshot.translate({get_width() / 2, get_height() / 2});
-#if GTK_4_14
var fg_color = get_color();
get_style_context().lookup_color("accent_color", out fg_color);
var builder = new Gsk.PathBuilder();
@@ -104,16 +104,6 @@ namespace Dino.Ui {
stroke.set_line_cap(Gsk.LineCap.ROUND);
var arc_path = create_progress_arc(circle_path, (float) progress_animation.value);
snapshot.append_stroke(arc_path, stroke, fg_color);
-#else
- var fg_color = get_style_context().get_color();
- get_style_context().lookup_color("accent_color", out fg_color);
- var context = snapshot.append_cairo({{-radius, -radius}, {radius*2, radius*2}});
- context.set_line_cap(Cairo.LineCap.ROUND);
- context.set_line_width(line_width);
- context.set_source_rgba(fg_color.red, fg_color.green, fg_color.blue, fg_color.alpha);
- context.arc(0, 0, radius - line_width / 2, -0.5 * Math.PI, (progress_animation.value - 0.25) * 2 * Math.PI);
- context.stroke();
-#endif
}
}
@@ -124,11 +114,12 @@ namespace Dino.Ui {
break;
case DOWNLOAD_NOT_STARTED_FAILED_BEFORE:
case DOWNLOAD_NOT_STARTED:
+ start_download();
this.activate_action("file.download", null);
break;
case DOWNLOADING:
case UPLOADING:
- this.activate_action("file.cancel", null);
+ cancel_transfer();
break;
}
}
diff --git a/main/src/ui/conversation_content_view/file_widget.vala b/main/src/ui/conversation_content_view/file_widget.vala
index 3c21412a..d6d2415a 100644
--- a/main/src/ui/conversation_content_view/file_widget.vala
+++ b/main/src/ui/conversation_content_view/file_widget.vala
@@ -58,18 +58,6 @@ public class FileWidget : SizeRequestBin {
private FileDefaultWidgetController default_widget_controller;
private Widget? content = null;
- public signal void open_file();
- public signal void save_file_as();
- public signal void start_download();
- public signal void cancel_download();
-
- class construct {
- install_action("file.open", null, (widget, action_name) => { ((FileWidget) widget).open_file(); });
- install_action("file.save_as", null, (widget, action_name) => { ((FileWidget) widget).save_file_as(); });
- install_action("file.download", null, (widget, action_name) => { ((FileWidget) widget).start_download(); });
- install_action("file.cancel", null, (widget, action_name) => { ((FileWidget) widget).cancel_download(); });
- }
-
construct {
margin_top = 4;
size_request_mode = SizeRequestMode.HEIGHT_FOR_WIDTH;
@@ -80,11 +68,6 @@ public class FileWidget : SizeRequestBin {
this.file_transfer = file_transfer;
update_widget.begin();
-// size_allocate.connect((allocation) => {
-// if (allocation.height > parent.get_allocated_height()) {
-// Idle.add(() => { parent.queue_resize(); return false; });
-// }
-// });
file_transfer.bind_property("state", this, "file-transfer-state");
file_transfer.bind_property("content-type", this, "file-transfer-content-type");
@@ -102,8 +85,8 @@ public class FileWidget : SizeRequestBin {
FileImageWidget file_image_widget = null;
try {
- file_image_widget = new FileImageWidget();
- yield file_image_widget.set_file_transfer(file_transfer);
+ file_image_widget = new FileImageWidget.from_file_transfer(file_transfer);
+ file_image_widget.add_css_class("file-image-widget");
// If the widget changed in the meanwhile, stop
if (content != content_bak) return;
@@ -166,50 +149,6 @@ public class FileWidgetController : Object {
});
this.file_transfer = file_transfer;
this.stream_interactor = stream_interactor;
-
- widget.open_file.connect(open_file);
- widget.save_file_as.connect(save_file);
- widget.start_download.connect(start_download);
- widget.cancel_download.connect(cancel_download);
- }
-
- private void open_file() {
- try{
- AppInfo.launch_default_for_uri(file_transfer.get_file().get_uri(), null);
- } catch (Error err) {
- warning("Failed to open %s - %s", file_transfer.get_file().get_uri(), err.message);
- }
- }
-
- private void save_file() {
- var save_dialog = new FileChooserNative(_("Save as…"), widget.get_root() as Gtk.Window, FileChooserAction.SAVE, null, null);
- save_dialog.set_modal(true);
- save_dialog.set_current_name(file_transfer.file_name);
-
- save_dialog.response.connect(() => {
- File? target_file = save_dialog.get_file();
- if (target_file == null) {
- warning("No file returned from save dialog.");
- return;
- }
- try {
- file_transfer.get_file().copy(save_dialog.get_file(), GLib.FileCopyFlags.OVERWRITE, null);
- } catch (Error err) {
- warning("Failed copy file %s - %s", file_transfer.get_file().get_uri(), err.message);
- }
- });
-
- save_dialog.show();
- }
-
- private void start_download() {
- if (stream_interactor != null) {
- stream_interactor.get_module(FileManager.IDENTITY).download_file.begin(file_transfer);
- }
- }
-
- private void cancel_download() {
- file_transfer.cancellable.cancel();
}
}
@@ -248,16 +187,16 @@ public class FileDefaultWidgetController : Object {
private void update_file_info() {
state = file_transfer.state;
- widget.update_file_info(file_transfer.content_type, file_transfer.state, file_transfer.direction, file_transfer.size, file_transfer.transferred_bytes);
+ widget.update_file_info(file_transfer);
}
private void on_clicked() {
switch (state) {
case FileTransfer.State.COMPLETE:
- widget.activate_action("file.open", null);
+ Dino.Application.get_default().activate_action("file_open_externally", new GLib.Variant.int32(file_transfer.id));
break;
case FileTransfer.State.NOT_STARTED:
- widget.activate_action("file.download", null);
+ Dino.Application.get_default().activate_action("file_start_download", new GLib.Variant.int32(file_transfer.id));
break;
default:
// Clicking doesn't do anything in FAILED and IN_PROGRESS states
diff --git a/main/src/ui/conversation_selector/conversation_selector.vala b/main/src/ui/conversation_selector/conversation_selector.vala
index c11eea82..25ea1b1e 100644
--- a/main/src/ui/conversation_selector/conversation_selector.vala
+++ b/main/src/ui/conversation_selector/conversation_selector.vala
@@ -23,7 +23,7 @@ public class ConversationSelector : Widget {
list_box.add_css_class("navigation-sidebar");
this.layout_manager = new BinLayout();
- stream_interactor.get_module(ConversationManager.IDENTITY).conversation_activated.connect(add_conversation);
+ stream_interactor.get_module(ConversationManager.IDENTITY).conversation_activated.connect(on_conversation_activated);
stream_interactor.get_module(ConversationManager.IDENTITY).conversation_deactivated.connect(remove_conversation);
stream_interactor.get_module(ContentItemStore.IDENTITY).new_item.connect(on_content_item_received);
Timeout.add_seconds(60, () => {
@@ -34,6 +34,7 @@ public class ConversationSelector : Widget {
foreach (Conversation conversation in stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations()) {
add_conversation(conversation);
}
+ list_box.invalidate_sort();
return this;
}
@@ -74,6 +75,7 @@ public class ConversationSelector : Widget {
public void on_conversation_selected(Conversation conversation) {
if (!rows.has_key(conversation)) {
add_conversation(conversation);
+ list_box.invalidate_sort();
}
list_box.select_row(rows[conversation]);
}
@@ -84,6 +86,11 @@ public class ConversationSelector : Widget {
}
}
+ private void on_conversation_activated(Conversation conversation) {
+ add_conversation(conversation);
+ list_box.invalidate_sort();
+ }
+
private void add_conversation(Conversation conversation) {
ConversationSelectorRow row;
if (!rows.has_key(conversation)) {
@@ -113,7 +120,6 @@ public class ConversationSelector : Widget {
});
row.add_controller(drop_motion_controller);
}
- list_box.invalidate_sort();
}
private void select_fallback_conversation(Conversation conversation) {
diff --git a/main/src/ui/conversation_selector/conversation_selector_row.vala b/main/src/ui/conversation_selector/conversation_selector_row.vala
index 82c96fdc..95384a5e 100644
--- a/main/src/ui/conversation_selector/conversation_selector_row.vala
+++ b/main/src/ui/conversation_selector/conversation_selector_row.vala
@@ -257,6 +257,25 @@ public class ConversationSelectorRow : ListBoxRow {
message_label.label = (file_is_image ? _("Image received") : _("File received") );
}
break;
+ case FileGroupItem.TYPE:
+ FileGroupItem file_group_item = last_content_item as FileGroupItem;
+ FileTransfer first_transfer = file_group_item.file_group.file_transfers.get(0);
+
+ if (conversation.type_ == Conversation.Type.GROUPCHAT) {
+ // TODO properly display nick for oneself
+ nick_label.label = Util.get_participant_display_name(stream_interactor, conversation, first_transfer.from, true) + ": ";
+ } else {
+ nick_label.label = first_transfer.direction == Message.DIRECTION_SENT ? _("Me") + ": " : "";
+ }
+
+ bool all_files_images = Ui.all_files_images(file_group_item.file_group.file_transfers);
+ change_label_attribute(message_label, attr_style_new(Pango.Style.ITALIC));
+ if (first_transfer.direction == Message.DIRECTION_SENT) {
+ message_label.label = (all_files_images ? _("Images sent") : _("Files sent") );
+ } else {
+ message_label.label = (all_files_images ? _("Images received") : _("Files received") );
+ }
+ break;
case CallItem.TYPE:
CallItem call_item = (CallItem) last_content_item;
Call call = call_item.call;
diff --git a/main/src/ui/conversation_view.vala b/main/src/ui/conversation_view.vala
index 26043666..4bb1f537 100644
--- a/main/src/ui/conversation_view.vala
+++ b/main/src/ui/conversation_view.vala
@@ -17,6 +17,27 @@ public class ConversationView : Widget {
construct {
this.layout_manager = new BinLayout();
}
+
+ public void open_save_file_dialog(FileTransfer file_transfer) {
+ var save_dialog = new FileChooserNative(_("Save as…"), (Gtk.Window) this.get_root(), FileChooserAction.SAVE, null, null);
+ save_dialog.set_modal(true);
+ save_dialog.set_current_name(file_transfer.file_name);
+
+ save_dialog.response.connect(() => {
+ File? target_file = save_dialog.get_file();
+ if (target_file == null) {
+ warning("No file returned from save dialog.");
+ return;
+ }
+ try {
+ file_transfer.get_file().copy(save_dialog.get_file(), GLib.FileCopyFlags.OVERWRITE, null);
+ } catch (Error err) {
+ warning("Failed copy file %s - %s", file_transfer.get_file().get_uri(), err.message);
+ }
+ });
+
+ save_dialog.show();
+ }
}
}
diff --git a/main/src/ui/conversation_view_controller.vala b/main/src/ui/conversation_view_controller.vala
index 0acaae59..bff8a70b 100644
--- a/main/src/ui/conversation_view_controller.vala
+++ b/main/src/ui/conversation_view_controller.vala
@@ -228,10 +228,6 @@ public class ConversationViewController : Object {
chooser.show();
}
- private void send_file(File file) {
- stream_interactor.get_module(FileManager.IDENTITY).send_file.begin(file, conversation);
- }
-
private bool forward_key_press_to_chat_input(EventControllerKey key_controller, uint keyval, uint keycode, Gdk.ModifierType state) {
if (view.get_root().get_focus() is TextView) {
return false;
diff --git a/main/src/ui/main_window.vala b/main/src/ui/main_window.vala
index 98d68e64..fc18d2bd 100644
--- a/main/src/ui/main_window.vala
+++ b/main/src/ui/main_window.vala
@@ -11,23 +11,23 @@ public class MainWindow : Gtk.ApplicationWindow {
public signal void conversation_selected(Conversation conversation);
- [GtkChild] public Stack stack;
- [GtkChild] public Adw.NavigationSplitView navigation_split_view;
+ [GtkChild] public unowned Stack stack;
+ [GtkChild] public unowned Adw.NavigationSplitView navigation_split_view;
- [GtkChild] public SearchEntry conversation_search_entry;
- [GtkChild] public MenuButton menu_button;
+ [GtkChild] public unowned SearchEntry conversation_search_entry;
+ [GtkChild] public unowned MenuButton menu_button;
[GtkChild] private unowned Box conversation_list_toolbar;
- [GtkChild] public Adw.HeaderBar conversation_headerbar;
- [GtkChild] public Button conversation_title_button;
- [GtkChild] public Adw.WindowTitle conversation_window_title;
+ [GtkChild] public unowned Adw.HeaderBar conversation_headerbar;
+ [GtkChild] public unowned Button conversation_title_button;
+ [GtkChild] public unowned Adw.WindowTitle conversation_window_title;
- [GtkChild] public ConversationView conversation_view;
- [GtkChild] public ConversationSelector conversation_selector;
- [GtkChild] public Adw.Flap search_flap;
- [GtkChild] private Stack left_stack;
- [GtkChild] private Stack right_stack;
- [GtkChild] public Adw.Bin search_frame;
+ [GtkChild] public unowned ConversationView conversation_view;
+ [GtkChild] public unowned ConversationSelector conversation_selector;
+ [GtkChild] public unowned Adw.Flap search_flap;
+ [GtkChild] private unowned Stack left_stack;
+ [GtkChild] private unowned Stack right_stack;
+ [GtkChild] public unowned Adw.Bin search_frame;
public GlobalSearch global_search;
@@ -54,6 +54,9 @@ public class MainWindow : Gtk.ApplicationWindow {
this.title = "Dino";
this.add_css_class("dino-main");
+ if (Dino.get_version().contains("~git")) {
+ this.add_css_class("devel");
+ }
var header_size_group = new SizeGroup(SizeGroupMode.VERTICAL);
header_size_group.add_widget(conversation_list_toolbar);
diff --git a/main/src/ui/util/data_forms.vala b/main/src/ui/util/data_forms.vala
index 7fb9b87d..0b91da15 100644
--- a/main/src/ui/util/data_forms.vala
+++ b/main/src/ui/util/data_forms.vala
@@ -18,7 +18,7 @@ namespace Dino.Ui.Util {
}
public static ViewModel.PreferencesRow.Any? get_data_form_field_view_model(DataForms.DataForm.Field field) {
- if (field.type_ == null) return null;
+ if (field.type_ == DataForms.DataForm.Type.UNKNOWN) return null;
ViewModel.PreferencesRow.Any? view_model = null;
diff --git a/main/src/ui/util/helper.vala b/main/src/ui/util/helper.vala
index e9035be0..a126a196 100644
--- a/main/src/ui/util/helper.vala
+++ b/main/src/ui/util/helper.vala
@@ -415,18 +415,7 @@ public bool use_tooltips() {
}
public static void menu_button_set_icon_with_size(MenuButton menu_button, string icon_name, int pixel_size) {
-#if GTK_4_6 && VALA_0_52
menu_button.set_child(new Image.from_icon_name(icon_name) { pixel_size=pixel_size });
-#else
- menu_button.set_icon_name(icon_name);
- var button = menu_button.get_first_child() as Button;
- if (button == null) return;
- var box = button.child as Box;
- if (box == null) return;
- var image = box.get_first_child() as Image;
- if (image == null) return;
- image.pixel_size = pixel_size;
-#endif
}
}
diff --git a/main/src/ui/widgets/avatar_picture.vala b/main/src/ui/widgets/avatar_picture.vala
index 18e4d02f..b4636f49 100644
--- a/main/src/ui/widgets/avatar_picture.vala
+++ b/main/src/ui/widgets/avatar_picture.vala
@@ -5,7 +5,20 @@ using Xmpp;
public class Dino.Ui.ViewModel.AvatarPictureTileModel : Object {
public string display_text { get; set; }
public Gdk.RGBA background_color { get; set; }
- public File? image_file { get; set; }
+
+ private File? _image_file;
+ [CCode (notify = false)]
+ public File? image_file {
+ get {
+ return _image_file;
+ }
+ set {
+ if (_image_file == value) return;
+ if (_image_file != null && value != null && _image_file.equal(value)) return;
+ _image_file = value;
+ notify_property("image-file");
+ }
+ }
}
public class Dino.Ui.ViewModel.AvatarPictureModel : Object {
@@ -23,8 +36,18 @@ public class Dino.Ui.ViewModel.ConversationParticipantAvatarPictureTileModel : A
public ConversationParticipantAvatarPictureTileModel(StreamInteractor stream_interactor, Conversation conversation, Jid jid) {
this.stream_interactor = stream_interactor;
+
+ set_conversation_participant(conversation, jid);
+
+ stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect(on_roster_updated);
+ avatar_manager.received_avatar.connect(on_received_avatar);
+ avatar_manager.fetched_avatar.connect(on_received_avatar);
+ }
+
+ public void set_conversation_participant(Conversation conversation, Jid jid) {
this.conversation = conversation;
this.primary_avatar_jid = jid;
+ this.secondary_avatar_jid = null;
this.display_name_jid = jid;
string color_id = jid.to_string();
@@ -43,14 +66,11 @@ public class Dino.Ui.ViewModel.ConversationParticipantAvatarPictureTileModel : A
}
string display = Util.get_participant_display_name(stream_interactor, conversation, display_name_jid);
display_text = display.get_char(0).toupper().to_string();
- stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect(on_roster_updated);
float[] rgbf = color_id != null ? Xep.ConsistentColor.string_to_rgbf(color_id) : new float[] {0.5f, 0.5f, 0.5f};
background_color = Gdk.RGBA() { red = rgbf[0], green = rgbf[1], blue = rgbf[2], alpha = 1.0f};
update_image_file();
- avatar_manager.received_avatar.connect(on_received_avatar);
- avatar_manager.fetched_avatar.connect(on_received_avatar);
}
private void update_image_file() {
@@ -140,55 +160,76 @@ public class Dino.Ui.ViewModel.CompatAvatarPictureModel : AvatarPictureModel {
private void on_room_updated(Account account, Jid room) {
if (conversation != null && account.equals(conversation.account) && conversation.counterpart.equals_bare(room)) {
- reset();
- set_conversation(conversation);
+ update_all();
}
}
private void on_received_avatar(Jid jid, Account account) {
+ // Only update group chat avatar when the respective jid avatar is actually used in it
+ if (conversation == null || conversation.type_ == Conversation.Type.GROUPCHAT && !jid.is_bare()) return;
on_room_updated(account, jid);
}
- public void reset() {
- (tiles as GLib.ListStore).remove_all();
- }
-
public CompatAvatarPictureModel set_conversation(Conversation conversation) {
if (stream_interactor == null) {
critical("set_conversation() used on CompatAvatarPictureModel without stream_interactor");
return this;
}
this.conversation = conversation;
+ update_all();
+ return this;
+ }
+
+ private void update_all() {
+ uint idx = 0;
if (conversation.type_ == Conversation.Type.GROUPCHAT) {
if (avatar_manager.has_avatar(conversation.account, conversation.counterpart)) {
- add_internal("#", conversation.counterpart.to_string(), avatar_manager.get_avatar_file(conversation.account, conversation.counterpart));
+ set_internal(idx++, "#", conversation.counterpart.to_string(), avatar_manager.get_avatar_file(conversation.account, conversation.counterpart));
} else {
Gee.List<Jid>? occupants = muc_manager.get_other_offline_members(conversation.counterpart, conversation.account);
if (occupants != null && !occupants.is_empty && muc_manager.is_private_room(conversation.account, conversation.counterpart)) {
int count = occupants.size > 4 ? 3 : occupants.size;
for (int i = 0; i < count; i++) {
- add_participant(conversation, occupants[i]);
+ set_participant(idx++, conversation, occupants[i]);
}
if (occupants.size > 4) {
- add_internal("+");
+ set_internal(idx++, "+");
}
} else {
- add_internal("#", conversation.counterpart.to_string());
+ set_internal(idx++, "#", conversation.counterpart.to_string());
}
}
} else {
- add_participant(conversation, conversation.counterpart);
+ set_participant(idx++, conversation, conversation.counterpart);
+ }
+
+ GLib.ListStore store = tiles as GLib.ListStore;
+ if (store.get_n_items() >= idx) {
+ store.splice(idx, store.get_n_items() - idx, {});
}
- return this;
}
public CompatAvatarPictureModel add_participant(Conversation conversation, Jid jid) {
+ set_participant(tiles.get_n_items(), conversation, jid);
+ return this;
+ }
+
+ public AvatarPictureTileModel set_participant(uint idx, Conversation conversation, Jid jid) {
if (stream_interactor == null) {
- critical("add_participant() used on CompatAvatarPictureModel without stream_interactor");
- return this;
+ error("set_participant() used on CompatAvatarPictureModel without stream_interactor");
}
- (tiles as GLib.ListStore).append(new ConversationParticipantAvatarPictureTileModel(stream_interactor, conversation, jid));
- return this;
+ GLib.ListStore store = tiles as GLib.ListStore;
+ while (idx >= store.get_n_items()) {
+ store.append(new ViewModel.AvatarPictureTileModel());
+ }
+ var model = store.get_item(idx) as ConversationParticipantAvatarPictureTileModel;
+ if (model == null) {
+ model = new ConversationParticipantAvatarPictureTileModel(stream_interactor, conversation, jid);
+ store.splice(idx, 1, {model});
+ } else {
+ model.set_conversation_participant(conversation, jid);
+ }
+ return model;
}
public CompatAvatarPictureModel add(string display, string? color_id = null, File? image_file = null) {
@@ -197,14 +238,28 @@ public class Dino.Ui.ViewModel.CompatAvatarPictureModel : AvatarPictureModel {
}
private AvatarPictureTileModel add_internal(string display, string? color_id = null, File? image_file = null) {
+ return set_internal(tiles.get_n_items(), display, color_id, image_file);
+ }
+
+ private AvatarPictureTileModel set_internal(uint idx, string display, string? color_id = null, File? image_file = null) {
GLib.ListStore store = tiles as GLib.ListStore;
float[] rgbf = color_id != null ? Xep.ConsistentColor.string_to_rgbf(color_id) : new float[] {0.5f, 0.5f, 0.5f};
- var model = new ViewModel.AvatarPictureTileModel() {
- display_text = display.get_char(0).toupper().to_string(),
- background_color = Gdk.RGBA() { red = rgbf[0], green = rgbf[1], blue = rgbf[2], alpha = 1.0f},
- image_file = image_file
- };
- store.append(model);
+ while (idx >= store.get_n_items()) {
+ store.append(new ViewModel.AvatarPictureTileModel());
+ }
+ var model = store.get_item(idx) as ViewModel.AvatarPictureTileModel;
+ if (model == null) {
+ model = new ViewModel.AvatarPictureTileModel() {
+ display_text = display.get_char(0).toupper().to_string(),
+ background_color = Gdk.RGBA() { red = rgbf[0], green = rgbf[1], blue = rgbf[2], alpha = 1.0f},
+ image_file = image_file
+ };
+ store.splice(idx, 1, {model});
+ } else {
+ model.display_text = display.get_char(0).toupper().to_string();
+ model.background_color = Gdk.RGBA() { red = rgbf[0], green = rgbf[1], blue = rgbf[2], alpha = 1.0f};
+ model.image_file = image_file;
+ }
return model;
}
}
@@ -476,11 +531,7 @@ public class Dino.Ui.AvatarPicture : Gtk.Widget {
label.insert_after(this, null);
label.attributes = new Pango.AttrList();
label.attributes.insert(Pango.attr_foreground_new(uint16.MAX, uint16.MAX, uint16.MAX));
-#if GTK_4_8 && (VALA_0_56_GREATER_5 || VALA_0_58)
picture.content_fit = Gtk.ContentFit.COVER;
-#elif GTK_4_8
- picture.@set("content-fit", 2);
-#endif
picture.insert_after(this, label);
this.notify["model"].connect(on_model_changed);
check_widget_leak(this);
diff --git a/main/src/ui/widgets/fixed_ratio_picture.vala b/main/src/ui/widgets/fixed_ratio_picture.vala
index 6b04ea61..1898efa7 100644
--- a/main/src/ui/widgets/fixed_ratio_picture.vala
+++ b/main/src/ui/widgets/fixed_ratio_picture.vala
@@ -8,9 +8,7 @@ class Dino.Ui.FixedRatioPicture : Gtk.Widget {
public int max_height { get; set; default = int.MAX; }
public File file { get { return inner.file; } set { inner.file = value; } }
public Gdk.Paintable paintable { get { return inner.paintable; } set { inner.paintable = value; } }
-#if GTK_4_8 && (VALA_0_56_GREATER_5 || VALA_0_58)
public Gtk.ContentFit content_fit { get { return inner.content_fit; } set { inner.content_fit = value; } }
-#endif
private Gtk.Picture inner = new Gtk.Picture();
construct {
diff --git a/main/src/windows/conversation_details.vala b/main/src/windows/conversation_details.vala
index e1f3061f..8ec3125b 100644
--- a/main/src/windows/conversation_details.vala
+++ b/main/src/windows/conversation_details.vala
@@ -160,11 +160,7 @@ namespace Dino.Ui.ConversationDetails {
}
private void create_members() {
-#if GTK_4_8 && (VALA_0_56_GREATER_5 || VALA_0_58)
if (model.members_sorted.n_items == 0) return;
-#else
- if (model.members_sorted.model.get_n_items() == 0) return;
-#endif
var selection_model = new NoSelection(model.members_sorted);
var item_factory = new BuilderListItemFactory.from_resource(null, "/im/dino/Dino/muc_member_list_row.ui");
diff --git a/plugins/openpgp/vapi/gpg-error.vapi b/main/vapi/gpg-error.vapi
index 3ad6c580..3ad6c580 100644
--- a/plugins/openpgp/vapi/gpg-error.vapi
+++ b/main/vapi/gpg-error.vapi
diff --git a/plugins/openpgp/vapi/gpgme.vapi b/main/vapi/gpgme.vapi
index 37e74509..5976eb66 100644
--- a/plugins/openpgp/vapi/gpgme.vapi
+++ b/main/vapi/gpgme.vapi
@@ -23,7 +23,7 @@
*
*/
-[CCode (lower_case_cprefix = "gpgme_", cheader_filename = "gpgme.h,gpgme_fix.h")]
+[CCode (lower_case_cprefix = "gpgme_", cheader_filename = "gpgme.h,src/plugins/openpgp/gpgme_fix.h")]
namespace GPG {
public static GLib.RecMutex global_mutex;
diff --git a/plugins/rtp/vapi/gstreamer-base-1.0.vapi b/main/vapi/gstreamer-base-1.0.vapi
index 04045c69..04045c69 100644
--- a/plugins/rtp/vapi/gstreamer-base-1.0.vapi
+++ b/main/vapi/gstreamer-base-1.0.vapi
diff --git a/plugins/rtp/vapi/gstreamer-rtp-1.0.vapi b/main/vapi/gstreamer-rtp-1.0.vapi
index 35ad6619..35ad6619 100644
--- a/plugins/rtp/vapi/gstreamer-rtp-1.0.vapi
+++ b/main/vapi/gstreamer-rtp-1.0.vapi
diff --git a/plugins/rtp/vapi/gstreamer-video-1.0.vapi b/main/vapi/gstreamer-video-1.0.vapi
index c71a84aa..c71a84aa 100644
--- a/plugins/rtp/vapi/gstreamer-video-1.0.vapi
+++ b/main/vapi/gstreamer-video-1.0.vapi
diff --git a/plugins/rtp/vapi/webrtc-audio-processing.vapi b/main/vapi/libgcrypt.vapi
index e69de29b..e69de29b 100644
--- a/plugins/rtp/vapi/webrtc-audio-processing.vapi
+++ b/main/vapi/libgcrypt.vapi
diff --git a/main/vapi/libomemo-c.vapi b/main/vapi/libomemo-c.vapi
new file mode 100644
index 00000000..8a2b17d3
--- /dev/null
+++ b/main/vapi/libomemo-c.vapi
@@ -0,0 +1,692 @@
+namespace Omemo {
+
+ [CCode (cname = "int", cprefix = "SG_ERR_", cheader_filename = "omemo/signal_protocol.h", has_type_id = false)]
+ public enum ErrorCode {
+ [CCode (cname = "SG_SUCCESS")]
+ SUCCESS,
+ NOMEM,
+ INVAL,
+ UNKNOWN,
+ DUPLICATE_MESSAGE,
+ INVALID_KEY,
+ INVALID_KEY_ID,
+ INVALID_MAC,
+ INVALID_MESSAGE,
+ INVALID_VERSION,
+ LEGACY_MESSAGE,
+ NO_SESSION,
+ STALE_KEY_EXCHANGE,
+ UNTRUSTED_IDENTITY,
+ VRF_SIG_VERIF_FAILED,
+ INVALID_PROTO_BUF,
+ FP_VERSION_MISMATCH,
+ FP_IDENT_MISMATCH;
+ }
+
+ [CCode (cname = "SG_ERR_MINIMUM", cheader_filename = "omemo/signal_protocol.h")]
+ public const int MIN_ERROR_CODE;
+
+ [CCode (cname = "int", cprefix = "SG_LOG_", cheader_filename = "omemo/signal_protocol.h", has_type_id = false)]
+ public enum LogLevel {
+ ERROR,
+ WARNING,
+ NOTICE,
+ INFO,
+ DEBUG
+ }
+
+ [CCode (cname = "signal_throw_gerror_by_code_", cheader_filename = "omemo/signal_protocol.h")]
+ private int throw_by_code(int code, string? message = null) throws GLib.Error {
+ if (code < 0 && code > MIN_ERROR_CODE) {
+ throw new GLib.Error(-1, code, "%s: %s", message ?? "libomemo-c error", ((ErrorCode)code).to_string());
+ }
+ return code;
+ }
+
+ [CCode (cname = "int", cprefix = "SG_CIPHER_", cheader_filename = "omemo/signal_protocol.h", has_type_id = false)]
+ public enum Cipher {
+ AES_CTR_NOPADDING,
+ AES_CBC_PKCS5,
+ AES_GCM_NOPADDING
+ }
+
+ [Compact]
+ [CCode (cname = "signal_type_base", ref_function="signal_type_ref_vapi", unref_function="signal_type_unref_vapi", cheader_filename="omemo/signal_protocol_types.h,src/crypto/omemo/helper.h")]
+ public class TypeBase {
+ }
+
+ [Compact]
+ [CCode (cname = "signal_buffer", cprefix = "signal_buffer_", cheader_filename = "omemo/signal_protocol_types.h", free_function="signal_buffer_free")]
+ public class Buffer {
+ [CCode (cname = "signal_buffer_alloc")]
+ public Buffer(size_t len);
+ [CCode (cname = "signal_buffer_create")]
+ public Buffer.from(uint8[] data);
+
+ public Buffer copy();
+ public Buffer append(uint8[] data);
+ public int compare(Buffer other);
+
+ public uint8 get(int i) { return data[i]; }
+ public void set(int i, uint8 val) { data[i] = val; }
+
+ public uint8[] data { get { int x = (int)len(); unowned uint8[] res = _data(); res.length = x; return res; } }
+
+ [CCode (array_length = false, cname = "signal_buffer_data")]
+ private unowned uint8[] _data();
+ private size_t len();
+ }
+
+ [Compact]
+ [CCode (cname = "signal_int_list", cheader_filename = "omemo/signal_protocol_types.h", free_function="signal_int_list_free")]
+ public class IntList {
+ [CCode (cname = "signal_int_list_alloc")]
+ public IntList();
+ [CCode (cname = "signal_int_list_push_back")]
+ public int add(int value);
+ public uint size { [CCode (cname = "signal_int_list_size")] get; }
+ [CCode (cname = "signal_int_list_at")]
+ public int get(uint index);
+ }
+
+ [Compact]
+ [CCode (cname = "session_builder", cprefix = "session_builder_", free_function="session_builder_free", cheader_filename = "omemo/session_builder.h")]
+ public class SessionBuilder {
+ [CCode (cname = "session_builder_process_pre_key_bundle")]
+ private int process_pre_key_bundle_(PreKeyBundle pre_key_bundle);
+ [CCode (cname = "session_builder_process_pre_key_bundle_")]
+ public void process_pre_key_bundle(PreKeyBundle pre_key_bundle) throws GLib.Error {
+ throw_by_code(process_pre_key_bundle_(pre_key_bundle));
+ }
+ public int version { get; set; }
+ }
+
+ [Compact]
+ [CCode (cname = "session_pre_key_bundle", cprefix = "session_pre_key_bundle_", cheader_filename = "omemo/session_pre_key.h")]
+ public class PreKeyBundle : TypeBase {
+ public static int create(out PreKeyBundle bundle, uint32 registration_id, int device_id, uint32 pre_key_id, ECPublicKey? pre_key_public,
+ uint32 signed_pre_key_id, ECPublicKey? signed_pre_key_public, uint8[]? signed_pre_key_signature, ECPublicKey? identity_key);
+ public uint32 registration_id { get; }
+ public int device_id { get; }
+ public uint32 pre_key_id { get; }
+ public ECPublicKey pre_key { owned get; }
+ public uint32 signed_pre_key_id { get; }
+ public ECPublicKey signed_pre_key { owned get; }
+ public Buffer signed_pre_key_signature { owned get; }
+ public ECPublicKey identity_key { owned get; }
+ }
+
+ [Compact]
+ [CCode (cname = "session_pre_key", cprefix = "session_pre_key_", cheader_filename = "omemo/session_pre_key.h,src/crypto/omemo/helper.h")]
+ public class PreKeyRecord : TypeBase {
+ public static int create(out PreKeyRecord pre_key, uint32 id, ECKeyPair key_pair);
+ //public static int deserialize(out PreKeyRecord pre_key, uint8[] data, NativeContext global_context);
+ [CCode (instance_pos = 2)]
+ public int serialze(out Buffer buffer);
+ public uint32 id { get; }
+ public ECKeyPair key_pair { get; }
+ }
+
+ [Compact]
+ [CCode (cname = "session_record", cprefix = "session_record_", cheader_filename = "omemo/signal_protocol_types.h")]
+ public class SessionRecord : TypeBase {
+ public SessionState state { get; }
+ public Buffer user_record { get; }
+ }
+
+ [Compact]
+ [CCode (cname = "session_state", cprefix = "session_state_", cheader_filename = "omemo/session_state.h")]
+ public class SessionState : TypeBase {
+ //public static int create(out SessionState state, NativeContext context);
+ //public static int deserialize(out SessionState state, uint8[] data, NativeContext context);
+ //public static int copy(out SessionState state, SessionState other_state, NativeContext context);
+ [CCode (instance_pos = 2)]
+ public int serialze(out Buffer buffer);
+
+ public uint32 session_version { get; set; }
+ public ECPublicKey local_identity_key { get; set; }
+ public ECPublicKey remote_identity_key { get; set; }
+ //public Ratchet.RootKey root_key { get; set; }
+ public uint32 previous_counter { get; set; }
+ public ECPublicKey sender_ratchet_key { get; }
+ public ECKeyPair sender_ratchet_key_pair { get; }
+ //public Ratchet.ChainKey sender_chain_key { get; set; }
+ public uint32 remote_registration_id { get; set; }
+ public uint32 local_registration_id { get; set; }
+ public int needs_refresh { get; set; }
+ public ECPublicKey alice_base_key { get; set; }
+ }
+
+ [Compact]
+ [CCode (cname = "session_signed_pre_key", cprefix = "session_signed_pre_key_", cheader_filename = "omemo/session_pre_key.h")]
+ public class SignedPreKeyRecord : TypeBase {
+ public static int create(out SignedPreKeyRecord pre_key, uint32 id, uint64 timestamp, ECKeyPair key_pair, uint8[] signature, uint8[]? signature_omemo);
+ [CCode (instance_pos = 2)]
+ public int serialize(out Buffer buffer);
+
+ public uint32 id { get; }
+ public uint64 timestamp { get; }
+ public ECKeyPair key_pair { get; }
+ public uint8[] signature { [CCode (cname = "session_signed_pre_key_get_signature_")] get { int x = (int)get_signature_len(); unowned uint8[] res = get_signature(); res.length = x; return res; } }
+ public uint8[] signature_omemo { [CCode (cname = "session_signed_pre_key_get_signature_omemo_")] get { int x = (int)get_signature_omemo_len(); unowned uint8[] res = get_signature_omemo(); res.length = x; return res; } }
+
+ [CCode (array_length = false, cname = "session_signed_pre_key_get_signature")]
+ private unowned uint8[] get_signature();
+ private size_t get_signature_len();
+ [CCode (array_length = false, cname = "session_signed_pre_key_get_signature_omemo")]
+ private unowned uint8[] get_signature_omemo();
+ private size_t get_signature_omemo_len();
+ }
+
+ /**
+ * Address of an OMEMO message recipient
+ */
+ [Compact]
+ [CCode (cname = "signal_protocol_address", cprefix = "signal_protocol_address_", cheader_filename = "omemo/signal_protocol.h,src/crypto/omemo/helper.h")]
+ public class Address {
+ public Address(string name, int32 device_id);
+ public int32 device_id { get; set; }
+ public string name { owned get; set; }
+ }
+
+ /**
+ * A representation of a (group + sender + device) tuple
+ */
+ [Compact]
+ [CCode (cname = "signal_protocol_sender_key_name")]
+ public class SenderKeyName {
+ [CCode (cname = "group_id", array_length_cname="group_id_len")]
+ private char* group_id_;
+ private size_t group_id_len;
+ public Address sender;
+ }
+
+ [Compact]
+ [CCode (cname = "ec_public_key", cprefix = "ec_public_key_", cheader_filename = "omemo/curve.h,src/crypto/omemo/helper.h")]
+ public class ECPublicKey : TypeBase {
+ [CCode (cname = "curve_generate_public_key")]
+ public static int generate(out ECPublicKey public_key, ECPrivateKey private_key);
+ [CCode (instance_pos = 1, cname = "ec_public_key_serialize")]
+ private int serialize_([CCode (pos = 0)] out Buffer buffer);
+ [CCode (cname = "ec_public_key_serialize_")]
+ public uint8[] serialize() {
+ Buffer buffer;
+ int code = serialize_(out buffer);
+ if (code < 0 && code > MIN_ERROR_CODE) {
+ // Can only throw for invalid arguments or out of memory.
+ GLib.assert_not_reached();
+ }
+ return buffer.data;
+ }
+ [CCode (instance_pos = 1, cname = "ec_public_key_serialize_omemo")]
+ private int serialize_omemo_([CCode (pos = 0)] out Buffer buffer);
+ [CCode (cname = "ec_public_key_serialize_omemo_")]
+ public uint8[] serialize_omemo() {
+ Buffer buffer;
+ int code = serialize_omemo_(out buffer);
+ if (code < 0 && code > MIN_ERROR_CODE) {
+ // Can only throw for invalid arguments or out of memory.
+ GLib.assert_not_reached();
+ }
+ return buffer.data;
+ }
+ public Buffer ed { owned get; }
+ public Buffer mont { owned get; }
+ public int compare(ECPublicKey other);
+ public int memcmp(ECPublicKey other);
+ }
+
+ [Compact]
+ [CCode (cname = "ec_private_key", cprefix = "ec_private_key_", cheader_filename = "omemo/curve.h,src/crypto/omemo/helper.h")]
+ public class ECPrivateKey : TypeBase {
+ [CCode (instance_pos = 1, cname = "ec_private_key_serialize")]
+ private int serialize_([CCode (pos = 0)] out Buffer buffer);
+ [CCode (cname = "ec_private_key_serialize_")]
+ public uint8[] serialize() throws GLib.Error {
+ Buffer buffer;
+ int code = serialize_(out buffer);
+ if (code < 0 && code > MIN_ERROR_CODE) {
+ // Can only throw for invalid arguments or out of memory.
+ GLib.assert_not_reached();
+ }
+ return buffer.data;
+ }
+ public int compare(ECPublicKey other);
+ }
+
+ [Compact]
+ [CCode (cname = "ec_key_pair", cprefix="ec_key_pair_", cheader_filename = "omemo/curve.h,src/crypto/omemo/helper.h")]
+ public class ECKeyPair : TypeBase {
+ public static int create(out ECKeyPair key_pair, ECPublicKey public_key, ECPrivateKey private_key);
+ public ECPublicKey public { get; }
+ public ECPrivateKey private { get; }
+ }
+
+ [CCode (cname = "ratchet_message_keys", cheader_filename = "omemo/ratchet.h")]
+ public class MessageKeys {
+ }
+
+ [Compact]
+ [CCode (cname = "ratchet_identity_key_pair", cprefix = "ratchet_identity_key_pair_", cheader_filename = "omemo/ratchet.h,src/crypto/omemo/helper.h")]
+ public class IdentityKeyPair : TypeBase {
+ public static int create(out IdentityKeyPair key_pair, ECPublicKey public_key, ECPrivateKey private_key);
+ public int serialze(out Buffer buffer);
+ public ECPublicKey public { get; }
+ public ECPrivateKey private { get; }
+ }
+
+ [Compact]
+ [CCode (cname = "ec_public_key_list")]
+ public class PublicKeyList {}
+
+ /**
+ * The main entry point for OMEMO encrypt/decrypt operations.
+ *
+ * Once a session has been established with session_builder,
+ * this class can be used for all encrypt/decrypt operations within
+ * that session.
+ */
+ [Compact]
+ [CCode (cname = "session_cipher", cprefix = "session_cipher_", cheader_filename = "omemo/session_cipher.h", free_function = "session_cipher_free")]
+ public class SessionCipher {
+ public void* user_data { get; set; }
+ public DecryptionCallback decryption_callback { set; }
+ [CCode (cname = "session_cipher_encrypt")]
+ private int encrypt_(uint8[] padded_message, out CiphertextMessage encrypted_message);
+ [CCode (cname = "session_cipher_encrypt_")]
+ public CiphertextMessage encrypt(uint8[] padded_message) throws GLib.Error {
+ CiphertextMessage res;
+ throw_by_code(encrypt_(padded_message, out res));
+ return res;
+ }
+ [CCode (cname = "session_cipher_decrypt_pre_key_signal_message")]
+ private int decrypt_pre_key_message_(PreKeyOmemoMessage ciphertext, void* decrypt_context, out Buffer plaintext);
+ [CCode (cname = "session_cipher_decrypt_pre_key_signal_message_")]
+ public uint8[] decrypt_pre_key_message(PreKeyOmemoMessage ciphertext, void* decrypt_context = null) throws GLib.Error {
+ Buffer res;
+ throw_by_code(decrypt_pre_key_message_(ciphertext, decrypt_context, out res));
+ return res.data;
+ }
+ [CCode (cname = "session_cipher_decrypt_signal_message")]
+ private int decrypt_message_(OmemoMessage ciphertext, void* decrypt_context, out Buffer plaintext);
+ [CCode (cname = "session_cipher_decrypt_signal_message_")]
+ public uint8[] decrypt_message(OmemoMessage ciphertext, void* decrypt_context = null) throws GLib.Error {
+ Buffer res;
+ throw_by_code(decrypt_message_(ciphertext, decrypt_context, out res));
+ return res.data;
+ }
+ public int get_remote_registration_id(out uint32 remote_id);
+ [CCode (cname = "session_cipher_get_session_version")]
+ private int get_session_version_(out uint32 version);
+ [CCode (cname = "session_cipher_get_session_version_")]
+ public uint32 get_session_version() throws GLib.Error {
+ uint32 res;
+ throw_by_code(get_session_version_(out res));
+ return res;
+ }
+ public uint32 version { get; set; }
+
+ [CCode (has_target = false)]
+ public delegate int DecryptionCallback(SessionCipher cipher, Buffer plaintext, void* decrypt_context);
+ }
+
+ [CCode (cname = "int", cheader_filename = "omemo/protocol.h", has_type_id = false)]
+ public enum CiphertextType {
+ [CCode (cname = "CIPHERTEXT_SIGNAL_TYPE")]
+ SIGNAL,
+ [CCode (cname = "CIPHERTEXT_PREKEY_TYPE")]
+ PREKEY,
+ [CCode (cname = "CIPHERTEXT_SENDERKEY_TYPE")]
+ SENDERKEY,
+ [CCode (cname = "CIPHERTEXT_SENDERKEY_DISTRIBUTION_TYPE")]
+ SENDERKEY_DISTRIBUTION
+ }
+
+ [Compact]
+ [CCode (cname = "ciphertext_message", cprefix = "ciphertext_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
+ public abstract class CiphertextMessage : TypeBase {
+ public CiphertextType type { get; }
+ [CCode (cname = "ciphertext_message_get_serialized")]
+ private unowned Buffer get_serialized_();
+ public uint8[] serialized { [CCode (cname = "ciphertext_message_get_serialized_")] get {
+ return get_serialized_().data;
+ }}
+ }
+ [Compact]
+ [CCode (cname = "signal_message", cprefix = "signal_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
+ public class OmemoMessage : CiphertextMessage {
+ public ECPublicKey sender_ratchet_key { get; }
+ public uint8 message_version { get; }
+ public uint32 counter { get; }
+ public Buffer body { get; }
+ //public int verify_mac(uint8 message_version, ECPublicKey sender_identity_key, ECPublicKey receiver_identity_key, uint8[] mac, NativeContext global_context);
+ public static int is_legacy(uint8[] data);
+ }
+ [Compact]
+ [CCode (cname = "pre_key_signal_message", cprefix = "pre_key_signal_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
+ public class PreKeyOmemoMessage : CiphertextMessage {
+ public uint8 message_version { get; }
+ public ECPublicKey identity_key { get; }
+ public uint32 registration_id { get; }
+ public uint32 pre_key_id { get; }
+ public uint32 signed_pre_key_id { get; }
+ public ECPublicKey base_key { get; }
+ public OmemoMessage message { get; }
+ }
+ [Compact]
+ [CCode (cname = "sender_key_message", cprefix = "sender_key_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
+ public class SenderKeyMessage : CiphertextMessage {
+ public uint32 key_id { get; }
+ public uint32 iteration { get; }
+ public Buffer ciphertext { get; }
+ }
+ [Compact]
+ [CCode (cname = "sender_key_distribution_message", cprefix = "sender_key_distribution_message_", cheader_filename = "omemo/protocol.h,src/crypto/omemo/helper.h")]
+ public class SenderKeyDistributionMessage : CiphertextMessage {
+ public uint32 id { get; }
+ public uint32 iteration { get; }
+ public Buffer chain_key { get; }
+ public ECPublicKey signature_key { get; }
+ }
+
+ [CCode (cname = "signal_vala_encrypt", cheader_filename = "src/crypto/omemo/helper.h")]
+ private static int aes_encrypt_(out Buffer output, int cipher, uint8[] key, uint8[] iv, uint8[] plaintext, void *user_data);
+
+ [CCode (cname = "signal_vala_encrypt_")]
+ public uint8[] aes_encrypt(int cipher, uint8[] key, uint8[] iv, uint8[] plaintext) throws GLib.Error {
+ Buffer buf;
+ throw_by_code(aes_encrypt_(out buf, cipher, key, iv, plaintext, null));
+ return buf.data;
+ }
+
+ [CCode (cname = "signal_vala_decrypt", cheader_filename = "src/crypto/omemo/helper.h")]
+ private static int aes_decrypt_(out Buffer output, int cipher, uint8[] key, uint8[] iv, uint8[] ciphertext, void *user_data);
+
+ [CCode (cname = "signal_vala_decrypt_")]
+ public uint8[] aes_decrypt(int cipher, uint8[] key, uint8[] iv, uint8[] ciphertext) throws GLib.Error {
+ Buffer buf;
+ throw_by_code(aes_decrypt_(out buf, cipher, key, iv, ciphertext, null));
+ return buf.data;
+ }
+
+ [Compact]
+ [CCode (cname = "signal_context", cprefix="signal_context_", free_function="signal_context_destroy", cheader_filename = "omemo/signal_protocol.h")]
+ public class NativeContext {
+ public static int create(out NativeContext context, void* user_data);
+ public int set_crypto_provider(NativeCryptoProvider crypto_provider);
+ public int set_locking_functions(LockingFunc lock, LockingFunc unlock);
+ public int set_log_function(LogFunc log);
+ }
+ [CCode (has_target = false)]
+ public delegate void LockingFunc(void* user_data);
+ [CCode (has_target = false)]
+ public delegate void LogFunc(LogLevel level, string message, size_t len, void* user_data);
+
+ [Compact]
+ [CCode (cname = "signal_crypto_provider", cheader_filename = "omemo/signal_protocol.h")]
+ public struct NativeCryptoProvider {
+ public RandomFunc random_func;
+ public HmacSha256Init hmac_sha256_init_func;
+ public HmacSha256Update hmac_sha256_update_func;
+ public HmacSha256Final hmac_sha256_final_func;
+ public HmacSha256Cleanup hmac_sha256_cleanup_func;
+ public Sha512DigestInit sha512_digest_init_func;
+ public Sha512DigestUpdate sha512_digest_update_func;
+ public Sha512DigestFinal sha512_digest_final_func;
+ public Sha512DigestCleanup sha512_digest_cleanup_func;
+ public CryptFunc encrypt_func;
+ public CryptFunc decrypt_func;
+ public void* user_data;
+ }
+ [CCode (has_target = false)]
+ public delegate int RandomFunc(uint8[] data, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int HmacSha256Init(out void* hmac_context, uint8[] key, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int HmacSha256Update(void* hmac_context, uint8[] data, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int HmacSha256Final(void* hmac_context, out Buffer buffer, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int HmacSha256Cleanup(void* hmac_context, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int Sha512DigestInit(out void* digest_context, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int Sha512DigestUpdate(void* digest_context, uint8[] data, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int Sha512DigestFinal(void* digest_context, out Buffer buffer, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int Sha512DigestCleanup(void* digest_context, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int CryptFunc(out Buffer output, Cipher cipher, uint8[] key, uint8[] iv, uint8[] content, void* user_data);
+
+ [Compact]
+ [CCode (cname = "signal_protocol_session_store", cheader_filename = "omemo/signal_protocol.h")]
+ public struct NativeSessionStore {
+ public LoadSessionFunc load_session_func;
+ public GetSubDeviceSessionsFunc get_sub_device_sessions_func;
+ public StoreSessionFunc store_session_func;
+ public ContainsSessionFunc contains_session_func;
+ public DeleteSessionFunc delete_session_func;
+ public DeleteAllSessionsFunc delete_all_sessions_func;
+ public DestroyFunc destroy_func;
+ public void* user_data;
+ }
+ [CCode (has_target = false)]
+ public delegate int LoadSessionFunc(out Buffer record, out Buffer user_record, [CCode (type = "const signal_protocol_address *")] Address address, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int GetSubDeviceSessionsFunc(out IntList sessions, [CCode (array_length_type = "size_t", type = "const char *")] char[] name, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int StoreSessionFunc([CCode (type = "const signal_protocol_address *")] Address address, [CCode (array_length_type = "size_t")] uint8[] record, [CCode (array_length_type = "size_t")] uint8[] user_record, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int ContainsSessionFunc([CCode (type = "const signal_protocol_address *")] Address address, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int DeleteSessionFunc([CCode (type = "const signal_protocol_address *")] Address address, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int DeleteAllSessionsFunc([CCode (array_length_type = "size_t", type = "const char *")] char[] name, void* user_data);
+
+ [Compact]
+ [CCode (cname = "signal_protocol_identity_key_store", cheader_filename = "omemo/signal_protocol.h")]
+ public struct NativeIdentityKeyStore {
+ GetIdentityKeyPairFunc get_identity_key_pair;
+ GetLocalRegistrationIdFunc get_local_registration_id;
+ SaveIdentityFunc save_identity;
+ IsTrustedIdentityFunc is_trusted_identity;
+ DestroyFunc destroy_func;
+ void* user_data;
+ }
+ [CCode (has_target = false)]
+ public delegate int GetIdentityKeyPairFunc(out Buffer public_data, out Buffer private_data, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int GetLocalRegistrationIdFunc(void* user_data, out uint32 registration_id);
+ [CCode (has_target = false)]
+ public delegate int SaveIdentityFunc([CCode (type = "const signal_protocol_address *")] Address address, [CCode (array_length_type = "size_t")] uint8[] key, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int IsTrustedIdentityFunc([CCode (type = "const signal_protocol_address *")] Address address, [CCode (array_length_type = "size_t")] uint8[] key, void* user_data);
+
+ [Compact]
+ [CCode (cname = "signal_protocol_pre_key_store", cheader_filename = "omemo/signal_protocol.h")]
+ public struct NativePreKeyStore {
+ LoadPreKeyFunc load_pre_key;
+ StorePreKeyFunc store_pre_key;
+ ContainsPreKeyFunc contains_pre_key;
+ RemovePreKeyFunc remove_pre_key;
+ DestroyFunc destroy_func;
+ void* user_data;
+ }
+ [CCode (has_target = false)]
+ public delegate int LoadPreKeyFunc(out Buffer record, uint32 pre_key_id, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int StorePreKeyFunc(uint32 pre_key_id, [CCode (array_length_type = "size_t")] uint8[] record, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int ContainsPreKeyFunc(uint32 pre_key_id, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int RemovePreKeyFunc(uint32 pre_key_id, void* user_data);
+
+
+ [Compact]
+ [CCode (cname = "signal_protocol_signed_pre_key_store", cheader_filename = "omemo/signal_protocol.h")]
+ public struct NativeSignedPreKeyStore {
+ LoadPreKeyFunc load_signed_pre_key;
+ StorePreKeyFunc store_signed_pre_key;
+ ContainsPreKeyFunc contains_signed_pre_key;
+ RemovePreKeyFunc remove_signed_pre_key;
+ DestroyFunc destroy_func;
+ void* user_data;
+ }
+
+
+ [Compact]
+ [CCode (cname = "signal_protocol_sender_key_store")]
+ public struct NativeSenderKeyStore {
+ StoreSenderKeyFunc store_sender_key;
+ LoadSenderKeyFunc load_sender_key;
+ DestroyFunc destroy_func;
+ void* user_data;
+ }
+ [CCode (has_target = false)]
+ public delegate int StoreSenderKeyFunc(SenderKeyName sender_key_name, [CCode (array_length_type = "size_t")] uint8[] record, [CCode (array_length_type = "size_t")] uint8[] user_record, void* user_data);
+ [CCode (has_target = false)]
+ public delegate int LoadSenderKeyFunc(out Buffer record, out Buffer user_record, SenderKeyName sender_key_name, void* user_data);
+
+ [CCode (has_target = false)]
+ public delegate void DestroyFunc(void* user_data);
+
+ [Compact]
+ [CCode (cname = "signal_protocol_store_context", cprefix = "signal_protocol_store_context_", free_function="signal_protocol_store_context_destroy", cheader_filename = "omemo/signal_protocol.h")]
+ public class NativeStoreContext {
+ public static int create(out NativeStoreContext context, NativeContext global_context);
+ public int set_session_store(NativeSessionStore store);
+ public int set_pre_key_store(NativePreKeyStore store);
+ public int set_signed_pre_key_store(NativeSignedPreKeyStore store);
+ public int set_identity_key_store(NativeIdentityKeyStore store);
+ public int set_sender_key_store(NativeSenderKeyStore store);
+ }
+
+
+ [CCode (cheader_filename = "omemo/signal_protocol.h")]
+ namespace Protocol {
+
+ /**
+ * Interface to the pre-key store.
+ * These functions will use the callbacks in the provided
+ * signal_protocol_store_context instance and operate in terms of higher level
+ * library data structures.
+ */
+ [CCode (lower_case_cprefix = "signal_protocol_pre_key_")]
+ namespace PreKey {
+ public int load_key(NativeStoreContext context, out PreKeyRecord pre_key, uint32 pre_key_id);
+ public int store_key(NativeStoreContext context, PreKeyRecord pre_key);
+ public int contains_key(NativeStoreContext context, uint32 pre_key_id);
+ public int remove_key(NativeStoreContext context, uint32 pre_key_id);
+ }
+
+ [CCode (lower_case_cprefix = "signal_protocol_signed_pre_key_")]
+ namespace SignedPreKey {
+ public int load_key(NativeStoreContext context, out SignedPreKeyRecord pre_key, uint32 pre_key_id);
+ public int store_key(NativeStoreContext context, SignedPreKeyRecord pre_key);
+ public int contains_key(NativeStoreContext context, uint32 pre_key_id);
+ public int remove_key(NativeStoreContext context, uint32 pre_key_id);
+ }
+
+ /**
+ * Interface to the session store.
+ * These functions will use the callbacks in the provided
+ * signal_protocol_store_context instance and operate in terms of higher level
+ * library data structures.
+ */
+ [CCode (lower_case_cprefix = "signal_protocol_session_")]
+ namespace Session {
+ public int load_session(NativeStoreContext context, out SessionRecord record, Address address, int32 version = 3);
+ public int get_sub_device_sessions(NativeStoreContext context, out IntList sessions, char[] name);
+ public int store_session(NativeStoreContext context, Address address, SessionRecord record);
+ public int contains_session(NativeStoreContext context, Address address);
+ public int delete_session(NativeStoreContext context, Address address);
+ public int delete_all_sessions(NativeStoreContext context, char[] name);
+ }
+
+ [CCode (lower_case_cprefix = "signal_protocol_identity_")]
+ namespace Identity {
+ public int get_key_pair(NativeStoreContext store_context, out IdentityKeyPair key_pair);
+ public int get_local_registration_id(NativeStoreContext store_context, out uint32 registration_id);
+ public int save_identity(NativeStoreContext store_context, Address address, ECPublicKey identity_key);
+ public int is_trusted_identity(NativeStoreContext store_context, Address address, ECPublicKey identity_key);
+ }
+
+ [CCode (cheader_filename = "omemo/key_helper.h", lower_case_cprefix = "signal_protocol_key_helper_")]
+ namespace KeyHelper {
+ [Compact]
+ [CCode (cname = "signal_protocol_key_helper_pre_key_list_node", cprefix = "signal_protocol_key_helper_key_list_", free_function="signal_protocol_key_helper_key_list_free")]
+ public class PreKeyListNode {
+ public PreKeyRecord element();
+ public PreKeyListNode next();
+ }
+
+ public int generate_identity_key_pair(out IdentityKeyPair key_pair, NativeContext global_context);
+ public int generate_registration_id(out int32 registration_id, int extended_range, NativeContext global_context);
+ public int get_random_sequence(out int value, int max, NativeContext global_context);
+ public int generate_pre_keys(out PreKeyListNode head, uint start, uint count, NativeContext global_context);
+ public int generate_last_resort_pre_key(out PreKeyRecord pre_key, NativeContext global_context);
+ public int generate_signed_pre_key(out SignedPreKeyRecord signed_pre_key, IdentityKeyPair identity_key_pair, uint32 signed_pre_key_id, uint64 timestamp, NativeContext global_context);
+ public int upgrade_signed_pre_key(ref SignedPreKeyRecord signed_pre_key, IdentityKeyPair identity_key_pair, NativeContext global_context);
+ public int generate_sender_signing_key(out ECKeyPair key_pair, NativeContext global_context);
+ public int generate_sender_key(out Buffer key_buffer, NativeContext global_context);
+ public int generate_sender_key_id(out int32 key_id, NativeContext global_context);
+ }
+ }
+
+ [CCode (cheader_filename = "omemo/curve.h")]
+ namespace Curve {
+ [CCode (cname = "curve_calculate_agreement")]
+ public int calculate_agreement([CCode (array_length = false)] out uint8[] shared_key_data, ECPublicKey public_key, ECPrivateKey private_key);
+ [CCode (cname = "curve_calculate_signature")]
+ public int calculate_signature(NativeContext context, out Buffer signature, ECPrivateKey signing_key, uint8[] message);
+ [CCode (cname = "curve_verify_signature")]
+ public int verify_signature(ECPublicKey signing_key, uint8[] message, uint8[] signature);
+ }
+
+ [CCode (cname = "session_builder_create", cheader_filename = "omemo/session_builder.h")]
+ public static int session_builder_create(out SessionBuilder builder, NativeStoreContext store, Address remote_address, NativeContext global_context);
+ [CCode (cname = "session_cipher_create", cheader_filename = "omemo/session_cipher.h")]
+ public static int session_cipher_create(out SessionCipher cipher, NativeStoreContext store, Address remote_address, NativeContext global_context);
+ [CCode (cname = "pre_key_signal_message_deserialize", cheader_filename = "omemo/protocol.h")]
+ public static int pre_key_message_deserialize(out PreKeyOmemoMessage message, uint8[] data, NativeContext global_context);
+ [CCode (cname = "pre_key_signal_message_deserialize_omemo", cheader_filename = "omemo/protocol.h")]
+ public static int pre_key_message_deserialize_omemo(out PreKeyOmemoMessage message, uint8[] data, uint32 remote_registration_id, NativeContext global_context);
+ [CCode (cname = "pre_key_signal_message_copy", cheader_filename = "omemo/protocol.h")]
+ public static int pre_key_message_copy(out PreKeyOmemoMessage message, PreKeyOmemoMessage other_message, NativeContext global_context);
+ [CCode (cname = "signal_message_create", cheader_filename = "omemo/protocol.h")]
+ public static int message_create(out OmemoMessage message, uint8 message_version, uint8[] mac_key, ECPublicKey sender_ratchet_key, uint32 counter, uint32 previous_counter, uint8[] ciphertext, ECPublicKey sender_identity_key, ECPublicKey receiver_identity_key, NativeContext global_context);
+ [CCode (cname = "signal_message_deserialize", cheader_filename = "omemo/protocol.h")]
+ public static int message_deserialize(out OmemoMessage message, uint8[] data, NativeContext global_context);
+ [CCode (cname = "signal_message_deserialize_omemo", cheader_filename = "omemo/protocol.h")]
+ public static int message_deserialize_omemo(out OmemoMessage message, uint8[] data, NativeContext global_context);
+ [CCode (cname = "signal_message_copy", cheader_filename = "omemo/protocol.h")]
+ public static int message_copy(out OmemoMessage message, OmemoMessage other_message, NativeContext global_context);
+ [CCode (cname = "curve_generate_key_pair", cheader_filename = "omemo/curve.h")]
+ public static int curve_generate_key_pair(NativeContext context, out ECKeyPair key_pair);
+ [CCode (cname = "curve_decode_private_point", cheader_filename = "omemo/curve.h")]
+ public static int curve_decode_private_point(out ECPrivateKey public_key, uint8[] key, NativeContext global_context);
+ [CCode (cname = "curve_decode_point", cheader_filename = "omemo/curve.h")]
+ public static int curve_decode_point(out ECPublicKey public_key, uint8[] key, NativeContext global_context);
+ [CCode (cname = "curve_decode_point_ed", cheader_filename = "omemo/curve.h")]
+ public static int curve_decode_point_ed(out ECPublicKey public_key, uint8[] key, NativeContext global_context);
+ [CCode (cname = "curve_decode_point_mont", cheader_filename = "omemo/curve.h")]
+ public static int curve_decode_point_mont(out ECPublicKey public_key, uint8[] key, NativeContext global_context);
+ [CCode (cname = "curve_generate_private_key", cheader_filename = "omemo/curve.h")]
+ public static int curve_generate_private_key(NativeContext context, out ECPrivateKey private_key);
+ [CCode (cname = "ratchet_identity_key_pair_deserialize", cheader_filename = "omemo/ratchet.h")]
+ public static int ratchet_identity_key_pair_deserialize(out IdentityKeyPair key_pair, uint8[] data, NativeContext global_context);
+ [CCode (cname = "session_signed_pre_key_deserialize", cheader_filename = "omemo/signed_pre_key.h")]
+ public static int session_signed_pre_key_deserialize(out SignedPreKeyRecord pre_key, uint8[] data, NativeContext global_context);
+
+ [Compact]
+ [CCode (cname = "hkdf_context", cprefix = "hkdf_", free_function = "hkdf_destroy", cheader_filename = "omemo/hkdf.h")]
+ public class NativeHkdfContext {
+ public static int create(out NativeHkdfContext context, int message_version, NativeContext global_context);
+ public int compare(NativeHkdfContext other);
+ public ssize_t derive_secrets([CCode (array_length = false)] out uint8[] output, uint8[] input_key_material, uint8[] salt, uint8[] info, size_t output_len);
+ }
+
+ [CCode (cname = "setup_signal_vala_crypto_provider", cheader_filename = "src/crypto/omemo/helper.h")]
+ public static void setup_crypto_provider(NativeContext context);
+}
diff --git a/plugins/omemo/vapi/libqrencode.vapi b/main/vapi/libqrencode.vapi
index 360f74a5..360f74a5 100644
--- a/plugins/omemo/vapi/libqrencode.vapi
+++ b/main/vapi/libqrencode.vapi
diff --git a/main/vapi/webrtc-audio-processing.vapi b/main/vapi/webrtc-audio-processing.vapi
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/main/vapi/webrtc-audio-processing.vapi
diff --git a/meson.build b/meson.build
index 94580587..205553e9 100644
--- a/meson.build
+++ b/meson.build
@@ -1,44 +1,102 @@
-project('Dino', 'c', 'cpp', 'vala', license: 'GPL-3.0', meson_version: '>=1.3.0')
+project(
+ 'Dino',
+ 'c', 'cpp', 'vala',
+ license: 'GPL-3.0',
+ meson_version: '>=1.3.0',
+ version: run_command(
+ find_program('python3', required: true), # Can't use import('python').find_installation() here
+ meson.current_source_dir() / 'build-aux' / 'version.py',
+ meson.current_source_dir() / 'VERSION',
+ '--git-repo', meson.current_source_dir(),
+ '--git', find_program('git', required: false),
+ check: true
+ ).stdout().strip()
+)
-fs = import('fs')
gnome = import('gnome')
i18n = import('i18n')
-python = import('python')
+cc = meson.get_compiler('c')
-# plugin_crypto is enabled if any of the crypto plugins is enabled, auto if
-# none of them are explicitly enabled but at least one is set to auto, or
-# disabled if all of them are disabled.
-plugin_crypto = get_option('plugin-ice')
-foreach plugin : ['plugin-ice', 'plugin-omemo', 'plugin-rtp']
- if get_option(plugin).enabled() and not plugin_crypto.enabled()
- plugin_crypto = get_option(plugin)
- elif get_option(plugin).allowed() and not plugin_crypto.allowed()
- plugin_crypto = get_option(plugin)
+vala_version_required = '0.56.14'
+vala = meson.get_compiler('vala')
+if not vala.version().version_compare('>= @0@'.format(vala_version_required))
+ error('valac >= @0@ required!'.format(vala_version_required))
+endif
+
+# Trigger recomnfiguration on version change
+version_stamp = configure_file(
+ command: [
+ # Keep in sync with above
+ find_program('python3', required: true),
+ meson.current_source_dir() / 'build-aux' / 'version.py',
+ meson.current_source_dir() / 'VERSION',
+ '--git-repo', meson.current_source_dir(),
+ '--git', find_program('git', required: false),
+ # Trigger depfile generation
+ '--depfile', '@DEPFILE@'
+ ],
+ input: 'build-aux' / 'version.py',
+ output: 'version.stamp',
+ depfile: 'version.d'
+)
+
+# Reduce build time noise
+vala_c_args = cc.get_supported_arguments([
+ '-Wno-address',
+ '-Wno-deprecated-declarations',
+ '-Wno-discarded-qualifiers',
+ '-Wno-duplicate-decl-specifier',
+ '-Wno-unused-but-set-variable',
+ '-Wno-unused-function',
+ '-Wno-unused-label',
+ '-Wno-unused-value',
+ '-Wno-unused-variable',
+])
+
+if get_option('crypto-backend') == 'auto'
+ # Prefer libgcrypt/gnutls over openssl because glib-networking is usually
+ # built with gnutls anyway.
+ dep_libgcrypt = dependency('libgcrypt', required: false)
+ dep_gnutls = dependency('gnutls', required: false)
+ if dep_libgcrypt.found() and dep_gnutls.found()
+ crypto_backend = 'gnu'
+ else
+ dep_openssl = dependency('openssl', required: false)
+ if dep_openssl.found()
+ crypto_backend = 'openssl'
+ else
+ error('Could not find crypto backend automatically. Specify explicitly via crypto-backend option.')
+ endif
endif
-endforeach
+elif get_option('crypto-backend') == 'openssl'
+ dep_openssl = dependency('openssl')
+ crypto_backend = 'openssl'
+elif get_option('crypto-backend') == 'gnu'
+ dep_libgcrypt = dependency('libgcrypt')
+ dep_gnutls = dependency('gnutls')
+ crypto_backend = 'gnu'
+endif
dep_gdk_pixbuf = dependency('gdk-pixbuf-2.0')
dep_gee = dependency('gee-0.8')
dep_gio = dependency('gio-2.0')
-dep_glib = dependency('glib-2.0')
-dep_gnutls = dependency('gnutls', disabler: true, required: get_option('plugin-ice'))
+dep_glib = dependency('glib-2.0', version: '>=2.66')
dep_gmodule = dependency('gmodule-2.0')
-dep_gpgme = dependency('gpgme', disabler: true, required: get_option('plugin-openpgp'))
-dep_gstreamer = dependency('gstreamer-1.0', disabler: true, required: get_option('plugin-rtp'))
-dep_gstreamer_app = dependency('gstreamer-app-1.0', disabler: true, required: get_option('plugin-rtp'))
-dep_gstreamer_audio = dependency('gstreamer-audio-1.0', disabler: true, required: get_option('plugin-rtp'))
-dep_gstreamer_rtp = dependency('gstreamer-rtp-1.0', disabler: true, required: get_option('plugin-rtp'))
-dep_gstreamer_video = dependency('gstreamer-video-1.0', disabler: true, required: get_option('plugin-rtp'))
-dep_gtk4 = dependency('gtk4')
+dep_gpgme = dependency('gpgme', disabler: true, required: get_option('openpgp'))
+dep_gstreamer = dependency('gstreamer-1.0', version: '>=1.20', required: get_option('rtp'))
+dep_gstreamer_app = dependency('gstreamer-app-1.0', version: '>=1.20', required: get_option('rtp'))
+dep_gstreamer_audio = dependency('gstreamer-audio-1.0', version: '>=1.20', required: get_option('rtp'))
+dep_gstreamer_rtp = dependency('gstreamer-rtp-1.0', version: '>=1.20', required: get_option('rtp'))
+dep_gstreamer_video = dependency('gstreamer-video-1.0', version: '>=1.20', required: get_option('rtp'))
+dep_gtk4 = dependency('gtk4', version: '>=4.14')
dep_icu_uc = dependency('icu-uc')
dep_libadwaita = dependency('libadwaita-1', version: '>=1.5')
dep_libcanberra = dependency('libcanberra', disabler: true, required: get_option('plugin-notification-sound'))
-dep_libgcrypt = dependency('libgcrypt', disabler: true, required: plugin_crypto)
-dep_libqrencode = dependency('libqrencode', disabler: true, required: get_option('plugin-omemo'))
-dep_libsrtp2 = dependency('libsrtp2', disabler: true, required: plugin_crypto)
-dep_libomemo_c = dependency('libomemo-c', disabler: true, required: get_option('plugin-omemo'))
-dep_libsoup = dependency('libsoup-3.0', disabler: true, required: get_option('plugin-http-files'))
-dep_nice = dependency('nice', version: '>=0.1.15', disabler: true, required: get_option('plugin-ice'))
+dep_libqrencode = dependency('libqrencode', disabler: true, required: get_option('omemo'))
+dep_libsrtp2 = dependency('libsrtp2')
+dep_libomemo_c = dependency('libomemo-c', disabler: true, required: get_option('omemo'))
+dep_libsoup = dependency('libsoup-3.0')
+dep_nice = dependency('nice', version: '>=0.1.15')
dep_m = meson.get_compiler('c').find_library('m', required: false)
dep_sqlite3 = dependency('sqlite3', version: '>=3.24')
@@ -47,21 +105,10 @@ if not dep_webrtc_audio_processing.found()
dep_webrtc_audio_processing = dependency('webrtc-audio-processing', version: ['>=0.2'], required: false)
endif
if not dep_webrtc_audio_processing.found()
- dep_webrtc_audio_processing = dependency('webrtc-audio-processing-2', required: false)
+ dep_webrtc_audio_processing = dependency('webrtc-audio-processing-2', required: false, disabler: true)
endif
-if not dep_webrtc_audio_processing.found()
- dep_webrtc_audio_processing = disabler()
-endif
-
-prog_git = find_program('git', required: false)
-prog_python = python.find_installation()
-
-if import('fs').is_file('VERSION') and meson.version().version_compare('>=1.4.0')
- version_file = files('VERSION')[0]
- version_file_path = version_file.full_path()
-else
- version_file = 'invalid'
- version_file_path = meson.current_source_dir() / 'VERSION'
+if not dep_webrtc_audio_processing.found() and get_option('voice-processing').enabled()
+ error('No compatible webrtc-audio-processing found, but voice-processing option set to enabled.')
endif
default_install_rpath = ''
@@ -69,9 +116,7 @@ if get_option('set-install-rpath')
default_install_rpath = get_option('prefix') / get_option('libdir')
endif
-subdir('qlite')
subdir('xmpp-vala')
subdir('libdino')
subdir('main')
-subdir('crypto-vala')
subdir('plugins')
diff --git a/meson_options.txt b/meson_options.txt
index 781e1478..0f700068 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,16 +1,17 @@
option('plugindir', type: 'string', value: 'dino/plugins', description: 'Dino plugin directory, relative to libdir')
option('set-install-rpath', type: 'boolean', value: false, description: 'Set rpath of installed binaries to the configured libdir')
+option('crypto-backend', type: 'combo', choices: ['auto', 'openssl', 'gnu'], value: 'auto', description: 'Preferred crypto backend')
-option('plugin-http-files', type: 'feature', value: 'enabled', description: 'HTTP file upload')
-option('plugin-ice', type: 'feature', value: 'enabled', description: 'Peer-to-peer communication')
-option('plugin-omemo', type: 'feature', value: 'enabled', description: 'End-to-end encryption using OMEMO')
-option('plugin-openpgp', type: 'feature', value: 'auto', description: 'End-to-end encryption using PGP')
-option('plugin-rtp', type: 'feature', value: 'enabled', description: 'Voice/video calls')
-option('plugin-notification-sound', type: 'feature', value: 'disabled', description: 'Sound for chat notifications')
+option('omemo', type: 'feature', value: 'enabled', description: 'End-to-end encryption using OMEMO')
+option('openpgp', type: 'feature', value: 'auto', description: 'End-to-end encryption using PGP')
+option('rtp', type: 'feature', value: 'enabled', description: 'Voice/video calls')
+option('voice-processing', value: 'auto', type: 'feature', description: 'Voice preprocessing')
-option('plugin-rtp-h264', type: 'feature', value: 'disabled', description: 'H264 codec')
-option('plugin-rtp-msdk', type: 'feature', value: 'disabled', description: 'Intel MediaSDK')
-option('plugin-rtp-vaapi', type: 'feature', value: 'disabled', description: 'Video Acceleration API')
-option('plugin-rtp-vp9', type: 'feature', value: 'disabled', description: 'VP9 codec')
-option('plugin-rtp-webrtc-audio-processing', value: 'auto', type: 'feature', description: 'Voice preprocessing')
+option('rtp-h264', type: 'boolean', value: false, description: 'H264 codec')
+option('rtp-msdk', type: 'boolean', value: false, description: 'Intel MediaSDK')
+option('rtp-vaapi', type: 'boolean', value: false, description: 'Video Acceleration API')
+option('rtp-vp9', type: 'boolean', value: false, description: 'VP9 codec')
+
+# Legacy plugin
+option('plugin-notification-sound', type: 'feature', value: 'disabled', description: 'Sound for chat notifications') \ No newline at end of file
diff --git a/plugins/http-files/meson.build b/plugins/http-files/meson.build
deleted file mode 100644
index 20ddf23d..00000000
--- a/plugins/http-files/meson.build
+++ /dev/null
@@ -1,22 +0,0 @@
-dependencies = [
- dep_dino,
- dep_gee,
- dep_glib,
- dep_gmodule,
- dep_libsoup,
- dep_qlite,
- dep_xmpp_vala,
-]
-sources = files(
- 'src/file_provider.vala',
- 'src/file_sender.vala',
- 'src/plugin.vala',
- 'src/register_plugin.vala',
-)
-
-vala_args = [
- '-D', 'SOUP_3_0',
-]
-lib_http_files = shared_library('http-files', sources, name_prefix: '', vala_args: vala_args, dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
-dep_http_files = declare_dependency(link_with: lib_http_files, include_directories: include_directories('.'))
-summary('HTTP file upload (http-files)', dep_http_files.found(), bool_yn: true, section: 'Plugins')
diff --git a/plugins/http-files/src/file_provider.vala b/plugins/http-files/src/file_provider.vala
deleted file mode 100644
index 702dd3b3..00000000
--- a/plugins/http-files/src/file_provider.vala
+++ /dev/null
@@ -1,194 +0,0 @@
-using Gee;
-
-using Dino.Entities;
-using Xmpp;
-
-namespace Dino.Plugins.HttpFiles {
-
-public class FileProvider : Dino.FileProvider, Object {
-
- private StreamInteractor stream_interactor;
- private Dino.Database dino_db;
- private Soup.Session session;
- private static Regex http_url_regex = /^https?:\/\/([^\s#]*)$/; // Spaces are invalid in URLs and we can't use fragments for downloads
- private static Regex omemo_url_regex = /^aesgcm:\/\/(.*)#(([A-Fa-f0-9]{2}){48}|([A-Fa-f0-9]{2}){44})$/;
-
- public FileProvider(StreamInteractor stream_interactor, Dino.Database dino_db) {
- this.stream_interactor = stream_interactor;
- this.dino_db = dino_db;
- this.session = new Soup.Session();
-
- session.user_agent = @"Dino/$(Dino.get_short_version()) ";
- stream_interactor.get_module(MessageProcessor.IDENTITY).received_pipeline.connect(new ReceivedMessageListener(this));
- }
-
- private class ReceivedMessageListener : MessageListener {
-
- public string[] after_actions_const = new string[]{ "STORE" };
- public override string action_group { get { return "MESSAGE_REINTERPRETING"; } }
- public override string[] after_actions { get { return after_actions_const; } }
-
- private FileProvider outer;
- private StreamInteractor stream_interactor;
-
- public ReceivedMessageListener(FileProvider outer) {
- this.outer = outer;
- this.stream_interactor = outer.stream_interactor;
- }
-
- public override async bool run(Entities.Message message, Xmpp.MessageStanza stanza, Conversation conversation) {
- if (Xep.StatelessFileSharing.get_file_shares(stanza) != null || Xep.StatelessFileSharing.get_source_attachments(stanza) != null) {
- return false;
- }
-
- string? oob_url = Xmpp.Xep.OutOfBandData.get_url_from_message(stanza);
- bool normal_file = oob_url != null && oob_url == message.body && FileProvider.http_url_regex.match(message.body);
- bool omemo_file = FileProvider.omemo_url_regex.match(message.body);
- if (normal_file || omemo_file) {
- outer.on_file_message(message, conversation);
- return true;
- }
- return false;
- }
- }
-
- private void on_file_message(Entities.Message message, Conversation conversation) {
- var additional_info = message.id.to_string();
-
- var receive_data = new HttpFileReceiveData();
- receive_data.url = message.body;
-
- var file_meta = new HttpFileMeta();
- file_meta.file_name = extract_file_name_from_url(message.body);
- file_meta.message = message;
-
- file_incoming(additional_info, message.from, message.time, message.local_time, conversation, receive_data, file_meta);
- }
-
- public async FileMeta get_meta_info(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) throws FileReceiveError {
- HttpFileReceiveData? http_receive_data = receive_data as HttpFileReceiveData;
- if (http_receive_data == null) return file_meta;
-
- var head_message = new Soup.Message("HEAD", http_receive_data.url);
- head_message.request_headers.append("Accept-Encoding", "identity");
-
-#if SOUP_3_0
- string transfer_host = Uri.parse(http_receive_data.url, UriFlags.NONE).get_host();
- head_message.accept_certificate.connect((peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(transfer_host, peer_cert, errors); });
-#endif
-
- try {
-#if SOUP_3_0
- yield session.send_async(head_message, GLib.Priority.LOW, null);
-#else
- yield session.send_async(head_message, null);
-#endif
- } catch (Error e) {
- throw new FileReceiveError.GET_METADATA_FAILED("HEAD request failed");
- }
-
- string? content_type = null, content_length = null;
- head_message.response_headers.foreach((name, val) => {
- if (name.down() == "content-type") content_type = val;
- if (name.down() == "content-length") content_length = val;
- });
- file_meta.content_type = new FileContentType.from_mime_type(content_type);
- if (content_length != null) {
- file_meta.size = int64.parse(content_length);
- }
-
- return file_meta;
- }
-
- public Encryption get_encryption(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) {
- return Encryption.NONE;
- }
-
- public async InputStream download(FileTransfer file_transfer, FileReceiveData receive_data, FileMeta file_meta) throws IOError {
- HttpFileReceiveData? http_receive_data = receive_data as HttpFileReceiveData;
- if (http_receive_data == null) assert(false);
-
- var get_message = new Soup.Message("GET", http_receive_data.url);
-
-#if SOUP_3_0
- string transfer_host = Uri.parse(http_receive_data.url, UriFlags.NONE).get_host();
- get_message.accept_certificate.connect((peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(transfer_host, peer_cert, errors); });
-#endif
-
-#if SOUP_3_0
- InputStream stream = yield session.send_async(get_message, GLib.Priority.LOW, file_transfer.cancellable);
-#else
- InputStream stream = yield session.send_async(get_message, file_transfer.cancellable);
-#endif
- if (file_meta.size != -1) {
- return new LimitInputStream(stream, file_meta.size);
- } else {
- return stream;
- }
- }
-
- public FileMeta get_file_meta(FileTransfer file_transfer) throws FileReceiveError {
- if (file_transfer.provider == FileManager.SFS_PROVIDER_ID) {
- var file_meta = new HttpFileMeta();
- file_meta.size = file_transfer.size;
- file_meta.content_type = file_transfer.content_type;
- file_meta.file_name = file_transfer.file_name;
- file_meta.message = null;
- return file_meta;
- }
-
- Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(file_transfer.counterpart.bare_jid, file_transfer.account);
- if (conversation == null) throw new FileReceiveError.GET_METADATA_FAILED("No conversation");
-
- Message? message = stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_id(int.parse(file_transfer.info), conversation);
- if (message == null) throw new FileReceiveError.GET_METADATA_FAILED("No message");
-
- var file_meta = new HttpFileMeta();
- file_meta.size = file_transfer.size;
- file_meta.content_type = file_transfer.content_type;
-
- file_meta.file_name = extract_file_name_from_url(message.body);
-
- file_meta.message = message;
-
- return file_meta;
- }
-
- public FileReceiveData? get_file_receive_data(FileTransfer file_transfer) {
- if (file_transfer.provider == FileManager.SFS_PROVIDER_ID) {
- if (!file_transfer.sfs_sources.is_empty) {
- var http_source = file_transfer.sfs_sources.get(0) as Xep.StatelessFileSharing.HttpSource;
- if (http_source != null) {
- var receive_data = new HttpFileReceiveData();
- receive_data.url = http_source.url;
- return receive_data;
- }
- }
- return null;
- }
-
- Conversation? conversation = stream_interactor.get_module(ConversationManager.IDENTITY).get_conversation(file_transfer.counterpart.bare_jid, file_transfer.account);
- if (conversation == null) return null;
-
- Message? message = stream_interactor.get_module(MessageStorage.IDENTITY).get_message_by_id(int.parse(file_transfer.info), conversation);
- if (message == null) return null;
-
- var receive_data = new HttpFileReceiveData();
- receive_data.url = message.body;
-
- return receive_data;
- }
-
- private string extract_file_name_from_url(string url) {
- string ret = url;
- if (ret.contains("#")) {
- ret = ret.substring(0, ret.last_index_of("#"));
- }
- ret = Uri.unescape_string(ret.substring(ret.last_index_of("/") + 1));
- return ret;
- }
-
- public int get_id() { return 0; }
-}
-
-}
diff --git a/plugins/http-files/src/file_sender.vala b/plugins/http-files/src/file_sender.vala
deleted file mode 100644
index 7e48d211..00000000
--- a/plugins/http-files/src/file_sender.vala
+++ /dev/null
@@ -1,198 +0,0 @@
-using Dino.Entities;
-using Xmpp;
-using Gee;
-
-namespace Dino.Plugins.HttpFiles {
-
-public class HttpFileSender : FileSender, Object {
- private StreamInteractor stream_interactor;
- private Database db;
- private Soup.Session session;
- private HashMap<Account, long> max_file_sizes = new HashMap<Account, long>(Account.hash_func, Account.equals_func);
-
- public HttpFileSender(StreamInteractor stream_interactor, Database db) {
- this.stream_interactor = stream_interactor;
- this.db = db;
- this.session = new Soup.Session();
-
- session.user_agent = @"Dino/$(Dino.get_short_version()) ";
- stream_interactor.stream_negotiated.connect(on_stream_negotiated);
- stream_interactor.get_module(MessageProcessor.IDENTITY).build_message_stanza.connect(check_add_sfs_element);
- }
-
- public async FileSendData? prepare_send_file(Conversation conversation, FileTransfer file_transfer, FileMeta file_meta) throws FileSendError {
- HttpFileSendData send_data = new HttpFileSendData();
- if (send_data == null) return null;
-
- Xmpp.XmppStream? stream = stream_interactor.get_stream(file_transfer.account);
- if (stream == null) return null;
-
- try {
- var slot_result = yield stream_interactor.module_manager.get_module(file_transfer.account, Xmpp.Xep.HttpFileUpload.Module.IDENTITY).request_slot(stream, file_transfer.server_file_name, file_meta.size, file_meta.content_type);
- send_data.url_down = slot_result.url_get;
- send_data.url_up = slot_result.url_put;
- send_data.headers = slot_result.headers;
- } catch (Xep.HttpFileUpload.HttpFileTransferError e) {
- throw new FileSendError.UPLOAD_FAILED("Http file upload XMPP error: %s".printf(e.message));
- }
-
- return send_data;
- }
-
- public async void send_file(Conversation conversation, FileTransfer file_transfer, FileSendData file_send_data, FileMeta file_meta) throws FileSendError {
- HttpFileSendData? send_data = file_send_data as HttpFileSendData;
- if (send_data == null) return;
-
- bool can_reference_element = conversation.type_ == Conversation.Type.CHAT || (
- // The stable stanza ID XEP is not clear about an announcing MUC having to attach stanza-ids, thus we also check for MAM, which requires this.
- stream_interactor.get_module(EntityInfo.IDENTITY).has_feature_cached(conversation.account, conversation.counterpart, Xep.UniqueStableStanzaIDs.NS_URI) &&
- stream_interactor.get_module(EntityInfo.IDENTITY).has_feature_cached(conversation.account, conversation.counterpart, Xmpp.MessageArchiveManagement.NS_URI)
- );
-
- // Share unencrypted files via SFS (only if we'll be able to reference messages)
- if (conversation.encryption == Encryption.NONE && can_reference_element) {
- // Announce the file share
- Entities.Message file_share_message = stream_interactor.get_module(MessageProcessor.IDENTITY).create_out_message(null, conversation);
- file_transfer.info = file_share_message.id.to_string();
- file_transfer.file_sharing_id = Xmpp.random_uuid();
- stream_interactor.get_module(MessageProcessor.IDENTITY).send_xmpp_message(file_share_message, conversation);
-
- // Upload file
- yield upload(file_transfer, send_data, file_meta);
-
- // Wait until we know the server id of the file share message (in MUCs; we get that from the reflected message)
- if (conversation.type_.is_muc_semantic()) {
- if (file_share_message.server_id == null) {
- ulong server_id_notify_id = file_share_message.notify["server-id"].connect(() => {
- Idle.add(send_file.callback);
- });
- yield;
- file_share_message.disconnect(server_id_notify_id);
- }
- }
-
- file_transfer.sfs_sources.add(new Xep.StatelessFileSharing.HttpSource() { url=send_data.url_down } );
-
- // Send source attachment
- MessageStanza stanza = new MessageStanza() { to = conversation.counterpart, type_ = conversation.type_ == GROUPCHAT ? MessageStanza.TYPE_GROUPCHAT : MessageStanza.TYPE_CHAT };
- stanza.body = send_data.url_down;
- Xep.OutOfBandData.add_url_to_message(stanza, send_data.url_down);
- var sources = new ArrayList<Xep.StatelessFileSharing.Source>();
- sources.add(new Xep.StatelessFileSharing.HttpSource() { url = send_data.url_down });
- string attach_to_id = stream_interactor.get_module(MessageStorage.IDENTITY).get_reference_id(file_share_message, conversation);
- Xep.StatelessFileSharing.set_sfs_attachment(stanza, attach_to_id, file_transfer.file_sharing_id, sources);
-
- var stream = stream_interactor.get_stream(conversation.account);
- if (stream == null) throw new FileSendError.UPLOAD_FAILED("No stream");
-
- stream.get_module(MessageModule.IDENTITY).send_message.begin(stream, stanza);
- }
- // Share encrypted files without SFS
- else {
- yield upload(file_transfer, send_data, file_meta);
-
- Entities.Message message = stream_interactor.get_module(MessageProcessor.IDENTITY).create_out_message(send_data.url_down, conversation);
- file_transfer.info = message.id.to_string();
-
- message.encryption = send_data.encrypt_message ? conversation.encryption : Encryption.NONE;
- stream_interactor.get_module(MessageProcessor.IDENTITY).send_xmpp_message(message, conversation);
- }
- }
-
- public async bool can_send(Conversation conversation, FileTransfer file_transfer) {
- if (!max_file_sizes.has_key(conversation.account)) return false;
-
- return file_transfer.size < max_file_sizes[conversation.account];
- }
-
- public async long get_file_size_limit(Conversation conversation) {
- long? max_size = max_file_sizes[conversation.account];
- if (max_size != null) {
- return max_size;
- }
- return -1;
- }
-
- public async bool can_encrypt(Conversation conversation, FileTransfer file_transfer) {
- return false;
- }
-
- public async bool is_upload_available(Conversation conversation) {
- lock (max_file_sizes) {
- return max_file_sizes.has_key(conversation.account);
- }
- }
-
-#if !SOUP_3_0
- private static void transfer_more_bytes(InputStream stream, Soup.MessageBody body) {
- uint8[] bytes = new uint8[4096];
- ssize_t read = stream.read(bytes);
- if (read == 0) {
- body.complete();
- return;
- }
- bytes.length = (int)read;
- body.append_buffer(new Soup.Buffer.take(bytes));
- }
-#endif
-
- private async void upload(FileTransfer file_transfer, HttpFileSendData file_send_data, FileMeta file_meta) throws FileSendError {
- Xmpp.XmppStream? stream = stream_interactor.get_stream(file_transfer.account);
- if (stream == null) return;
-
- var put_message = new Soup.Message("PUT", file_send_data.url_up);
-
-#if SOUP_3_0
- string transfer_host = Uri.parse(file_send_data.url_up, UriFlags.NONE).get_host();
- put_message.accept_certificate.connect((peer_cert, errors) => { return ConnectionManager.on_invalid_certificate(transfer_host, peer_cert, errors); });
- put_message.set_request_body(file_meta.content_type.get_mime_type(), file_transfer.input_stream, (ssize_t) file_meta.size);
-#else
- put_message.request_headers.set_content_type(file_meta.content_type.get_mime_type(), null);
- put_message.request_headers.set_content_length(file_meta.size);
- put_message.request_body.set_accumulate(false);
- put_message.wrote_headers.connect(() => transfer_more_bytes(file_transfer.input_stream, put_message.request_body));
- put_message.wrote_chunk.connect(() => transfer_more_bytes(file_transfer.input_stream, put_message.request_body));
-#endif
- foreach (var entry in file_send_data.headers.entries) {
- put_message.request_headers.append(entry.key, entry.value);
- }
- try {
-#if SOUP_3_0
- yield session.send_async(put_message, GLib.Priority.LOW, file_transfer.cancellable);
-#else
- yield session.send_async(put_message, file_transfer.cancellable);
-#endif
- if (put_message.status_code < 200 || put_message.status_code >= 300) {
- throw new FileSendError.UPLOAD_FAILED("HTTP status code %s".printf(put_message.status_code.to_string()));
- }
- } catch (Error e) {
- throw new FileSendError.UPLOAD_FAILED("HTTP upload error: %s".printf(e.message));
- }
- }
-
- private void on_stream_negotiated(Account account, XmppStream stream) {
- stream_interactor.module_manager.get_module(account, Xmpp.Xep.HttpFileUpload.Module.IDENTITY).feature_available.connect((stream, max_file_size) => {
- lock (max_file_sizes) {
- max_file_sizes[account] = max_file_size;
- }
- upload_available(account);
- });
- }
-
- private void check_add_sfs_element(Entities.Message message, Xmpp.MessageStanza message_stanza, Conversation conversation) {
- if (message.encryption != Encryption.NONE) return;
-
- FileTransfer? file_transfer = stream_interactor.get_module(FileTransferStorage.IDENTITY).get_file_by_message_id(message.id, conversation);
- if (file_transfer == null) return;
-
- Xep.StatelessFileSharing.set_sfs_element(message_stanza, file_transfer.file_sharing_id, file_transfer.file_metadata, file_transfer.sfs_sources);
-
- Xep.MessageProcessingHints.set_message_hint(message_stanza, Xep.MessageProcessingHints.HINT_STORE);
- }
-
- public int get_id() { return 0; }
-
- public float get_priority() { return 100; }
-}
-
-}
diff --git a/plugins/http-files/src/plugin.vala b/plugins/http-files/src/plugin.vala
deleted file mode 100644
index 67b32f65..00000000
--- a/plugins/http-files/src/plugin.vala
+++ /dev/null
@@ -1,32 +0,0 @@
-extern const string GETTEXT_PACKAGE;
-extern const string LOCALE_INSTALL_DIR;
-
-namespace Dino.Plugins.HttpFiles {
-
-public class Plugin : RootInterface, Object {
-
- public Dino.Application app;
- public FileProvider file_provider;
- public FileSender file_sender;
-
- public void registered(Dino.Application app) {
- this.app = app;
-
- file_provider = new FileProvider(app.stream_interactor, app.db);
- file_sender = new HttpFileSender(app.stream_interactor, app.db);
-
- app.stream_interactor.get_module(FileManager.IDENTITY).add_provider(file_provider);
- app.stream_interactor.get_module(FileManager.IDENTITY).add_sender(file_sender);
- }
-
- public void shutdown() {
- // Nothing to do
- }
-}
-
-private bool message_is_file(Database db, Entities.Message message) {
- Qlite.QueryBuilder builder = db.file_transfer.select({db.file_transfer.id}).with(db.file_transfer.info, "=", message.id.to_string());
- return builder.count() > 0;
-}
-
-}
diff --git a/plugins/http-files/src/register_plugin.vala b/plugins/http-files/src/register_plugin.vala
deleted file mode 100644
index 21fac531..00000000
--- a/plugins/http-files/src/register_plugin.vala
+++ /dev/null
@@ -1,3 +0,0 @@
-public Type register_plugin(Module module) {
- return typeof (Dino.Plugins.HttpFiles.Plugin);
-}
diff --git a/plugins/ice/meson.build b/plugins/ice/meson.build
deleted file mode 100644
index 48db71f5..00000000
--- a/plugins/ice/meson.build
+++ /dev/null
@@ -1,29 +0,0 @@
-dependencies = [
- dep_crypto_vala,
- dep_dino,
- dep_gee,
- dep_gio,
- dep_glib,
- dep_gmodule,
- dep_gnutls,
- dep_nice,
- dep_qlite,
- dep_xmpp_vala,
-]
-sources = files(
- 'src/dtls_srtp.vala',
- 'src/module.vala',
- 'src/plugin.vala',
- 'src/transport_parameters.vala',
- 'src/util.vala',
- 'src/register_plugin.vala',
-)
-c_args = [
- '-DG_LOG_DOMAIN="ice"',
-]
-vala_args = [
- '--vapidir', meson.current_source_dir() / 'vapi',
-]
-lib_ice = shared_library('ice', sources, name_prefix: '', c_args: c_args, vala_args: vala_args, dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
-dep_ice = declare_dependency(link_with: lib_ice, include_directories: include_directories('.'))
-summary('Peer-to-peer communication (ice)', dep_ice.found(), bool_yn: true, section: 'Plugins')
diff --git a/plugins/ice/src/module.vala b/plugins/ice/src/module.vala
deleted file mode 100644
index 2645d7dc..00000000
--- a/plugins/ice/src/module.vala
+++ /dev/null
@@ -1,55 +0,0 @@
-using Gee;
-using Xmpp;
-using Xmpp.Xep;
-
-public class Dino.Plugins.Ice.Module : JingleIceUdp.Module {
-
- public string? stun_ip = null;
- public uint stun_port = 0;
- public string? turn_ip = null;
- public Xep.ExternalServiceDiscovery.Service? turn_service = null;
-
- private weak Nice.Agent? agent;
- private HashMap<string, DtlsSrtp.CredentialsCapsule> cerds = new HashMap<string, DtlsSrtp.CredentialsCapsule>();
-
- private Nice.Agent get_agent() {
- Nice.Agent? agent = this.agent;
- if (agent == null) {
- agent = new Nice.Agent(MainContext.@default(), Nice.Compatibility.RFC5245);
- if (stun_ip != null) {
- agent.stun_server = stun_ip;
- agent.stun_server_port = stun_port;
- }
- agent.ice_tcp = false;
- agent.set_software("Dino");
- agent.weak_ref(agent_unweak);
- this.agent = agent;
- debug("STUN server for libnice %s %u", agent.stun_server, agent.stun_server_port);
- }
- return agent;
- }
-
- public override Jingle.TransportParameters create_transport_parameters(XmppStream stream, uint8 components, Jid local_full_jid, Jid peer_full_jid) {
- DtlsSrtp.CredentialsCapsule? cred = get_create_credentials(local_full_jid, peer_full_jid);
- return new TransportParameters(get_agent(), cred, turn_service, turn_ip, components, local_full_jid, peer_full_jid);
- }
-
- public override Jingle.TransportParameters parse_transport_parameters(XmppStream stream, uint8 components, Jid local_full_jid, Jid peer_full_jid, StanzaNode transport) throws Jingle.IqError {
- DtlsSrtp.CredentialsCapsule? cred = get_create_credentials(local_full_jid, peer_full_jid);
- return new TransportParameters(get_agent(), cred, turn_service, turn_ip, components, local_full_jid, peer_full_jid, transport);
- }
-
- private DtlsSrtp.CredentialsCapsule? get_create_credentials(Jid local_full_jid, Jid peer_full_jid) {
- string from_to_id = local_full_jid.to_string() + peer_full_jid.to_string();
- try {
- if (!cerds.has_key(from_to_id)) cerds[from_to_id] = DtlsSrtp.Handler.generate_credentials();
- } catch (Error e) {
- warning("Error creating dtls credentials: %s", e.message);
- }
- return cerds[from_to_id];
- }
-
- private void agent_unweak() {
- this.agent = null;
- }
-} \ No newline at end of file
diff --git a/plugins/ice/src/plugin.vala b/plugins/ice/src/plugin.vala
deleted file mode 100644
index d1655a74..00000000
--- a/plugins/ice/src/plugin.vala
+++ /dev/null
@@ -1,104 +0,0 @@
-using Gee;
-using Dino.Entities;
-using Xmpp;
-using Xmpp.Xep;
-
-private extern const size_t NICE_ADDRESS_STRING_LEN;
-
-public class Dino.Plugins.Ice.Plugin : RootInterface, Object {
- private HashMap<Account, uint> timeouts = new HashMap<Account, uint>(Account.hash_func, Account.equals_func);
-
- public Dino.Application app;
-
- public void registered(Dino.Application app) {
- Nice.debug_enable(true);
- this.app = app;
- app.stream_interactor.module_manager.initialize_account_modules.connect((account, list) => {
- list.add(new Module());
- });
- app.stream_interactor.stream_attached_modules.connect((account, stream) => {
- if (stream.get_module(Socks5Bytestreams.Module.IDENTITY) != null) {
- stream.get_module(Socks5Bytestreams.Module.IDENTITY).set_local_ip_address_handler(get_local_ip_addresses);
- }
- if (stream.get_module(JingleRawUdp.Module.IDENTITY) != null) {
- stream.get_module(JingleRawUdp.Module.IDENTITY).set_local_ip_address_handler(get_local_ip_addresses);
- }
- });
- app.stream_interactor.stream_negotiated.connect(external_discovery_refresh_services);
- }
-
- private async void external_discovery_refresh_services(Account account, XmppStream stream) {
- Module? ice_udp_module = stream.get_module(JingleIceUdp.Module.IDENTITY) as Module;
- if (ice_udp_module == null) return;
-
- Gee.List<Xep.ExternalServiceDiscovery.Service> services = yield ExternalServiceDiscovery.request_services(stream);
- foreach (Xep.ExternalServiceDiscovery.Service service in services) {
- if (service.transport == "udp" && (service.ty == "stun" || service.ty == "turn")) {
- InetAddress? ip = yield lookup_ipv4_addess(service.host);
- if (ip == null) continue;
-
- if (ip.is_any || ip.is_link_local || ip.is_loopback || ip.is_multicast || ip.is_site_local) {
- warning("Ignoring STUN/TURN server at %s", service.host);
- continue;
- }
-
- if (service.ty == "stun") {
- debug("Server offers STUN server: %s:%u, resolved to %s", service.host, service.port, ip.to_string());
- ice_udp_module.stun_ip = ip.to_string();
- ice_udp_module.stun_port = service.port;
- } else if (service.ty == "turn") {
- debug("Server offers TURN server: %s:%u, resolved to %s", service.host, service.port, ip.to_string());
- ice_udp_module.turn_ip = ip.to_string();
- ice_udp_module.turn_service = service;
- }
- }
- }
- if (ice_udp_module.stun_ip == null) {
- InetAddress ip = yield lookup_ipv4_addess("stun.dino.im");
- if (ip == null) return;
-
- debug("Using fallback STUN server: stun.dino.im:7886, resolved to %s", ip.to_string());
-
- ice_udp_module.stun_ip = ip.to_string();
- ice_udp_module.stun_port = 7886;
- }
-
- // Refresh TURN credentials before they expire
- if (ice_udp_module.turn_service != null) {
- DateTime? expires = ice_udp_module.turn_service.expires;
- if (expires != null) {
- uint refresh_delay = (uint) (expires.to_unix() - new DateTime.now_utc().to_unix()) / 2;
-
- if (refresh_delay >= 300 && refresh_delay <= (int64) uint.MAX) { // 5 min < refetch < max
- debug("Re-fetching TURN credentials in %u sec", refresh_delay);
-
- timeouts.unset(account);
- timeouts[account] = Timeout.add_seconds((uint) refresh_delay, () => {
- external_discovery_refresh_services.begin(account, stream);
- return false;
- });
- } else {
- warning("TURN credentials' expiry time = %u, *not* re-fetching", refresh_delay);
- }
- }
- }
- }
-
- public void shutdown() {
- // Nothing to do
- }
-
- private async InetAddress? lookup_ipv4_addess(string host) {
- try {
- Resolver resolver = Resolver.get_default();
- GLib.List<GLib.InetAddress>? ips = yield resolver.lookup_by_name_async(host);
- foreach (GLib.InetAddress ina in ips) {
- if (ina.get_family() != SocketFamily.IPV4) continue;
- return ina;
- }
- } catch (Error e) {
- warning("Failed looking up IP address of %s", host);
- }
- return null;
- }
-} \ No newline at end of file
diff --git a/plugins/ice/src/register_plugin.vala b/plugins/ice/src/register_plugin.vala
deleted file mode 100644
index b2ed56c1..00000000
--- a/plugins/ice/src/register_plugin.vala
+++ /dev/null
@@ -1,3 +0,0 @@
-public Type register_plugin(Module module) {
- return typeof (Dino.Plugins.Ice.Plugin);
-}
diff --git a/plugins/ice/src/util.vala b/plugins/ice/src/util.vala
deleted file mode 100644
index dd89d2f4..00000000
--- a/plugins/ice/src/util.vala
+++ /dev/null
@@ -1,18 +0,0 @@
-using Gee;
-
-namespace Dino.Plugins.Ice {
-
-internal static bool is_component_ready(Nice.Agent agent, uint stream_id, uint component_id) {
- var state = agent.get_component_state(stream_id, component_id);
- return state == Nice.ComponentState.CONNECTED || state == Nice.ComponentState.READY;
-}
-
-internal Gee.List<string> get_local_ip_addresses() {
- Gee.List<string> result = new ArrayList<string>();
- foreach (string ip_address in Nice.interfaces_get_local_ips(false)) {
- result.add(ip_address);
- }
- return result;
-}
-
-} \ No newline at end of file
diff --git a/plugins/meson.build b/plugins/meson.build
index 196e3634..d8e64e6b 100644
--- a/plugins/meson.build
+++ b/plugins/meson.build
@@ -1,6 +1 @@
-subdir('http-files')
-subdir('ice')
subdir('notification-sound')
-subdir('omemo')
-subdir('openpgp')
-subdir('rtp')
diff --git a/plugins/notification-sound/meson.build b/plugins/notification-sound/meson.build
index ac0f024f..80a1d062 100644
--- a/plugins/notification-sound/meson.build
+++ b/plugins/notification-sound/meson.build
@@ -4,7 +4,6 @@ dependencies = [
dep_glib,
dep_gmodule,
dep_libcanberra,
- dep_qlite,
dep_xmpp_vala,
dep_gio,
]
@@ -15,6 +14,6 @@ sources = files(
vala_args = [
'--vapidir', meson.current_source_dir() / 'vapi',
]
-lib_notification_sound = shared_library('notification-sound', sources, name_prefix: '', vala_args: vala_args, dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
+lib_notification_sound = shared_library('notification-sound', sources, name_prefix: '', c_args: vala_c_args, vala_args: vala_args, dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
dep_notification_sound = declare_dependency(link_with: lib_notification_sound, include_directories: include_directories('.'))
summary('Sound for chat notifications (notification-sound)', dep_notification_sound, section: 'Plugins') \ No newline at end of file
diff --git a/plugins/omemo/data/gresource.xml b/plugins/omemo/data/gresource.xml
deleted file mode 100644
index 673c3df5..00000000
--- a/plugins/omemo/data/gresource.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
- <gresource prefix="/im/dino/Dino/omemo">
- <file>contact_details_dialog.ui</file>
- <file>encryption_preferences_entry.ui</file>
- <file>manage_key_dialog.ui</file>
- </gresource>
-</gresources>
diff --git a/plugins/omemo/meson.build b/plugins/omemo/meson.build
deleted file mode 100644
index 4418dd23..00000000
--- a/plugins/omemo/meson.build
+++ /dev/null
@@ -1,92 +0,0 @@
-subdir('po')
-dependencies = [
- dep_libadwaita,
- dep_crypto_vala,
- dep_dino,
- dep_gee,
- dep_glib,
- dep_gmodule,
- dep_gtk4,
- dep_libgcrypt,
- dep_libqrencode,
- dep_libomemo_c,
- dep_m,
- dep_qlite,
- dep_xmpp_vala,
-]
-sources = files(
- 'src/dtls_srtp_verification_draft.vala',
- 'src/file_transfer/file_decryptor.vala',
- 'src/file_transfer/file_encryptor.vala',
- 'src/jingle/jet_omemo.vala',
- 'src/jingle/jingle_helper.vala',
- 'src/logic/database.vala',
- 'src/logic/decrypt.vala',
- 'src/logic/encrypt.vala',
- 'src/logic/manager.vala',
- 'src/logic/pre_key_store.vala',
- 'src/logic/session_store.vala',
- 'src/logic/signed_pre_key_store.vala',
- 'src/logic/trust_manager.vala',
- 'src/plugin.vala',
- 'src/protocol/bundle.vala',
- 'src/protocol/message_flag.vala',
- 'src/protocol/stream_module.vala',
- 'src/register_plugin.vala',
- 'src/native/context.vala',
- 'src/native/helper.c',
- 'src/native/simple_iks.vala',
- 'src/native/simple_pks.vala',
- 'src/native/simple_spks.vala',
- 'src/native/simple_ss.vala',
- 'src/native/store.vala',
- 'src/native/util.vala',
- 'src/trust_level.vala',
- 'src/ui/bad_messages_populator.vala',
- 'src/ui/call_encryption_entry.vala',
- 'src/ui/contact_details_provider.vala',
- 'src/ui/device_notification_populator.vala',
- 'src/ui/encryption_list_entry.vala',
- 'src/ui/encryption_preferences_entry.vala',
- 'src/ui/manage_key_dialog.vala',
- 'src/ui/own_notifications.vala',
- 'src/ui/util.vala',
-)
-sources += gnome.compile_resources(
- 'resources',
- 'data/gresource.xml',
- source_dir: 'data',
-)
-c_args = [
- '-DG_LOG_DOMAIN="OMEMO"',
- '-DGETTEXT_PACKAGE="dino-omemo"',
- '-DLOCALE_INSTALL_DIR="@0@"'.format(get_option('prefix') / get_option('localedir')),
-]
-vala_args = [
- '--vapidir', meson.current_source_dir() / 'vapi',
- # This is to build internal vapi for tests
- '--header', meson.current_build_dir() / 'omemo.h',
- '--internal-vapi', meson.current_build_dir() / 'omemo-internal.vapi',
- '--internal-header', meson.current_build_dir() / 'omemo-internal.h',
-]
-lib_omemo = shared_library('omemo', sources, name_prefix: '', c_args: c_args, vala_args: vala_args, include_directories: include_directories('src'), dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
-dep_omemo = declare_dependency(link_with: lib_omemo, include_directories: include_directories('.'))
-summary('End-to-end encryption using OMEMO (omemo)', dep_omemo.found(), bool_yn: true, section: 'Plugins')
-# This is to use the internal vapi instead of the regular
-vapi_omemo_internal = custom_target('omemo-internal-vapi', command: [find_program('touch'), meson.current_build_dir() / 'omemo-internal.vapi'], output: ['omemo-internal.vapi'], depends: lib_omemo)
-dep_omemo_internal = declare_dependency(link_args: [lib_omemo.full_path()], include_directories: include_directories('.', 'src'), sources: [vapi_omemo_internal])
-
-test_sources = [
- 'tests/native/common.vala',
- 'tests/native/testcase.vala',
-
- 'tests/native/curve25519.vala',
- 'tests/native/hkdf.vala',
- 'tests/native/session_builder.vala',
-]
-test_vala_args = [
- '--vapidir', meson.current_source_dir() / 'vapi',
-]
-
-exe_omemo_test = executable('omemo-test', test_sources, c_args: c_args, vala_args: test_vala_args, dependencies: dependencies + dep_omemo_internal, build_rpath: '$ORIGIN', install: false)
-test('Tests for omemo', exe_omemo_test)
diff --git a/plugins/omemo/po/LINGUAS b/plugins/omemo/po/LINGUAS
deleted file mode 100644
index 384e7d3b..00000000
--- a/plugins/omemo/po/LINGUAS
+++ /dev/null
@@ -1,44 +0,0 @@
-ar
-ca
-cs
-da
-de
-el
-en
-eo
-es
-et
-eu
-fa
-fi
-fr
-fur
-gl
-hi
-hu
-id
-ie
-isv
-it
-ja
-ka
-kab
-lb
-lt
-nb
-nl
-oc
-pl
-pt
-pt_BR
-ro
-ru
-sq
-sv
-ta
-th
-tr
-uk
-vi
-zh_CN
-zh_TW
diff --git a/plugins/omemo/po/ar.po b/plugins/omemo/po/ar.po
deleted file mode 100644
index ce019542..00000000
--- a/plugins/omemo/po/ar.po
+++ /dev/null
@@ -1,366 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-06-16 14:01+0000\n"
-"Language-Team: Arabic <https://hosted.weblate.org/projects/dino/plugin-omemo/"
-"ar/>\n"
-"Language: ar\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
-"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 5.12-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr "يستخدم %s جهازًا غير موثوق به. لن ترى رسائل من أجهزة لا تثق بها."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "أدِر الأجهزة"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "لا يثق %s بهذا الجهاز. هذا يعني أنك قد تفقد بعض الرسائل."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "إدارة المفتاح"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr "قارن البصمة حرفًا بحرف مع تلك التي تظهر على جهاز مُراسِلك."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "البصمات غير متطابقة"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "البصمات متطابقة"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "ألغِ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "أكِّد"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "تحقق من المفتاح"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"ستميز الرسائل القادمة المرسلة بواسطة %s من الجهاز الذي يستخدم هذا المفتاح "
-"وفقًا لذلك في نافذة الدردشة."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "البصمات غير متطابقة"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"تحقق بأنك تقارن البصمة الصحيحة من فضلك. إن لم تكن البصمات متطابقة فإن حساب "
-"%s قد يكون مخترقًا، ومن المستحسن التفكير برفض هذا المفتاح."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "تحقق مِن بصمة المفتاح"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "قارن بصمة هذا المفتاح مع البصمة المعروضة على جهاز مُراسِلك."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "ارفض المفتاح"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "يحظر الاتصال المشفر مع جهاز المراسل الذي يستخدم هذا المفتاح."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "اقبل المفتاح"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "يسمح بالاتصال المشفر بجهاز المراسل الذي يستخدم هذا المفتاح."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "هذا المفتاح %s حاليًا."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "مقبول"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "ذلك يعني أنه بإمكان %s أن يستخدمه لتلقي وإرسال رسائل مشفرة."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "مُحَقَّق"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "بالإضافة إلى ذلك، فقد تم التحقق من تطابق المفتاح على جهاز المُراسِل."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "مرفوض"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"هذا يعني أنه لن يكون بمقدور %s استخدامه لفك تشفير رسائلك، ولن ترى الرسائل "
-"المشفرة به."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"لن ترى الرسائل المشفرة من جهاز %s الذي يستخدم هذا المفتاح. وبخلاف ذلك، فلن "
-"يتمكن هذا الجهاز من فك تشفير رسائلك بعد الآن."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"سيكون بمقدورك تبادل الرسائل المشفرة مع جهاز %s الذي يستخدم هذا المفتاح."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "عُد"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "أدِر"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "لدى هذا المُراسِل أجهزة جديدة"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "قرار ثقة OMEMO إلزامي"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "هل قمت بإضافة جهاز جديد على حساب %s؟"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO مبدئيًا"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "فَعِّل تعمية OMEMO للمحادثات الجديدة"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "شَفِّر للأجهزة الجديدة"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "شَفِّر تلقائيًا للأجهزة الجديدة من هذا المراسِل."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "المفاتيح الجديدة"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "سَتُقبَل مفاتيح التشفير الجديدة من أجهزتك الأخرى تلقائيًا."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "هذا الجهاز"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "جهاز آخر"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "جهاز"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "قُبِل"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "رُفِض"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "مُحَقَّق"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "جهاز جديد"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"لكل جهاز مفتاح OMEMO خاص به. يمكن فك تعمية الرسائل على جهاز ما إذا كانت "
-"التعمية قد تمت بمفتاحه حصرًا. الرسائل معمَّاة للأجهزة المقبولة."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "إدارة مفاتيح OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "التعمية"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "لا أجهزة OMEMO"
-#~ msgstr[1] "جهاز OMEMO واحد"
-#~ msgstr[2] "جهازا OMEMO"
-#~ msgstr[3] "%d أجهزة OMEMO"
-#~ msgstr[4] "%d جهاز OMEMO"
-#~ msgstr[5] "%d جهاز OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "اقبّل المفاتيح الجديدة تلقائيًا"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "ستقبل مفاتيح التشفير الجديدة لهذا المراسل تلقائيًا."
-
-#~ msgid "Own key"
-#~ msgstr "مفتاحك الخاص"
-
-#~ msgid "Associated keys"
-#~ msgstr "المفاتيح المقترِنة"
-
-#~ msgid "Inactive keys"
-#~ msgstr "المفاتيح غير النشِطة"
-
-#~ msgid "Unused"
-#~ msgstr "غير مستخدَم"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "بصمتك الخاصة"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "سيتم توليدها عند أول اتصال"
-
-#~ msgid "Not matching"
-#~ msgstr "غير مطابقة"
-
-#~ msgid "Matching"
-#~ msgstr "مطابقة"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "بمجرد تأكيد ذلك ، سيتم تمييز أية رسائل مستقبلية مرسلة مِن %s باستخدام هذا "
-#~ "المفتاح وفقا لذلك في نافذة الدردشة."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr "توقف عن قبول هذا المفتاح أثناء الاتصال مع المُراسِل المرتبط به."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "ابدأ في قبول هذا المفتاح أثناء الاتصال مع المُراسِل المرتبط به"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "هذا يعني أنه لا يمكن استخدامه مِن طرف %s لاستقبال الرسائل و سيتم تجاهل أية "
-#~ "رسائل بُعِثت به."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "بمجرد التأكيد ، سيتم تجاهل أي رسائل مستقبلية يقوم بإرسالها %s باستخدام "
-#~ "هذا المفتاح ويتصبح كافة رسائلك غير قابلة للقراءة باستخدام هذا المفتاح."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "بمجرد تأكيد هذا المفتاح سوف يكون قابلا للاستخدام من قِبل %s لتلقي وإرسال "
-#~ "الرسائل."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "عند قيام جهة الاتصال هذه باضافة مفاتيح تشفير جديدة إلى حسابها ، قم "
-#~ "بقبولها تلقائيا."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr "عند إضافة مفاتيح تشفير جديدة إلى حسابك ، اقبلها تلقائيا."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "جهاز مجهول (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "أجهزة أخرى"
-
-#~ msgid "- None -"
-#~ msgstr "- لا شيء -"
diff --git a/plugins/omemo/po/ca.po b/plugins/omemo/po/ca.po
deleted file mode 100644
index 3a431776..00000000
--- a/plugins/omemo/po/ca.po
+++ /dev/null
@@ -1,339 +0,0 @@
-# Catalan translation for dino-omemo.
-# This file is distributed under the same license as the dino package.
-# Jordi Mallach <jordi@mallach.net>, 2018.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo 20180123\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-08-22 20:14+0000\n"
-"Language-Team: Catalan <ca@dodds.net>\n"
-"Language: ca\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s ha estat utilitzant un dispositiu no verificat. No veureu missatges de "
-"dispositius en què no confieu."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gestionar dispositius"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s no confia en aquest dispositiu. Això vol dir que és possible que us "
-"faltin missatges."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gestiona la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Compareu l'empremta, caràcter per caràcter, amb la que es mostra al vostre "
-"dispositiu de contactes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Les empremtes són diferents"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Les empremtes coincideixen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Cancel·la"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirma"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Comproveu la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Els missatges futurs enviats per %s des del dispositiu que utilitza aquesta "
-"clau es ressaltaran en conseqüència a la finestra de xat."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Les empremtes no es corresponen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Cercioreu-vos que estigueu verificant l'empremta correcta. Si no en "
-"coincideixen, el compte de %s podria trobar-se en perill i heu de considerar "
-"rebutjar aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar l'empremta de la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Compareu l'empremta digital d'aquesta clau amb l'empremta digital que es "
-"mostra al dispositiu del contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rebutja la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Bloqueja la comunicació xifrada amb el dispositiu del contacte que utilitza "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Accepta la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permet la comunicació xifrada amb el dispositiu del contacte que utilitza "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Actualment, aquesta clau ha estat %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "acceptada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Això vol dir que %s pot utilitzar-la per rebre i enviar missatges xifrats."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"A més, s'ha verificat que coincideix amb la clau del dispositiu del contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rebutjada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Això vol dir que %s no pot utilitzar-la per desxifrar els vostres missatges "
-"i no veureu els missatges xifrats amb ella."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"No veureu missatges xifrats del dispositiu de %s que utilitza aquesta clau. "
-"Per contra, aquest dispositiu ja no podrà desxifrar els vostres missatges."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Podreu intercanviar missatges xifrats amb el dispositiu de %s que utilitza "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Enrere"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gestiona"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Aquest contacte té dispositius nous"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Cal una decisió de confiança d'OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Heu afegit un dispositiu nou per al compte %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO per defecte"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Activa l'encriptació OMEMO per a converses noves"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Encripta a nous dispositius"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Encripta automàticament a dispositius nous des d'aquest contacte."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Claus noves"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Les claus de xifratge noves dels altres dispositius s'acceptaran "
-"automàticament."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Aquest dispositiu"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Un altre dispositiu"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Dispositiu"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Acceptada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rebutjada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Nou dispositiu"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Cada dispositiu té la seva pròpia clau OMEMO. Un dispositiu només es pot "
-"desxifrar un missatge si ha estat xifrat per a la seva clau. Només es xifren "
-"els missatges per a dispositius acceptats."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gestió de claus OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Xifratge"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d dispositiu OMEMO"
-#~ msgstr[1] "%d dispositius OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Accepta claus noves automàticament"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Les claus de xifratge noves d'aquest contacte s'acceptaran automàticament."
-
-#~ msgid "Own key"
-#~ msgstr "Clau pròpia"
-
-#~ msgid "Associated keys"
-#~ msgstr "Claus associades"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Claus inactives"
-
-#~ msgid "Unused"
-#~ msgstr "No utilitzada"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Empremta pròpia"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Es generarà durant la primera connexió"
-
-#~ msgid "Not matching"
-#~ msgstr "No coincideixen"
-
-#~ msgid "Matching"
-#~ msgstr "Coincideixen"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Després de la confirmació, qualssevol missatges que enviï %s amb aquesta "
-#~ "clau es ressaltarà a la finestra del xat."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Dispositiu desconegut (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Altres dispositius"
-
-#~ msgid "- None -"
-#~ msgstr "- Cap -"
diff --git a/plugins/omemo/po/cs.po b/plugins/omemo/po/cs.po
deleted file mode 100644
index f85a3781..00000000
--- a/plugins/omemo/po/cs.po
+++ /dev/null
@@ -1,315 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-18 01:44+0000\n"
-"Language-Team: none\n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s používá nedůvěryhodné zařízení. Zprávy ze zařízení, kterým nedůvěřujete, "
-"se vám nezobrazí."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Spravovat zařízení"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s nedůvěřuje tomuto zařízení. Z tohoto důvodu nemusí vidět některé zprávy."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Spravovat klíč"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Porovnejte otisk klíče, znak po znaku, s tím, který je zobrazen na zařízení "
-"vašeho kontaktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Otisky klíčů se liší"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Otisky klíčů odpovídají"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Zrušit"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Potvrdit"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Ověřit klíč"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Budoucí zprávy, s odesílatelem %s, ze zařízení, které používá tento klíč, "
-"budou odpovídajícím způsobem zvýrazněny v okně chatu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Otisky klíčů se neshodují"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Ověřte, zda porovnáváte správný otisk klíče. Pokud se otisky neshodují, účet "
-"%s může být ohrožen a měli byste zvážit zamítnutí tohoto klíče."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Ověření otisku klíče"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Porovnejte otisk tohoto klíče s otiskem zobrazeným na zařízení kontaktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Odmítnout klíč"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Zablokujte šifrovanou komunikaci se zařízením kontaktu, které tento klíč "
-"používá."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Přijmout klíč"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Povolit šifrovanou komunikaci se zařízením kontaktu, které používá tento "
-"klíč."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Tento klíč je v současné době %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "akceptován"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"To znamená, že jej %s může používat k přijímání a odesílání šifrovaných "
-"zpráv."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "ověřen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Navíc bylo ověřeno, že odpovídá klíči v zařízení kontaktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "odmítnut"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"To znamená, že jej %s nemůže použít k dešifrování zpráv a vy neuvidíte "
-"zprávy šifrované tímto klíčem."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Ze zařízení %s, které používá tento klíč, se šifrované zprávy nezobrazí. "
-"Toto zařízení už také nebude schopno rozluštit vaše zprávy."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Budete si moci vyměňovat šifrované zprávy se zařízením %s, které tento klíč "
-"používá."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Zpět"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Spravovat"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Tento kontakt má nová zařízení"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Vyžaduje se rozhodnutí o důvěře OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Přidali jste nové zařízení pro účet %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO ve výchozím stavu"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Zapnout OMEMO šifrování pro nové konverzace"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Šifrovat novým zařízením"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automaticky šifrovat novým zařízením od tohoto kontaktu."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nové klíče"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Nové šifrovací klíče z vašich ostatních zařízení budou automaticky přijímány."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Toto zařízení"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Jiné zařízení"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Zařízení"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Přijat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Odmítnut"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Ověřen"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Nové zařízení"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Každé zařízení má svůj vlastní OMEMO klíč. Pokud jsou tímto klíčem "
-"zašifrované, zprávy je možné rozšifrovat pouze daným zařízením. Zprávy jsou "
-"šifrovány pouze pro přijatá zařízení."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO Správa klíčů"
-
-#~ msgid "Encryption"
-#~ msgstr "Šifrování"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO zařízení"
-#~ msgstr[1] "%d OMEMO zařízení"
-#~ msgstr[2] "%d OMEMO zařízení"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Automaticky přijímat nové klíče"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Nové šifrovací klíče od tohoto kontaktu budou automaticky přijímány."
-
-#~ msgid "Own key"
-#~ msgstr "Vlastní klíč"
-
-#~ msgid "Associated keys"
-#~ msgstr "Přidružené klíče"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Neaktivní klíče"
-
-#~ msgid "Unused"
-#~ msgstr "Nepoužit"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Otisk vlastního klíče"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Budou generovány při prvním připojení"
diff --git a/plugins/omemo/po/da.po b/plugins/omemo/po/da.po
deleted file mode 100644
index 4689d6c0..00000000
--- a/plugins/omemo/po/da.po
+++ /dev/null
@@ -1,253 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-01-06 01:07+0000\n"
-"Language-Team: none\n"
-"Language: da\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.4-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Kryptering"
diff --git a/plugins/omemo/po/de.po b/plugins/omemo/po/de.po
deleted file mode 100644
index a3085e63..00000000
--- a/plugins/omemo/po/de.po
+++ /dev/null
@@ -1,398 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: German <https://hosted.weblate.org/projects/dino/plugin-omemo/"
-"de/>\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s hat ein nicht akzeptiertes Gerät benutzt. Du wirst Nachrichten von nicht "
-"akzeptierten Geräten nicht sehen."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Geräte verwalten"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s akzeptiert dieses Gerät nicht. Deshalb verpasst du vielleicht Nachrichten."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Schlüssel verwalten"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Vergleiche den Fingerabdruck, Zeichen für Zeichen, mit dem der auf dem Gerät "
-"deines Kontakts angezeigt wird."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fingerabdrücke unterscheiden sich"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fingerabdrücke stimmen überein"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Bestätigen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Schlüssel verifizieren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Zukünftige Nachrichten, die %s von dem Gerät sendet, welches diese Schlüssel "
-"verwendet, werden im Chatfenster entsprechend hervorgehoben."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fingerabdrücke stimmen nicht überein"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Bitte überprüfe, ob du den richtigen Fingerabdruck vergleichst. Wenn die "
-"Fingerabdrücke nicht übereinstimmen, ist das Konto von %s möglicherweise "
-"kompromittiert und du solltest in Betracht ziehen, den Schlüssel abzulehnen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Fingerabdruck überprüfen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Diesen Fingerabdruck mit dem Fingerabdruck vergleichen, der auf dem Gerät "
-"des Kontaktes angezeigt wird."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Schlüssel ablehnen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blockiert die verschlüsselte Kommunikation mit dem Gerät des Kontakts, das "
-"diesen Schlüssel verwendet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Schlüssel akzeptieren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Erlaubt die verschlüsselte Kommunikation mit dem Gerät des Kontakts, das "
-"diesen Schlüssel verwendet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Dieser Schlüssel ist aktuell %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "akzeptiert"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Das bedeutet, er kann von %s zum Empfangen und Senden verschlüsselter "
-"Nachrichten verwendet werden."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "überprüft"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Darüber hinaus wurde überprüft, dass er mit dem Schlüssel auf dem Gerät des "
-"Kontaktes übereinstimmt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "abgelehnt"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Das bedeutet %s kann ihn nicht benutzen, um deine Nachrichten zu "
-"entschlüsseln, und du wirst damit verschlüsselte Nachrichten nicht sehen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Du wirst verschlüsselte Nachrichten von dem Gerät von %s, welches diesen "
-"Schlüssel benutzt nicht mehr sehen. Umgekehrt kann dieses Gerät deine "
-"Nachrichten nicht mehr entschlüsseln."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Du wirst verschlüsselte Nachrichten mit dem Gerät von %s, welches diesen "
-"Schlüssel verwendet, austauschen können."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Zurück"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Verwalten"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Dieser Kontakt hat neue Geräte"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO-Vertrauensentscheidung erforderlich"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Hast du ein neues Gerät für dein Konto %s hinzugefügt?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO als Standard"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "OMEMO-Verschlüsselung für neue Unterhaltungen aktivieren"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Verschlüsselung für neue Geräte"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automatische Verschlüsselung für neue Geräte von diesem Kontakt."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Neue Schlüssel"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Neue Schlüssel von deinen anderen Geräten werden automatisch akzeptiert."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Dieses Gerät"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Anderes Gerät"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Gerät"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Akzeptiert"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Zurückgewiesen"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verifiziert"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Neues Gerät"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Jedes Gerät hat seinen eigenen OMEMO-Schlüssel. Nachrichten können von einem "
-"Gerät nur entschlüsselt werden, wenn sie mit diesem Schlüssel verschlüsselt "
-"sind. Nachrichten werden nur an akzeptierte Geräte verschlüsselt."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO-Schlüssel Verwaltung"
-
-#~ msgid "Encryption"
-#~ msgstr "Verschlüsselung"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO Gerät"
-#~ msgstr[1] "%d OMEMO Geräte"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Neue Schlüssel automatisch akzeptieren"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Neue Schlüssel von diesem Kontakt werden automatisch akzeptiert."
-
-#~ msgid "Own key"
-#~ msgstr "Eigener Schlüssel"
-
-#~ msgid "Associated keys"
-#~ msgstr "Zugehörige Schlüssel"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Inaktive Schlüssel"
-
-#~ msgid "Unused"
-#~ msgstr "Unbenutzt"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Eigener Fingerabdruck"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Wird beim ersten Verbinden erzeugt"
-
-#~ msgid "Your contact"
-#~ msgstr "Dein Kontakt"
-
-#~ msgid "Not matching"
-#~ msgstr "Nicht übereinstimmend"
-
-#~ msgid "Matching"
-#~ msgstr "Stimmt überein"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Nach der Bestätigung werden alle mit diesem Schlüssel verschlüsselten "
-#~ "Nachrichten von %s hervorgehoben."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Diesen Schlüssel nicht mehr für die Kommunikation mit dem "
-#~ "Schlüsselbesitzer akzeptieren."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Akzeptiere diesen Schlüssel für die Kommunikation mit dem zugehörigen "
-#~ "Kontakt"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Das bedeutet, dass es von %s nicht verwendet werden kann, um Nachrichten "
-#~ "zu empfangen und alle von ihm gesendeten Nachrichten werden ignoriert."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Nach der Bestätigung werden alle zukünftigen Nachrichten, die von %s mit "
-#~ "diesem Schlüssel gesendet werden, ignoriert und keine Ihrer Nachrichten "
-#~ "ist mit diesem Schlüssel lesbar."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Sobald bestätigt, kann %s diesen Schlüssel zum Senden und Empfangen von "
-#~ "Nachrichten verwenden."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Wenn dieser Kontakt neue Verschlüsselungscodes zu seinem Konto hinzufügt, "
-#~ "werden sie automatisch akzeptiert."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Wenn du einen neuen Schüssel zu deinem Account hinzufügst, wird dieser "
-#~ "automatisch akzeptiert."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Diesen Schlüssel für die Kommunikation mit dem entsprechenden Kontakt "
-#~ "akzeptieren."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Unbekanntes Gerät (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Andere Geräte"
-
-#~ msgid "- None -"
-#~ msgstr "- Keine -"
-
-#~ msgid "OMEMO"
-#~ msgstr "OMEMO"
-
-#~ msgid "Database error"
-#~ msgstr "Datenbank Fehler"
diff --git a/plugins/omemo/po/dino-omemo.pot b/plugins/omemo/po/dino-omemo.pot
deleted file mode 100644
index 9f5ff2d4..00000000
--- a/plugins/omemo/po/dino-omemo.pot
+++ /dev/null
@@ -1,250 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
diff --git a/plugins/omemo/po/el.po b/plugins/omemo/po/el.po
deleted file mode 100644
index 6a522bc6..00000000
--- a/plugins/omemo/po/el.po
+++ /dev/null
@@ -1,320 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2022-02-04 09:55+0000\n"
-"Language-Team: none\n"
-"Language: el\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s χρησιμοποιεί μια μη αξιόπιστη συσκευή. Δεν θα βλέπετε μηνύματα από "
-"συσκευές που δεν εμπιστεύεστε."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Διαχείριση συσκευών"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s δεν εμπιστεύεται αυτήν τη συσκευή. Αυτό σημαίνει ότι μπορεί να χάσετε "
-"μηνύματα."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Διαχείριση Κλειδιού"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Συγκρίνετε το δακτυλικό αποτύπωμα (fingerprint), χαρακτήρα προς χαρακτήρα, "
-"με αυτό που εμφανίζεται στη συσκευή της επαφής σας."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Τα δακτυλικά αποτυπώματα (fingerprints) διαφέρουν"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Τα δακτυλικά αποτυπώματα (fingerprints) ταιριάζουν"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Ακύρωση"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Επιβεβαίωση"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Επαλήθευση κλειδιού"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Μελλοντικά μηνύματα που αποστέλλονται από %s από τη συσκευή που χρησιμοποιεί "
-"αυτό το κλειδί θα επισημαίνονται ανάλογα στο παράθυρο συνομιλίας."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Τα δακτυλικά αποτυπώματα (fingerprints) δεν ταιριάζουν"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Επαληθεύστε ότι συγκρίνετε το σωστό δακτυλικό αποτύπωμα (fingerprint). Εάν "
-"τα δακτυλικά αποτυπώματα (fingerprints) δεν ταιριάζουν, ο λογαριασμός του %s "
-"μπορεί να παραβιαστεί και θα πρέπει να σκεφτείτε να απορρίψετε αυτό το "
-"κλειδί."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Επαλήθευση δακτυλικού αποτυπώματος (fingerprint) κλειδιού"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Συγκρίνετε το δακτυλικό αποτύπωμα (fingerprint) αυτού του κλειδιού με το "
-"δακτυλικό αποτύπωμα που εμφανίζεται στη συσκευή της επαφής."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Απόρριψη κλειδιού"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Αποκλεισμός κρυπτογραφημένης επικοινωνίας με τη συσκευή της επαφής που "
-"χρησιμοποιεί αυτό το κλειδί."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Αποδοχή κλειδιού"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Να επιτρέπεται η κρυπτογραφημένη επικοινωνία με τη συσκευή της επαφής που "
-"χρησιμοποιεί αυτό το κλειδί."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Αυτό το κλειδί είναι αυτή τη στιγμή %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "δεκτό"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί από το %s για λήψη και αποστολή "
-"κρυπτογραφημένων μηνυμάτων."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "επαληθευμένο"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Επιπλέον, έχει επαληθευτεί ότι ταιριάζει με το κλειδί στη συσκευή της επαφής."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "απορριφθέν"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Αυτό σημαίνει ότι δεν μπορεί να χρησιμοποιηθεί από %s για την "
-"αποκρυπτογράφηση των μηνυμάτων σας και δεν θα βλέπετε μηνύματα "
-"κρυπτογραφημένα με αυτό."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Δεν θα βλέπετε κρυπτογραφημένα μηνύματα από τη συσκευή των %s που "
-"χρησιμοποιούν αυτό το κλειδί. Αντίθετα, αυτή η συσκευή δεν θα μπορεί πλέον "
-"να αποκρυπτογραφήσει τα μηνύματά σας."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Θα μπορείτε να ανταλλάσσετε κρυπτογραφημένα μηνύματα με τη συσκευή των %s "
-"που χρησιμοποιούν αυτό το κλειδί."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Πίσω"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Διαχείρηση"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Αυτή η επαφή έχει νέες συσκευές"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Απαιτείται απόφαση εμπιστοσύνης OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Προσθέσατε νέα συσκευή για τον λογαριασμό %s;"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Νέα κλειδιά"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Τα νέα κλειδιά κρυπτογράφησης από τις άλλες συσκευές σας θα γίνονται δεκτά "
-"αυτόματα."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Αποδεκτά"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Απορριφθέντα"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Επαληθευμένα"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Διαχείριση κλειδιών OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Κρυπτογράφηση"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO συσκευή"
-#~ msgstr[1] "%d OMEMO συσκευές"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Αυτόματη αποδοχή νέων κλειδιών"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Τα νέα κλειδιά κρυπτογράφησης από αυτήν την επαφή θα γίνονται δεκτά "
-#~ "αυτόματα."
-
-#~ msgid "Own key"
-#~ msgstr "Το κλειδί μου"
-
-#~ msgid "Associated keys"
-#~ msgstr "Συσχετισμένα κλειδιά"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Ανενεργά κλειδιά"
-
-#~ msgid "Unused"
-#~ msgstr "Αχρησιμοποίητα"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Το δακτυλικό μου αποτύπωμα (fingerprint)"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Θα δημιουργηθεί με την πρώτη σύνδεση"
diff --git a/plugins/omemo/po/en.po b/plugins/omemo/po/en.po
deleted file mode 100644
index 630f63ea..00000000
--- a/plugins/omemo/po/en.po
+++ /dev/null
@@ -1,241 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
diff --git a/plugins/omemo/po/eo.po b/plugins/omemo/po/eo.po
deleted file mode 100644
index e7541d32..00000000
--- a/plugins/omemo/po/eo.po
+++ /dev/null
@@ -1,318 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-24 17:09+0000\n"
-"Language-Team: none\n"
-"Language: eo\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s uzas nefidatan aparaton. Vi ne vidos mesaĝojn el aparatoj, kiujn vi ne "
-"fidas."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Administri aparatojn"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s ne fidas ĉi tiun aparaton. Tio signifas, ke eble mankas al vi mesaĝoj."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Administri Ŝlosilon"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Komparu la fingropremaĵon, signon post signo, kun la fingropremaĵo montrata "
-"sur la aparato de via kontakto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fingropremaĵoj diferencas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fingropremaĵoj kongruas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Nuligi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Konfirmi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Konfirmi ŝlosilon"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Mesaĝoj sendotaj de %s per la aparato kiu uzas ĉi tiun ŝlosilon estos "
-"emfazitaj laŭe en la babila fenestro."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fingropremaĵoj ne kongruas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Bonvolu konfirmi, ke vi komparas la ĝustan fingropremaĵon. Se fingropremaĵoj "
-"ne kongruas, la konto de %s eble estas kompromitita, kaj vi konsideru "
-"rifuzon de ĉi tiu ŝlosilo."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Konfirmi ŝlosilan fingropremaĵon"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Komparu la fingropremaĵon de ĉi tiu ŝlosilo kun la fingropremaĵo montrata "
-"sur la aparato de la kontakto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rifuzi ŝlosilon"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Rifuzi ĉifritan komunikadon al la aparato de la kontakto, kiu uzas ĉi tiun "
-"ŝlosilon."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Akcepti ŝlosilon"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Akcepti ĉifritan komunikadon al la aparato de la kontakto, kiu uzas ĉi tiun "
-"ŝlosilon."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Ĉi tiu ŝlosilo estas aktuale %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "akceptata"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Ĉi tio signifas, ke ĝi povas esti uzata de %s por ricevi kaj sendi ĉifritajn "
-"mesaĝojn."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "konfirmita"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Krome ĝi estis kontrolita pri kongruo kun la ŝlosilo ĉe la aparato de la "
-"kontakto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rifuzita"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Tio signifas, ke ĝi ne povas esti uzata de %s por malĉifri viajn mesaĝojn, "
-"kaj vi ne vidos mesaĝojn ĉifritajn per ĝi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Vi ne vidos ĉifritajn mesaĝojn el la aparato de %s kiu uzas ĉi tiun "
-"ŝlosilon. Male, tiu aparato ne plu povos malĉifri viajn mesaĝojn."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Vi povos interŝanĝi ĉifritajn mesaĝojn kun la aparato de %s kiu uzas ĉi tiun "
-"ŝlosilon."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Reen"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Administri"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Ĉi tiu kontakto havas novajn aparatojn"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Necesas OMEMO-decido pri fidindeco"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Ĉu vi aldonis novan aparaton por la konto %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO defaŭlte"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Ŝalti ĉifradon per OMEMO por novaj konversacioj"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Ĉifri por novaj aparatoj"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Aŭtomate ĉifri por novaj aparatoj de ĉi tiu kontakto."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Novaj ŝlosiloj"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Novaj ĉifraj ŝlosiloj de viaj aliaj aparatoj estos aŭtomate akceptitaj."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Ĉi tiu aparato"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Alia aparato"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Aparato"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Akceptita"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rifuzita"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Konfirmita"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Nova aparato"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Ĉiu aparato havas sian OMEMO-ŝlosilon. Mesaĝoj povas esti deĉifritaj de "
-"aparato, nur se ĉifritaj per ĝia ŝlosilo. Mesaĝoj estas ĉifrataj nur por "
-"akceptitaj aparatoj."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Administrado de OMEMO-Ŝlosiloj"
-
-#, fuzzy
-#~ msgid "Encryption"
-#~ msgstr "Kodo"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO-aparato"
-#~ msgstr[1] "%d OMEMO-aparatoj"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Aŭtomate akcepti novajn ŝlosilojn"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Novaj ĉifraj ŝlosiloj de ĉi tiu kontakto estos aŭtomate akceptitaj."
-
-#~ msgid "Own key"
-#~ msgstr "Propra ŝlosilo"
-
-#~ msgid "Associated keys"
-#~ msgstr "Asociitaj ŝlosiloj"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Neaktivaj ŝlosiloj"
-
-#~ msgid "Unused"
-#~ msgstr "Ne uzata"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Propra fingropremaĵo"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Estos farita dum unua konekto"
diff --git a/plugins/omemo/po/es.po b/plugins/omemo/po/es.po
deleted file mode 100644
index c4b0d353..00000000
--- a/plugins/omemo/po/es.po
+++ /dev/null
@@ -1,405 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-05-11 19:01+0000\n"
-"Language-Team: Spanish <https://hosted.weblate.org/projects/dino/plugin-"
-"omemo/es/>\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"<jaime.marquinez.ferrandiz@fastmail.net>\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.12-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s ha estado usando un dispositivo poco fiable. No verá mensajes de "
-"dispositivos en los que no confíe."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gestionar dispositivos"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s no confía en este dispositivo. Eso significa que puede que te falten "
-"mensajes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gestionar Clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Compara la huella digital, carácter a carácter, con la huella digital "
-"mostrada en el dispositivo de tus contactos."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Las huellas digitales son diferente"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Las huellas digitales son idénticas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificar clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Los mensajes futuros enviados por %s desde el dispositivo que usa esta clave "
-"serán resaltado en consecuencia en la ventana de conversación."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Huellas digitales no coinciden"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Por favor, verifica que estás comparando la huella digital correcta. Si la "
-"huella digital no coincide con la cuenta %s puede que la clave esté "
-"comprometida y deberías considerar rechazar esta clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar Huella Digital"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Compara esta huella digital con la huella digital mostrada en el dispositivo "
-"de tu contacto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rechazar clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Bloquear comunicación cifrada con el dispositivo del contacto que usa esta "
-"clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Aceptar clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permitir comunicación cifrada con el dispositivo del contacto que usa esta "
-"clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Esta clave está actualmente %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "aceptada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Esto significa que puede ser usada por %s para recibir y enviar mensajes "
-"cifrados."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Además, ha sido verificado que las claves coinciden con la clave del "
-"dispositivo de tu contacto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rechazada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Esto significa que no puede ser usada por %s para descifrar tus mensajes, y "
-"tú no verás los mensajes cifrados con ella."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"No verás los mensajes cifrados desde el dispositivo de %s que usa esta "
-"clave. A la inversa, ese dispositivo ya no podrá descifrar tus mensajes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Tu podrás intercambiar mensajes cifrados con el dispositivo de %s que usa "
-"esta clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Volver"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gestionar"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Este contacto tiene un nuevo dispositivo"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Decisión de confianza requerida para clave OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "¿Añadiste un nuevo dispositivo para la cuenta %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO por defecto"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Habilitar el cifrado de OMEMO para nuevas conversaciones"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Cifrar para nuevos dispositivos"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Cifrar automáticamente los nuevos dispositivos desde este contacto."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nuevas claves"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Las nuevas claves de cifrado de tus otros dispositivos serán aceptadas "
-"automáticamente."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Este dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Otro dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Aceptada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rechazada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Dispositivo nuevo"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Cada dispositivo tiene su propia clave OMEMO. Los mensajes solamente se "
-"pueden descifrar por un dispositivo si se han cifrado para su clave. Los "
-"mensajes solamente se cifran para dispositivos aceptados."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Huellas digitales OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Encriptación"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d dispositivo OMEMO"
-#~ msgstr[1] "%d dispositivos OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Automáticamente aceptar nuevas claves"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Las nuevas claves de cifrados para este contacto serán aceptadas "
-#~ "automáticamente."
-
-#~ msgid "Own key"
-#~ msgstr "Mi clave"
-
-#~ msgid "Associated keys"
-#~ msgstr "Claves asociadas"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Claves inactivas"
-
-#~ msgid "Unused"
-#~ msgstr "Sin usar"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Tu huella digital"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Será generada en la primera conexión"
-
-#~ msgid "Your contact"
-#~ msgstr "Tu contacto"
-
-#~ msgid "Not matching"
-#~ msgstr "No coincide"
-
-#~ msgid "Matching"
-#~ msgstr "Coincide"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Una vez confirmada, cualquier futuro mensaje enviado por %s usando esta "
-#~ "clave será resaltado en el ventana de conversación."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Dejar de aceptar esta clave durante la comunicación con este contacto."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Aceptar esta clave durante la comunicación con este contacto"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Esto significa que no puede ser usada por %s para recibir mensajes, y "
-#~ "cualquier mensaje enviado con esta clave será ignorado."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Una vez confirmado, cualquier futuro mensaje enviado por %s usando esta "
-#~ "clave será ignorado y ninguno de tus mensajes será legible usando esta "
-#~ "clave."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Una vez confirmada esta clave será usable por %s para recibir y enviar "
-#~ "mensajes."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Cuando este contacto añada nuevas claves de cifrado a su cuenta, "
-#~ "automáticamente aceptarlas."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Cuando añades nuevas claves de cifrado a tu cuenta, aceptarlas "
-#~ "automáticamente."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr "Aceptar esta clave durante la comunicación con este contacto."
-
-#~ msgid "Reject Key"
-#~ msgstr "Rechazar clave"
-
-#~ msgid "Accept Key"
-#~ msgstr "Aceptar clave"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Dispositivo (0x%.8x) desconocido"
-
-#~ msgid "Other devices"
-#~ msgstr "Otros dispositivos"
-
-#~ msgid "- None -"
-#~ msgstr "- Ninguno -"
-
-#~ msgid "OMEMO"
-#~ msgstr "OMEMO"
diff --git a/plugins/omemo/po/et.po b/plugins/omemo/po/et.po
deleted file mode 100644
index db8a9be8..00000000
--- a/plugins/omemo/po/et.po
+++ /dev/null
@@ -1,309 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: none\n"
-"Language: et\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s kasutab seadet, mille suhtes puudub usaldus. Sa ei näe sõnumeid "
-"seadmetest, mida sa ei usalda."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Halda seadmeid"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s ei usalda seda seadet. See tähendab, et sa ilmselt ei näe kõiki sõnumeid."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Halda võtmeid"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Võrdle tähemärkide haaval seda sõrmejälge tollega, mida näidatakse teise "
-"osapoole seadmes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Sõrmejäljed erinevad"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Sõrmejäljed on samad"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Katkesta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Kinnita"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verifitseeri võtmed"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Kui kasutaja %s saadab tulevikus sõnumeid seadmest, mis kasutab seda "
-"krüptovõtit, siis need on ka vestlusaknas vastavalt märgitud."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Sõrmejäljed on erinevad"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Palun kontrolli, et sa kindlasti võrdleid õigeid sõrmejälgi. Kui sõrmejäljed "
-"siiski ei klapi, siis võib %s kasutajakonto olla rääderdatud ja sa peaksid "
-"sellise võtme lubamisest keelduma."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verifitseeri võtme sõrmejälge"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Võrdle seda sõrmejälge tollega, mida näidatakse teise osapoole seadmes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Keeldu võtme kasutamisest"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Sellega sa keelad krüptitud suhtluse sinu vestluspartneri seadmega, mis "
-"kasutab seda krüptovõtit."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Nõustu võtme kasutamisega"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Sellega sa lubad krüptitud suhtluse sinu vestluspartneri seadmega, mis "
-"kasutab seda krüptovõtit."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "See krüptovõti on praegu %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "tunnustatud"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"See tähendab, et %s võib teda kasutada krüptitud sõnumite saatmisel ja "
-"vastuvõtmisel."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verifitseeritud"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Lisaks oled sa kontrollinud, et ta vastab krüptovõtmele teise osapoole "
-"seadmes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "keelatud"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"See tähendab, et %s ei saa teda kasutada sinu krüptitud sõnumite lugemisel "
-"ning ka sina ei näe selle võtmega krüptitud sõnumeid."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Sa ei näe %s krüptitud sõnumeid seadmetest, mis kasutavad seda krüptovõtit. "
-"Ja teistpidi pole ka seal seadmes võimalik lugeda sinu krüptitud sõnumeid."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Sa saad nüüd vahetada krüptitud sõnumeid %s seadmetega, kus on kasutusel see "
-"krüptovõti."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Tagasi"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Halda"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Sellel kasutajal on uusi seadmeid"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Pead otsustama OMEMO-põhise usalduse osas"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Kas sa lisasid uue seadme kasutajakontole %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO kasutamine vaikimisi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Kasuta OMEMO krüptimist uute vestluste puhul"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Krüpti uute seadmete jaoks"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Krüpti automaatselt selle kasutaja uute seadmete puhul."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Uued krüptovõtmed"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "Sinu muude seadmete uute krüptovõtmetega nõustutakse automaatselt."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "See seade"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Muu seade"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Seade"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Tunnustatud"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Keelatud"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verifitseeritud"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Uus seade"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Igal seadmel on oma OMEMO-võti. Sõnumeid on võimalik dekrüptida vaid "
-"konkreetse sihtvõtme jaoks. Sõnumeid on võimalik krüptida vaid seadmete "
-"jaoks, millega oled nõustunud."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO võtmehaldus"
-
-#~ msgid "Encryption"
-#~ msgstr "Krüptimine"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO seade"
-#~ msgstr[1] "%d OMEMO seadet"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Nõustu uute võtmetega automaatselt"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Sa nõustud selle kasutaja uute krüptovõtmetega automaatselt."
-
-#~ msgid "Own key"
-#~ msgstr "Oma krüptovõti"
-
-#~ msgid "Associated keys"
-#~ msgstr "Seotud krüptovõtmed"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Mitteaktiivsed krüptovõtmed"
-
-#~ msgid "Unused"
-#~ msgstr "Kasutamata"
diff --git a/plugins/omemo/po/eu.po b/plugins/omemo/po/eu.po
deleted file mode 100644
index f7347c29..00000000
--- a/plugins/omemo/po/eu.po
+++ /dev/null
@@ -1,401 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2022-01-17 17:56+0000\n"
-"Language-Team: Basque <https://hosted.weblate.org/projects/dino/plugin-omemo/"
-"eu/>\n"
-"Language: eu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s erabiltzaileak fidagarritasun gutxiko gailu bat erabiltzen egon da. Ez "
-"duzu mezurik ikusiko konfiantza ematen ez dizuten gailuengandik."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gailuak kudeatu"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s erabiltzailea ez da gailu honetaz fidatzen. Honek mezu batzuk gal "
-"ditzakezula esan nahi du."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gakoa kudeatu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Hatz marka konparatu, hizkiz hizki, zure kontaktuaren gailuan ageri "
-"denarekin."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Hatz markak ez datoz bat"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Hatz markak bat datoz"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Utzi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Baieztatu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Gakoa egiaztatu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"%s erabiltzaileak etorkizunean gako hau erabiltzen duen gailutik bidalitako "
-"mezuak nabarmenduko dira txat leihoan."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Hatz markak ez datoz bat"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Mesedez egiaztatu ezazu hatz marka egokia konparatzen ari zarela. Hatz "
-"markak bat ez badatoz baliteke %s(e)ren kontua arriskuan egotea eta gako hau "
-"ez onartzea kontuan hartu beharko zenuke."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Gakoaren hatz marka egiaztatu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Konpara ezazu gako honen hatz marka kontaktuaren gailuan agertzen den hatz "
-"markarekin."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Gakoa ukatu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Enkriptatutako komunikazioa blokeatu gako hau erabiltzen duen kontaktuaren "
-"gailuarekin."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Gakoa onartu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Enkriptatutako komunikazioa baimendu gako hau erabiltzen duen kontaktuaren "
-"gailuarekin."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Gako hau %s dago une honetan."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "onartuta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Horrek esan nahi du %s-ek erabil dezakeela mezu zifratuak jasotzeko eta "
-"bidaltzeko."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "egiaztatuta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Gainera zure kontaktuaren gailuan ageri den gakoarekin bat datorrela "
-"egiaztatu da."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "ukatuta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Honek esan nahi du %s erabiltzaileak ezin duela erabili zure mezuak "
-"deszifratzeko, eta zuk ez dituzula gako honekin enkriptatutako mezuak "
-"ikusiko."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Ez dituzu ikusiko gako hau erabiltzen duen %s kontaktuaren gailutik "
-"igorritako mezuak. Era berean, hemendik aurrera gailu horrek ez da zure "
-"mezuak deszifratzeko gai izango."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Gako hau erabiltzen duen %s kontaktuaren gailuarekin enkriptatutako mezuak "
-"elkar-trukatzeko gai izango zara."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Atzera"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Kudeatu"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Kontaktu honek gailu berriak ditu"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO konfiantza erabakia behar da"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Gailu berri gehitu duzu %s konturako?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Gako berriak"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Zure beste gailuen enkriptatze gako berriak onartuak izango dira "
-"automatikoki."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Onartuta"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Ukatuta"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Egiaztatuta"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO gakoen kudeaketa"
-
-#~ msgid "Encryption"
-#~ msgstr "Enkriptazioa"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "OMEMO gailu %d"
-#~ msgstr[1] "%d OMEMO gailu"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Gako berriak automatikoki onartu"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Kontaktu honen enkriptatze gako berriak onartuak izango dira automatikoki."
-
-#~ msgid "Own key"
-#~ msgstr "Norberaren gakoa"
-
-#~ msgid "Associated keys"
-#~ msgstr "Lotutako gakoak"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Gako ez aktiboak"
-
-#~ msgid "Unused"
-#~ msgstr "Ez erabilita"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Norberaren hatz marka"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Lehen konexioan sortuko da"
-
-#~ msgid "Not matching"
-#~ msgstr "Ez datoz bat"
-
-#~ msgid "Matching"
-#~ msgstr "Bat datoz"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Egiaztatu ondoren, %s(e)k gako honekin etorkizunean bidalitako mezu "
-#~ "guztiak behar bezala nabarmenduko dira txat leihoan."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Utzi gako hau onartzeari lotuta dagoen kontaktuarekin hitz egiten duzun "
-#~ "bitartean."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Hasi gako hau onartzen lotuta dagoen kontaktuarekin hitz egiten duzun "
-#~ "bitartean"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Honek esan nahi du %s(e)k ezin duela gakoa mezuak jasotzeko erabili, eta "
-#~ "berak bidalitako edozein mezu alde batera utziko da."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Egiaztatu ondoren, etorkizunean %s(e)k gako hau erabiliz bidalitako "
-#~ "edozein mezu alde batera utziko da eta zure mezuetako bat ere ez da "
-#~ "irakurgarria izango gako hau erabiliz."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Egiaztatu ondoren %s(e)k gako hau mezuak jaso eta bidaltzeko erabili ahal "
-#~ "izango du."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Kontaktu honek enkriptatzeko gako berriak bere kontura gehitzen "
-#~ "dituenean, automatikoki onartu."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Zure kontura enkriptazio gako berriak gehitzen dituzunean, automatikoki "
-#~ "onartu."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Hasi gako hau onartzen lotuta dagoen kontaktuarekin hitz giten duzun "
-#~ "bitartean."
-
-#~ msgid "Reject Key"
-#~ msgstr "Gakoa baztertu"
-
-#~ msgid "Accept Key"
-#~ msgstr "Gakoa onartu"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Gailu ezezaguna (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Beste gailuak"
-
-#~ msgid "- None -"
-#~ msgstr "- Bat ere ez -"
diff --git a/plugins/omemo/po/fa.po b/plugins/omemo/po/fa.po
deleted file mode 100644
index 83d56040..00000000
--- a/plugins/omemo/po/fa.po
+++ /dev/null
@@ -1,312 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-12-05 20:00+0000\n"
-"Language-Team: none\n"
-"Language: fa\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.15-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s از دستگاهی استفاده می‌کند که اعتبارش را تأیید نکرده‌اید، پیام‌ها از چنین "
-"دستگاه‌هایی قابل مشاهده نیستند."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "مدیریت دستگاه‌ها"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s اعتبار این دستگاه را تأیید نکرده است. این یعنی، ممکن است پیام‌هایی را "
-"دریافت نکنید/نکرده باشید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "مدیریت کلید"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"اثرانگشت را با آنی که در دستگاه مخاطبتان است مقایسه کنید، کاراکتر به کاراکتر."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "اثرانگشت‌ها متفاوت‌اند"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "اثرانگشت‌ها تطابق دارند"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "لغو"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "تأیید"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "تأیید صحت کلید"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"پیام‌های ارسالی توسط %s از دستگاهی که از این کلید استفاده می‌کند، مطابق آن در "
-"پنجرهٔ گپ مشخص می‌شوند."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "اثرانگشت‌ها تطابق ندارند"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"لطفاً مطمئن شوید که در حال مقایسهٔ اثرانگشت صحیح هستید. اگه اثرانگشت‌ها تطابق "
-"نداشته باشند، ممکن است اطلاعات حساب %s لو رفته باشد و باید رد کردن این کلید "
-"را در نظر بگیرید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "تأیید صحت اثرانگشت کلید"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"اثرانگشت این کلید را با اثرانگشت نمایش‌داده‌شده در دستگاه مخاطب مقایسه کنید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "رد کردن کلید"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"ارتباط رمزگذاری‌شده را با دستگاهی که از این کلید استفاده می‌کند، مسدود کنید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "پذیرش کلید"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"اجازهٔ ارتباط رمزگذاری‌شده را با دستگاهی که از این کلید استفاده می‌کند، بدهید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "این کلید در حال حاضر %s است."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "پذیرفته شده"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"این یعنی %s می‌تواند از آن برای ارسال و دریافت پیام رمزگذاری‌شده استفاده کند."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "تأیید صحت شده"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "به علاوه تأیید شده که با کلید دستگاه مخاطب تطابق دارد."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "رد شده"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"این یعنی %s نمی‌تواند با آن پیام‌های شما را رمزگشایی کند، و شما پیام‌های "
-"رمزگذاری‌شده با آن را نخواهید دید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"شما پیام‌های رمزگذاری‌شده را از آن دستگاهِ %s که از این کلید استفاده می‌کند، "
-"نخواهید دید. از سوی دیگر، آن دستگاه نیز پس از این قادر به رمزگشایی پیام‌های "
-"شما نخواهد بود."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"شما قادر به تبادل پیام‌های رمزگذاری‌شده با آن دستگاهِ %s که از این کلید استفاده "
-"می‌کند، هستید."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "بازگشت"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "مدیریت"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "این مخاطب دستگاه‌های جدیدی دارد"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "تصمیم اعتبار اُمیمو لازم است"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "آیا برای حساب %s یک دستگاه جدید اضافه کرده‌اید؟"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "فعال بودن اُمیمو به صورت پیشفرض"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "فعال کردن رمزگذاری اُمیمو برای مکالمات جدید"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "رمزگذاری با دستگاه های جدید"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "رمزگذاری خودکار با دستگاه های جدید این مخاطب."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "کلیدهای جدید"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"کلیدهای رمزگذاری جدید از دستگاه‌های دیگرتان به طور خودکار پذیرفته می‌شوند."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "این دستگاه"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "دستگاه دیگر"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "دستگاه"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "پذیرفته شده"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "رد شده"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "تأیید صحت شده"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "دستگاه جدید"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"هر دستگاه کلید اُمیمو خود را دارد. پیام ها تنها زمانی می توانند توسط یک "
-"دستگاه رمزگشایی شوند که با کلید همان دستگاه رمزگذاری شده باشند. پیام ها فقط "
-"برای دستگاه های پذیرفته شده رمزگذاری می شوند."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "مدیریت کلید اُمیمو"
-
-#~ msgid "Encryption"
-#~ msgstr "رمزگذاری"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d دستگاه OMEMO"
-#~ msgstr[1] "%d دستگاه OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "پذیرش خودکار کلیدهای جدید"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "کلیدهای جدید این مخاطب به طور خودکار پذیرفته می‌شوند."
-
-#~ msgid "Own key"
-#~ msgstr "کلید خود"
-
-#~ msgid "Associated keys"
-#~ msgstr "کلیدهای مرتبط"
-
-#~ msgid "Inactive keys"
-#~ msgstr "کلیدهای غیرفعال"
-
-#~ msgid "Unused"
-#~ msgstr "استفاده نشده"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "اثرانگشت خود"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "در اولین اتصال تولید خواهد شد"
diff --git a/plugins/omemo/po/fi.po b/plugins/omemo/po/fi.po
deleted file mode 100644
index decad88b..00000000
--- a/plugins/omemo/po/fi.po
+++ /dev/null
@@ -1,314 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-06-26 14:01+0000\n"
-"Language-Team: none\n"
-"Language: fi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s on käyttänyt laitetta, johon ei luoteta. Et näe viestejä laitteilta, "
-"joihin et luota."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Hallitse laitteita"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s ei luota tähän laitteeseen. Sen seurauksena viestejä saattaa jäädä "
-"puuttumaan."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Hallitse avainta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Vertaa sormenjälkeä merkki kerrallaan vastapuolen laitteella näkyvään "
-"sormenjälkeen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Sormenjäljet eroavat"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Sormenjäljet vastaavat"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Peru"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Vahvista"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Vahvista avain"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Tulevat viestit käyttäjän %s laitteelta, joka käyttää tätä avainta, "
-"korostetaan asianmukaisesti keskusteluikkunassa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Sormenjäljet eivät vastaa toisiaan"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Varmista, että vertaat oikeita sormenjälkiä. Jos sormenjäljet eivät täsmää, "
-"käyttäjän %s tili saattaa olla vaarantunut, ja sinun tulisi hylätä tämä "
-"avain."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Vahvista avaimen sormenjälki"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Vertaa tämän avaimen sormenjälkeä vastapuolen laitteella näkyvään "
-"sormenjälkeen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Hylkää avain"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Estä salattu yhteydenpito käyttäjän tätä avainta käyttävän laitteen kanssa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Hyväksy avain"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Salli salattu yhteydenpito käyttäjän tätä avainta käyttävän laitteen kanssa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Tämä avain on tällä hetkellä %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "hyväksytty"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Se tarkoittaa, että %s voi käyttää avainta salattujen viestien "
-"vastaanottamiseen ja lähettämiseen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "vahvistettu"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Lisäksi sen on vahvistettu vastaavan vastapuolen laitteen avainta."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "hylätty"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Se tarkoittaa, ettei %s voi käyttää avainta viestien salauksen purkamiseksi, "
-"etkä sinä näe tällä avaimella salattuja viestejä."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Et näe käyttäjän %s laitteelta, joka käyttää tätä avainta, lähetettyjä "
-"salattuja viestejä. Vastavuoroisesti kyseinen laite ei pysty enää purkamaan "
-"viestiesi salausta."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Pystyt viestimään salatuilla viesteillä käyttäjän %s tätä avainta käyttävän "
-"laitteen kanssa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Takaisin"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Hallitse"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Tällä henkilöllä on uusia laitteita"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO-luottamuspäätös vaaditaan"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Lisäsitkö uuden laitteen tilille %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO oletuksena"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Käytä OMEMO-salausta uusissa keskusteluissa"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Salaa uusille laitteille"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Salaa automaattisesti tämän henkilön uusille laitteille."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Uudet avaimet"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "Uudet salausavaimet muilta laitteiltasi hyväksytään automaattisesti."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Tämä laite"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Toinen laite"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Laite"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Hyväksytty"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Hylätty"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Vahvistettu"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Uusi laite"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Jokaisella laitteella on oma OMEMO-avain. Viestien salauksen voi purkaa "
-"laitteella vain jos ne käyttävät sen avainta. Viestit salataan vain "
-"hyväksytyille laitteille."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO-avainhallinta"
-
-#~ msgid "Encryption"
-#~ msgstr "Salaus"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO-laite"
-#~ msgstr[1] "%d OMEMO-laitetta"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Hyväksy uudet avaimet automaattisesti"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Uudet salausavaimet tältä henkilöltä hyväksytään automaattisesti."
-
-#~ msgid "Own key"
-#~ msgstr "Oma avain"
-
-#~ msgid "Associated keys"
-#~ msgstr "Liittyvät avaimet"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Epäaktiiviset avaimet"
-
-#~ msgid "Unused"
-#~ msgstr "Käyttämätön"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Oma sormenjälki"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Luodaan ensimmäisellä yhdistyskerralla"
diff --git a/plugins/omemo/po/fr.po b/plugins/omemo/po/fr.po
deleted file mode 100644
index 531149be..00000000
--- a/plugins/omemo/po/fr.po
+++ /dev/null
@@ -1,394 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-12-26 15:00+0000\n"
-"Language-Team: French <https://hosted.weblate.org/projects/dino/plugin-omemo/"
-"fr/>\n"
-"Language: fr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.15.1\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s a utilisé un appareil inconnu. Vous ne verrez pas les messages provenant "
-"d'appareils en lesquels vous n’avez pas confiance."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gérer les appareils"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s n’accorde pas sa confiance à cet appareil. Cela signifie que vous manquez "
-"peut-être des messages."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gérer la clé"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Comparez l’empreinte, lettre par lettre, avec celle affichée sur l'appareil "
-"de votre contact."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "L’empreinte ne correspond pas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "L’empreinte correspond"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Annuler"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmer"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Vérifier la clé"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Les prochains messages envoyés par %s depuis l'appareil utilisant cette clé "
-"seront mis en valeur dans la fenêtre de discussion."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Les empreintes ne correspondent pas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Veuillez vérifier que vous comparez la bonne empreinte. Si les empreintes ne "
-"correspondent pas, le compte de %s pourrait être compromis et vous devriez "
-"envisager de rejeter cette clé."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Vérifier l’empreinte de cette clé"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Comparez cette empreinte avec celle affichée sur l'appareil du contact."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rejeter cette clé"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Bloquer les communications chiffrées avec l'appareil du contact qui utilise "
-"cette clé."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Accepter la clé"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Autoriser les communications chiffrées avec l'appareil du contact qui "
-"utilise cette clé."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Cette clé est actuellement %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "acceptée"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Cela signifie qu’elle peut être utilisée par %s pour recevoir et envoyer des "
-"messages."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "vérifiée"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"De plus, vous avez précédemment vérifié que cette clé coïncide avec celle de "
-"l'appareil de ce contact."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rejetée"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Cela signifie qu’elle ne peut pas être utilisée par %s pour déchiffrer vos "
-"messages, et que vous ne verrez pas les messages chiffrés avec."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Vous ne verrez pas les messages de %s provenant de l'appareil qui utilise "
-"cette clé. En retour, ce client ne pourra plus déchiffrer vos messages."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Vous pourrez échanger des messages chiffrés avec l'appareil de %s qui "
-"utilise cette clé."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Retour"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gérer"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Ce contact a de nouveaux appareils"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Décision de confiance OMEMO requise"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Avez-vous ajouté un nouvel appareil pour le compte %s ?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO par défaut"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Activer le chiffrement OMEMO pour les nouvelles discussions"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Chiffrer pour les nouveaux appareils"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Chiffrer automatiquement pour les nouveaux appareils de ce contact."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nouvelles clés"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Les nouvelles clés de chiffrement de vos autres appareils seront acceptées "
-"automatiquement."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Cet appareil"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Autre appareil"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Appareil"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Acceptée"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rejetée"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Vérifiée"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Nouvel appareil"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Chaque appareil a sa propre clé OMEMO. Les messages ne peuvent être "
-"déchiffrés par un appareil que s’ils sont chiffrés pour sa clé. Les messages "
-"sont chiffrés uniquement pour les appareils acceptés."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gestion des clés OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Chiffrement"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d appareil OMEMO"
-#~ msgstr[1] "%d appareils OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Accepter automatiquement les nouvelles clés"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Les nouvelles clés de chiffrement de ce contact seront acceptées "
-#~ "automatiquement."
-
-#~ msgid "Own key"
-#~ msgstr "Clé publique personnelle"
-
-#~ msgid "Associated keys"
-#~ msgstr "Clés associées"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Clés inactives"
-
-#~ msgid "Unused"
-#~ msgstr "Inutilisée"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Empreinte publique"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Sera générée lors de la première connexion"
-
-#~ msgid "Your contact"
-#~ msgstr "Votre contact"
-
-#~ msgid "Not matching"
-#~ msgstr "Ne correspond pas"
-
-#~ msgid "Matching"
-#~ msgstr "Correspond"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Après confirmation, tout futur message envoyé par %s utilisant cette clé "
-#~ "sera surligné dans la fenêtre de conversation."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Arrêter d'accepter cette clé durant la communication avec son contact "
-#~ "associé."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Accepter cette clé durant la communication avec son contact associé"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Cela signifie qu'elle ne peut pas être utilisée par %s pour recevoir des "
-#~ "messages, et que les messages envoyés seront ignorés."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Après confirmation, tout futur message envoyé par %s utilisant cette clé "
-#~ "sera ignoré et vos messages ne seront pas lisibles en utilisant cette clé."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Après confirmation, cette clé sera utilisable par %s pour recevoir et "
-#~ "envoyer des messages."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Quand ce contact ajoute une nouvelle clé de chiffrement à son compte, "
-#~ "l'accepter automatiquement."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Accepter automatiquement les nouvelles clés de chiffrements que vous "
-#~ "ajoutez à votre compte."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Accepter cette clé durant la communication avec son contact associé."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Périphérique inconnu (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Autres périphériques"
-
-#~ msgid "- None -"
-#~ msgstr "- Aucun -"
diff --git a/plugins/omemo/po/fur.po b/plugins/omemo/po/fur.po
deleted file mode 100644
index 527d9018..00000000
--- a/plugins/omemo/po/fur.po
+++ /dev/null
@@ -1,267 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-24 17:09+0000\n"
-"Language-Team: none\n"
-"Language: fur\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"Chel pandolo di %s al doprave un tramai che no si fidin. No tu iodarâs "
-"mesagjos di tramais che no si po fidasi."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gjestis i tramais"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"Chel pandolo di %s no si fide di te. Cuindi tu podaresis pierditi mesagjos."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Dai po gjestis las clâs"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Controle las improntes digitâl, ogni latare, cun chês dal contat sul tramai."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Improntes difarent gnogno"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Brao, las improntes son compagnes"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Lasce sta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Va ben"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Controlant la clâf"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"I mesagjos di chel taconele di %s sal dopre il stes tramai cun chist clâf a "
-"saran evidensiâs."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Las improntes no son compagnes totoloto"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Controle ben taconele. Las improntes no coincidin, chel borson di %s al "
-"podares no sei lui e tu varesis di mandalu affnacûl lui e la so clâf."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Controle la clâf dalas improntes digitâl"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "Controle las improntes di chiste clâf cun chês tai contas dal tramai."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Mande affnacûl lui e la clâf"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "Smet di cifrà la comunicasion cul pandolo cal dopre chiste clâf."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Va ben, dami la clâf"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "Permet la comunicasion cifrade cul pandolo cal dopre chiste clâf."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "La clâf a è %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "acetade"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "A voul dì ca si po doprà %s par ricevi e mandà mesagjos cifrâs."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "controlade"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "In pui si è controlâtche la clâf a sevi che dal contat sul tramai."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "mandade indavour"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Al voul dì che %s nola po doprà par decifrà i toi mesagjos, e no tu iodarâs "
-"i mesagjos cifrâs cun che lì."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"No tu iodarâs i mesagjos cifrâs di %s cal dopre chiste clâf. E lui nol "
-"capirà un cai di ce che tu i mandis."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Tu podarâs mandà mesagjos cifrâs cul tramai di %s cal dopre chiste clâf."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Indavour"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gjestis"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Chist gnogno al à un gnouf tramai"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Bisugne acetà o no OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Atu giontât un gnof tramai par il profîl %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO tal met io"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Permet cifradure OMEMO par las gnoves conversasions"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Cifre par i gnoufs tramais"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Cifres su dut par chistu taconele."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Gnoves clâs"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Las gnoves clâs par la cifradure di atris tramais a saran acetades cence "
-"diti un caj."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Chist tramai"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Atri tramai"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Tramai"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "acetade"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Mandât affancûl"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "controlade"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Gnouf tramai"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Ogni tramai al'à la so clâf OMEMO. I mesagjos a podin sei decifrâs nome dal "
-"tramai cun che clâf. E nome su tramais acetâs."
diff --git a/plugins/omemo/po/gl.po b/plugins/omemo/po/gl.po
deleted file mode 100644
index 6e0757d1..00000000
--- a/plugins/omemo/po/gl.po
+++ /dev/null
@@ -1,398 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: Galician <https://hosted.weblate.org/projects/dino/plugin-"
-"omemo/gl/>\n"
-"Language: gl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s estivo utilizando un dispositivo non verificado. Non verás mensaxes "
-"procedentes de dispositivos nos que non confiaches."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Xestionar dispositivos"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s non mostrou confianza neste dispositivo. Porén, poderías botar a faltar "
-"algunha mensaxe."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Xestionar Chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Comparar impresión dixital, caracter a caracter, coa mostrada no dispositivo "
-"do teu contacto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "As impresións dixitais son diferentes"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "As impresións coinciden"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"As mensaxes futuras enviadas por %s desde o dispositivo que usa esta chave "
-"será resaltadas na xanela da conversa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Non coinciden as impresións dixitais"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Comproba que estás comparando a impresión correcta. Se as impresións "
-"dixitais non coinciden, a conta de %s podería estar comprometida e deberías "
-"considerar rexeitar esta chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar a impresión dixital da chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Compara a impresión dixital desta chave coa impresión mostrada no "
-"dispositivo do contacto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rexeitar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Bloquear a comunicación cifrada co dispositivo do contacto que usa esta "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Aceptar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permitir a comunicación cifrada co dispositivo do contacto que usa esta "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Esta chave está actualmente %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "aceptada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Esto significa que pode ser utilizada por %s para recibir e enviar mensaxes "
-"cifradas."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verficada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Adicionalmente foi verificada e coincide coa chave no dispositivo do "
-"contacto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rexeitada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Esto significa que non pode ser usada por %s para descifrar as túas "
-"mensaxes, e non verás as mensaxes cifradas con ela."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Non verás as mensaxes cifradas desde o dispositivo de %s que usa esta chave. "
-"De xeito recíproco, ese dispositivo non poderá descifrar as túas."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Poderás intercambiar mensaxes cifradas co dispositivo de %s que usa esta "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Atrás"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Xestionar"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Este contacto ten novos dispositivos"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Precisa decidir sobre a confianza OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Engadiches un novo dispositivo para a conta %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO por defecto"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Activar cifraxe OMEMO para as novas conversas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Cifrar para novos dispositivos"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Cifrar automaticamente para os novos dispositivos de este contacto."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Novas chaves"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Aceptaranse de xeito automático novas chaves de cifraxe do teus dispositivos."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Este dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Outro dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Aceptada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rexeitada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Novo dispositivo"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Cada dispositivo ten a súa propia clave OMEMO. As mensaxes só se poden "
-"descifrar se están cifradas coas claves deles. As mensaxes só se cifran para "
-"os dispositivos aceptados."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Xestión das chaves OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Cifraxe"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d dispositivo OMEMO"
-#~ msgstr[1] "%d dispositivos OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Aceptar automáticamente novas chaves"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Serán aceptadas de xeito automático novas chaves de cifraxe deste "
-#~ "contacto."
-
-#~ msgid "Own key"
-#~ msgstr "Chave propia"
-
-#~ msgid "Associated keys"
-#~ msgstr "Chaves asociadas"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Chaves non activas"
-
-#~ msgid "Unused"
-#~ msgstr "Sen usar"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Impresión dixital propia"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Crearase na primeira conexión"
-
-#~ msgid "Your contact"
-#~ msgstr "O teu contacto"
-
-#~ msgid "Not matching"
-#~ msgstr "Non coinciden"
-
-#~ msgid "Matching"
-#~ msgstr "Coinciden"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Unha vez confirmada, as futuras mensaxes enviadas por %s utilizando esta "
-#~ "chave será resaltada acorde na ventá de conversa."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Deixar de aceptar esta chave durante a comunicación co contacto asociado "
-#~ "a ela."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Comezar aceptando esta chave durante a comunicación co seu contacto "
-#~ "asociado"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Esto significa que non pode ser utilizada por %s para recibir mensaxes, e "
-#~ "calquera mensaxe enviada con ela será ignorada."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Unha vez confirmada, calquera mensaxe futura enviada por %s utilizando "
-#~ "esta chave será ignorada e ningunha das súas mensaxes serán lexibles "
-#~ "usando esta chave."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Unha vez confirmada esta chave será utilizable por %s para recibir e "
-#~ "enviar mensaxes."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Cando este contacto engade novas chaves de cifrado a súa conta, aceptalas "
-#~ "automáticamente."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Cando engades novas chaves de cifrado a túa conta, aceptalas "
-#~ "automáticamente."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Comezar a aceptar esta chave nas comunicacións co contacto asociado a ela."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Dispositivo descoñecido (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Outros dispositivos"
-
-#~ msgid "- None -"
-#~ msgstr "-Nada-"
diff --git a/plugins/omemo/po/hi.po b/plugins/omemo/po/hi.po
deleted file mode 100644
index 34e2cd1d..00000000
--- a/plugins/omemo/po/hi.po
+++ /dev/null
@@ -1,248 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Language-Team: none\n"
-"Language: hi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
diff --git a/plugins/omemo/po/hu.po b/plugins/omemo/po/hu.po
deleted file mode 100644
index 43e135ab..00000000
--- a/plugins/omemo/po/hu.po
+++ /dev/null
@@ -1,330 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: Hungarian <https://hosted.weblate.org/projects/dino/plugin-"
-"omemo/hu/>\n"
-"Language: hu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s nem megbízható eszközt használt. Nem fogja látni az olyan eszközökről "
-"érkező üzeneteket, amelyekben nem bízik meg."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Eszközök kezelése"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s nem bízik meg ebben az eszközben. Ez azt jelenti, hogy lemaradhat néhány "
-"üzenetről."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Kulcs kezelése"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Hasonlítsa össze az ujjlenyomatot karakterről karakterre a partnere eszközén "
-"láthatóval."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Az ujjlenyomatok eltérnek"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Az ujjlenyomatok egyeznek"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Mégse"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Megerősítés"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Kulcs ellenőrzése"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"%s által az ezt a kulcsot használó eszközről küldött jövőbeli üzenetek ennek "
-"megfelelően lesznek kiemelve a csevegésablakban."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Az ujjlenyomatok nem egyeznek"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Ellenőrizze, hogy a megfelelő ujjlenyomatot hasonlítja-e össze. Ha az "
-"ujjlenyomatok nem egyeznek, akkor %s fiókja veszélybe kerülhetett, és "
-"fontolóra kellene vennie a kulcs elutasítását."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Kulcs ujjlenyomatának ellenőrzése"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Hasonlítsa össze ennek a kulcsnak az ujjlenyomatát a partner eszközén "
-"megjelenített ujjlenyomattal."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Kulcs elutasítása"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"A titkosított kommunikáció tiltása a partner eszközével, amely ezt a kulcsot "
-"használja."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Kulcs elfogadása"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"A titkosított kommunikáció engedélyezése a partner eszközével, amely ezt a "
-"kulcsot használja."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Ez a kulcs jelenleg %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "elfogadott"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Ez azt jelenti, hogy %s használhatja titkosított üzenetek fogadásához és "
-"küldéséhez."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "ellenőrzött"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Ezenkívül ellenőrizve lett, hogy a kulcs egyezik a partner eszközén."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "elutasított"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Ez azt jelenti, hogy %s nem használhatja az Ön üzeneteinek visszafejtésére, "
-"és Ön nem fogja látni az azzal titkosított üzeneteket."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Nem fogja látni %s azon eszközéről érkező titkosított üzeneteket, amely ezt "
-"a kulcsot használja. Fordítva, a másik eszköz nem lesz képes többé "
-"visszafejteni az Ön üzeneteit."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Ön képes lesz titkosított üzeneteket váltani %s azon eszközével, amely ezt a "
-"kulcsot használja."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Vissza"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Kezelés"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Ennek a partnernek új eszközei vannak"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO megbízhatósági döntés szükséges"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Hozzáadott egy új eszközt a(z) %s fiókhoz?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO alapértelmezetten"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "OMEMO-titkosítás engedélyezése az új beszélgetésekhez"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Titkosítás az új eszközökre"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automatikus titkosítás az ettől a partnertől származó új eszközökre."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Új kulcsok"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Az egyéb eszközeitől származó új titkosítási kulcsok automatikusan el "
-"lesznek fogadva."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Ez az eszköz"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Másik eszköz"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Eszköz"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Elfogadva"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Elutasítva"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Ellenőrizve"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Új eszköz"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Minden eszköznek saját OMEMO-kulcsa van. Egy eszköz csak akkor tudja "
-"visszafejteni az üzeneteket, ha azok a saját kulcsával lettek titkosítva. Az "
-"üzenetek csak az elfogadott eszközökre vannak titkosítva."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO kulcskezelés"
-
-#~ msgid "Encryption"
-#~ msgstr "Titkosítás"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO-eszköz"
-#~ msgstr[1] "%d OMEMO eszköz"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Új kulcsok automatikus elfogadása"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Az ettől a partnertől származó új titkosítási kulcsok automatikusan el "
-#~ "lesznek fogadva."
-
-#~ msgid "Own key"
-#~ msgstr "Saját kulcs"
-
-#~ msgid "Associated keys"
-#~ msgstr "Hozzárendelt kulcsok"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Inaktív kulcsok"
-
-#~ msgid "Unused"
-#~ msgstr "Nem használt"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Saját ujjlenyomat"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Az első kapcsolódáskor lesz előállítva"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Ismeretlen eszköz (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "További eszközök"
-
-#~ msgid "- None -"
-#~ msgstr "- Nincs -"
diff --git a/plugins/omemo/po/id.po b/plugins/omemo/po/id.po
deleted file mode 100644
index f2dcbf7d..00000000
--- a/plugins/omemo/po/id.po
+++ /dev/null
@@ -1,318 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-28 11:09+0000\n"
-"Language-Team: none\n"
-"Language: id\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.16.1-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s telah menggunakan perangkat tidak dikenal. Anda tidak akan melihat pesan "
-"dari perangkat yang tidak Anda kenal."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Atur perangkat"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s tidak mengenali perangkat ini. Artinya, Anda mungkin kehilangan pesan."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Atur kunci"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Bandingkan sidik jari karakter demi karakter, dengan yang tampil di "
-"perangkat kontak Anda."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Sidik jari berbeda"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Sidik jari cocok"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Batal"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Konfirmasi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verifikasi kunci"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Pesan mendatang yang dikirim oleh %s dari perangkat yang menggunakan kunci "
-"ini akan ditandai di halaman percakapan."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Sidik jari tidak cocok"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Harap Anda memverifikasi sidik jari dengan benar. Jika sidik jari tidak "
-"cocok, akun %s mungkin telah disusupi dan pertimbangkan untuk menolak kunci "
-"ini."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verifikasi sidik jari kunci"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Bandingkan sidik jari kunci ini dengan sidik jari yang ditampilkan perangkat "
-"kontak."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Tolak kunci"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blokir komunikasi terenkripsi dengan perangkat kontak yang menggunakan kunci "
-"ini."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Terima kunci"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Izinkan komunikasi terenkripsi dengan perangkat kontak yang menggunakan "
-"kunci ini."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Status kunci saat ini %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "diterima"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Artinya dapat digunakan oleh %s untuk menerima dan mengirim pesan "
-"terenkripsi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "Terverifikasi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Telah terverifikasi dengan mencocokkan kunci pada perangkat kontak."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "ditolak"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Artinya tidak dapat digunakan oleh %s untuk menguraikan pesan Anda, dan Anda "
-"tidak akan melihat pesan dienkripsi dengannya."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Anda tidak akan melihat pesan terenkripsi dari perangkat %s yang menggunakan "
-"kunci ini. Sebaliknya, perangkat itu tidak dapat lagi menguraikan pesan Anda."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Anda dapat bertukar pesan terenkripsi dengan perangkat %s yang menggunakan "
-"kunci ini."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Kembali"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Pengaturan"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Kontak memiliki perangkat baru"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Memerlukan persetujuan atas OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Apakah Anda menambahkan perangkat baru untuk akun %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO secara default"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Aktifkan enkripsi OMEMO untuk percakapan baru"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Enkripsi ke perangkat baru"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Enkripsi secara otomatis ke perangkat baru dari kontak ini."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Kunci baru"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Kunci enkripsi baru dari perangkat Anda yang lain akan diterima secara "
-"otomatis."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Perangkat ini"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Perangkat lain"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Perangkat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Diterima"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Ditolak"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Terverifikasi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Perangkat baru"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Setiap perangkat memiliki kunci OMEMO-nya sendiri. Pesan hanya dapat "
-"didekripsi oleh perangkat jika dienkripsi menggunakan kuncinya. Pesan hanya "
-"dienkripsi ke perangkat yang telah diterima."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Pengaturan kunci OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Enkripsi"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO perangkat"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Otomatis mengkonfirmasi kunci baru"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Kunci enkripsi baru dari kontak ini akan diterima secara otomatis."
-
-#~ msgid "Own key"
-#~ msgstr "Kunci milik sendiri"
-
-#~ msgid "Associated keys"
-#~ msgstr "Kunci terkait"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Kunci non-aktif"
-
-#~ msgid "Unused"
-#~ msgstr "Tidak terpakai"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Sidik jari sendiri"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Akan dibuat pada koneksi pertama"
-
-#~ msgid "Your contact"
-#~ msgstr "Kontak anda"
diff --git a/plugins/omemo/po/ie.po b/plugins/omemo/po/ie.po
deleted file mode 100644
index 945956fc..00000000
--- a/plugins/omemo/po/ie.po
+++ /dev/null
@@ -1,360 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2021-03-01 10:50+0000\n"
-"Language-Team: none\n"
-"Language: ie\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gerer aparates"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "%s ne have fide por ti-ci aparate. Vu fórsan manca alcun missages."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gerer li clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Cuidosi compara li fingre-print con ti que es monstrat sur li aparate de vor "
-"contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fingre-printes difere"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fingre-printes es identic"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Anullar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificar li clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fingre-printes ne es egal"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Ples verificar que vu compara li just fingre-print. Si fingre-printes ne es "
-"egal, li conto de %s posse esser compromettet e vu deve rejecter ti-ci clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar li fingre-print"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Comparar li fingre-print de ti-ci clave con clave que es monstrat sur li "
-"aparate del contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rejecter li clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blocar ciffrat communication con li aparate del contacte quel usa ti-ci "
-"clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Acceptar li clave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permisser ciffrat communication con li aparate del contacte quel usa ti-ci "
-"clave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Ti-ci clave es actualmen %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "acceptat"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "To significa que %s posse usar it por reciver e inviar missages."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificat"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Adplu, it ha esset verificat corresponder con li clave sur li aparate del "
-"contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rejectet"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"To significa que %s posse usar it por deciffrar vor missages e que vu ne va "
-"vider li missages ciffrat med it."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Retro"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gerer"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Ti-ci contacte have nov aparates"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Un decision de confidentie OMEMO es besonat"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Esque vu ha adjuntet un nov aparate por li conto %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nov claves"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Nov claves de ciffration de vor altri aparates va esser acceptat "
-"automaticmen."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Acceptat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rejectet"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gerentie de claves OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Ciffration"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d aparate OMEMO"
-#~ msgstr[1] "%d aparates OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Automaticmen acceptar nov claves"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Nov claves de ciffration de ti-ci contacte va esser acceptat automaticmen."
-
-#~ msgid "Own key"
-#~ msgstr "Propri clave"
-
-#~ msgid "Associated keys"
-#~ msgstr "Associat claves"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Ínactiv claves"
-
-#~ msgid "Unused"
-#~ msgstr "Ínusat"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Propri fingre-print"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Va esser generat pos li prim conexion"
-
-#~ msgid "Not matching"
-#~ msgstr "Ne corresponde"
-
-#~ msgid "Matching"
-#~ msgstr "Corresponde"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Pos li confirmation, omni futuri missages inviat per %s con ti-ci clave "
-#~ "va esser colorat correspondmen in li fenestre de conversation."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Cessar acceptar ti-ci clave por communication con su associat contacte."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Acceptar ti-ci clave por communication con su associat contacte"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "To significa que %s ne posse usar it por reciver missages, e su missages "
-#~ "inviat va esser ignorat."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Pos confirmation, omni futuri missages inviat per %s con ti-ci clave va "
-#~ "esser ignorat, e null vor missages va esser leibil con ti-ci clave."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Pos confirmation, ti-ci clave va esser usabil per %s por reciver e inviar "
-#~ "missages."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Quande ti-ci contacte adjunte nov ciffre-claves a su conto, acceptar les "
-#~ "automaticmen."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Quande vu adjunte nov ciffre-claves a vor conto, acceptar les "
-#~ "automaticmen."
diff --git a/plugins/omemo/po/isv.po b/plugins/omemo/po/isv.po
deleted file mode 100644
index 477cace6..00000000
--- a/plugins/omemo/po/isv.po
+++ /dev/null
@@ -1,254 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-10-31 09:02+0000\n"
-"Language-Team: none\n"
-"Language: isv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.14.1-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s je upotrěbil(-a) nenadežny ustroj. Vy ne budete viděti soobčenja od "
-"ustrojev, ktore ne imajut dověrjenje."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Upravjenje ustrojami"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s ne dověrjaje tomu ustroju. To označaje, že vy možete ne viděti něktore "
-"soobčenja."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Upravjenje ključem"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Anulovati"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Potvrditi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Potvrditi ključ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Prijeti ključ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Tutoj ključ v tutom momentu je %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
diff --git a/plugins/omemo/po/it.po b/plugins/omemo/po/it.po
deleted file mode 100644
index 9d0aea21..00000000
--- a/plugins/omemo/po/it.po
+++ /dev/null
@@ -1,405 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2020-11-25 11:28+0000\n"
-"Language-Team: Italian <https://hosted.weblate.org/projects/dino/plugin-"
-"omemo/it/>\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s sta usando un dispositivo non verificato. Non vedrai messaggi inviati da "
-"un dispositivo che non hai verificato."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gestisci dispositivi"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s non ha verificato questo dispositivo. Ciò significa che potresti perdere "
-"dei messaggi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gestisci la chiave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Confronta la fingerprint, carattere per carattere, con quella mostrata sul "
-"dispositivo del tuo contatto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Le impronte non combaciano"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Le impronte combaciano"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Annulla"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Conferma"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verifica la chiave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"I messaggi futuri inviati da %s dal dispositivo che usa questa chiave "
-"saranno evidenziati di conseguenza nella finestra della chat."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Le impronte non corrispondono"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Si prega di verificare che si stia confrontanto la fingerprint corretta. Se "
-"le fingerprint non corrispondono, l'account di %s potrebbe essere "
-"compromesso e si dovrebbe rifiutare questa chiave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verifica la fingerprint della chiave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Confronta la fingerprint di questa chiave con quella mostrata sul "
-"dispositivo del contatto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Chiave rifiutata"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blocca le comunicazioni crittografate con il dispositivo del contatto che "
-"sta usando questa chiave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Chiave accettata"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permetti la comunicazione crittografata con il dispositivo del contatto che "
-"sta usando questa chiave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "La chiave attualmente è %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "accettata"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Questo vuol dire che può essere usata da %s per ricevere ed inviare messaggi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificata"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Inoltre è stato verificato che corrisponda con la chiave sul dispositivo del "
-"contatto."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rifiutata"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Questo vuol dire che non può essere usata da %s per decifrare i tuoi "
-"messaggi, e tu non vedrai i messaggi crittografati con essa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Non vedrai i messaggi crittografati dal dispositivo di %s che usa questa "
-"chiave. Al contrario, quel dispositivo non sarà più in grado di decifrare i "
-"tuoi messaggi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Sarai in grado di scambiare messaggi crittografati con il dispositivo di %s "
-"che usa questa chiave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Indietro"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gestisci"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Questo contatto ha dei nuovi dispositivi"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Una decisione sulla fiducia è necessaria per la chiave OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Hai aggiunto un nuovo dispositivo per l'account %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nuove chiavi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Le nuove chiavi di crittografia dei tuoi altri dispositivi verranno "
-"accettate automaticamente."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Accettata"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rifiutata"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificata"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gestione delle chiavi OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Crittografia"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d dispositivo OMEMO"
-#~ msgstr[1] "%d dispositivi OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Accetta automaticamente le nuove chiavi"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Le nuove chiavi di crittografia di questo contatto verranno accettate "
-#~ "automaticamente."
-
-#~ msgid "Own key"
-#~ msgstr "Proprie chiavi"
-
-#~ msgid "Associated keys"
-#~ msgstr "Chiavi associate"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Chiavi inattive"
-
-#~ msgid "Unused"
-#~ msgstr "Inutilizzata"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Propria impronta"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Verrà generata alla prima connessione"
-
-#~ msgid "Your contact"
-#~ msgstr "Il tuo contatto"
-
-#~ msgid "Not matching"
-#~ msgstr "Non corrispondenti"
-
-#~ msgid "Matching"
-#~ msgstr "Corrispondenti"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Una volta confermato, qualsiasi messaggio futuro inviato da %s usando "
-#~ "questa chiave sarà evidenziato di conseguenza nella finestra della "
-#~ "conversazione."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Smetti di accettare questa chiave durante le comunicazioni col contatto "
-#~ "associato."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Inizia ad accettare questa chiave durante le comunicazioni con il "
-#~ "contatto ad essa associato"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Questo vuol dire che non può essere usata da %s per ricevere messaggi, ed "
-#~ "ogni messaggio inviato attraverso di essa sarà ignorato."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Una volta confermato, ogni messaggio futuro inviato da %s usando questa "
-#~ "chiave sarà ignorato e nessuno dei tuoi messaggi sarà leggibile usando "
-#~ "questa chiave."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Una volta confermata questa chiave sarà utilizzabile da %s per ricevere "
-#~ "ed inviare messaggi."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Quando questo contatto aggiunge nuove chiavi di cifratura al proprio "
-#~ "account, accettale automaticamente."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Quando aggiungi nuove chiavi di cifratura al tuo account, accettale "
-#~ "automaticamente."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Inizia ad accettare questa chiave durante le comunicazioni col contatto "
-#~ "associato"
-
-#~ msgid "Reject Key"
-#~ msgstr "Rifiuta la chiave"
-
-#~ msgid "Accept Key"
-#~ msgstr "Accetta la chiave"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Dispositivo sconosciuto (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Altri dispositivi"
-
-#~ msgid "- None -"
-#~ msgstr "- Nessuno -"
-
-#~ msgid "OMEMO"
-#~ msgstr "OMEMO"
-
-#~ msgid "Database error"
-#~ msgstr "Errore del database"
diff --git a/plugins/omemo/po/ja.po b/plugins/omemo/po/ja.po
deleted file mode 100644
index 6a7cbc6a..00000000
--- a/plugins/omemo/po/ja.po
+++ /dev/null
@@ -1,365 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-09-15 20:09+0000\n"
-"Language-Team: none\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"<shirahara@users.noreply.hosted.weblate.org>\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.8-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s は信頼されていないデバイスを使用しています。信頼していないデバイスから送信"
-"されたメッセージは閲覧できません。"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "デバイスを管理"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s はこのデバイスを信頼していません。相手がメッセージを正しく受信できない可能"
-"性があります。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "キーを管理"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"以下のフィンガープリントと、お使いのデバイスに表示されているフィンガープリン"
-"トを、1文字ずつ比較してください。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "フィンガープリントが一致しません"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "フィンガープリントが一致します"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "キャンセル"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "確認"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "キーを確認"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"今後このキーを使ったデバイスから %s が送信するメッセージは、チャットウィンド"
-"ウでハイライト表示されます。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "フィンガープリントが一致しません"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"正しいフィンガープリントを比較しているか確認してください。フィンガープリント"
-"が一致しない場合、%s のアカウントはなりすましの可能性があるので、このキーを拒"
-"否することをおすすめします。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "キーのフィンガープリントを検証"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"このキーのフィンガープリントと、連絡先のデバイスに表示されたフィンガープリン"
-"トを比較します。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "キーを拒否"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "このキーを使った連絡先のデバイスとの暗号化された会話をブロックします。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "キーを許可"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "このキーを使った連絡先のデバイスとの暗号化された会話を許可します。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "このキーは現在%s。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "許可されています"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "このキーを使って、%s は暗号化されたメッセージを送受信できます。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "検証済みです"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "加えて、連絡先のデバイスのキーと一致することを検証済みです。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "拒否されています"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"このキーを使って、%s はあなたのメッセージを解読できなくなります。また、あなた"
-"は、このキーで暗号化されたメッセージを確認できなくなります。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"このキーを使った %s のデバイスから、暗号化されたメッセージを確認できなくなり"
-"ます。逆に、今後そのデバイスでは、あなたのメッセージを解読できなくなります。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"このキーを使った %s のデバイスと、暗号化されたメッセージをやり取りできるよう"
-"になります。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "戻る"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "管理"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "この連絡先に新しいデバイスが追加されました"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO 信頼選択が必要です"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "アカウント %s に新しいデバイスを追加しましたか?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "既定でOMEMO"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "新しい会話にOMEMO暗号化を有効にする"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "新しいデバイスに対して暗号化"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "この連絡先から新しいデバイスに対して自動的に暗号化を行います。"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "新しいキー"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"あなたのほかのデバイスから発行された新しい暗号化キーが自動的に許可されます。"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "許可"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "拒否"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "検証済み"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "新しいデバイス"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO キー管理"
-
-#~ msgid "Encryption"
-#~ msgstr "暗号化"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d 台の OMEMO デバイス"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "自動的に新しいキーを許可"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "この連絡先から発行された新しい暗号化キーが自動的に許可されます。"
-
-#~ msgid "Own key"
-#~ msgstr "自身のキー"
-
-#~ msgid "Associated keys"
-#~ msgstr "関連付けられたキー"
-
-#~ msgid "Inactive keys"
-#~ msgstr "非アクティブなキー"
-
-#~ msgid "Unused"
-#~ msgstr "未使用"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "自身のフィンガープリント"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "最初の接続で生成されます"
-
-#~ msgid "Your contact"
-#~ msgstr "あなたの連絡先"
-
-#~ msgid "Not matching"
-#~ msgstr "一致しない"
-
-#~ msgid "Matching"
-#~ msgstr "一致"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "一度確認すると、今後このキーを使って %s から送信されるメッセージは、チャッ"
-#~ "トウィンドウでハイライト表示されます。"
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "関連付けられた連絡先とトークをする際に、このキーを許可しないようにします。"
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "関連付けられた連絡先とトークをする際に、このキーを許可するようにします"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "このキーを使って %s からのメッセージを受信できません。また、当該アドレスか"
-#~ "らのメッセージはすべて無視されます。"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "一度確認すると、今後このキーを使って %s から送信されるメッセージは無視さ"
-#~ "れ、このキーを使ったご自身のメッセージも読み取れなくなります。"
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "一度確認すると、このキーを使って %s からのメッセージを送受信可能になりま"
-#~ "す。"
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "この連絡先の相手がアカウントに追加する新しい暗号化キーを自動的に許可しま"
-#~ "す。"
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr "アカウントに追加した新しい暗号化キーを自動的に許可します。"
diff --git a/plugins/omemo/po/ka.po b/plugins/omemo/po/ka.po
deleted file mode 100644
index a2e53e86..00000000
--- a/plugins/omemo/po/ka.po
+++ /dev/null
@@ -1,250 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-21 20:09+0000\n"
-"Language-Team: none\n"
-"Language: ka\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.16.1-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "გაუქმება"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "დადასტურება"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "დადასტურებულია"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "გადამოწმებულია"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "უარყოფილია"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "უკან"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr ""
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr ""
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
diff --git a/plugins/omemo/po/kab.po b/plugins/omemo/po/kab.po
deleted file mode 100644
index 8a082bd6..00000000
--- a/plugins/omemo/po/kab.po
+++ /dev/null
@@ -1,265 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-23 06:09+0000\n"
-"Language-Team: none\n"
-"Language: kab\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.16.1-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Sefrek obenkan"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%sur yettkil ara deg yibenk-a. Ayagi anamek-is d akken tzemreḍ ad tɛerqeḍ "
-"iznan."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Sefrek tasarut"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Snemhel adsil umḍin, s usekkil ɣer usekkil, s win i d-yettwaseknen deg ibenk "
-"n unermis-ik·im."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Adsil umḍinen mgaraden"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Adsil umḍinen mṣadan"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Semmet"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Serggeg"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Senqed tasarut"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Iznan n yimal ara yettwaznen sɣur %s seg yibenk i yesseqdacen tasarut-agi ad "
-"ttwabrureqqren deg usfaylu n udiwenni."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Idsilen umḍinen ur mṣadan ara"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Selken adsil umḍin n tsarut"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Snemhel tasarut n udsil umḍin akked udsil umḍin i d-yettwaseknen deg yibenk "
-"n unermis."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Agi tasarut"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Sewḥel taɣwalt tawgelhant akked yibenk n unermis-agi i yesseqdacen tasarut-a."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Qbel tasarut"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "Sireg taywalt uwgelhen s yibenk n unermis i yesseqdac tasarut-a."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Tasarut-agi %s tura."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "yettwaqbel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Ayagi yebɣa ad d-yini dakken yezmer ad yettwaseqdec sɣur %s akken ad yeṭṭef "
-"u ad yazen iznan iwgelhanen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "yettwasenqed"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "yettwagi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Ad tizmireḍ ad tbeddeleḍ iznan iwgelhanen akked yibenk %s i yesseqdacen "
-"tasarut-agi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Tuɣalin"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Sefrek"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Anermis-a ɣur-s ibenkan imaynuten"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Tettwasra teɣtast n teflest OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Terniḍ ibenk amaynut i umiḍan %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO s wudem amezwer"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Sermed awgelhen OMEMO i idiwenniyen imaynuten"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Wgelhen i yibenkan imaynuten"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Wgelhen s wudem awurman ɣer yibenkan imaynuten n unermis-a."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Tisura timaynutin"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Tisura n uwgelhen timaynutin seg yibenkan-ik nniḍen ad ttwaqeblent s wudem "
-"awurman."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Ibenk-a"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Ibenk nniḍen"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Ibenk"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Yettwaqbel"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Yettwasenqed"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Ibenk amaynut"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
diff --git a/plugins/omemo/po/lb.po b/plugins/omemo/po/lb.po
deleted file mode 100644
index 3c2b6f0e..00000000
--- a/plugins/omemo/po/lb.po
+++ /dev/null
@@ -1,396 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2020-04-12 20:01+0000\n"
-"Language-Team: Luxembourgish <https://hosted.weblate.org/projects/dino/"
-"plugin-omemo/lb/>\n"
-"Language: lb\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.0-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Geräter managen"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Schlëssel verwalten"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Vergläich de Fangerofdrock, Zeeche fir Zeechen, mat dem den um Gerät vum "
-"Kontakt ugewise gëtt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fangerofdréck stemmen net iwwerteneen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fangerofdréck stemmen iwwerteneen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Ofbriechen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirméieren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Schlëssel verifizéieren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Zukünfteg Noriichten, déi vum Apparat vum %s, den dëse Schlëssel benotzt, "
-"geschéckt ginn, wäerten deementspriechend am Chatfenster ervirgehuewen ginn."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fangerofdréck stëmmen net iwwerteneen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Wann ech gelift iwwerpréif, ob's du mat dem "
-"korrekte Fangerofdrock vergläichs. Wann Fangerofdréck net iwwerteneestëmmen, "
-"dann ass dem %s säi Konto villäicht kompromettéiert an du solls dëse "
-"Schlëssel verweigeren."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Iwwerpréif Schlëssel Fangerofdrock"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Vergläich de Fangerofdrock vun dësem Schlëssel mam Fangerofdrock den um "
-"Gerät vun dësem Kontakt steet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Schlëssel ofleenen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blockéiert verschlësselt Kommunikatioun mam Apparat vum Kontakt deen dëse "
-"Schlëssel benotzt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Schlëssel acceptéieren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Erlaabt verschlësselt Kommunikatioun mam Apparat vum Kontakt, deen dëse "
-"Schlëssel benotzt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Den aktuelle Schlëssel ass %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "akzeptéiert"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Dat bedeit, dass et vum %s ka benotzt gi fir Messagen ze empfänken an ze "
-"verschécken."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verifizéiert"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"De Schlëssel ass zousätzlech iwwerpréift gi mam Schlëssel um Gerät vum "
-"Kontakt iwwerteneen ze stëmmen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "ofgeleent"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Dëst bedeit datt et net vum %s ka benotzt ginn fir är Messagen ze "
-"entschlësselen, an Dir gesitt keng Messagen déi mat dësem verschlësselt sinn."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Dir gesitt net verschlësselt Message vum Apparat vum %s deen dëse Schlëssel "
-"benotzt. Ëmgekéiert kann dëse Apparat net méi Är Messagen entschlësselen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Dir kënnt verschlësselte Messagen austausche mat dem Apparat vum %s deen "
-"dësen Schlëssel benotzt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Zeréck"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Verwalten"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Dëse Kontakt huet nei Geräter"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO Vertrauens Entscheedung noutwenneg"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Hues du een neit Gerät fir %s dobäi gemaach?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nei Schlësselen"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Nei Verschlësslungs Schlëssele vun ären aneren Apparater ginn automatesch "
-"akzeptéiert."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Akzeptéiert"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Ofgeleent"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verifizéiert"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO Schlësselenverwaltung"
-
-#~ msgid "Encryption"
-#~ msgstr "Verschlësselung"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO Gerät"
-#~ msgstr[1] "%d OMEMO Geräter"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Automatesch nei Schlësselen akzeptéieren"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Nei Verschlësslungs Schlëssele vun dem Kontakt ginn automatesch "
-#~ "akzeptéiert."
-
-#~ msgid "Own key"
-#~ msgstr "Eegene Schlëssel"
-
-#~ msgid "Associated keys"
-#~ msgstr "Zougehéiereg Schlësselen"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Inaktiv Schlësselen"
-
-#~ msgid "Unused"
-#~ msgstr "Onbenotzt"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Eegene Fangerofdrock"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Gett bei der éischter Connectioun generéiert"
-
-#~ msgid "Not matching"
-#~ msgstr "Stemmt net iwwerteneen"
-
-#~ msgid "Matching"
-#~ msgstr "Stemmt iwwerteneen"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Wann konforméiert, all zukünfteg Messagen déi vum %s mat dësem Schlëssel "
-#~ "geschéckt ginn, ginn deementspriechend am Chatfenster markéiert."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Dëse Schlëssel net méi akzeptéiere wärend der Kommunikatioun mat sengem "
-#~ "verbonnene Kontakt."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Dëse Schlëssel wärend de Conversatioun mat sengem Kontakt benotzen"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Dat bedeit, dass dëse Schlëssel net ka vum %s benotz gi fir Messagen ze "
-#~ "empfänken an all Message déi geschéckt gi ginn ignoréiert."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Wann confirméiert, all zukünfteg Message déi vum %s mat dësem Schlëssel "
-#~ "geschéckt ginn, ginn ignoréiert a keng vun dengem Messagë wäerte liesbar "
-#~ "sinn."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Wann konforméiert ass de Schlëssel vum %s benotzbar fir Messagen ze "
-#~ "empfänken an ze schécken."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Wann dëse Kontakt néi Schlësselen zu sengem Konto bäifüügt, déi "
-#~ "automatesch akzeptéieren."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Wann s du nei Schlëssele bei däin Account bäifüügs, déi automatesch "
-#~ "akzeptéieren."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Dëse Schlëssel wärend der Kommunikatioun mat sengem verbonne Kontakt "
-#~ "akzeptéieren."
-
-#~ msgid "Reject Key"
-#~ msgstr "Schlëssel verweigeren"
-
-#~ msgid "Accept Key"
-#~ msgstr "Schlëssel acceptéieren"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Onbekannt Gerät (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Aner Geräter"
-
-#~ msgid "- None -"
-#~ msgstr "- Keng -"
-
-#~ msgid "OMEMO"
-#~ msgstr "OMEMO"
-
-#~ msgid "Database error"
-#~ msgstr "Datebank Feeler"
diff --git a/plugins/omemo/po/lt.po b/plugins/omemo/po/lt.po
deleted file mode 100644
index 10d763fb..00000000
--- a/plugins/omemo/po/lt.po
+++ /dev/null
@@ -1,374 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-12-27 20:00+0000\n"
-"Language-Team: none\n"
-"Language: lt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"(n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.15.1\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s naudoja nepatikimą įrenginį. Jūs nematysite žinučių iš įrenginių, kuriais "
-"nepasitikite."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Tvarkyti įrenginius"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s nepasitiki šiuo įrenginiu. Tai reiškia, kad galite nematyti žinučių."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Tvarkyti raktą"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Palyginkite kontrolinį kodą, simbolis po simbolio, su tuo, kuris yra rodomas "
-"jūsų adresato įrenginyje."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Kodas skiriasi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Kodas atitinka"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Atsisakyti"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Patvirtinti"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Patikrinkite raktą"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Nuo šiol žinutės nuo %s išsiųstos iš įrenginio naudojančio šį kontrolinį "
-"kodą bus atitinkamai paryškintos."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Kontroliniai kodai nesutampa"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Įsitikinkite, kad lyginate teisingą kontrolinį kodą. Jei kontroliniai kodai "
-"nesutampa, gali būti, kad %s paskyra yra sukompromituota ir turėtumėte "
-"apsvarstyti galimybę atmesti šį raktą."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Patikrinti rakto kontrolinį kodą"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Palyginti šio rakto kontrolinį kodą su adresato įrenginyje rodomu "
-"kontroliniu kodu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Atmesti raktą"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blokuoti šifruotą bendravimą su kontakto įrenginiu, kuris naudoja šį raktą."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Priimti raktą"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Leisti šifruotą bendravimą su kontakto įrenginiu, kuris naudoja šį raktą."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Šiuo metu šis raktas yra %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "priimtas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Tai reiškia, kad %s gali jį naudoti šifruotų žinučių siuntimui ir gavimui."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "patikrintas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Be to, jis buvo patikrintas ir sutampa su adresato įrenginyje rodomu raktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "atmestas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Tai reiškia, kad %s negali jo naudoti jūsų žinučių iššifravimui ir jūs "
-"nematysite žinučiu užšifruotų šiuo raktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Jūs nematysite šifruotų žinučių išsiustų iš %s įrenginio, kuris naudoją šį "
-"raktą. Tuo pačiu tas įrenginys nebegalės iššifruoti jūsų žinučių."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Jūs galite keistis šifruotomis žinutėmis su %s įrenginiu, kuris naudoja šį "
-"raktą."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Atgal"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Tvarkyti"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Šis adresatas turi naujų įrenginių"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO reikia pasitikėjimo sprendimo"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Ar savo %s paskyrai pridėjote naują įrenginį?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO pagal numatymą"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Įjungti naujiems pokalbiams OMEMO šifravimą"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Šifruoti į naujus įrenginius"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automatiškai šifruoti į naujus įrenginius iš šio adresato."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nauji raktai"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Nauji šifravimo raktai iš jūsų kitų įrenginių bus priimti automatiškai."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Šis įrenginys"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Kitas įrenginys"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Įrenginys"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Priimtas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Atmestas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Patikrintas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Naujas įrenginys"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Kiekvienas įrenginys turi savo nuosavą OMEMO raktą. Įrenginys gali "
-"iššifruoti žinutes tik tuo atveju, jeigu jos yra šifruotos naudojant jo "
-"raktą. Žinutės yra šifruojamos tik priimtiems įrenginiams."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO raktų tvarkymas"
-
-#~ msgid "Encryption"
-#~ msgstr "Šifravimas"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO įrenginys"
-#~ msgstr[1] "%d OMEMO įrenginiai"
-#~ msgstr[2] "%d OMEMO įrenginių"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Automatiškai priimti naujus raktus"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Nauji šifravimo raktai iš šio kontakto bus priimti automatiškai."
-
-#~ msgid "Own key"
-#~ msgstr "Nuosavas raktas"
-
-#~ msgid "Associated keys"
-#~ msgstr "Susieti raktai"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Neaktyvūs raktai"
-
-#~ msgid "Unused"
-#~ msgstr "Nenaudojamas"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Nuosavas kontrolinis kodas"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Bus sugeneruotas pirmojo prisijungimo metu"
-
-#~ msgid "Your contact"
-#~ msgstr "Jūsų adresatas"
-
-#~ msgid "Not matching"
-#~ msgstr "Nesutampa"
-
-#~ msgid "Matching"
-#~ msgstr "Sutampa"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Patikrinus, bet kokios būsimos žinutės, kurias %s išsiųs naudodamas šį "
-#~ "raktą, bus atitinkamai paryškintos pokalbių kambaryje."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr "Nustoti priiminėti šį raktą bendravimo su susietu adresatu metu."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Pradėti priiminėti šį raktą bendravimo su susietu adresatu metu"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Tai reiškia, kad %s negali jo naudoti, kad gautų žinutes, o bet kurių "
-#~ "adresato siunčiamų žinučių bus nepaisoma."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Patvirtinus, bet kurių būsimų žinučių, kurias %s išsiųs naudodamas šį "
-#~ "raktą, bus nepaisoma ir jokių jūsų žinučių nebus įmanoma perskaityti "
-#~ "naudojant šį raktą."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Patvirtinus, šis raktas taps tinkamu naudoti %s, kad gautų ir siųstų "
-#~ "žinutes."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Kai šis adresatas prie savo paskyros pridės naujus šifravimo raktus, "
-#~ "automatiškai juos priimti."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Kai pridedate naujus šifravimo raktus prie savo paskyros, automatiškai "
-#~ "juos priimti."
diff --git a/plugins/omemo/po/meson.build b/plugins/omemo/po/meson.build
deleted file mode 100644
index fa22f211..00000000
--- a/plugins/omemo/po/meson.build
+++ /dev/null
@@ -1 +0,0 @@
-i18n.gettext('dino-omemo')
diff --git a/plugins/omemo/po/nb.po b/plugins/omemo/po/nb.po
deleted file mode 100644
index da8df8aa..00000000
--- a/plugins/omemo/po/nb.po
+++ /dev/null
@@ -1,403 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-14 10:09+0000\n"
-"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/dino/"
-"plugin-omemo/nb_NO/>\n"
-"Language: nb\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s har brukt en ubetrodd enhet. Du vil ikke se meldinger fra enheter du ikke "
-"har tiltro til."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Håndter enheter"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s har ikke tiltro til denne enheten. Det betyr at du kan gå glipp av "
-"meldinger."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Håndter nøkkel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Sammenlign fingeravtrykket, tegn for tegn, med den vist på din kontakts "
-"enhet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fingeravtrykkene stemmer ikke overens"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fingeravtrykkene stemmer overens"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Bekreft"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Bekreft nøkkel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Fremtidige meldinger sendt av %s fra enheten som benytter denne nøkkelen vil "
-"framheves i så måte i sludrevinduet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fingeravtrykkene stemmer ikke overens"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Sjekk at du sammenligner riktig fingeravtrykk. Hvis de ikke stemmer overens, "
-"kan det hende %s sin konto har falt i gale hender, og du bør overveie å "
-"avvise denne nøkkelen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Sjekk nøkkelfingeravtrykk"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Sammenlign dette fingeravtrykket med fingeravtrykket vist på kontaktens "
-"enhet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Avslå nøkkel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blokker kryptert kommunikasjon med kontaktens enhet som benytter denne "
-"nøkkelen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Godta nøkkel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Tillat kryptert kommunikasjon med kontaktens enhet som benytter denne "
-"nøkkelen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Denne nøkkelen er i øyeblikket %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "godtatt"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Dette betyr at den kan brukes av %s til å motta og sende krypterte meldinger."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "bekreftet"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"I tillegg har den blitt bekreftet å samsvare med nøkkelen på kontaktens "
-"enhet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "avslått"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Dette betyr den ikke kan brukes av %s for å fortolke meldingene dine, og du "
-"vil ikke kunne se meldinger kryptert med den."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Du vil ikke se krypterte meldinger fra %s sin enhet som bruker denne "
-"nøkkelen. Denne enheten vil heller ikke kunne fortolke dine meldinger lenger."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Du vil kunne utveksle krypterte meldinger med %s sin enhet som benytter "
-"denne nøkkelen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Tilbake"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Behandle"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Denne kontakten har nye enheter"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO tillitsbeslutning kreves"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "La du til en ny enhet for kontoen %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO som standard"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Aktiver OMEMO-kryptering for nye samtaler"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Krypter til nye enheter"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Krypter automatisk til nye enheter fra denne kontakten."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nye nøkler"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "Nye krypteringsnøkler fra dine andre enheter vil godtas automatisk."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Denne enheten"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Annen enhet"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Enhet"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Godtatt"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Avslått"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Bekreftet"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Ny enhet"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Hver enhet har sin egen OMEMO-nøkkel. Meldinger kan bare dekrypteres av en "
-"enhet hvis de er kryptert til dens nøkkel. Meldinger blir bare kryptert til "
-"godkjente enheter."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO-nøkkelhåndtering"
-
-#~ msgid "Encryption"
-#~ msgstr "Kryptering"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO-enhet"
-#~ msgstr[1] "%d OMEMO-enheter"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Godta nye nøkler automatisk"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Nye krypteringsnøkler fra denne kontakten vil godtas automatisk."
-
-#~ msgid "Own key"
-#~ msgstr "Egen nøkkel"
-
-#~ msgid "Associated keys"
-#~ msgstr "Tilknyttede nøkler"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Inaktive nøkler"
-
-#~ msgid "Unused"
-#~ msgstr "Ubrukt"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Eget fingeravtrykk"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Vil bli generert ved første tilkobling"
-
-#~ msgid "Your contact"
-#~ msgstr "Din kontakt"
-
-#~ msgid "Not matching"
-#~ msgstr "Samsvarer ikke"
-
-#~ msgid "Matching"
-#~ msgstr "Samsvarer"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Når først bekreftet, vil fremtidige meldinger sendt av %s ved bruk av "
-#~ "denne nøkkelen bli fremhevet tilsvarende i sludrevinduet."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Slutt å godta denne nøkkelen under kommunikasjon med dens tilknyttede "
-#~ "kontakt."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Aksepter heretter denne nøkkelen i kommunikasjon med dens tilhørende "
-#~ "kontakt"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Dette betyr at den ikke kan brukes av %s til å motta meldinger, og enhver "
-#~ "melding sendt på vegne av den vil bli ignorert."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Etter bekreftelsen vil fremtidige meldinger sendt av %s der denne "
-#~ "nøkkelen brukes bli ignorert, og ingen av dine meldinger vil kunne leses "
-#~ "med den."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Når først bekreftet vil denne nøkkelen kunne brukes av %s til å motta og "
-#~ "sende meldinger."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Når denne kontakten legger nye krypteringsnøkler til kontoen sin, godta "
-#~ "dem automatisk."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Godta dem automatisk når du legger nye krypteringsnøkler til kontoen din."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Begynn å godta denne nøkkelen under kommunikasjon med dens tilknyttede "
-#~ "kontakt."
-
-#~ msgid "Reject Key"
-#~ msgstr "Avslå nøkkel"
-
-#~ msgid "Accept Key"
-#~ msgstr "Godta nøkkel"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Ukjent enhet (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Andre enheter"
-
-#~ msgid "- None -"
-#~ msgstr "- Ingen -"
-
-#~ msgid "OMEMO"
-#~ msgstr "OMEMO"
diff --git a/plugins/omemo/po/nl.po b/plugins/omemo/po/nl.po
deleted file mode 100644
index 43468b40..00000000
--- a/plugins/omemo/po/nl.po
+++ /dev/null
@@ -1,402 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-23 16:27+0000\n"
-"Language-Team: Dutch <https://hosted.weblate.org/projects/dino/plugin-omemo/"
-"nl/>\n"
-"Language: nl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s is een onvertrouwd apparaat. Berichten van onvertrouwde apparaten worden "
-"niet getoond."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Apparaten beheren"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "%s vertrouwt dit apparaat niet. Je mist hierdoor mogelijk berichten."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Sleutel beheren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Vergelijk de vingerafdruk, letter voor letter, met die op het apparaat van "
-"je contactpersoon."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Vingerafdrukken wijken af"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Vingerafdrukken komen overeen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Annuleren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Bevestigen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Sleutel verifiëren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Toekomstige berichten van %s van het apparaat dat deze sleutel gebruikt, "
-"worden gemarkeerd in het gespreksvenster."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Vingerafdrukken komen niet overeen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Zorg dat je de juiste vingerafdrukken vergelijkt. Als de vingerafdrukken "
-"niet overeenkomen, kan het zijn dat het account van %s gehackt is. Overweeg "
-"in dat geval deze sleutel te weigeren."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Vingerafdruk van sleutel verifiëren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Vergelijk de vingerafdruk van deze sleutel met de vingerafdruk die wordt "
-"getoond op het apparaat van je contactpersoon."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Sleutel weigeren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blokkeer versleutelde communicatie met het apparaat van deze contactpersoon "
-"dat deze sleutel gebruikt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Sleutel accepteren"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Sta versleutelde communicatie toe met het apparaat van deze contactpersoon "
-"dat deze sleutel gebruikt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Deze sleutel is momenteel %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "geaccepteerd"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Dit betekent dat %s deze kan gebruiken om berichten te ontvangen en "
-"versturen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "geverifieerd"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Er is vastgesteld dat deze sleutel overeenkomt met de sleutel op het "
-"apparaat van de contactpersoon."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "geweigerd"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"De sleutel kan niet door %s worden gebruikt om berichten te ont- en "
-"versleutelen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Je ziet geen versleutelde berichten van het apparaat van %s dat deze sleutel "
-"gebruikt. Daarnaast kan het apparaat jouw berichten niet meer ontsleutelen."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Je kunt versleutelde berichten uitwisselen met het apparaat van %s dat deze "
-"sleutel gebruikt."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Terug"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Beheren"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Deze contactpersoon heeft nieuwe apparaten"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO-vertrouwenskeuze vereist"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Heb je een nieuw apparaat toegevoegd aan %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "Standaard OMEMO"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Zet OMEMO versleuteling aan voor nieuwe gesprekken"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Versleut nieuwe apparaten"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automatisch versleutelen van nieuwe apparaten van dit contact."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nieuwe sleutels"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Nieuwe sleutels van je andere apparaten worden automatisch geaccepteerd."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Dit apparaat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Ander apparaat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Apparaat"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Geaccepteerd"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Geweigerd"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Geverifieerd"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Nieuwe apparaat"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Ieder apparaat beschikt over een eigen OMEMO-sleutel. Berichten kunnen "
-"alleen worden ontsleuteld als beide versleuteld zijn met dezelfde sleutel, "
-"en alleen op goedgekeurde apparaten."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO-sleutelbeheer"
-
-#~ msgid "Encryption"
-#~ msgstr "Encryptie"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO-apparaat"
-#~ msgstr[1] "%d OMEMO-apparaten"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Nieuwe sleutels automatisch accepteren"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Nieuwe sleutels van deze contactpersoon worden automatisch geaccepteerd."
-
-#~ msgid "Own key"
-#~ msgstr "Mijn sleutel"
-
-#~ msgid "Associated keys"
-#~ msgstr "Geassocieerde sleutels"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Inactieve sleutels"
-
-#~ msgid "Unused"
-#~ msgstr "Ongebruikt"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Mijn vingerafdruk"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Wordt bij de eerste verbinding gegenereerd"
-
-#~ msgid "Your contact"
-#~ msgstr "Je contactpersoon"
-
-#~ msgid "Not matching"
-#~ msgstr "Komen niet overeen"
-
-#~ msgid "Matching"
-#~ msgstr "Komen overeen"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Zodra bevestigd, worden nieuwe berichten verstuurd door %s met deze "
-#~ "sleutel uitgelicht in het chatvenster."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Accepteer niet langer deze sleutel tijdens communicatie met het "
-#~ "bijbehorende contact."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Accepteer deze sleutel tijdens communicatie met het bijbehorende contact"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Dit betekent dat het niet gebruikt kan worden door %s om berichten te "
-#~ "ontvangen. Berichten die hiermee verstuurd worden worden genegeerd."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Zodra bevestigd, worden toekomstige berichten die verstuurd worden door "
-#~ "%s met deze sleutel genegeerd en zullen geen van je berichten leesbaar "
-#~ "zijn met deze sleutel."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Zodra bevestigd kan deze sleutel gebruikt worden door %s om berichten te "
-#~ "ontvangen en te versturen."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Indien dit contact nieuwe encryptiesleutels toevoegt aan hun account, "
-#~ "automatisch accepteren."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Nieuwe encryptiesleutels die aan het account worden toegevoegd "
-#~ "automatisch accepteren."
-
-#, fuzzy
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Accepteer deze sleutel tijdens communicatie met het bijbehorende contact"
-
-#~ msgid "Reject Key"
-#~ msgstr "Sleutel Afwijzen"
-
-#~ msgid "Accept Key"
-#~ msgstr "Sleutel Aanvaarden"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Onbekend apparaat (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Andere apparaten"
-
-#~ msgid "- None -"
-#~ msgstr "- Geen -"
-
-#~ msgid "OMEMO"
-#~ msgstr "OMEMO"
-
-#~ msgid "Database error"
-#~ msgstr "Databasefout"
diff --git a/plugins/omemo/po/oc.po b/plugins/omemo/po/oc.po
deleted file mode 100644
index 1a0b26bb..00000000
--- a/plugins/omemo/po/oc.po
+++ /dev/null
@@ -1,323 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-12-19 22:00+0000\n"
-"Language-Team: none\n"
-"Language: oc\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.15.1\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s a utilizat un aparelh desconegut. Veiretz pas los messatges venents de "
-"client que vos fisatz pas."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gerir los aparelhs"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s se fisa pas d’aqueste client. Significa que mancaretz benlèu de messatges."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gestion de las claus"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Comparatz l’emprenta, caractèr per caractèr, amb aquela qu’es afichada al "
-"client de vòstre contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "L’emprenta es diferenta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Las emprentas correspondon"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Anullar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificar la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Los messatges venents enviat per %s a partir del client utilizant aquesta "
-"clau seràn meses en davant dins la fenèstra del chat."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Las emprentas correspondon pas"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Mercés de verificar que sètz a comparar l’emprenta corrècta. Se l’emprenta "
-"correspond pas, lo compte de %s pòt èsser compromés e deuriatz regetar "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar l’emprenta d’aquesta clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Comparatz aquesta clau amb l’emprenta afichada sus l'aparelh de vòstre "
-"contacte."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Regetar la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blocar las comunicacion chifradas amb lo client del contacte qu’utiliza "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Acceptar la clau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Autorizar las comunicacions chifradas amb lo client del contacte qu’utiliza "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "La clau es actualament %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "acceptada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Aquò significa que èsser utilizada per %s per recebre e enviar de messatges."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Amai, la verificacion de la correspondéncia d’aquesta clau amb la del client "
-"del contacte es estada facha."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "regetada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Aquò significa que pòt pas èsser utilizada per %s per deschifrar vòstres "
-"messatges, veiretz pas mai los messatges chifrats amb ela."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Veiretz pas mai los messatges que venon de l’aparelh de %s qu’utiliza "
-"aquesta clau. Al contrari, aqueste aparelh poirà pas mai deschifrar vòstres "
-"messatges."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Poiretz escambiar de messatges chifrats amb l’aparelh de %s qu’utiliza "
-"aquesta clau."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Tornar"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gerir"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Aqueste contacte a d’aparelhs novèls"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Decision de fisança OMEMO requerida"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Avètz apondut un aparelh novèl pel compte de %s ?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO per defaut"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Activar lo chiframent OMEMO per las discussions novèlas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Chifrar pels aparelhs novèls"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Chifrar automaticament pels aparelhs novèls d'aqueste contacte."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Claus novèlas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Las claus novèlas de deschiframent de vòstres autres aparelhs seràn "
-"automaticament acceptadas."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Aqueste aparelh"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Un autre aparelh"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Aparelh"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Acceptada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Regetada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Aparelh novèl"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Cada aparelh a sa pròpria clau OMEMO. Los messatges pòdon èsser deschifrats "
-"per un aparelh solament se son chifrats amb sa clau. Los messatges son "
-"chifrats unicament pels aparelhs acceptats."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gestion de las claus OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Chiframent"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d periferic OMEMO"
-#~ msgstr[1] "%d periferics OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Acceptar automaticament las claus novèlas"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Las claus novèlas de deschiframent d’aqueste contacte seràn "
-#~ "automaticament acceptadas."
-
-#~ msgid "Own key"
-#~ msgstr "Ma clau publica"
-
-#~ msgid "Associated keys"
-#~ msgstr "Claus associadas"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Claus inactivas"
-
-#~ msgid "Unused"
-#~ msgstr "Pas utilizada"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Emprenta publica"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Serà generat a la primièra connexion"
-
-#~ msgid "Your contact"
-#~ msgstr "Vòstre contacte"
diff --git a/plugins/omemo/po/pl.po b/plugins/omemo/po/pl.po
deleted file mode 100644
index b4a9e6c8..00000000
--- a/plugins/omemo/po/pl.po
+++ /dev/null
@@ -1,386 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-09-24 13:15+0000\n"
-"Language-Team: Polish <https://hosted.weblate.org/projects/dino/plugin-omemo/"
-"pl/>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.8-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s używa niezaufanego urządzenia. Nie będziesz widzieć wiadomości wysłanych "
-"z urządzeń, którym nie ufasz."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Zarządzaj urządzeniami"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s nie ufa temu urządzeniu. Oznacza to, że wiadomości mogą do ciebie nie "
-"docierać."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Zarządzaj kluczem"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Porównaj odcisk klucza, znak po znaku, z tym pokazanym na urządzeniu twojego "
-"kontaktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Odcisk klucza różni się"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Odcisk klucza pasuje"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Anuluj"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Potwierdź"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Zweryfikuj klucz"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Przyszłe wiadomości wysyłane przez %s z urządzenia używającego tego klucza "
-"zostaną odpowiednio podświetlone w oknie czatu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Odcisk klucza nie zgadza się"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Proszę zweryfikować, że porównujesz prawidłowy odcisk klucza. Jeśli odciski "
-"nie zgadzają się, konto %s mogło być zaatakowane i należy rozważyć "
-"odrzucenie tego klucza."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Zweryfikuj odcisk klucza"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Porównaj odcisk tego klucza z odciskiem wyświetlonym na urządzeniu kontaktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Odrzuć klucz"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blokuj szyfrowaną komunikację z urządzeniem kontaktu, które korzysta z tego "
-"klucza."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Zaakceptuj klucz"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Zezwól na szyfrowaną komunikację z urządzeniem kontaktu, które korzysta z "
-"tego klucza."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Ten klucz jest obecnie %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "zaakceptowany"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"To znaczy, że może być używany przez %s do odbierania i wysyłania "
-"szyfrowanych wiadomości."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "zweryfikowany"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Dodatkowo zostało sprawdzone, że zgadza się z kluczem na urządzeniu kontaktu."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "odrzucony"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Oznacza to, że %s nie może go użyć do odszyfrowania wiadomości i nie "
-"zobaczysz wiadomości zaszyfrowanych przy jego pomocy."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Nie zobaczysz zaszyfrowanych wiadomości z urządzenia %s, które używa tego "
-"klucza. I odwrotnie, to urządzenie nie będzie już w stanie odszyfrować "
-"Twoich wiadomości."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Będziesz mógł wymieniać zaszyfrowane wiadomości z urządzeniem %s, które "
-"używa tego klucza."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Wstecz"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Zarządzaj"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Ten kontakt ma nowe urządzenia"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Decyzja o zaufaniu OMEMO jest potrzebna"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Czy dodałeś nowe urządzenie dla konta %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "Domyślnie OMEMO"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Włącz szyfrowanie za pomocą OMEMO dla nowych konwersacji"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Szyfrowanie nowych urządzeń"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automatycznie szyfruj na nowych urządzeniach od tego kontaktu."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Nowe klucze"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Nowe klucze szyfrowania z innych urządzeń będą akceptowane automatycznie."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Zaakceptowany"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Odrzucony"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Zweryfikowany"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Nowe urządzenie"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Zarządzanie kluczami OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Szyfrowanie"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d urządzenie OMEMO"
-#~ msgstr[1] "%d urządzenia OMEMO"
-#~ msgstr[2] "%d urządzeń OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Automatycznie akceptuj nowe klucze"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Nowe klucze szyfrowania od tego kontaktu będą akceptowane automatycznie."
-
-#~ msgid "Own key"
-#~ msgstr "Własny klucz"
-
-#~ msgid "Associated keys"
-#~ msgstr "Pozostałe klucze"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Nieaktywne klucze"
-
-#~ msgid "Unused"
-#~ msgstr "Nieużywany"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Własny odcisk klucza"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Zostanie wygenerowany przy pierwszym połączeniu"
-
-#~ msgid "Not matching"
-#~ msgstr "Odciski nie zgadzają się"
-
-#~ msgid "Matching"
-#~ msgstr "Odciski zgadzają się"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Przyszłe wiadomości wysłane przez %s i szyfrowane tym kluczem będą "
-#~ "odpowiednio zaznaczone w oknie czatu."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Zablokuj szyfrowaną komunikację ze sprzętem kontaktu, który używa ten "
-#~ "klucz."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Włącz szyfrowaną komunikację ze sprzętem kontaktu, który używa ten klucz."
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "To znaczy, że nie może być używany przez %s do rozszyfrowania twoich "
-#~ "wiadomości, a wiadomości szyfrowane nim nie będą u ciebie wyświetlane."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Wiadomości wysłane przez %s ze sprzętu używającego ten klucz nie będą "
-#~ "wyświetlane. Podobnie sprzęt tej osoby nie będzie mógł rozszyfrować "
-#~ "twoich wiadomości."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "To umożliwi wymianę szyfrowanych wiadomości ze sprzętem należącym do %s, "
-#~ "który używaja ten klucz."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Gdy ten kontakt doda nowe klucze szyfrowania do swojego konta, zaakceptuj "
-#~ "je automatycznie."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Gdy dodam nowe klucze szyfrowania do mojego konta, zaakceptuj je "
-#~ "automatycznie."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Nieznane urządzenie (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Pozostałe urządzenia"
-
-#~ msgid "- None -"
-#~ msgstr "- Wybierz -"
diff --git a/plugins/omemo/po/pt.po b/plugins/omemo/po/pt.po
deleted file mode 100644
index aafe2cc2..00000000
--- a/plugins/omemo/po/pt.po
+++ /dev/null
@@ -1,324 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-08-04 20:02+0000\n"
-"Language-Team: none\n"
-"Language: pt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s esteve a usar um aparelho não confiável. Não verá mensagens de aparelhos "
-"nos quais não confia."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gerir aparelhos"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s não confia neste aparelho. Isso significa que pode estar a perder "
-"mensagens."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gerir Chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Compare a impressão digital, caractere a caractere, com aquela mostrada no "
-"aparelho de seu contato."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "As impressões digitais não correspondem uma a outra"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "As impressões digitais correspondem uma a outra"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Mensagens futuras enviadas por %s do aparelho que usa essa chave serão "
-"destacadas no janela de bate papo."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Impressões digitais não correspondem"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Por favor verifique se está a comparar as impressões digitais corretas. Caso "
-"elas não correspondam, a conta do %s pode estar comprometida e deve "
-"considerar rejeitar essa chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar impressão digital da chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Compare a impressão digital dessa chave com a impressão digital exibida no "
-"aparelho do contato."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rejeitar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Bloqueie comunicação criptografada com o aparelho do contato que usa essa "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Aceitar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permita comunicação criptografada com o aparelho do contato que usa essa "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Essa chave está atualmente %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "aceita"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Isso significa que ela pode ser usada por %s para enviar e receber mensagens "
-"criptografadas."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Além disso, verificou-se que ela corresponde com a chave no aparelho do "
-"contato."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rejeitada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Isso significa que ela não pode ser usada por %s para decifrar suas "
-"mensagens, e não irá visualizar mensagens criptografadas com ela."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Não irá visualizar mensagens criptografas pelo aparelho de %s que usa essa "
-"chave. Além disso, esse aparelho não será mais capaz de decifrar suas "
-"mensagens."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Poderá trocar mensagem criptografadas com o aparelho de %s que usa essa "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Voltar"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gerir"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Esse contato possui novos aparelhos"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Decisão de confiança OMEMO necessária"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Adicionou um novo aparelho para a conta %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO por padrão"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Ativar a criptografia OMEMO em novas conversas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Criptografar para novos dispositivos"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automaticamente criptografar para novos dispositivos deste contacto."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Chaves novas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Novas chaves de criptografia de seus outros aparelhos serão aceitas "
-"automaticamente."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Este dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Outro dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Aceita"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rejeitada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Dispositivo novo"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Cada dispositivo tem a sua própria chave OMEMO. Mensagens só podem ser "
-"descriptografadas pelo dispositivo se foram criptografadas para as suas "
-"chaves. Mensagens só são criptografadas para dispositivos aceites."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gestão de chave OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Criptografia"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d aparelho OMEMO"
-#~ msgstr[1] "%d aparelhos OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Aceitar novas chaves automaticamente"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Novas chaves de criptografia desse contato serão aceitas automaticamente."
-
-#~ msgid "Own key"
-#~ msgstr "Chave própria"
-
-#~ msgid "Associated keys"
-#~ msgstr "Chaves associadas"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Chaves inativas"
-
-#~ msgid "Unused"
-#~ msgstr "Não usada"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Impressão digital própria"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Será gerada na primeira conexão"
-
-#~ msgid "Your contact"
-#~ msgstr "O seu contacto"
diff --git a/plugins/omemo/po/pt_BR.po b/plugins/omemo/po/pt_BR.po
deleted file mode 100644
index 123733fb..00000000
--- a/plugins/omemo/po/pt_BR.po
+++ /dev/null
@@ -1,379 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-12 07:32+0000\n"
-"Language-Team: none\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s tem usado um dispositivo não confiável. Você não verá mensagens de "
-"dispositivos que você não confia."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gerenciar dispositivos"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s não confia nesse dispositivo. Isso significa que você pode estar perdendo "
-"algumas mensagens."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gerenciar Chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Compare a impressão digital, caractere a caractere, com aquela mostrada no "
-"dispositivo de seu contato."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "As impressões digitais não correspondem uma a outra"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "As impressões digitais correspondem uma a outra"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Mensagens futuras enviadas por %s do dispositivo que usa essa chave serão "
-"destacadas no janela de bate papo."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Impressões digitais não correspondem"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Por favor verifique se você está comparando as impressões digitais corretas. "
-"Caso elas não correspondam, a conta do %s pode estar comprometida e você "
-"deve considerar rejeitar essa chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificar impressão digital da chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Compare a impressão digital dessa chave com a impressão digital exibida no "
-"dispositivo do contato."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Rejeitar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Bloqueie comunicação criptografada com o dispositivo do contato que usa essa "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Aceitar chave"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permita comunicação criptografada com o dispositivo do contato que usa essa "
-"chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Essa chave está atualmente %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "aceita"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Isso significa que ela pode ser usada por %s para enviar e receber mensagens "
-"criptografadas."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Além disso, verificou-se que ela corresponde com a chave no dispositivo do "
-"contato."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "rejeitada"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Isso significa que ela não pode ser usada por %s para decifrar suas "
-"mensagens, e você não irá visualizar mensagens criptografadas com ela."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Você não irá visualizar mensagens criptografas pelo dispositivo de %s que "
-"usa essa chave. Além disso, esse dispositivo não será mais capaz de decifrar "
-"suas mensagens."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Você poderá trocar mensagem criptografadas com o dispositivo de %s que usa "
-"essa chave."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Voltar"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gerenciar"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Esse contato possui novos dispositivos"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Decisão de confiança OMEMO necessária"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Você adicionou um novo dispositivo para a conta %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO por padrão"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Ativar a criptografia OMEMO em novas conversas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Criptografar para novos dispositivos"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Automaticamente criptografar para novos dispositivos deste contato."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Chaves novas"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Novas chaves de criptografia de seus outros dispositivos serão aceitas "
-"automaticamente."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Este dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Outro dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Dispositivo"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Aceita"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Rejeitada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificada"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Dispositivo novo"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Cada dispositivo tem sua própria chave OMEMO. Mensagens só podem ser "
-"descriptografadas pelo dispositivo se foram criptografadas para suas chaves. "
-"Mensagens só são criptografadas para dispositivos aceitos."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Gerenciamento de Chave OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Criptografia"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d dispositivo OMEMO"
-#~ msgstr[1] "%d dispositivos OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Aceitar novas chaves automaticamente"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Novas chaves de criptografia desse contato serão aceitas automaticamente."
-
-#~ msgid "Own key"
-#~ msgstr "Chave própria"
-
-#~ msgid "Associated keys"
-#~ msgstr "Chaves associadas"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Chaves inativas"
-
-#~ msgid "Unused"
-#~ msgstr "Não usada"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Impressão digital própria"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Será gerada na primeira conexão"
-
-#~ msgid "Your contact"
-#~ msgstr "Seu contato"
-
-#~ msgid "Not matching"
-#~ msgstr "Não correspondem"
-
-#~ msgid "Matching"
-#~ msgstr "Correspondem"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Uma vez confirmada, toda mensagem enviada por %s no futuro será destacada "
-#~ "na janela da conversa."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr "Pare de aceitar essa chave ao se comunicar com o contato associado."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Aceite essa chave ao se comunicar com o contato associado"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Isso significa que ela não pode ser usada por %s para receber mensagens e "
-#~ "qualquer mensagem enviada com ela será ignorada."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Uma vez confirmada, toda mensagem enviada por %s usando essa chave será "
-#~ "ignorada e nenhuma de suas mensagens com ela serão legíveis."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Uma vez confirmada, essa chave poderá ser usada por %s para receber e "
-#~ "enviar mensagens."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Quando esse contato adicionar novas chaves de criptografia à conta, "
-#~ "aceite-as automaticamente."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Quando você adicionar novas chaves de criptografia para sua conta, aceite-"
-#~ "as automaticamente."
diff --git a/plugins/omemo/po/ro.po b/plugins/omemo/po/ro.po
deleted file mode 100644
index 91e48bf4..00000000
--- a/plugins/omemo/po/ro.po
+++ /dev/null
@@ -1,406 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: Romanian <https://hosted.weblate.org/projects/dino/plugin-"
-"omemo/ro/>\n"
-"Language: ro\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s a utilizat un dispozitiv care nu este de încredere. Nu veți vedea mesaje "
-"de pe dispozitive în care nu aveți încredere."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Gestionare dispozitive"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s nu are încredere în acest dispozitiv. Asta înseamnă că s-ar putea să-ți "
-"lipsească mesaje."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Gestionare cheie"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Comparați amprenta, caracter cu caracter, cu amprenta afișată pe "
-"dispozitivul contactului."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Amprentele diferă"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Amprentele se potrivesc"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Anulare"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Confirmare"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verificare cheie"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Mesajele viitoare trimise de %s de pe dispozitivul care utilizează această "
-"cheie vor fi evidențiate în mod corespunzător în fereastra de chat."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Amprentele nu se potrivesc"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Vă rugäm să verificați dacă se compară amprentele corecte. Dacă nu se "
-"potrivesc amprentele s-ar putea ca %s să aibä un cont compromis și ar trebui "
-"să luați în considerare respingerea acestei chei."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verificare amprentă cheie"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Comparați amprenta cheii cu amprenta afișată pe dispozitivul contactului."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Respingere cheie"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blocați comunicarea criptată cu dispozitivul persoanei de contact care "
-"utilizează această cheie."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Acceptare cheie"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Permiteți comunicarea criptată cu dispozitivul persoanei de contact care "
-"utilizează această cheie."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Cheia este în prezent %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "acceptată"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Aceasta înseamnă că poate fi utilizată de %s pentru a primi și a trimite "
-"mesaje criptate."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verificată"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"În plus, a fost verificată că se potrivește cu cheia de pe dispozitivul "
-"contactului."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "respinsă"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Aceasta înseamnă că nu poate fi utilizată de %s pentru a vă descifra "
-"mesajele și nu veți vedea mesajele criptate cu aceasta."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Nu veți vedea mesaje criptate de la dispozitivul %s care utilizează această "
-"cheie. În schimb, dispozitivul respectiv nu va mai putea descifra mesajele "
-"dumneavoastră."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Veți putea schimba mesaje criptate cu dispozitivul %s care utilizează "
-"această cheie."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Înapoi"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Gestionare"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Acest contact are dispozitive noi"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Este necesara luarea unei decizii în privința OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Ați adăugat un nou dispozitiv pentru contul %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO activat implicit"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Activează criptarea OMEMO pentru conversațiile noi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Criptează pentru dispozitive noi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Criptează automat pentru dispozitivele noi ale acestui contact."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Chei noi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Noile chei de criptare de pe celelalte dispozitive ale dumneavoastră vor fi "
-"acceptate automat."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Acest dispozitiv"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Alt dispozitiv"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Dispozitiv"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Acceptată"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Respinsă"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verificată"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Dispozitiv nou"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Fiecare dispozitiv are propria cheie OMEMO. Mesajele pot fi decriptate de un "
-"dispozitiv numai dacă sunt criptate pentru cheia sa. Mesajele sunt criptate "
-"numai pentru dispozitivele acceptate."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Administrare chei OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Criptare"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d dispozitiv OMEMO"
-#~ msgstr[1] "%d dispozitive OMEMO"
-#~ msgstr[2] "%d de dispozitive OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Acceptă automat chei noi"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Noile chei de criptare de la această persoană de contact vor fi acceptate "
-#~ "automat."
-
-#~ msgid "Own key"
-#~ msgstr "Cheie proprie"
-
-#~ msgid "Associated keys"
-#~ msgstr "Chei asociate"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Chei inactive"
-
-#~ msgid "Unused"
-#~ msgstr "Neutilizatä"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Amprentă proprie"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Se va genera la prima conectare"
-
-#~ msgid "Your contact"
-#~ msgstr "Persoana de contact"
-
-#~ msgid "Not matching"
-#~ msgstr "Nu se potrivesc"
-
-#~ msgid "Matching"
-#~ msgstr "Se potrivesc"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Odată confirmată, orice viitoare mesaje trimise de %s folosind această "
-#~ "cheie vor fi evidenţiate în consecință în fereastra de discuție."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Nu mai accepta această cheie în timpul comunicärii cu acest contact "
-#~ "asociat."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Se va accepta această cheie în timpul comunicării cu acest contact asociat"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Aceasta înseamnă că nu poate fi folosită de %s ca să primească mesaje, "
-#~ "iar orice mesaj trimis cu ea v-a fi ignorat."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Odată confirmată, orice viitoare mesaje trimise de %s folosind această "
-#~ "cheie vor fi ignorate și nici un mesaj trimis de dumneavoastră nu se va "
-#~ "putea citii folosid aceastä cheie."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Odată confirmată, aceastä cheie va fi utilizatä de %s pentru a primi și "
-#~ "trimite mesaje."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Când acest contact adäugă chei de criptare noi în contul lor, acestea vor "
-#~ "fi acceptate în mod automat."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Când adäugați chei de criptare noi pentru acest cont, acestea vor fi "
-#~ "acceptate în mod automat."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Acceptă această cheie în timpul comunicării cu acest contact asociat."
-
-#~ msgid "Reject Key"
-#~ msgstr "Respingere cheie"
-
-#~ msgid "Accept Key"
-#~ msgstr "Acceptare cheie"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Dispozitiv necunoscut (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Alte dispozitive"
-
-#~ msgid "- None -"
-#~ msgstr "- Nici unul -"
diff --git a/plugins/omemo/po/ru.po b/plugins/omemo/po/ru.po
deleted file mode 100644
index 97c18960..00000000
--- a/plugins/omemo/po/ru.po
+++ /dev/null
@@ -1,386 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-05-06 13:05+0000\n"
-"Language-Team: Russian <https://hosted.weblate.org/projects/dino/plugin-"
-"omemo/ru/>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.12-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s использовал(а) ненадёжное устройство. Вы не будете видеть сообщения от "
-"устройств, которым не доверяете."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Управление устройствами"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s не доверяет этому устройству. Это означает, что у вас могут отсутствовать "
-"сообщения."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Управление ключом"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Сравните отпечаток, символ за символом, с тем, который показан на устройстве "
-"вашего контакта."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Отпечатки отличаются"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Отпечатки схожи"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Отмена"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Подтвердить"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Подтвердить ключ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Будущие сообщения, отправленные %s с устройства, использующего этот ключ, "
-"будут соответствующим образом выделены в окне чата."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Отпечатки не совпадают"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Пожалуйста, проверьте совпадение отпечатков. Если они не совпадают, аккаунт "
-"\"%s\" может быть скомпрометирован, и вам стоит отклонить этот ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Подтвердить отпечаток"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "Сверить этот отпечаток с ключом, отображаемым у контакта."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Отклонить ключ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Заблокировать зашифрованную связь с устройством контакта, использующего этот "
-"ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Принять ключ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Разрешает зашифрованную связь с устройством контакта, использующего этот "
-"ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Ключ был успешно %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "принят"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Это означает, что %s теперь может отправлять и принимать зашифрованные "
-"сообщения."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "проверен"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Также была проведена проверка совпадения ключа."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "отклонён"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Это означает что он не сможетт использоваться %s для расшифровки ваших "
-"сообщений, и вы также не увидите сообщений зашифрованных им."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Вы не увидите зашифрованных сообщений от устройства %s, которое использует "
-"этот ключ. И наоборот, это устройство больше не сможет расшифровывать ваши "
-"сообщения."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Вы сможете обмениваться зашифрованными сообщениями с устройством %s, которое "
-"использует этот ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Назад"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Настроить"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Этот контакт воспользовался новым устройством"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Требуется решение OMEMO о доверии"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Вы добавляли аккаунт %s на новое устройство?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO по умолчанию"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Включить OMEMO-шифрование для новых бесед"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Шифрование для новых устройств"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Автоматическое шифрование для новых устройств этого контакта."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Новые ключи"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Новые ключи шифрования от других ваших устройств будут приняты автоматически."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Это устройство"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Другое устройство"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Устройство"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Принят"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Отклонён"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Подтверждён"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Новое устройство"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Каждое устройство имеет свой собственный ключ OMEMO. Сообщения могут быть "
-"расшифрованы устройством только в том случае, если они зашифрованы его "
-"ключом. Сообщения зашифрованы только для одобренных устройств."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Управление ключами OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Шифрование"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d устройство OMEMO"
-#~ msgstr[1] "%d устройства OMEMO"
-#~ msgstr[2] "%d устройств OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Автоматически принимать новые ключи"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Новые ключи шифрования от этого контакта будут приняты автоматически."
-
-#~ msgid "Own key"
-#~ msgstr "Собственный ключ"
-
-#~ msgid "Associated keys"
-#~ msgstr "Связанные ключи"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Неактивные ключи"
-
-#~ msgid "Unused"
-#~ msgstr "Не используется"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Отпечаток этого устройства"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Будет сгенерирован при первом подключении"
-
-#~ msgid "Your contact"
-#~ msgstr "Ваш контакт"
-
-#~ msgid "Not matching"
-#~ msgstr "Не совпадает"
-
-#~ msgid "Matching"
-#~ msgstr "Совпадает"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "После подтверждения все последующие сообщения, отправленные с %s при "
-#~ "помощи этого ключа, будут соответственно подсвечены в окне чата."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr "Не принимать ключ этого контакта."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "Принять ключ этого контакта"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Это значит, что %s не может отправлять сообщения — все они будут "
-#~ "игнорироваться."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "После подтверждения все будущие сообщения, отправленные %s с "
-#~ "использованием этого ключа, будут игнорироваться и ни одно из ваших "
-#~ "сообщений не сможет быть прочитано с использованием этого ключа."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "После подтверждения этот ключ будет использоваться %s для получения и "
-#~ "отправки сообщений."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Когда этот контакт добавляет новые ключи шифрования в свою учетную "
-#~ "запись, автоматически принимайте их."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Когда вы добавляете новые ключи шифрования в свою учетную запись, "
-#~ "автоматически принимайте их."
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "Неизвестное устройство (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "Другие устройства"
-
-#~ msgid "- None -"
-#~ msgstr "- Нет -"
diff --git a/plugins/omemo/po/sq.po b/plugins/omemo/po/sq.po
deleted file mode 100644
index 374cb2f3..00000000
--- a/plugins/omemo/po/sq.po
+++ /dev/null
@@ -1,318 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: none\n"
-"Language: sq\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s ka përdorur një pajisje jo të besuar. S’do të shihni mesazhe prej "
-"pajisjesh që nuk i besoni."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Administroni pajisje"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s nuk e beson këtë pajisje. Kjo do të thotë, mund të jeni duke humbur "
-"mesazhe."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Administroni Kyç"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Krahasoni shenjën e gishtave, shenjë pas shenje, me atë të shfaqur në "
-"pajisjen e kontaktit tuaj."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Shenjat e gishtave janë të ndryshme"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Shenjat e gishtave përputhen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Anuloje"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Ripohojeni"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verifikoni kyç"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Mesazhe të ardhshme dërguar nga %s prej pajisjes që përdor këtë kyç do të "
-"theksohen te dritarja e fjalosjes."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Shenjat e gishtave s’përputhen"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Ju lutemi, verifikoni se po krahasoni shenjat e sakta të gishtave. Nëse "
-"shenjat e gishtave s’përputhen, llogaria e %s mund të komprometohet dhe "
-"duhet të shihni mundësinë e hedhjes poshtë të këtij kyçi."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verifikoni shenja gishtash kyçi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Krahasoni shenjën e gishtit të këtij kyçi me shenjën e gishtit të shfaqur në "
-"pajisjen e kontaktit."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Hidhe tej kyçin"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blloko komunikim të fshehtëzuar me pajisjen e kontaktit që përdor këtë kyç."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Pranoje kyçin"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Lejo komunikim të fshehtëzuar me pajisjen e kontaktit që përdor këtë kyç."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Ky kyç aktualisht është %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "i pranuar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Kjo do të thotë se mund të përdoret nga %s për të marrë dhe dërguar mesazhe "
-"të fshehtëzuara."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "i verifikuar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Për më tepër, është verifikuar për t’u përputhur me kyçin në pajisjen e "
-"kontaktit."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "i hedhur poshtë"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Kjo do të thotë se s’mund të përdoret nga %s për të deshifruar mesazhet "
-"tuaja dhe s’do të shihni dot mesazhe të fshehtëzuara me të."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"S’do të shihni dot mesazhe të fshehtëzuar prej pajisjes së %s që përdor këtë "
-"kyç. Më anë tjetër, ajo pajisje s’do të jetë në gjendje të deshifrojë më "
-"mesazhet tuaja."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Do të jeni në gjendje të shkëmbeni mesazhe të fshehtëzuar me pajisjen e %s "
-"që përdor këtë kyç."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Mbrapsht"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Administroni"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Ky kontakt ka pajisje të reja"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Lypset vendim besimi OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Shtuat një pajisje të re për llogarinë %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO, si parazgjedhje"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Aktivizo fshehtëzim OMEMO për biseda të reja"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Fshehtëzo në pajisje të reja"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Fshehtëzo automatikisht në pajisje të reja nga ky kontakt."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Kyçe të rinj"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Kyçe të rinj fshehtëzimi prej pajisjesh tuaja të tjera do të pranohen "
-"automatikisht."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Këtë pajisje"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Tjetër pajisje"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Pajisje"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Të pranuar"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Të hedhur tej"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Të verifikuar"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Pajisje e re"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Çdo pajisje ka kyçin e vet OMEMO. Mesazhet mund të shfshehtëzohen vetëm nga "
-"një pajisje, nëse janë fshehtëzuar me kyçin e saj."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Administrim Kyçesh OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Fshehtëzim"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d pajisje OMEMO"
-#~ msgstr[1] "%d pajisje OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Prano automatikisht kyçe të rinj"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Kyçe të rinj fshehtëzimi nga ky kontakt do të pranohen automatikisht."
-
-#~ msgid "Own key"
-#~ msgstr "Kyç i vet"
-
-#~ msgid "Associated keys"
-#~ msgstr "Kyçe të përshoqëruar"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Kyçe jo aktivë"
-
-#~ msgid "Unused"
-#~ msgstr "Të papërdorur"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Shenjë e vet gishtash"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Do të prodhohet gjatë lidhjes së parë"
diff --git a/plugins/omemo/po/sv.po b/plugins/omemo/po/sv.po
deleted file mode 100644
index 7524058a..00000000
--- a/plugins/omemo/po/sv.po
+++ /dev/null
@@ -1,371 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-08-16 05:09+0000\n"
-"Language-Team: none\n"
-"Language: sv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s har använt en ej betrodd enhet. Du kommer inte se meddelanden från "
-"enheter du inte litar på."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Hantera enheter"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "%s litar inte på den här enheten. Du kanske inte ser alla meddelanden."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Hantera nyckel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Jämför fingeravtrycket, tecken för tecken, med det som visas i din kontakts "
-"enhet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fingeravtrycken matcher ej"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fingeravtrycken matchar"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Bekräfta"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Verifiera nyckel"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Framtida meddelanden skickade av %s från enheten som använder denna nyckel "
-"kommer tydligt att markeras i chattfönstret."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fingeravtrycken överensstämmer inte"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Kontrollera att du jämför rätt fingeravtryck. Om fingeravtrycken inte "
-"stämmer så kan %s konto vara underminerat och du bör överväga att avvisa "
-"denna nyckel."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Verifiera nyckelns fingeravtryck"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Jämför nyckelns fingeravtryck med det fingeravtryck som visas i kontaktens "
-"enhet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Avvisa nyckeln"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Blockera krypterad kommunikation med kontaktens enhet som använder den här "
-"nyckeln."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Acceptera nyckeln"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Tillåt krypterad kommunikation med kontaktens enhet som använder den här "
-"nyckeln."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Denna nyckel är för närvarande %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "accepterad"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Det betyder att den kan användas av %s för att skicka och ta emot krypterade "
-"meddelanden."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "verifierad"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Dessutom har den verifierats så att den överensstämmer med nyckeln på "
-"kontaktens enhet."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "avvisad"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Det innebär att den inte kan användas av %s för att dechiffrera dina "
-"meddelanden och du ser inte meddelanden som krypterats med den."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Du ser inte krypterade meddelanden från enheten %s som använder den här "
-"nyckeln. Omvänt kan den enheten inte dechiffrera dina meddelanden längre."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Du kommer att kunna utbyta krypterade meddelanden med enheten %s som "
-"använder den här nyckeln."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Tillbaka"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Hantera"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Denna kontakt har nya enheter"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO-tillitsbeslut krävs"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Har du lagt till en ny enhet för kontot %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO som standard"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Aktivera OMEMO kryptering för nya konversationer"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Kryptera nya enheter"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Kryptera automatiskt för nya enheter från den här kontakten."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Ny nyckel"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "Nya krypteringsnycklar från dina andra enheter accepteras automatiskt."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Accepterad"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Avvisad"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Verifierad"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Ny enhet"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO-nyckelhantering"
-
-#~ msgid "Encryption"
-#~ msgstr "Kryptering"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO-enhet"
-#~ msgstr[1] "%d OMEMO-enheter"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Acceptera automatiskt nya nycklar"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Nya krypteringsnycklar från den här kontakten accepteras automatiskt."
-
-#~ msgid "Own key"
-#~ msgstr "Egen nyckel"
-
-#~ msgid "Associated keys"
-#~ msgstr "Kopplade nycklar"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Inaktiva nycklar"
-
-#~ msgid "Unused"
-#~ msgstr "Oanvänd"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Eget fingeravtryck"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Genereras vid första anslutningstillfället"
-
-#~ msgid "Your contact"
-#~ msgstr "Din kontakt"
-
-#~ msgid "Not matching"
-#~ msgstr "Stämmer ej"
-
-#~ msgid "Matching"
-#~ msgstr "Stämmer"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Om du går vidare så kommer framtida meddelanden från %s med denna nyckel "
-#~ "att markeras i enlighet med nyckelns nya status."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "Sluta acceptera denna nyckel vid kommunikation med den tillhörande "
-#~ "kontakten."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr ""
-#~ "Börja acceptera nyckeln för kommunikation med den tillhörande kontakten"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Det betyder att den inte kan användas av %s för att ta emot meddelanden, "
-#~ "och att alla skickade meddelanden kommer att ignoreras."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Om du går vidare så kommer framtida meddelanden från %s som använder "
-#~ "denna nyckel att ignoreras, och meddelanden från dig blir oläsbara med "
-#~ "denna nyckel."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Om du går vidare så kommer nyckeln kunna användas av %s för att skicka "
-#~ "och ta emot meddelanden."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr "Acceptera automatiskt nya nycklar som läggs till av denna kontakt."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr "Acceptera automatiskt nya nycklar som du läggs till ditt konto."
diff --git a/plugins/omemo/po/ta.po b/plugins/omemo/po/ta.po
deleted file mode 100644
index ac48e893..00000000
--- a/plugins/omemo/po/ta.po
+++ /dev/null
@@ -1,304 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-07-02 08:01+0000\n"
-"Language-Team: none\n"
-"Language: ta\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s நம்பத்தகாத சாதனத்தைப் பயன்படுத்துகின்றன. நீங்கள் நம்பாத சாதனங்களிலிருந்து செய்திகளை "
-"நீங்கள் காண மாட்டீர்கள்."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "சாதனங்களை நிர்வகிக்கவும்"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "இந்த சாதனத்தை %s நம்பவில்லை. அதாவது, நீங்கள் செய்திகளைக் காணவில்லை."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "விசையை நிர்வகிக்கவும்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"உங்கள் தொடர்பின் சாதனத்தில் காட்டப்பட்டுள்ள கைரேகை, எழுத்துக்குறி எழுத்துக்குறியை ஒப்பிடுக."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "கைரேகைகள் வேறுபடுகின்றன"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "கைரேகைகள் பொருந்துகின்றன"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "ரத்துசெய்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "உறுதிப்படுத்தவும்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "விசையை சரிபார்க்கவும்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"இந்த விசையைப் பயன்படுத்தும் சாதனத்திலிருந்து %s அனுப்பிய எதிர்கால செய்திகள் அரட்டை "
-"சாளரத்தில் அதற்கேற்ப முன்னிலைப்படுத்தப்படும்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "கைரேகைகள் பொருந்தவில்லை"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"நீங்கள் சரியான கைரேகையை ஒப்பிடுகிறீர்கள் என்பதை சரிபார்க்கவும். கைரேகைகள் பொருந்தவில்லை "
-"என்றால், %s இன் கணக்கு வேறுபாடின்மை செய்யப்படலாம், மேலும் இந்த விசையை நிராகரிப்பதை நீங்கள் "
-"கருத்தில் கொள்ள வேண்டும்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "முக்கிய கைரேகையை சரிபார்க்கவும்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "இந்த விசையின் கைரேகையை தொடர்பின் சாதனத்தில் காட்டப்படும் கைரேகையுடன் ஒப்பிடுக."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "விசையை நிராகரிக்கவும்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"இந்த விசையைப் பயன்படுத்தும் தொடர்புகளின் சாதனத்துடன் மறைகுறியாக்கப்பட்ட தகவல்தொடர்புகளைத் "
-"தடுக்கவும்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "சாவியை ஏற்றுக்கொள்"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"இந்த விசையைப் பயன்படுத்தும் தொடர்புகளின் சாதனத்துடன் மறைகுறியாக்கப்பட்ட தகவல்தொடர்புகளை "
-"அனுமதிக்கவும்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "இந்த விசை தற்போது %s ஆகும்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "ஏற்றுக்கொள்ளப்பட்டது"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"இதன் பொருள் மறைகுறியாக்கப்பட்ட செய்திகளைப் பெறுவதற்கும் அனுப்புவதற்கும் %s ஆல் "
-"பயன்படுத்தப்படலாம்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "சரிபார்க்கப்பட்டது"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "கூடுதலாக, தொடர்பின் சாதனத்தில் விசையுடன் பொருந்த இது சரிபார்க்கப்பட்டது."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "நிராகரிக்கப்பட்டது"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"இதன் பொருள் உங்கள் செய்திகளைப் புரிந்துகொள்ள %s ஆல் பயன்படுத்த முடியாது, மேலும் அதனுடன் "
-"குறியாக்கம் செய்யப்பட்ட செய்திகளை நீங்கள் காண மாட்டீர்கள்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"இந்த விசையைப் பயன்படுத்தும் %s சாதனத்திலிருந்து மறைகுறியாக்கப்பட்ட செய்திகளை நீங்கள் காண "
-"மாட்டீர்கள். மாறாக, அந்த சாதனம் உங்கள் செய்திகளை இனி புரிந்துகொள்ள முடியாது."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"இந்த விசையைப் பயன்படுத்தும் %s சாதனத்துடன் மறைகுறியாக்கப்பட்ட செய்திகளை நீங்கள் "
-"பரிமாறிக்கொள்ள முடியும்."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "பின்"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "நிர்வகிக்கவும்"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "இந்த தொடர்புக்கு புதிய சாதனங்கள் உள்ளன"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "ஓம்மோ நம்பிக்கை முடிவு தேவை"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "கணக்கு %s க்கு புதிய சாதனத்தைச் சேர்த்தீர்களா?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "இயல்பாக ஓம்மோ"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "புதிய உரையாடல்களுக்கான ஓமமோ குறியாக்கத்தை இயக்கவும்"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "புதிய சாதனங்களுக்கு குறியாக்கம்"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "இந்த தொடர்பிலிருந்து புதிய சாதனங்களுக்கு தானாக குறியாக்கம் செய்யுங்கள்."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "புதிய விசைகள்"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "உங்கள் பிற சாதனங்களிலிருந்து புதிய குறியாக்க விசைகள் தானாக ஏற்றுக்கொள்ளப்படும்."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "இந்தக் கருவி"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "பிற கருவி"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "கருவி"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "ஏற்றுக்கொள்ளப்பட்டது"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "நிராகரிக்கப்பட்டது"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "சரிபார்க்கப்பட்டது"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "புதிய சாதனம்"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"ஒவ்வொரு சாதனத்திற்கும் அதன் சொந்த ஓமமோ விசை உள்ளது. செய்திகளை அதன் விசைக்குக் குறியாக்கம் "
-"செய்தால் மட்டுமே அவை மறைகுறியாக்கப்படும். செய்திகள் ஏற்றுக்கொள்ளப்பட்ட சாதனங்களுக்கு மட்டுமே "
-"குறியாக்கம் செய்யப்படுகின்றன."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "ஓமமோ முக்கிய மேலாண்மை"
-
-#~ msgid "Encryption"
-#~ msgstr "குறியாக்கம்"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO சாதனம்"
-#~ msgstr[1] "%d OMEMO சாதனங்கள்"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "புதிய விசைகளை தானாக ஏற்றுக்கொள்ளுங்கள்"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "இந்த தொடர்பிலிருந்து புதிய குறியாக்க விசைகள் தானாக ஏற்றுக்கொள்ளப்படும்."
-
-#~ msgid "Own key"
-#~ msgstr "சொந்த விசை"
-
-#~ msgid "Associated keys"
-#~ msgstr "தொடர்புடைய விசைகள்"
-
-#~ msgid "Inactive keys"
-#~ msgstr "செயலற்ற விசைகள்"
-
-#~ msgid "Unused"
-#~ msgstr "பயன்படுத்தப்படாதது"
diff --git a/plugins/omemo/po/th.po b/plugins/omemo/po/th.po
deleted file mode 100644
index 784f3aa0..00000000
--- a/plugins/omemo/po/th.po
+++ /dev/null
@@ -1,259 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-10-05 07:02+0000\n"
-"Language-Team: none\n"
-"Language: th\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.14-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr "%s ได้ใช้อุปกรณ์ที่ไม่น่าเชื่อถือ คุณจะไม่เห็นข้อความจากอุปกรณ์ที่คุณไม่น่าเชื่อถือ"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "จัดการอุปกรณ์"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "%s ไม่เชื่อถืออุปกรณ์นี้ นั่นหมายความว่าคุณอาจพลาดข้อความ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "จัดการกุญแจ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr "เปรียบเทียบลายนิ้วมือแต่ละอักขระกับลายนิ้วมือที่แสดงบนอุปกรณ์ของผู้ติดต่อของคุณ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "ลายนิ้วมือแตกต่างกัน"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "ลายนิ้วมือตรงกัน"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "ยกเลิก"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "ยืนยัน"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "ตรวจสอบคีย์"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr "ข้อความในอนาคตที่ส่งโดย %s จากอุปกรณ์ที่ใช้คีย์นี้จะถูกไฮไลท์ในหน้าต่างแชทตามลำดับ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "ลายนิ้วมือไม่ตรงกัน"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"โปรดตรวจสอบให้แน่ใจว่าคุณกำลังเปรียบเทียบลายนิ้วมือที่ถูกต้อง หากลายนิ้วมือไม่ตรงกัน บัญชีของ %s "
-"อาจถูกบุกรุก และคุณควรพิจารณาปฏิเสธคีย์นี้"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "ตรวจสอบลายนิ้วมือคีย์"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "เปรียบเทียบลายนิ้วมือของคีย์นี้กับลายนิ้วมือที่แสดงบนอุปกรณ์ของผู้ติดต่อ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "ปฏิเสธคีย์"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "บล็อกการสื่อสารที่เข้ารหัสกับอุปกรณ์ของผู้ติดต่อที่ใช้คีย์นี้"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "ยอมรับคีย์"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "อนุญาตให้มีการสื่อสารแบบเข้ารหัสกับอุปกรณ์ของผู้ติดต่อที่ใช้คีย์นี้"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "คีย์นี้ปัจจุบันคือ %s"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "ได้รับการยอมรับ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "ซึ่งหมายความว่าสามารถใช้โดย %s เพื่อรับและส่งข้อความเข้ารหัสได้"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "ตรวจสอบแล้ว"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "นอกจากนี้ ยังได้รับการตรวจสอบว่าตรงกับคีย์บนอุปกรณ์ของผู้ติดต่อแล้ว"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "ถูกปฏิเสธ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"ซึ่งหมายความว่าไม่สามารถใช้ %s เพื่อถอดรหัสข้อความของคุณได้ "
-"และคุณจะไม่เห็นข้อความที่เข้ารหัสด้วยมัน"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"คุณจะไม่เห็นข้อความเข้ารหัสจากอุปกรณ์ของ %s ที่ใช้คีย์นี้ ในทางกลับกัน "
-"อุปกรณ์นั้นจะไม่สามารถถอดรหัสข้อความของคุณได้อีกต่อไป"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr "คุณจะสามารถแลกเปลี่ยนข้อความเข้ารหัสกับอุปกรณ์ %s ที่ใช้คีย์นี้ได้"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "กลับ"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "จัดการ"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "ผู้ติดต่อรายนี้มีอุปกรณ์ใหม่"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "จำเป็นต้องมีการตัดสินใจเกี่ยวกับความไว้วางใจของ OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "คุณได้เพิ่มอุปกรณ์ใหม่สำหรับบัญชี %s แล้วหรือยัง?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO ตามค่าเริ่มต้น"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "เปิดใช้งานการเข้ารหัส OMEMO สำหรับการสนทนาใหม่"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "เข้ารหัสไปยังอุปกรณ์ใหม่"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "เข้ารหัสไปยังอุปกรณ์ใหม่จากผู้ติดต่อนี้โดยอัตโนมัติ"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "กุญแจใหม่"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "คีย์การเข้ารหัสใหม่จากอุปกรณ์อื่นของคุณจะได้รับการยอมรับโดยอัตโนมัติ"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "อุปกรณ์นี้"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "อุปกรณ์อื่น ๆ"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "อุปกรณ์"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "ได้รับการยอมรับ"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "ถูกปฏิเสธ"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "ได้รับการยืนยันแล้ว"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "อุปกรณ์ใหม่"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"แต่ละอุปกรณ์จะมีคีย์ OMEMO ของตัวเอง "
-"ข้อความสามารถถอดรหัสได้โดยอุปกรณ์เฉพาะเมื่อเข้ารหัสด้วยคีย์ของอุปกรณ์นั้นๆ เท่านั้น "
-"ข้อความจะถูกเข้ารหัสไปยังอุปกรณ์ที่ได้รับการยอมรับเท่านั้น"
diff --git a/plugins/omemo/po/tr.po b/plugins/omemo/po/tr.po
deleted file mode 100644
index e16b8961..00000000
--- a/plugins/omemo/po/tr.po
+++ /dev/null
@@ -1,373 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-10-11 15:07+0000\n"
-"Language-Team: none\n"
-"Language: tr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.14-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s güvenilmeyen bir cihaz kullanıyor. Güvenmediğiniz cihazlardan gelen "
-"mesajları görmezsiniz."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Cihazları yönet"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s bu cihaza güvenmiyor. Bu, eksik mesajlarınız olabileceği anlamına gelir."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Anahtarı Yönet"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Parmak izinin her bir karakterini, kişinizin cihazında gösterilen karakterle "
-"karşılaştırın."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Parmak izleri farklı"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Parmak izleri eşleşiyor"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "İptal"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Onayla"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Anahtarı doğrula"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Bu anahtarı kullanan cihazdan %s tarafından gönderilen gelecekteki mesajlar, "
-"sohbet penceresinde vurgulanacaktır."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Parmak izleri uyuşmuyor"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Lütfen doğru parmak izini karşılaştırdığınızdan emin olun. Parmak izleri "
-"eşleşmezse, %s hesabının güvenliği ihlal edilmiş olabilir ve bu anahtarı "
-"reddetmenizi öneririz."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Anahtar parmak izini doğrulayın"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Bu anahtarın parmak izini, kişinin cihazında görüntülenen parmak izi ile "
-"karşılaştırın."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Anahtarı reddet"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "Bu anahtarı kullanan kişinin cihazıyla şifreli iletişimi engelle."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Kabul"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "Bu anahtarı kullanan kişinin cihazıyla şifreli iletişime izin ver."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Bu anahtar şu anda %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "kabul ediliyor"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Bu, şifreli mesajlar almak ve göndermek için %s tarafından kullanılabileceği "
-"anlamına gelir."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "onaylı"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Ayrıca, kişinin cihazındaki anahtarla eşleştiği doğrulandı."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "reddedildi"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Bu, mesajlarınızın şifresini çözmek için %s tarafından kullanılamayacağı ve "
-"onunla şifrelenmiş mesajları göremeyeceğiniz anlamına gelir."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Bu anahtarı kullanan %s cihazından gelen şifreli mesajları görmeyeceksiniz. "
-"Diğer taraftan, o cihaz artık mesajlarınızın şifresini çözemeyecek."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Bu anahtarı kullanan %s cihazıyla şifreli mesaj alışverişi yapabileceksiniz."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Geri"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Yönet"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Bu kişinin yeni cihazları var"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "OMEMO güven kararı gerekli"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "%s hesabı için yeni bir cihaz eklediniz mi?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "Öntanımlı olarak OMEMO"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Yeni sohbetler için OMEMO şifrelemesini etkinleştir"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Yeni aygıtlara şifrele"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Bu kişiden yeni aygıtlara otomatik olarak şifrele."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Yeni anahtarlar"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Diğer cihazlarınızdan gelen yeni şifreleme anahtarları otomatik olarak kabul "
-"edilecek."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Bu aygıt"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Diğer aygıt"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Aygıt"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Kabul edildi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Reddedildi"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Onaylandı"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Yeni aygıt"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Her aygıtın kendi OMEMO anahtarı vardır. Mesajlar, yalnızca kendi "
-"anahtarıyla şifrelendiyse bir aygıt tarafından şifresi çözülebilir. Mesajlar "
-"yalnızca kabul edilen aygıtlara şifrelenir."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO Anahtar Yönetimi"
-
-#~ msgid "Encryption"
-#~ msgstr "Şifreleme"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d OMEMO aygıtı"
-#~ msgstr[1] "%d OMEMO aygıtı"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Yeni anahtarları otomatik olarak kabul et"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Bu kişiden gelen yeni şifreleme anahtarları otomatik olarak kabul "
-#~ "edilecek."
-
-#~ msgid "Own key"
-#~ msgstr "Kendi anahtarınız"
-
-#~ msgid "Associated keys"
-#~ msgstr "İlişkili anahtarlar"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Etkin olmayan anahtarlar"
-
-#~ msgid "Unused"
-#~ msgstr "Kullanılmamış"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Kendi parmak iziniz"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "İlk bağlantıda oluşturulacak"
-
-#~ msgid "Your contact"
-#~ msgstr "Kişiniz"
-
-#~ msgid "Not matching"
-#~ msgstr "Eşleşmiyor"
-
-#~ msgid "Matching"
-#~ msgstr "Eşleşti"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "Onaylandıktan sonra, bu anahtarı kullanarak %s tarafından gönderilen "
-#~ "gelecek iletiler sohbet penceresinde buna göre vurgulanır."
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr ""
-#~ "İlişkili kişiyle iletişim kurarken bu anahtarı kabul etmeyi durdurun."
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "İlişkili kişiyle iletişim için bu anahtarı kabul edin"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr ""
-#~ "Bu, %s tarafından ileti almak için kullanılamayacağı ve gönderdiği "
-#~ "iletilerin yok sayılacağı anlamına gelir."
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "Onaylandıktan sonra, bu anahtarı kullanarak %s tarafından gönderilen "
-#~ "gelecek iletiler yok sayılır ve iletilerinizden hiçbiri bu anahtar "
-#~ "kullanılarak okunmaz."
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr ""
-#~ "Onaylandıktan sonra bu anahtar %s tarafından mesaj almak ve göndermek "
-#~ "için kullanılabilir."
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr ""
-#~ "Bu kişi hesaplarına yeni şifreleme anahtarları eklediğinde, otomatik "
-#~ "olarak kabul edilir."
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr ""
-#~ "Hesabınıza yeni şifreleme anahtarları eklediğinizde, bunları otomatik "
-#~ "olarak kabul edin."
diff --git a/plugins/omemo/po/uk.po b/plugins/omemo/po/uk.po
deleted file mode 100644
index 23d2636f..00000000
--- a/plugins/omemo/po/uk.po
+++ /dev/null
@@ -1,321 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 05:39+0000\n"
-"Language-Team: none\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s використовував(ла) ненадійний пристрій. Ви не будете бачити повідомлення "
-"від пристроїв, яким не довіряєте."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Керування пристроями"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s не довіряє цьому пристрою. Це означає, що ви можете не отримувати "
-"повідомлення."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Керування ключем"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"Порівняйте відбиток, літеру за літерою з тим, що відібражається на пристрої "
-"вашого контакту."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Відбитки відрізняються"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Відбитки збігаються"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Скасувати"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Підтвердити"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Підтвердити ключ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Майбутні повідомлення надіслані %s з пристрія, який використовує цей ключ, "
-"будуть відповідно виделені у вікні чату."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Відбитки не збігаються"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Будьласка перевірте, що ви порівнюєте саме той відбиток. Якщо відбитки не "
-"збігаються, обліковий запис %s може бути скомпрометовано, і вам слід "
-"відхилити цей ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Підтвердити відбиток ключа"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"Порівняйте цей відбиток ключа з відбитком, який відображається у пристрої "
-"контакта."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Відхилити ключ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Заблокувати шифрований зв'язок з пристроєм контакта, який викорустовує цей "
-"ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Прийняти ключ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr ""
-"Дозволити шифрований зв'язок з пристроєм контакта, який викорустовує цей "
-"ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Цей ключ зараз є %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "прийнято"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Це означає, що %s тепер може приймати та відсилати шифровані повідомлення."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "перевірено"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "Додатково була підтверджена відповідність ключа на пристрої контакту."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "відхилено"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Це означає, що він не може бути задіян %s щоб дешифрувати ваші повідомлення "
-"і ви не зможете побачити повідомлень зашифрованих ним."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Ви не побачете шифровані повідомлення з пристрія %s, що використовує цей "
-"ключ. І навпаки, цей пристрій більше не зможе розшифрувати ваші повідомлення."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Ви можете обмінюватися шифрованими повідомленнями з пристріем %s, що "
-"використовує цей ключ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Назад"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Налаштувати"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "У цього контакту з'явилися нові пристрої"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Потрібне рішення OMEMO про довіру"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Чи додавали ви новий пристрій до облікового запису %s?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "OMEMO за замовчуванням"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Увімкнути шифрування OMEMO для нових розмов"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Шифрувати до нових пристроїв"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Одразу шифрувати до нових пристроїв цього контакту."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Нові ключи"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Нові ключи шифрування з ваших інших пристроїв будуть прийматися автоматично."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Цей пристрій"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Інший пристрій"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Пристрій"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Прийнятий"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Відхилений"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Перевірений"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Новий пристрій"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Кожен пристрій має власний ключ OMEMO. Повідомлення можуть бути розшифровані "
-"пристроєм, лише якщо вони зашифровані його ключем. Повідомлення шифруються "
-"лише для підтримуваних пристроїв."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Управління ключами OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Шифрування"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d пристрій OMEMO"
-#~ msgstr[1] "%d пристрої OMEMO"
-#~ msgstr[2] "%d пристроїв OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Автоматично прийняти нові ключи"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr ""
-#~ "Нові ключи шифрування від цього контакта будуть прийматися автоматично."
-
-#~ msgid "Own key"
-#~ msgstr "Власний ключ"
-
-#~ msgid "Associated keys"
-#~ msgstr "Асоційовані ключі"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Неактивні ключи"
-
-#~ msgid "Unused"
-#~ msgstr "Невикористаний"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Власний відбиток"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Буде згенеровано при першому з'єднанні"
-
-#~ msgid "Your contact"
-#~ msgstr "Ваш контакт"
diff --git a/plugins/omemo/po/vi.po b/plugins/omemo/po/vi.po
deleted file mode 100644
index 9185dec4..00000000
--- a/plugins/omemo/po/vi.po
+++ /dev/null
@@ -1,314 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-08-02 17:02+0000\n"
-"Language-Team: none\n"
-"Language: vi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr ""
-"%s đang sử dụng một thiết bị chưa được tin tưởng. Bạn sẽ không nhìn thấy tin "
-"nhắn từ các thiệt bị bạn không tin tưởng."
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "Quản lý thiết bị"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr ""
-"%s không tin tưởng thiết bị này. Điều đó có nghĩa là bạn có thể bị thiếu tin "
-"nhắn."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "Quản lý khóa"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr ""
-"So sánh chuỗi fingerprint từng ký tự một với chuỗi được hiển thị trên thiết "
-"bị của liên hệ của bạn."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "Fingerprints khác nhau"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "Fingerprints trùng khớp"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "Huỷ"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "Xác nhận"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "Xác thực khoá"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr ""
-"Tin nhắn được gửi trong tương lai bởi %s từ thiết bị sử dụng khoá này sẽ "
-"được làm nổi bật trong cửa sổ trò chuyện."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "Fingerprints không khớp"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"Vui lòng xác minh rằng bạn đang so sánh đúng chuỗi fingerprint. Nếu "
-"fingerprints không khớp, tài khoản của %s có thể đã bị xâm phạm và bạn nên "
-"cân nhắc từ chối khoá này."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "Xác thực khoá fingerprint"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr ""
-"So sáng chuỗi fingerprint của khoá này với chuỗi fingerprint được hiển thị "
-"trên thiết bị của người liên hệ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "Từ chối khoá"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "Chặn liên lạc được mã hóa với thiết bị của liên hệ sử dụng khóa này."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "Chấp nhận khóa"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "Cho phép giao tiếp mã hóa với thiết bị của liên hệ sử dụng khóa này."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "Khoá này hiện %s."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "đã chấp nhận"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr ""
-"Điều này có nghĩa là nó có thể được sử dụng bởi %s để nhận và gửi tin nhắn "
-"được mã hóa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "đã xác thực"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr ""
-"Ngoài ra, nó đã được xác thực trùng khớp với khóa trên thiết bị của người "
-"liên hệ."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "đã bị từ chối"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr ""
-"Điều này có nghĩa là %s không thể sử dụng nó để giải mã tin nhắn của bạn và "
-"bạn sẽ không thấy tin nhắn được mã hóa bằng nó."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"Bạn sẽ không thấy tin nhắn được mã hóa từ thiết bị của %s sử dụng khóa này. "
-"Ngược lại, thiết bị đó cũng sẽ không thể giải mã tin nhắn của bạn nữa."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr ""
-"Bạn sẽ có thể trao đổi tin nhắn được mã hóa với thiết bị của %s sử dụng khóa "
-"này."
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "Quay lại"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "Quản lý"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "Liên hệ này có thiết bị mới"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "Yêu cầu quyết định ủy thác OMEMO"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "Bạn đã thêm một thiết bị mới cho tài khoản %s à?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "Mặc định mã hoá OMEMO"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "Kích hoạt mã hoá OMEMO cho những cuộc hội thoại mới"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "Mã hoá cho các thiết bị mới"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "Tự động mã hóa sang các thiết bị mới từ liên hệ này."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "Khoá mới"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr ""
-"Khóa mã hóa mới từ các thiết bị khác của bạn sẽ được chấp nhận tự động."
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "Thiết bị này"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "Thiết bị khác"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "Thiết bị"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "Đã chấp nhận"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "Đã từ chối"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "Đã xác thực"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "Thiết bị mới"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-#, fuzzy
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"Mỗi thiết bị có một khoá mã hoá OMEMO riêng. Tin nhắn chỉ có thể được giải "
-"mã bởi một thiết bị nếu chúng được mã hóa bằng khóa của thiết bị đó. Tin "
-"nhắn chỉ được mã hóa bởi các thiết bị được chấp nhận."
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "Quản lý khóa OMEMO"
-
-#~ msgid "Encryption"
-#~ msgstr "Mã hoá"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d thiết bị OMEMO"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "Tự động chấp nhận khóa mới"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "Các khóa mã hóa mới từ liên hệ này sẽ được chấp nhận tự động."
-
-#~ msgid "Own key"
-#~ msgstr "Khoá của bạn"
-
-#~ msgid "Associated keys"
-#~ msgstr "Các khóa đã liên kết"
-
-#~ msgid "Inactive keys"
-#~ msgstr "Các khoá không hoạt động"
-
-#~ msgid "Unused"
-#~ msgstr "Chưa được sử dụng"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "Fingerprint đang sở hữu"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "Sẽ được tạo trong lần kết nối đầu tiên"
diff --git a/plugins/omemo/po/zh_CN.po b/plugins/omemo/po/zh_CN.po
deleted file mode 100644
index ca059eaf..00000000
--- a/plugins/omemo/po/zh_CN.po
+++ /dev/null
@@ -1,349 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 05:39+0000\n"
-"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
-"dino/plugin-omemo/zh_Hans/>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr "%s 正在使用未受信任的设备。您将无法查看来自您未信任的设备的消息。"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "管理设备"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "%s 未信任此设备,这意味着您可能会丢失消息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "管理密钥"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr "请将指纹逐个字符与对方设备上显示的指纹进行比对。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "指纹不匹配"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "指纹匹配"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "取消"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "确认"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "验证密钥"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr "%s 今后从使用此密钥的设备发送的消息将在聊天窗口中相应突出显示。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "指纹不匹配"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"请验证您正在比对的指纹是否正确。如果指纹不匹配,%s 的账号可能已被盗用,您应考"
-"虑拒绝此密钥。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "验证密钥指纹"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "请将此密钥的指纹与对方设备上显示的指纹进行比对。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "拒绝密钥"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "阻止与使用此密钥的对方设备进行加密通信。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "接受密钥"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "允许与使用此密钥的对方设备进行加密通信。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "此密钥当前%s。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "已接受"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "这意味着 %s 可以使用此密钥来接收和发送加密消息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "已验证"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "此外,已验证其与对方设备上的密钥匹配。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "已拒绝"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr "这意味着 %s 无法使用它来解密您的消息,您将无法查看用它加密的消息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"您将无法查看来自 %s 的使用此密钥的设备的加密消息。反之,该设备将无法再解密您"
-"的消息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr "您将能够与 %s 的使用此密钥的设备交换加密消息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "返回"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "管理"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "此联系人有新设备"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "需要 OMEMO 信任决定"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "您是否为账号 %s 添加了新设备?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr "默认使用 OMEMO"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr "为新对话启用 OMEMO 加密"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr "加密新设备"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr "自动加密此联系人的新设备。"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "新密钥"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "将自动接受来自您其他设备的新加密密钥。"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr "此设备"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr "其他设备"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr "设备"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "已接受"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "已拒绝"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "已验证"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr "新设备"
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-"每个设备都有自己的 OMEMO 密钥。设备只能解密对设备密钥加密的消息。消息仅对已接"
-"受的设备进行加密。"
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO 密钥管理"
-
-#~ msgid "Encryption"
-#~ msgstr "加密"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d 个 OMEMO 设备"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "自动接受新密钥"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "将自动接受来自此联系人的新加密密钥。"
-
-#~ msgid "Own key"
-#~ msgstr "自己的密钥"
-
-#~ msgid "Associated keys"
-#~ msgstr "关联的密钥"
-
-#~ msgid "Inactive keys"
-#~ msgstr "非活动密钥"
-
-#~ msgid "Unused"
-#~ msgstr "不再使用"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "自己的指纹"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "将在第一次连接时生成"
-
-#~ msgid "Your contact"
-#~ msgstr "您的联系人"
-
-#~ msgid "Not matching"
-#~ msgstr "不匹配"
-
-#~ msgid "Matching"
-#~ msgstr "匹配"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "一旦确认,未来由%s使用此密钥发送的任何消息将在聊天窗口中相应突出显示。"
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr "在与其关联的联系人通信期间停止接受此密钥。"
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "在与其关联的联系人通信期间开始接受此密钥"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr "这意味着%s不能使用它来接收消息, 它发送的任何消息都将被忽略。"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "一旦确认,由%s使用此密钥发送的任何未来消息都将被忽略,并且使用此密钥将无法"
-#~ "读取任何消息。"
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr "一旦确认,此密钥将被%s用于接收和发送消息。"
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr "当此联系人向其帐户添加新的加密密钥时,自动接受它们。"
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr "当您向帐户添加新的加密密钥时,会自动接受它们。"
-
-#~ msgid "Unknown device (0x%.8x)"
-#~ msgstr "未知设备 (0x%.8x)"
-
-#~ msgid "Other devices"
-#~ msgstr "其他设备"
-
-#~ msgid "- None -"
-#~ msgstr "- 无 -"
-
-#~ msgid "Database error"
-#~ msgstr "数据库错误"
diff --git a/plugins/omemo/po/zh_TW.po b/plugins/omemo/po/zh_TW.po
deleted file mode 100644
index 9048ece6..00000000
--- a/plugins/omemo/po/zh_TW.po
+++ /dev/null
@@ -1,340 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2020-11-24 05:28+0000\n"
-"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
-"dino/plugin-omemo/zh_Hant/>\n"
-"Language: zh_TW\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.4-dev\n"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:168
-#, c-format
-msgid ""
-"%s has been using an untrusted device. You won't see messages from devices "
-"that you do not trust."
-msgstr "%s 使用了未信任的裝置。您不會看見來自未被您信任裝置的訊息。"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:169
-msgid "Manage devices"
-msgstr "管理裝置"
-
-#: plugins/omemo/src/ui/bad_messages_populator.vala:171
-#, c-format
-msgid ""
-"%s does not trust this device. That means, you might be missing messages."
-msgstr "%s 不信任這部裝置。這意味著您可能會遺漏訊息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:34
-msgid "Manage Key"
-msgstr "管理金鑰"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:35
-msgid ""
-"Compare the fingerprint, character by character, with the one shown on your "
-"contact's device."
-msgstr "將指紋與顯示在聯絡人裝置上的指紋逐個字元地進行比較。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:36
-msgid "Fingerprints differ"
-msgstr "指紋不同"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:37
-msgid "Fingerprints match"
-msgstr "指紋吻合"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:38
-#: plugins/omemo/src/ui/manage_key_dialog.vala:81
-#: plugins/omemo/src/ui/manage_key_dialog.vala:87
-msgid "Cancel"
-msgstr "取消"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:39
-msgid "Confirm"
-msgstr "確定"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:59
-msgid "Verify key"
-msgstr "核驗金鑰"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:60
-#, c-format
-msgid ""
-"Future messages sent by %s from the device that uses this key will be "
-"highlighted accordingly in the chat window."
-msgstr "未來由 %s 從使用了此金鑰的裝置所傳送的訊息都將會在對話視窗內加亮顯示。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:70
-msgid "Fingerprints do not match"
-msgstr "指紋不吻合"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:71
-#, c-format
-msgid ""
-"Please verify that you are comparing the correct fingerprint. If "
-"fingerprints do not match, %s's account may be compromised and you should "
-"consider rejecting this key."
-msgstr ""
-"請確定您正在比較正確的指紋。如果指紋不吻合,%s 的帳號可能不安全,同時您應該考"
-"虑拒絕此金鑰。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid "Verify key fingerprint"
-msgstr "核驗金鑰指紋"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:123
-msgid ""
-"Compare this key's fingerprint with the fingerprint displayed on the "
-"contact's device."
-msgstr "將此金鑰的指紋與顯示在聯絡人裝置上的指紋進行比較。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-#: plugins/omemo/src/ui/manage_key_dialog.vala:151
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:288
-msgid "Reject key"
-msgstr "拒絕金鑰"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:125
-msgid ""
-"Block encrypted communication with the contact's device that uses this key."
-msgstr "封鎖與該聯絡人使用此金鑰的裝置之間的加密通訊。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-#: plugins/omemo/src/ui/manage_key_dialog.vala:159
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:283
-msgid "Accept key"
-msgstr "接收金鑰"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:127
-msgid ""
-"Allow encrypted communication with the contact's device that uses this key."
-msgstr "允許與該聯絡人使用此金鑰的裝置之間的加密通訊。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid "This key is currently %s."
-msgstr "此金鑰目前%s。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-msgid "accepted"
-msgstr "已接收"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:131
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-#, c-format
-msgid "This means it can be used by %s to receive and send encrypted messages."
-msgstr "這表示 %s 可以使用它來傳送及收受加密訊息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid "verified"
-msgstr "已核驗"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:136
-msgid ""
-"Additionally it has been verified to match the key on the contact's device."
-msgstr "此外,已經核驗它與聯絡人裝置上的金鑰吻合。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-msgid "rejected"
-msgstr "已拒絕"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:140
-#, c-format
-msgid ""
-"This means it cannot be used by %s to decipher your messages, and you won't "
-"see messages encrypted with it."
-msgstr "這表示 %s 無法使用它來解密您的訊息,同時您不會看到使用它加密的訊息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:152
-#, c-format
-msgid ""
-"You won't see encrypted messages from the device of %s that uses this key. "
-"Conversely, that device won't be able to decipher your messages anymore."
-msgstr ""
-"您不會看到從 %s 使用此金鑰的裝置所傳送的加密訊息。同時,該裝置亦無法再解密您"
-"的訊息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:160
-#, c-format
-msgid ""
-"You will be able to exchange encrypted messages with the device of %s that "
-"uses this key."
-msgstr "您將能夠與 %s 所使用此金鑰的裝置互相傳送加密訊息。"
-
-#: plugins/omemo/src/ui/manage_key_dialog.vala:166
-msgid "Back"
-msgstr "返回"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:73
-msgid "Manage"
-msgstr "管理"
-
-#: plugins/omemo/src/ui/device_notification_populator.vala:80
-msgid "This contact has new devices"
-msgstr "此連絡人有新的裝置"
-
-#: plugins/omemo/src/ui/own_notifications.vala:29
-msgid "OMEMO trust decision required"
-msgstr "需要 OMEMO 信任決策"
-
-#: plugins/omemo/src/ui/own_notifications.vala:31
-#, c-format
-msgid "Did you add a new device for account %s?"
-msgstr "您是否有爲帳號 %s 增加新裝置?"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:52
-msgid "OMEMO by default"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:53
-msgid "Enable OMEMO encryption for new conversations"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:54
-msgid "Encrypt to new devices"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:55
-msgid "Automatically encrypt to new devices from this contact."
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:56
-msgid "New keys"
-msgstr "新金鑰"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:100
-msgid ""
-"New encryption keys from your other devices will be accepted automatically."
-msgstr "來自您其它裝置的新加密金鑰將會被自動接收。"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:160
-msgid "This device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Other device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:220
-msgid "Device"
-msgstr ""
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:222
-msgid "Accepted"
-msgstr "已接收"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:225
-msgid "Rejected"
-msgstr "已拒絕"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:228
-msgid "Verified"
-msgstr "已核驗"
-
-#: plugins/omemo/src/ui/encryption_preferences_entry.vala:277
-msgid "New device"
-msgstr ""
-
-#: plugins/omemo/data/encryption_preferences_entry.ui:8
-msgid ""
-"Each device has its own OMEMO key. Messages can only be decrypted by a "
-"device if they are encrypted to its key. Messages are only encrypted to "
-"accepted devices."
-msgstr ""
-
-#~ msgid "OMEMO Key Management"
-#~ msgstr "OMEMO 金鑰管理"
-
-#~ msgid "Encryption"
-#~ msgstr "加密"
-
-#, c-format
-#~ msgid "%d OMEMO device"
-#~ msgid_plural "%d OMEMO devices"
-#~ msgstr[0] "%d 個 OMEMO 裝置"
-
-#~ msgid "Automatically accept new keys"
-#~ msgstr "自動接收新金鑰"
-
-#~ msgid ""
-#~ "New encryption keys from this contact will be accepted automatically."
-#~ msgstr "新的來自此聯絡人的加密金鑰將會被自動接收。"
-
-#~ msgid "Own key"
-#~ msgstr "本裝置金鑰"
-
-#~ msgid "Associated keys"
-#~ msgstr "其它裝置上的金鑰"
-
-#~ msgid "Inactive keys"
-#~ msgstr "長時間未用過的金鑰"
-
-#~ msgid "Unused"
-#~ msgstr "不再使用"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "本裝置指紋"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "將會在第一次連線時產生"
-
-#~ msgid "Your contact"
-#~ msgstr "您的聯絡人"
-
-#~ msgid "Not matching"
-#~ msgstr "不吻合"
-
-#~ msgid "Matching"
-#~ msgstr "吻合"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "highlighted accordingly in the chat window."
-#~ msgstr ""
-#~ "一經確定,所有未來由 %s 使用此金鑰傳送的訊息都會在對話視窗內被加亮。"
-
-#~ msgid ""
-#~ "Stop accepting this key during communication with its associated contact."
-#~ msgstr "在與其連結的聯絡人通訊期間停止接收此金鑰。"
-
-#~ msgid ""
-#~ "Start accepting this key during communication with its associated contact"
-#~ msgstr "在與其連結的聯絡人通訊期間開始接收此金鑰"
-
-#~ msgid ""
-#~ "This means it cannot be used by %s to receive messages, and any messages "
-#~ "sent by it will be ignored."
-#~ msgstr "這代表 %s 不能使用它來收受訊息,並且經它傳送的所有訊息都將被忽略。"
-
-#~ msgid ""
-#~ "Once confirmed, any future messages sent by %s using this key will be "
-#~ "ignored and none of your messages will be readable using this key."
-#~ msgstr ""
-#~ "一經確定,所有未來由 %s 使用此金鑰傳送的訊息都會被忽略,並且無法使用此金鑰"
-#~ "讀取您的任何訊息。"
-
-#~ msgid ""
-#~ "Once confirmed this key will be usable by %s to receive and send messages."
-#~ msgstr "一經確定,此金鑰將會被 %s 用於收受及傳送訊息。"
-
-#~ msgid ""
-#~ "When this contact adds new encryption keys to their account, "
-#~ "automatically accept them."
-#~ msgstr "當此聯絡人新增加密金鑰到其帳號時,自動接收它們。"
-
-#~ msgid ""
-#~ "When you add new encryption keys to your account, automatically accept "
-#~ "them."
-#~ msgstr "當您新增加密金鑰到您的帳號時,自動接收它們。"
diff --git a/plugins/omemo/src/logic/pre_key_store.vala b/plugins/omemo/src/logic/pre_key_store.vala
deleted file mode 100644
index c15acc84..00000000
--- a/plugins/omemo/src/logic/pre_key_store.vala
+++ /dev/null
@@ -1,45 +0,0 @@
-using Omemo;
-using Qlite;
-
-namespace Dino.Plugins.Omemo {
-
-private class BackedPreKeyStore : SimplePreKeyStore {
- private Database db;
- private int identity_id;
-
- public BackedPreKeyStore(Database db, int identity_id) {
- this.db = db;
- this.identity_id = identity_id;
- init();
- }
-
- private void init() {
- try {
- foreach (Row row in db.pre_key.select().with(db.pre_key.identity_id, "=", identity_id)) {
- store_pre_key(row[db.pre_key.pre_key_id], Base64.decode(row[db.pre_key.record_base64]));
- }
- } catch (Error e) {
- warning("Error while initializing pre key store: %s", e.message);
- }
-
- pre_key_stored.connect(on_pre_key_stored);
- pre_key_deleted.connect(on_pre_key_deleted);
- }
-
- public void on_pre_key_stored(PreKeyStore.Key key) {
- db.pre_key.upsert()
- .value(db.pre_key.identity_id, identity_id, true)
- .value(db.pre_key.pre_key_id, (int) key.key_id, true)
- .value(db.pre_key.record_base64, Base64.encode(key.record))
- .perform();
- }
-
- public void on_pre_key_deleted(PreKeyStore.Key key) {
- db.pre_key.delete()
- .with(db.pre_key.identity_id, "=", identity_id)
- .with(db.pre_key.pre_key_id, "=", (int) key.key_id)
- .perform();
- }
-}
-
-}
diff --git a/plugins/omemo/src/logic/session_store.vala b/plugins/omemo/src/logic/session_store.vala
deleted file mode 100644
index ea5738fd..00000000
--- a/plugins/omemo/src/logic/session_store.vala
+++ /dev/null
@@ -1,49 +0,0 @@
-using Omemo;
-using Qlite;
-
-namespace Dino.Plugins.Omemo {
-
-private class BackedSessionStore : SimpleSessionStore {
- private Database db;
- private int identity_id;
-
- public BackedSessionStore(Database db, int identity_id) {
- this.db = db;
- this.identity_id = identity_id;
- init();
- }
-
- private void init() {
- try {
- foreach (Row row in db.session.select().with(db.session.identity_id, "=", identity_id)) {
- Address addr = new Address(row[db.session.address_name], row[db.session.device_id]);
- store_session(addr, Base64.decode(row[db.session.record_base64]));
- addr.device_id = 0;
- }
- } catch (Error e) {
- print("Error while initializing session store: %s", e.message);
- }
-
- session_stored.connect(on_session_stored);
- session_removed.connect(on_session_deleted);
- }
-
- public void on_session_stored(SessionStore.Session session) {
- db.session.upsert()
- .value(db.session.identity_id, identity_id, true)
- .value(db.session.address_name, session.name, true)
- .value(db.session.device_id, session.device_id, true)
- .value(db.session.record_base64, Base64.encode(session.record))
- .perform();
- }
-
- public void on_session_deleted(SessionStore.Session session) {
- db.session.delete()
- .with(db.session.identity_id, "=", identity_id)
- .with(db.session.address_name, "=", session.name)
- .with(db.session.device_id, "=", session.device_id)
- .perform();
- }
-}
-
-}
diff --git a/plugins/omemo/src/logic/signed_pre_key_store.vala b/plugins/omemo/src/logic/signed_pre_key_store.vala
deleted file mode 100644
index d73cbe71..00000000
--- a/plugins/omemo/src/logic/signed_pre_key_store.vala
+++ /dev/null
@@ -1,45 +0,0 @@
-using Qlite;
-using Omemo;
-
-namespace Dino.Plugins.Omemo {
-
-private class BackedSignedPreKeyStore : SimpleSignedPreKeyStore {
- private Database db;
- private int identity_id;
-
- public BackedSignedPreKeyStore(Database db, int identity_id) {
- this.db = db;
- this.identity_id = identity_id;
- init();
- }
-
- private void init() {
- try {
- foreach (Row row in db.signed_pre_key.select().with(db.signed_pre_key.identity_id, "=", identity_id)) {
- store_signed_pre_key(row[db.signed_pre_key.signed_pre_key_id], Base64.decode(row[db.signed_pre_key.record_base64]));
- }
- } catch (Error e) {
- print("Error while initializing signed pre key store: %s", e.message);
- }
-
- signed_pre_key_stored.connect(on_signed_pre_key_stored);
- signed_pre_key_deleted.connect(on_signed_pre_key_deleted);
- }
-
- public void on_signed_pre_key_stored(SignedPreKeyStore.Key key) {
- db.signed_pre_key.upsert()
- .value(db.signed_pre_key.identity_id, identity_id, true)
- .value(db.signed_pre_key.signed_pre_key_id, (int) key.key_id, true)
- .value(db.signed_pre_key.record_base64, Base64.encode(key.record))
- .perform();
- }
-
- public void on_signed_pre_key_deleted(SignedPreKeyStore.Key key) {
- db.signed_pre_key.delete()
- .with(db.signed_pre_key.identity_id, "=", identity_id)
- .with(db.signed_pre_key.signed_pre_key_id, "=", (int) key.key_id)
- .perform();
- }
-}
-
-}
diff --git a/plugins/omemo/src/register_plugin.vala b/plugins/omemo/src/register_plugin.vala
deleted file mode 100644
index 0d0e1c3e..00000000
--- a/plugins/omemo/src/register_plugin.vala
+++ /dev/null
@@ -1,3 +0,0 @@
-public Type register_plugin(Module module) {
- return typeof (Dino.Plugins.Omemo.Plugin);
-}
diff --git a/plugins/omemo/tests/native/common.vala b/plugins/omemo/tests/native/common.vala
deleted file mode 100644
index af0f7250..00000000
--- a/plugins/omemo/tests/native/common.vala
+++ /dev/null
@@ -1,92 +0,0 @@
-namespace Omemo.Test {
-
-int main(string[] args) {
- GLib.Test.init(ref args);
- GLib.Test.set_nonfatal_assertions();
- TestSuite.get_root().add_suite(new Curve25519().get_suite());
- TestSuite.get_root().add_suite(new SessionBuilderTest().get_suite());
- TestSuite.get_root().add_suite(new HKDF().get_suite());
- return GLib.Test.run();
-}
-
-Store setup_test_store_context(Context global_context) {
- Store store = global_context.create_store();
- try {
- store.identity_key_store.local_registration_id = (Random.next_int() % 16380) + 1;
-
- ECKeyPair key_pair = global_context.generate_key_pair();
- store.identity_key_store.identity_key_private = new Bytes(key_pair.private.serialize());
- store.identity_key_store.identity_key_public = new Bytes(key_pair.public.serialize());
- } catch (Error e) {
- fail_if_reached();
- }
- return store;
-}
-
-ECPublicKey? create_test_ec_public_key(Context context) {
- try {
- return context.generate_key_pair().public;
- } catch (Error e) {
- fail_if_reached();
- return null;
- }
-}
-
-bool fail_if(bool exp, string? reason = null) {
- if (exp) {
- if (reason != null) GLib.Test.message(reason);
- GLib.Test.fail();
- return true;
- }
- return false;
-}
-
-void fail_if_reached(string? reason = null) {
- fail_if(true, reason);
-}
-
-delegate void ErrorFunc() throws Error;
-
-void fail_if_not_error_code(ErrorFunc func, int expectedCode, string? reason = null) {
- try {
- func();
- fail_if_reached(@"$(reason + ": " ?? "")no error thrown");
- } catch (Error e) {
- fail_if_not_eq_int(e.code, expectedCode, @"$(reason + ": " ?? "")caught unexpected error");
- }
-}
-
-bool fail_if_not(bool exp, string? reason = null) {
- return fail_if(!exp, reason);
-}
-
-bool fail_if_eq_int(int left, int right, string? reason = null) {
- return fail_if(left == right, @"$(reason + ": " ?? "")$left == $right");
-}
-
-bool fail_if_not_eq_int(int left, int right, string? reason = null) {
- return fail_if_not(left == right, @"$(reason + ": " ?? "")$left != $right");
-}
-
-bool fail_if_not_eq_str(string left, string right, string? reason = null) {
- return fail_if_not(left == right, @"$(reason + ": " ?? "")$left != $right");
-}
-
-bool fail_if_not_eq_uint8_arr(uint8[] left, uint8[] right, string? reason = null) {
- if (fail_if_not_eq_int(left.length, right.length, @"$(reason + ": " ?? "")array length not equal")) return true;
- return fail_if_not_eq_str(Base64.encode(left), Base64.encode(right), reason);
-}
-
-bool fail_if_not_zero_int(int zero, string? reason = null) {
- return fail_if_not_eq_int(zero, 0, reason);
-}
-
-bool fail_if_zero_int(int zero, string? reason = null) {
- return fail_if_eq_int(zero, 0, reason);
-}
-
-bool fail_if_null(void* what, string? reason = null) {
- return fail_if(what == null || (size_t)what == 0, reason);
-}
-
-}
diff --git a/plugins/omemo/tests/native/testcase.vala b/plugins/omemo/tests/native/testcase.vala
deleted file mode 100644
index 59fcf193..00000000
--- a/plugins/omemo/tests/native/testcase.vala
+++ /dev/null
@@ -1,80 +0,0 @@
-/* testcase.vala
- *
- * Copyright (C) 2009 Julien Peeters
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Author:
- * Julien Peeters <contact@julienpeeters.fr>
- */
-
-public abstract class Gee.TestCase : Object {
-
- private GLib.TestSuite suite;
- private Adaptor[] adaptors = new Adaptor[0];
-
- public delegate void TestMethod ();
-
- protected TestCase (string name) {
- this.suite = new GLib.TestSuite (name);
- }
-
- public void add_test (string name, owned TestMethod test) {
- var adaptor = new Adaptor (name, (owned)test, this);
- this.adaptors += adaptor;
-
- this.suite.add (new GLib.TestCase (adaptor.name,
- adaptor.set_up,
- adaptor.run,
- adaptor.tear_down ));
- }
-
- public virtual void set_up () {
- }
-
- public virtual void tear_down () {
- }
-
- public GLib.TestSuite get_suite () {
- return (owned) this.suite;
- }
-
- private class Adaptor {
- [CCode (notify = false)]
- public string name { get; private set; }
- private TestMethod test;
- private TestCase test_case;
-
- public Adaptor (string name,
- owned TestMethod test,
- TestCase test_case) {
- this.name = name;
- this.test = (owned)test;
- this.test_case = test_case;
- }
-
- public void set_up (void* fixture) {
- this.test_case.set_up ();
- }
-
- public void run (void* fixture) {
- this.test ();
- }
-
- public void tear_down (void* fixture) {
- this.test_case.tear_down ();
- }
- }
-}
diff --git a/plugins/openpgp/data/gresource.xml b/plugins/openpgp/data/gresource.xml
deleted file mode 100644
index 75f25e67..00000000
--- a/plugins/openpgp/data/gresource.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
-<!-- <gresource prefix="/im/dino/Dino/openpgp">-->
-<!-- </gresource>-->
-</gresources>
diff --git a/plugins/openpgp/meson.build b/plugins/openpgp/meson.build
deleted file mode 100644
index 5d6635e3..00000000
--- a/plugins/openpgp/meson.build
+++ /dev/null
@@ -1,47 +0,0 @@
-subdir('po')
-dependencies = [
- dep_libadwaita,
- dep_dino,
- dep_gee,
- dep_glib,
- dep_gmodule,
- dep_gpgme,
- dep_gtk4,
- dep_qlite,
- dep_xmpp_vala,
-]
-sources = files(
- 'src/contact_details_provider.vala',
- 'src/database.vala',
- 'src/encryption_list_entry.vala',
- 'src/encryption_preferences_entry.vala',
- 'src/file_transfer/file_decryptor.vala',
- 'src/file_transfer/file_encryptor.vala',
- 'src/gpgme_fix.c',
- 'src/gpgme_helper.vala',
- 'src/manager.vala',
- 'src/plugin.vala',
- 'src/register_plugin.vala',
- 'src/stream_module.vala',
- 'src/util.vala',
- 'vapi/gpg-error.vapi',
-)
-sources += gnome.compile_resources(
- 'resources',
- 'data/gresource.xml',
- source_dir: 'data',
-)
-c_args = [
- '-DG_LOG_DOMAIN="OpenPGP"',
- '-DGETTEXT_PACKAGE="dino-openpgp"',
- '-DLOCALE_INSTALL_DIR="@0@"'.format(get_option('prefix') / get_option('localedir')),
-]
-vala_args = [
- '--vapidir', meson.current_source_dir() / 'vapi',
-]
-if dep_libadwaita.version() == 'unknown' or dep_libadwaita.version().version_compare('>=1.4')
- vala_args += ['-D', 'Adw_1_4']
-endif
-lib_openpgp = shared_library('openpgp', sources, name_prefix: '', c_args: c_args, vala_args: vala_args, include_directories: include_directories('src'), dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
-dep_openpgp = declare_dependency(link_with: lib_openpgp, include_directories: include_directories('.'))
-summary('End-to-end encryption using PGP (openpgp)', dep_openpgp.found(), bool_yn: true, section: 'Plugins')
diff --git a/plugins/openpgp/po/LINGUAS b/plugins/openpgp/po/LINGUAS
deleted file mode 100644
index 990c81d5..00000000
--- a/plugins/openpgp/po/LINGUAS
+++ /dev/null
@@ -1,48 +0,0 @@
-ar
-ca
-cs
-da
-de
-el
-en
-eo
-es
-et
-eu
-fa
-fi
-fr
-fur
-gl
-hi
-hu
-ia
-id
-ie
-is
-isv
-it
-ja
-ka
-kab
-ko
-lb
-lt
-lv
-nb
-nl
-oc
-pl
-pt
-pt_BR
-ro
-ru
-sq
-sv
-ta
-th
-tr
-uk
-vi
-zh_CN
-zh_TW
diff --git a/plugins/openpgp/po/ar.po b/plugins/openpgp/po/ar.po
deleted file mode 100644
index f1632706..00000000
--- a/plugins/openpgp/po/ar.po
+++ /dev/null
@@ -1,62 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-05-13 14:26+0000\n"
-"Language-Team: Arabic <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/ar/>\n"
-"Language: ar\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
-"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 5.12-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "استعلام GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "أعلن المفتاح"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "خطأ في GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "لا مفتاح متوفر. ولِّد واحدًا!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "مُعَطَّل"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "المفتاح ليس في سلسلة المفاتيح"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "البصمة"
-
-#~ msgid "Encryption"
-#~ msgstr "التعمية"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "نشر المفاتيح معطل"
-
-#~ msgid "Select key"
-#~ msgstr "اختيار مفتاح"
-
-#~ msgid "Loading…"
-#~ msgstr "جارٍ التحميل…"
diff --git a/plugins/openpgp/po/ca.po b/plugins/openpgp/po/ca.po
deleted file mode 100644
index 1774d186..00000000
--- a/plugins/openpgp/po/ca.po
+++ /dev/null
@@ -1,59 +0,0 @@
-# Catalan translation for dino-openpgp.
-# This file is distributed under the same license as the dino package.
-# Jordi Mallach <jordi@mallach.net>, 2018.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-openpgp 20180123\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-08-22 20:14+0000\n"
-"Language-Team: Catalan <ca@dodds.net>\n"
-"Language: ca\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "S'està consultant al GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "S'ha produït un error al GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "No hi ha claus disponibles. Genereu una!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "La clau no està al clauer"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Empremta digital"
-
-#~ msgid "Encryption"
-#~ msgstr "Xifratge"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publicació de claus inhabilitada"
-
-#~ msgid "Select key"
-#~ msgstr "Seleccioneu una clau"
-
-#~ msgid "Loading…"
-#~ msgstr "S'està carregant…"
diff --git a/plugins/openpgp/po/cs.po b/plugins/openpgp/po/cs.po
deleted file mode 100644
index ef105c70..00000000
--- a/plugins/openpgp/po/cs.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-18 01:44+0000\n"
-"Language-Team: none\n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Dotazování GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Oznámit klíč"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Chyba v GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nejsou k dispozici žádné klíče. Vygenerujte jeden!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Zakázáno"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Klíč není v klíčence"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Otisk"
-
-#~ msgid "Encryption"
-#~ msgstr "Šifrování"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publikování klíčů zakázáno"
-
-#~ msgid "Select key"
-#~ msgstr "Vybrat klíč"
-
-#~ msgid "Loading…"
-#~ msgstr "Načítání…"
diff --git a/plugins/openpgp/po/da.po b/plugins/openpgp/po/da.po
deleted file mode 100644
index 73393aad..00000000
--- a/plugins/openpgp/po/da.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-01-06 01:07+0000\n"
-"Language-Team: none\n"
-"Language: da\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.4-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Forespørg GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Fejl i GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Ingen nøgler til rådighed. Generer en!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Nøglen er ikke i nøglering"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Kryptering"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Nøglepublisering deaktiveret"
-
-#~ msgid "Select key"
-#~ msgstr "Vælg nøgle"
-
-#~ msgid "Loading…"
-#~ msgstr "Henter…"
diff --git a/plugins/openpgp/po/de.po b/plugins/openpgp/po/de.po
deleted file mode 100644
index 596ca9fc..00000000
--- a/plugins/openpgp/po/de.po
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-openpgp-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: German <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/de/>\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "GnuPG wird abgefragt"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Schlüssel veröffentlichen"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Fehler in GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Keine Schlüssel vorhanden. Erzeuge einen!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Deaktiviert"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Schlüssel nicht im Schlüsselbund"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Fingerabdruck"
-
-#~ msgid "Encryption"
-#~ msgstr "Verschlüsselung"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Schlüsselveröffentlichung deaktiviert"
-
-#~ msgid "Select key"
-#~ msgstr "Wähle einen Schlüssel"
-
-#~ msgid "Loading…"
-#~ msgstr "Lade…"
-
-#~ msgid "OpenPGP"
-#~ msgstr "OpenPGP"
diff --git a/plugins/openpgp/po/dino-openpgp.pot b/plugins/openpgp/po/dino-openpgp.pot
deleted file mode 100644
index def86832..00000000
--- a/plugins/openpgp/po/dino-openpgp.pot
+++ /dev/null
@@ -1,48 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
diff --git a/plugins/openpgp/po/el.po b/plugins/openpgp/po/el.po
deleted file mode 100644
index 7dcd3177..00000000
--- a/plugins/openpgp/po/el.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2022-02-04 09:55+0000\n"
-"Language-Team: none\n"
-"Language: el\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Αναζήτηση στο GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Σφάλμα στο GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Δεν υπάρχουν διαθέσιμα κλειδιά. Δημιουργήστε ένα!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Το κλειδί δεν είναι στο keychain"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Κρυπτογράφηση"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Η δημοσίευση του κλειδιού είναι απενεργοποιημένη"
-
-#~ msgid "Select key"
-#~ msgstr "Επιλέξτε κλειδί"
-
-#~ msgid "Loading…"
-#~ msgstr "Φόρτωση…"
diff --git a/plugins/openpgp/po/en.po b/plugins/openpgp/po/en.po
deleted file mode 100644
index aceb2946..00000000
--- a/plugins/openpgp/po/en.po
+++ /dev/null
@@ -1,39 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-openpgp-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
diff --git a/plugins/openpgp/po/eo.po b/plugins/openpgp/po/eo.po
deleted file mode 100644
index aa9f9116..00000000
--- a/plugins/openpgp/po/eo.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-24 17:09+0000\n"
-"Language-Team: none\n"
-"Language: eo\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Pridemandante GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Anonca ŝlosilo"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Eraro pri GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Neniu ŝlosilo estas havebla. Faru ŝlosilon!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Malŝaltita"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Ŝlosilo ne en ŝlosilaro"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Fingropremo"
-
-#, fuzzy
-#~ msgid "Encryption"
-#~ msgstr "Kodo"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Eldonado de ŝlosilo estas malŝaltita"
-
-#~ msgid "Select key"
-#~ msgstr "Elekti ŝlosilon"
-
-#~ msgid "Loading…"
-#~ msgstr "Ŝargante…"
diff --git a/plugins/openpgp/po/es.po b/plugins/openpgp/po/es.po
deleted file mode 100644
index 7c569f38..00000000
--- a/plugins/openpgp/po/es.po
+++ /dev/null
@@ -1,64 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-05-11 19:01+0000\n"
-"Language-Team: Spanish <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/es/>\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"<jaime.marquinez.ferrandiz@fastmail.net>\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.12-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Consultando GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-#, fuzzy
-msgid "Announce key"
-msgstr "Anunciar la clave"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Error en GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "No hay claves disponibles. ¡Genera una!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Desactivado"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "La clave no está en la cadena de claves"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-#, fuzzy
-msgid "Fingerprint"
-msgstr "Huella"
-
-#~ msgid "Encryption"
-#~ msgstr "Encriptación"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publicación de claves desactivada"
-
-#~ msgid "Select key"
-#~ msgstr "Seleccionar clave"
-
-#~ msgid "Loading…"
-#~ msgstr "Cargando…"
diff --git a/plugins/openpgp/po/et.po b/plugins/openpgp/po/et.po
deleted file mode 100644
index 51399381..00000000
--- a/plugins/openpgp/po/et.po
+++ /dev/null
@@ -1,51 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: none\n"
-"Language: et\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Pärime GnuPG andmekogust"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Teata võtmest"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG viga"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Võtmeid ei leidu. Palun loo!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Pole kasutusel"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Võtit ei leidu võtmerõngas"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Sõrmejälg"
-
-#~ msgid "Encryption"
-#~ msgstr "Krüptimine"
diff --git a/plugins/openpgp/po/eu.po b/plugins/openpgp/po/eu.po
deleted file mode 100644
index 1e6d382f..00000000
--- a/plugins/openpgp/po/eu.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2018-04-03 15:27+0000\n"
-"Language-Team: Basque <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/eu/>\n"
-"Language: eu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.20-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "GnuPGri galdetzen"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG akatsa"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Ez dago gakorik eskuragarri. Sortu ezazu bat!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Gakorik ez giltzatakoan"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Enkriptazioa"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Gakoa argitaratzea ezgaituta"
-
-#~ msgid "Select key"
-#~ msgstr "Gakoa hautatu"
-
-#~ msgid "Loading…"
-#~ msgstr "Kargatzen…"
diff --git a/plugins/openpgp/po/fa.po b/plugins/openpgp/po/fa.po
deleted file mode 100644
index cffdbfed..00000000
--- a/plugins/openpgp/po/fa.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-12-05 20:00+0000\n"
-"Language-Team: none\n"
-"Language: fa\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.15-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "پرس‌و‌جوی گنوپی‌جی"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "کلید اعلام"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "خطا در گنوپی‌جی"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "هیچ کلیدی در دسترس نیست. یکی تولید کنید!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "غیرفعال شده"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "کلید در دسته‌کلید نیست"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "شناسه"
-
-#~ msgid "Encryption"
-#~ msgstr "رمزگذاری"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "انشار کلید غیرفعال‌شده"
-
-#~ msgid "Select key"
-#~ msgstr "انتخاب کلید"
-
-#~ msgid "Loading…"
-#~ msgstr "در حال بارگذاری…"
diff --git a/plugins/openpgp/po/fi.po b/plugins/openpgp/po/fi.po
deleted file mode 100644
index 5543ce7a..00000000
--- a/plugins/openpgp/po/fi.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-07-19 04:27+0000\n"
-"Language-Team: none\n"
-"Language: fi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Kysellään GnuPG:tä"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Ilmoita avain"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Virhe GnuPG:ssä"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Ei avaimia saatavilla. Luo avain!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Pois käytöstä"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Avain ei ole avainnipussa"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Sormenjälki"
-
-#~ msgid "Encryption"
-#~ msgstr "Salaus"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Avaimen julkaiseminen pois käytöstä"
-
-#~ msgid "Select key"
-#~ msgstr "Valitse avain"
-
-#~ msgid "Loading…"
-#~ msgstr "Ladataan…"
diff --git a/plugins/openpgp/po/fr.po b/plugins/openpgp/po/fr.po
deleted file mode 100644
index 51cc8d3a..00000000
--- a/plugins/openpgp/po/fr.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-13 20:01+0000\n"
-"Language-Team: French <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/fr/>\n"
-"Language: fr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Interrogation de GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Annoncer la clé"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Erreur dans GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Aucune clé n’est disponible. Générez-en une !"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Désactivé"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "La clé n’est pas dans le trousseau"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Empreinte"
-
-#~ msgid "Encryption"
-#~ msgstr "Chiffrement"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "La publication des clés est désactivée"
-
-#~ msgid "Select key"
-#~ msgstr "Choix d’une clé"
-
-#~ msgid "Loading…"
-#~ msgstr "Chargement…"
diff --git a/plugins/openpgp/po/fur.po b/plugins/openpgp/po/fur.po
deleted file mode 100644
index 11d1a678..00000000
--- a/plugins/openpgp/po/fur.po
+++ /dev/null
@@ -1,48 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-24 17:09+0000\n"
-"Language-Team: none\n"
-"Language: fur\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Cirint su GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Clâf par scomencià"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "No si cumbine cun GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "No son clâs diomadone. Fascint une!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Disabilitât"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Ma diopoi, la clâf no è tal parteclâs"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Improntes digitâl"
diff --git a/plugins/openpgp/po/gl.po b/plugins/openpgp/po/gl.po
deleted file mode 100644
index 385a8e32..00000000
--- a/plugins/openpgp/po/gl.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: Galician <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/gl/>\n"
-"Language: gl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Consultando a GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Publicar clave"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Fallo en GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Sen chaves dispoñibles. Crear unha!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Desactivado"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "A chave non está no anel de chaves"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Impresión dixital"
-
-#~ msgid "Encryption"
-#~ msgstr "Cifraxe"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Desactivada a publicación de chaves"
-
-#~ msgid "Select key"
-#~ msgstr "Escolle chave"
-
-#~ msgid "Loading…"
-#~ msgstr "Cargando…"
diff --git a/plugins/openpgp/po/hi.po b/plugins/openpgp/po/hi.po
deleted file mode 100644
index 198eddc3..00000000
--- a/plugins/openpgp/po/hi.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Language-Team: none\n"
-"Language: hi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
diff --git a/plugins/openpgp/po/hu.po b/plugins/openpgp/po/hu.po
deleted file mode 100644
index bb7cf47b..00000000
--- a/plugins/openpgp/po/hu.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: Hungarian <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/hu/>\n"
-"Language: hu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "A GnuPG lekérése"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Kulcs bejelentése"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Hiba a GnuPG-ben"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nincsenek elérhető kulcsok. Állítson elő egyet!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Letiltva"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "A kulcs nincs a kulcstartóban"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Ujjlenyomat"
-
-#~ msgid "Encryption"
-#~ msgstr "Titkosítás"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Kulcsközzététel letiltva"
-
-#~ msgid "Select key"
-#~ msgstr "Kulcs kiválasztása"
-
-#~ msgid "Loading…"
-#~ msgstr "Betöltés…"
diff --git a/plugins/openpgp/po/ia.po b/plugins/openpgp/po/ia.po
deleted file mode 100644
index fe550095..00000000
--- a/plugins/openpgp/po/ia.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Language-Team: none\n"
-"Language: ia\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
diff --git a/plugins/openpgp/po/id.po b/plugins/openpgp/po/id.po
deleted file mode 100644
index 7043cec5..00000000
--- a/plugins/openpgp/po/id.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-28 11:09+0000\n"
-"Language-Team: none\n"
-"Language: id\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.16.1-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Menanyakan GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Umumkan kunci"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Kesalahan pada GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Tidak ada kunci tersedia. Buat satu!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Dinonaktifkan"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Kunci tidak ada di rantai kunci"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Sidik jari"
-
-#~ msgid "Encryption"
-#~ msgstr "Enkripsi"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Penerbitan kunci dinonaktifkan"
-
-#~ msgid "Select key"
-#~ msgstr "Pilih kunci"
-
-#~ msgid "Loading…"
-#~ msgstr "Memuat…"
diff --git a/plugins/openpgp/po/ie.po b/plugins/openpgp/po/ie.po
deleted file mode 100644
index c696fc3c..00000000
--- a/plugins/openpgp/po/ie.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2020-02-04 16:50+0000\n"
-"Language-Team: none\n"
-"Language: ie\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Contactante GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Errore de GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Null claves disponibil. Crea ún!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Clave ne es in li porta-clave"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Ciffration"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publication de claves depermisset"
-
-#~ msgid "Select key"
-#~ msgstr "Selecter un clave"
-
-#~ msgid "Loading…"
-#~ msgstr "Cargante…"
diff --git a/plugins/openpgp/po/is.po b/plugins/openpgp/po/is.po
deleted file mode 100644
index 0fa140aa..00000000
--- a/plugins/openpgp/po/is.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2022-10-17 00:56+0000\n"
-"Language-Team: none\n"
-"Language: is\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n % 10 != 1 || n % 100 == 11;\n"
-"X-Generator: Weblate 4.15-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Að spyrja GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Villa hjá GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Engir lyklar í boði. Búðu einn til!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Lykill ekki í lyklakippu"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Dulritun"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Deiling lykla óvirkt"
-
-#~ msgid "Select key"
-#~ msgstr "Veldu lykil"
-
-#~ msgid "Loading…"
-#~ msgstr "Hleður…"
diff --git a/plugins/openpgp/po/isv.po b/plugins/openpgp/po/isv.po
deleted file mode 100644
index 532f2121..00000000
--- a/plugins/openpgp/po/isv.po
+++ /dev/null
@@ -1,48 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-10-27 13:02+0000\n"
-"Language-Team: none\n"
-"Language: isv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.14.1-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Poprošenje GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Zadany ključ"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Grěška v GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nema dostupnyh ključev. Sgenerujte jedin!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Izključeno"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Nema ključa v svezku ključev"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Odtisk/odpečatok prsta"
diff --git a/plugins/openpgp/po/it.po b/plugins/openpgp/po/it.po
deleted file mode 100644
index 69ed9999..00000000
--- a/plugins/openpgp/po/it.po
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-openpgp-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2018-01-24 12:18+0000\n"
-"Language-Team: Italian <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/it/>\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.19-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Interrogando GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Errore in GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nessuna chiave disponibile. Generane una!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "La chiave non è nel portachiavi"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Crittografia"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Pubblicazione della chiave disabilitata"
-
-#~ msgid "Select key"
-#~ msgstr "Seleziona una chiave"
-
-#~ msgid "Loading…"
-#~ msgstr "Caricamento…"
-
-#~ msgid "OpenPGP"
-#~ msgstr "OpenPGP"
diff --git a/plugins/openpgp/po/ja.po b/plugins/openpgp/po/ja.po
deleted file mode 100644
index da8acfef..00000000
--- a/plugins/openpgp/po/ja.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-09-15 20:09+0000\n"
-"Language-Team: none\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"<shirahara@users.noreply.hosted.weblate.org>\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.8-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "GnuPG に問い合わせています"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG でのエラー"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "キーがありません。生成しましょう!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "無効"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "キーはキーチェーンにありません"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "暗号化"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "キーの発行は無効"
-
-#~ msgid "Select key"
-#~ msgstr "キーを選択"
-
-#~ msgid "Loading…"
-#~ msgstr "読み込んでいます…"
diff --git a/plugins/openpgp/po/ka.po b/plugins/openpgp/po/ka.po
deleted file mode 100644
index d952f1ec..00000000
--- a/plugins/openpgp/po/ka.po
+++ /dev/null
@@ -1,48 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-02 10:01+0000\n"
-"Language-Team: none\n"
-"Language: ka\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.16-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "GnuPG-ის გამოთხოვა"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "გასაღების გამოცხადება"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "შეცდომა GnuPG-ში"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "გასაღებები ხელმისაწვდომი არაა. დაგენერირეთ ერთი მაინც!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "გათიშულია"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "გასაღები ბრელოკში არაა"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "ანაბეჭდი"
diff --git a/plugins/openpgp/po/kab.po b/plugins/openpgp/po/kab.po
deleted file mode 100644
index af6e2d05..00000000
--- a/plugins/openpgp/po/kab.po
+++ /dev/null
@@ -1,48 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-19 21:09+0000\n"
-"Language-Team: none\n"
-"Language: kab\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.16.1-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Tuttra GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Berreḥ tsarut"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Tuccḍa deg GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Ulac tisura. Sarew-d yiwet!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Arurmid"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Tasarut ulac-itt deg uzrar n tsura"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Adsil umḍin"
diff --git a/plugins/openpgp/po/ko.po b/plugins/openpgp/po/ko.po
deleted file mode 100644
index 30ab5ccd..00000000
--- a/plugins/openpgp/po/ko.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2022-10-17 11:49+0000\n"
-"Language-Team: none\n"
-"Language: ko\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.15-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG에 에러가 있음"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "사용 가능한 키 없음. 하나 생성하세요!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "키가 키체인에 있지 않음"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "암호화"
-
-#, fuzzy
-#~ msgid "Key publishing disabled"
-#~ msgstr "키 게재 비활성화됨"
-
-#~ msgid "Select key"
-#~ msgstr "키 선택"
-
-#~ msgid "Loading…"
-#~ msgstr "로딩중…"
diff --git a/plugins/openpgp/po/lb.po b/plugins/openpgp/po/lb.po
deleted file mode 100644
index b0fff6bc..00000000
--- a/plugins/openpgp/po/lb.po
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-openpgp-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2018-01-24 12:20+0000\n"
-"Language-Team: Luxembourgish <https://hosted.weblate.org/projects/dino/"
-"plugin-openpgp/lb/>\n"
-"Language: lb\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 2.19-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "GnuPG gëtt ofgefrot"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Feeler am GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Keng Schlëssele verfügbar. Generéier een!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Schlësselen net am Schlësselbond"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Verschlësselung"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Schlëssel Verëffentlechung ausgeschalt"
-
-#~ msgid "Select key"
-#~ msgstr "Schlëssel auswielen"
-
-#~ msgid "Loading…"
-#~ msgstr "Lueden…"
-
-#~ msgid "OpenPGP"
-#~ msgstr "OpenPGP"
diff --git a/plugins/openpgp/po/lt.po b/plugins/openpgp/po/lt.po
deleted file mode 100644
index 615be99a..00000000
--- a/plugins/openpgp/po/lt.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-12-27 20:00+0000\n"
-"Language-Team: none\n"
-"Language: lt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"(n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.15.1\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Užklausiama GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Paskelbimo raktas"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Klaida GnuPG programoje"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nėra prieinamų raktų. Sugeneruokite!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Išjungta"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Rakto nėra raktinėje"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Kontrolinis kodas"
-
-#~ msgid "Encryption"
-#~ msgstr "Šifravimas"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Rakto paskelbimas išjungtas"
-
-#~ msgid "Select key"
-#~ msgstr "Pasirinkti raktą"
-
-#~ msgid "Loading…"
-#~ msgstr "Įkeliama…"
diff --git a/plugins/openpgp/po/lv.po b/plugins/openpgp/po/lv.po
deleted file mode 100644
index e4e3d44c..00000000
--- a/plugins/openpgp/po/lv.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Language-Team: none\n"
-"Language: lv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
diff --git a/plugins/openpgp/po/meson.build b/plugins/openpgp/po/meson.build
deleted file mode 100644
index ac755b55..00000000
--- a/plugins/openpgp/po/meson.build
+++ /dev/null
@@ -1 +0,0 @@
-i18n.gettext('dino-openpgp')
diff --git a/plugins/openpgp/po/nb.po b/plugins/openpgp/po/nb.po
deleted file mode 100644
index 75e5bee0..00000000
--- a/plugins/openpgp/po/nb.po
+++ /dev/null
@@ -1,64 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-17 06:09+0000\n"
-"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/dino/"
-"plugin-openpgp/nb/>\n"
-"Language: nb\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Sender spørring til GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Kunngjør nøkkel"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Feil i GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Ingen nøkler tilgjengelige. Generer én!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Deaktivert"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Nøkkelen finnes ikke i nøkkelknippet"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Fingeravtrykk"
-
-#~ msgid "Encryption"
-#~ msgstr "Kryptering"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Nøkkelpublisering avskrudd"
-
-#~ msgid "Select key"
-#~ msgstr "Velg nøkkel"
-
-#~ msgid "Loading…"
-#~ msgstr "Laster…"
-
-#~ msgid "OpenPGP"
-#~ msgstr "OpenPGP"
diff --git a/plugins/openpgp/po/nl.po b/plugins/openpgp/po/nl.po
deleted file mode 100644
index 7190b9a6..00000000
--- a/plugins/openpgp/po/nl.po
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-openpgp-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-03-14 10:09+0000\n"
-"Language-Team: Dutch <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/nl/>\n"
-"Language: nl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.17-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Bezig met aanroepen van GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Aankondigingssleutel"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Fout in GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Geen sleutels beschikbaar. Genereer een sleutel!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Uitgeschakeld"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Sleutel niet in sleutelbos"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Vingerafdruk"
-
-#~ msgid "Encryption"
-#~ msgstr "Encryptie"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Sleutelpublicatie uitgeschakeld"
-
-#~ msgid "Select key"
-#~ msgstr "Kies een sleutel"
-
-#~ msgid "Loading…"
-#~ msgstr "Bezig met laden…"
-
-#~ msgid "OpenPGP"
-#~ msgstr "OpenPGP"
diff --git a/plugins/openpgp/po/oc.po b/plugins/openpgp/po/oc.po
deleted file mode 100644
index e5ece743..00000000
--- a/plugins/openpgp/po/oc.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 05:39+0000\n"
-"Language-Team: none\n"
-"Language: oc\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Consultacion de GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Anonciar la clau"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Error dins gnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Cap de clau pas disponibla. Generatz-ne una !"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Desactivat"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "La clau es pas al trocèl"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Emprenta"
-
-#~ msgid "Encryption"
-#~ msgstr "Chiframent"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publicacion de clau desactivada"
-
-#~ msgid "Select key"
-#~ msgstr "Seleccionar una clau"
-
-#~ msgid "Loading…"
-#~ msgstr "Cargament…"
diff --git a/plugins/openpgp/po/pl.po b/plugins/openpgp/po/pl.po
deleted file mode 100644
index 06ace91e..00000000
--- a/plugins/openpgp/po/pl.po
+++ /dev/null
@@ -1,62 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-07-04 00:09+0000\n"
-"Language-Team: Polish <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/pl/>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.7-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Odpytuję GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Błąd w GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Brak kluczy. Wygeneruj nowy!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Wyłączono"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Klucz nie znajduje się w pęku kluczy"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Szyfrowanie"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publikowanie kluczy wyłączone"
-
-#~ msgid "Select key"
-#~ msgstr "Wybierz klucz"
-
-#~ msgid "Loading…"
-#~ msgstr "Ładowanie…"
diff --git a/plugins/openpgp/po/pt.po b/plugins/openpgp/po/pt.po
deleted file mode 100644
index aaa9c5e5..00000000
--- a/plugins/openpgp/po/pt.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-08-04 20:01+0000\n"
-"Language-Team: none\n"
-"Language: pt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Consultando GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Anunciar chave"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Erro no GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nenhuma chave disponível. Gere uma!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Desativado"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "A chave não está no chaveiro"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Impressão digital"
-
-#~ msgid "Encryption"
-#~ msgstr "Criptografia"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publicação da chave desativada"
-
-#~ msgid "Select key"
-#~ msgstr "Selecionar chave"
-
-#~ msgid "Loading…"
-#~ msgstr "Carregando…"
diff --git a/plugins/openpgp/po/pt_BR.po b/plugins/openpgp/po/pt_BR.po
deleted file mode 100644
index 8916bf1a..00000000
--- a/plugins/openpgp/po/pt_BR.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-12 07:32+0000\n"
-"Language-Team: none\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Consultando GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Anunciar chave"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Erro no GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nenhuma chave disponível. Gere uma!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Desativado"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "A chave não está no chaveiro"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Impressão digital"
-
-#~ msgid "Encryption"
-#~ msgstr "Criptografia"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publicação da chave desativada"
-
-#~ msgid "Select key"
-#~ msgstr "Selecionar chave"
-
-#~ msgid "Loading…"
-#~ msgstr "Carregando…"
diff --git a/plugins/openpgp/po/ro.po b/plugins/openpgp/po/ro.po
deleted file mode 100644
index cedf59fb..00000000
--- a/plugins/openpgp/po/ro.po
+++ /dev/null
@@ -1,62 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: Romanian <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/ro/>\n"
-"Language: ro\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Se interoghează GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Anunță cheie"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Eroare în GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Nici o cheie disponibilă. Generați una!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Dezactivat"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Cheia nu este în șirul de chei"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Amprentă"
-
-#~ msgid "Encryption"
-#~ msgstr "Criptare"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Cheie publică dezactivată"
-
-#~ msgid "Select key"
-#~ msgstr "Selectați cheia"
-
-#~ msgid "Loading…"
-#~ msgstr "Se încarcă…"
diff --git a/plugins/openpgp/po/ru.po b/plugins/openpgp/po/ru.po
deleted file mode 100644
index 85222f40..00000000
--- a/plugins/openpgp/po/ru.po
+++ /dev/null
@@ -1,62 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-05-06 13:05+0000\n"
-"Language-Team: Russian <https://hosted.weblate.org/projects/dino/plugin-"
-"openpgp/ru/>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.12-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Запрос GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Объявленный ключ"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Ошибка в GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Нет доступных ключей. Стоило бы сгенерировать один!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Выключено"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Отсутствует ключ в связке"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Отпечаток"
-
-#~ msgid "Encryption"
-#~ msgstr "Шифрование"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Публикация ключа отключена"
-
-#~ msgid "Select key"
-#~ msgstr "Выбрать ключ"
-
-#~ msgid "Loading…"
-#~ msgstr "Загрузка…"
diff --git a/plugins/openpgp/po/sq.po b/plugins/openpgp/po/sq.po
deleted file mode 100644
index 3e4640bb..00000000
--- a/plugins/openpgp/po/sq.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 11:50+0000\n"
-"Language-Team: none\n"
-"Language: sq\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Po pyetet GnuPG-ja"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Njoftojeni kyçin"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Gabim në GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "S’ka kyçe gati. Prodhoni një të tillë!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "I çaktivizuar"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Kyç jo në varg kyçesh"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Shenja gishtash"
-
-#~ msgid "Encryption"
-#~ msgstr "Fshehtëzim"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Publikim kyçesh i çaktivizuar"
-
-#~ msgid "Select key"
-#~ msgstr "Përzgjidhni kyç"
-
-#~ msgid "Loading…"
-#~ msgstr "Po ngarkohet…"
diff --git a/plugins/openpgp/po/sv.po b/plugins/openpgp/po/sv.po
deleted file mode 100644
index 49cfaddc..00000000
--- a/plugins/openpgp/po/sv.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2024-08-05 20:09+0000\n"
-"Language-Team: none\n"
-"Language: sv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.7-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Frågar GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Fel i GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Inga nycklar tillgängliga. Generera en!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Inaktiverad"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Nyckeln finns inte i nyckelknippan"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Kryptering"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Nyckelpublicering inaktiverad"
-
-#~ msgid "Select key"
-#~ msgstr "Välj nyckel"
-
-#~ msgid "Loading…"
-#~ msgstr "Laddar…"
diff --git a/plugins/openpgp/po/ta.po b/plugins/openpgp/po/ta.po
deleted file mode 100644
index 57489c15..00000000
--- a/plugins/openpgp/po/ta.po
+++ /dev/null
@@ -1,51 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2026-02-28 11:09+0000\n"
-"Language-Team: none\n"
-"Language: ta\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.16.1-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Gnupg ஐ வினவுகிறது"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "அறிவிப்பு திறவுகோல்"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "குனுபிசீ இல் பிழை"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "திறவுகோல்கள் எதுவும் கிடைக்கவில்லை. ஒன்றை உருவாக்கு!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "முடக்கப்பட்டது"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "விசை கீச்சினில் இல்லை"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "கைரேகை"
-
-#~ msgid "Encryption"
-#~ msgstr "குறியாக்கம்"
diff --git a/plugins/openpgp/po/th.po b/plugins/openpgp/po/th.po
deleted file mode 100644
index 56098a4f..00000000
--- a/plugins/openpgp/po/th.po
+++ /dev/null
@@ -1,48 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-10-05 07:02+0000\n"
-"Language-Team: none\n"
-"Language: th\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.14-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "การสอบถาม GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "กุญแจ"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG ผิดพลาด"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "ไม่มีคีย์ที่ใช้งานได้ สร้างอันใหม่สิ!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "ผิดพลาด"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "กุญแจไม่อยู่ในพวงกุญแจ"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "ลายนิ้วมือ"
diff --git a/plugins/openpgp/po/tr.po b/plugins/openpgp/po/tr.po
deleted file mode 100644
index bdbfb6fc..00000000
--- a/plugins/openpgp/po/tr.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-10-11 15:07+0000\n"
-"Language-Team: none\n"
-"Language: tr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.14-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "GnuPG sorgu"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Anahtarı yayınla"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG'de Hata"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Anahtar yok. Bir tane oluşturun!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Devre dışı"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Anahtar anahtarlıkta değil"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Parmak izi"
-
-#~ msgid "Encryption"
-#~ msgstr "Şifreleme"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Anahtar yayınlama devre dışı"
-
-#~ msgid "Select key"
-#~ msgstr "Anahtar seçin"
-
-#~ msgid "Loading…"
-#~ msgstr "Yükleniyor…"
diff --git a/plugins/openpgp/po/uk.po b/plugins/openpgp/po/uk.po
deleted file mode 100644
index 69176117..00000000
--- a/plugins/openpgp/po/uk.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 05:39+0000\n"
-"Language-Team: none\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Запит до GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "Оголосити ключ"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Помилка у GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Немає доступних ключей. Сгенеріть!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Вимкнено"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Відсутній ключ у зв’язці"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "Відбиток пальця"
-
-#~ msgid "Encryption"
-#~ msgstr "Шифрування"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Публікація ключа відключена"
-
-#~ msgid "Select key"
-#~ msgstr "Вибрати ключ"
-
-#~ msgid "Loading…"
-#~ msgstr "Завантаження…"
diff --git a/plugins/openpgp/po/vi.po b/plugins/openpgp/po/vi.po
deleted file mode 100644
index 71f6fdce..00000000
--- a/plugins/openpgp/po/vi.po
+++ /dev/null
@@ -1,60 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-08-02 17:02+0000\n"
-"Language-Team: none\n"
-"Language: vi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "Đang truy vấn GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "Lỗi trong GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "Không có khoá khả dụng. Hãy tạo một khoá!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "Đã vô hiệu hoá"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "Khoá không trong chuỗi khoá"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "Mã hoá"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "Công khai khoá đã bị vô hiệu hoá"
-
-#~ msgid "Select key"
-#~ msgstr "Chọn khoá"
-
-#~ msgid "Loading…"
-#~ msgstr "Đang tải…"
diff --git a/plugins/openpgp/po/zh_CN.po b/plugins/openpgp/po/zh_CN.po
deleted file mode 100644
index 26d6ac30..00000000
--- a/plugins/openpgp/po/zh_CN.po
+++ /dev/null
@@ -1,65 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: dino-omemo-0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2025-04-10 05:39+0000\n"
-"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
-"dino/plugin-openpgp/zh_Hans/>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.11-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "正在查询 GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr "公布密钥"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG 错误"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "没有密钥可用。生成一个吧!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr "已禁用"
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "密钥不在密钥链中"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr "指纹"
-
-#~ msgid "Encryption"
-#~ msgstr "加密"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "已禁用密钥发布功能"
-
-#~ msgid "Select key"
-#~ msgstr "选择密钥"
-
-#~ msgid "Loading…"
-#~ msgstr "载入中…"
-
-#~ msgid "Own fingerprint"
-#~ msgstr "自己的指纹"
-
-#~ msgid "Will be generated on first connection"
-#~ msgstr "会在第一次连接时生成"
-
-#~ msgid "Database error"
-#~ msgstr "数据库错误"
diff --git a/plugins/openpgp/po/zh_TW.po b/plugins/openpgp/po/zh_TW.po
deleted file mode 100644
index 24ce38b7..00000000
--- a/plugins/openpgp/po/zh_TW.po
+++ /dev/null
@@ -1,61 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-03-29 11:32+0200\n"
-"PO-Revision-Date: 2020-11-24 05:28+0000\n"
-"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
-"dino/plugin-openpgp/zh_Hant/>\n"
-"Language: zh_TW\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.4-dev\n"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:18
-msgid "Querying GnuPG"
-msgstr "正在查詢 GnuPG"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-#: plugins/openpgp/src/encryption_preferences_entry.vala:41
-msgid "Announce key"
-msgstr ""
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:32
-msgid "Error in GnuPG"
-msgstr "GnuPG 錯誤"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:36
-msgid "No keys available. Generate one!"
-msgstr "沒有可用的金鑰。生成一個!"
-
-#: plugins/openpgp/src/encryption_preferences_entry.vala:45
-msgid "Disabled"
-msgstr ""
-
-#: plugins/openpgp/src/contact_details_provider.vala:36
-msgid "Key not in keychain"
-msgstr "密鑰不在密鑰串中"
-
-#: plugins/openpgp/src/contact_details_provider.vala:40
-msgid "Fingerprint"
-msgstr ""
-
-#~ msgid "Encryption"
-#~ msgstr "加密"
-
-#~ msgid "Key publishing disabled"
-#~ msgstr "金鑰發佈已經被禁用"
-
-#~ msgid "Select key"
-#~ msgstr "選擇金鑰"
-
-#~ msgid "Loading…"
-#~ msgstr "載入中…"
diff --git a/plugins/openpgp/src/register_plugin.vala b/plugins/openpgp/src/register_plugin.vala
deleted file mode 100644
index c5d811a7..00000000
--- a/plugins/openpgp/src/register_plugin.vala
+++ /dev/null
@@ -1,3 +0,0 @@
-public Type register_plugin(Module module) {
- return typeof (Dino.Plugins.OpenPgp.Plugin);
-} \ No newline at end of file
diff --git a/plugins/rtp/meson.build b/plugins/rtp/meson.build
deleted file mode 100644
index dc9d409b..00000000
--- a/plugins/rtp/meson.build
+++ /dev/null
@@ -1,92 +0,0 @@
-dependencies = [
- dep_crypto_vala,
- dep_dino,
- dep_gee,
- dep_glib,
- dep_gmodule,
- dep_gstreamer,
- dep_gstreamer_app,
- dep_gstreamer_audio,
- dep_gstreamer_rtp,
- dep_gstreamer_video,
- dep_gtk4,
- dep_m,
- dep_qlite,
- dep_xmpp_vala,
-]
-sources = files(
- 'src/codec_util.vala',
- 'src/device.vala',
- 'src/gst_fixes.c',
- 'src/module.vala',
- 'src/plugin.vala',
- 'src/register_plugin.vala',
- 'src/stream.vala',
- 'src/video_widget.vala',
-)
-c_args = [
- '-DG_LOG_DOMAIN="rtp"',
-]
-vala_args = []
-if dep_webrtc_audio_processing.found() and get_option('plugin-rtp-webrtc-audio-processing').allowed()
- voice_dependencies = [
- dep_gstreamer_audio,
- dep_webrtc_audio_processing,
- ]
- voice_sources = files(
- 'src/voice_processor_native.cpp',
- )
- voice_c_args = c_args
- if dep_webrtc_audio_processing.version().version_compare('>=2.0')
- voice_c_args += ['-DWEBRTC2']
- elif dep_webrtc_audio_processing.version().version_compare('>=1.0')
- voice_c_args += ['-DWEBRTC1']
- else
- voice_c_args += ['-DWEBRTC0']
- endif
- lib_rtp_voice_processor = static_library('rtp-voice-processor', voice_sources, c_args: voice_c_args, cpp_args: voice_c_args, dependencies: voice_dependencies, install: false)
- dep_rtp_voice_processor = declare_dependency(link_with: lib_rtp_voice_processor)
- vala_args += ['-D', 'WITH_VOICE_PROCESSOR']
- dependencies += [dep_rtp_voice_processor]
- sources += files(
- 'src/voice_processor.vala',
- )
-elif get_option('plugin-rtp-webrtc-audio-processing').enabled()
- error('No compatible webrtc-audio-processing found, but plugin-rtp-webrtc-audio-processing option set.')
-endif
-if dep_gstreamer_rtp.version() == 'unknown' or dep_gstreamer_rtp.version().version_compare('>=1.16')
- vala_args += ['-D', 'GST_1_16']
-endif
-if dep_gstreamer_rtp.version() == 'unknown' or dep_gstreamer_rtp.version().version_compare('>=1.18')
- vala_args += ['-D', 'GST_1_18']
-endif
-if dep_gstreamer_rtp.version() == 'unknown' or dep_gstreamer_rtp.version().version_compare('>=1.20')
- vala_args += ['-D', 'GST_1_20']
-endif
-if meson.get_compiler('vala').version().version_compare('<0.56.1')
- vala_args += ['--vapidir', meson.current_source_dir() / 'vapi']
-endif
-if get_option('plugin-rtp-h264').allowed()
- vala_args += ['-D', 'ENABLE_H264']
-endif
-if get_option('plugin-rtp-msdk').allowed()
- vala_args += ['-D', 'ENABLE_MSDK']
-endif
-if get_option('plugin-rtp-vaapi').allowed()
- vala_args += ['-D', 'ENABLE_VAAPI']
-endif
-if get_option('plugin-rtp-vp9').allowed()
- vala_args += ['-D', 'ENABLE_VP9']
-endif
-
-lib_rtp = shared_library('rtp', sources, name_prefix: '', c_args: c_args, vala_args: vala_args, include_directories: include_directories('src'), dependencies: dependencies, install: true, install_dir: get_option('libdir') / get_option('plugindir'), install_rpath: default_install_rpath)
-dep_rtp = declare_dependency(link_with: lib_rtp, include_directories: include_directories('.'))
-summary('Voice/video calls (rtp)', dep_rtp.found(), bool_yn: true, section: 'Plugins')
-
-if dep_rtp.found()
- summary('H264 codec', get_option('plugin-rtp-h264').allowed(), section: 'RTP configuration')
- summary('VP9 codec', get_option('plugin-rtp-vp9').allowed(), section: 'RTP configuration')
- summary('Intel MediaSDK', get_option('plugin-rtp-msdk').allowed(), section: 'RTP configuration')
- summary('Video Acceleration API', get_option('plugin-rtp-vaapi').allowed(), section: 'RTP configuration')
- summary('Voice preprocessing', dep_webrtc_audio_processing.found(), section: 'RTP configuration')
-endif
diff --git a/plugins/rtp/src/register_plugin.vala b/plugins/rtp/src/register_plugin.vala
deleted file mode 100644
index a80137ea..00000000
--- a/plugins/rtp/src/register_plugin.vala
+++ /dev/null
@@ -1,3 +0,0 @@
-public Type register_plugin(Module module) {
- return typeof (Dino.Plugins.Rtp.Plugin);
-}
diff --git a/qlite/meson.build b/qlite/meson.build
deleted file mode 100644
index c3514a98..00000000
--- a/qlite/meson.build
+++ /dev/null
@@ -1,27 +0,0 @@
-dependencies = [
- dep_gee,
- dep_glib,
- dep_sqlite3,
-]
-sources = files(
- 'src/column.vala',
- 'src/database.vala',
- 'src/delete_builder.vala',
- 'src/insert_builder.vala',
- 'src/query_builder.vala',
- 'src/row.vala',
- 'src/statement_builder.vala',
- 'src/table.vala',
- 'src/update_builder.vala',
- 'src/upsert_builder.vala',
-)
-c_args = [
- '-DG_LOG_DOMAIN="qlite"',
-]
-vala_args = [
- '--vapidir', meson.current_source_dir() / 'vapi',
-]
-lib_qlite = library('qlite', sources, c_args: c_args, vala_args: vala_args, dependencies: dependencies, version: '0.1', install: true, install_dir: [true, true, true], install_rpath: default_install_rpath)
-dep_qlite = declare_dependency(link_with: lib_qlite, include_directories: include_directories('.'))
-
-install_data('qlite.deps', install_dir: get_option('datadir') / 'vala/vapi', install_tag: 'devel') # TODO: workaround for https://github.com/mesonbuild/meson/issues/9756
diff --git a/qlite/qlite.deps b/qlite/qlite.deps
deleted file mode 100644
index d9b15e78..00000000
--- a/qlite/qlite.deps
+++ /dev/null
@@ -1,3 +0,0 @@
-gee-0.8
-glib-2.0
-sqlite3
diff --git a/xmpp-vala/meson.build b/xmpp-vala/meson.build
index 3f00ea7b..1dcbaf2c 100644
--- a/xmpp-vala/meson.build
+++ b/xmpp-vala/meson.build
@@ -141,15 +141,12 @@ sources = files(
'src/util.vala',
'src/weak_map.vala',
)
-c_args = [
+c_args = vala_c_args + [
'-DG_LOG_DOMAIN="xmpp-vala"',
]
vala_args = [
'--vapidir', meson.current_source_dir() / 'vapi',
]
-if meson.get_compiler('vala').version().version_compare('=0.56.11')
- vala_args += ['-D', 'VALA_0_56_11']
-endif
lib_xmpp_vala = library('xmpp-vala', sources, c_args: c_args, vala_args: vala_args, dependencies: dependencies, version: '0.1', install: true, install_dir: [true, true, true], install_rpath: default_install_rpath)
dep_xmpp_vala = declare_dependency(link_with: lib_xmpp_vala, include_directories: include_directories('.'))
@@ -164,6 +161,7 @@ test_sources = [
'tests/stanza.vala',
'tests/color.vala',
'tests/util.vala',
+ 'tests/weak_map.vala',
]
exe_xmpp_vala_test = executable('xmpp-vala-test', test_sources, c_args: c_args, vala_args: vala_args, dependencies: dependencies + dep_xmpp_vala, install: false)
test('Tests for xmpp-vala', exe_xmpp_vala_test)
diff --git a/xmpp-vala/src/core/direct_tls_xmpp_stream.vala b/xmpp-vala/src/core/direct_tls_xmpp_stream.vala
index 2f159ab6..55488eb5 100644
--- a/xmpp-vala/src/core/direct_tls_xmpp_stream.vala
+++ b/xmpp-vala/src/core/direct_tls_xmpp_stream.vala
@@ -19,9 +19,7 @@ public class Xmpp.DirectTlsXmppStream : TlsXmppStream {
debug("Connecting to %s:%i (tls)", host, port);
IOStream? io_stream = yield client.connect_to_host_async(host, port, cancellable);
TlsConnection tls_connection = TlsClientConnection.new(io_stream, new NetworkAddress(remote_name.to_string(), port));
-#if GLIB_2_60
tls_connection.set_advertised_protocols(ADVERTISED_PROTOCOLS);
-#endif
tls_connection.accept_certificate.connect(on_invalid_certificate);
tls_connection.accept_certificate.connect((cert, flags) => on_invalid_cert.func(cert, flags));
reset_stream(tls_connection);
diff --git a/xmpp-vala/src/core/module_flag.vala b/xmpp-vala/src/core/module_flag.vala
index 76ae4dc1..95547852 100644
--- a/xmpp-vala/src/core/module_flag.vala
+++ b/xmpp-vala/src/core/module_flag.vala
@@ -10,12 +10,7 @@ namespace Xmpp {
}
public T? cast(XmppStreamFlag flag) {
-#if VALA_0_56_11
- // We can't typecheck due to compiler bug
- return (T) module;
-#else
return flag.get_type().is_a(typeof(T)) ? (T?) flag : null;
-#endif
}
public bool matches(XmppStreamFlag module) {
@@ -39,12 +34,7 @@ namespace Xmpp {
}
public T? cast(XmppStreamModule module) {
-#if VALA_0_56_11
- // We can't typecheck due to compiler bug
- return (T) module;
-#else
return module.get_type().is_a(typeof(T)) ? (T?) module : null;
-#endif
}
public bool matches(XmppStreamModule module) {
diff --git a/xmpp-vala/src/core/stanza_attribute.vala b/xmpp-vala/src/core/stanza_attribute.vala
index 6c6ac579..ba1616a5 100644
--- a/xmpp-vala/src/core/stanza_attribute.vala
+++ b/xmpp-vala/src/core/stanza_attribute.vala
@@ -56,7 +56,13 @@ public class StanzaAttribute : StanzaEntry {
if (ns_uri == state.current_ns_uri || (ns_uri == XMLNS_URI && name == "xmlns")) {
return printf(ATTRIBUTE_XML_NO_NS_FORMAT, true);
} else {
- return printf(ATTRIBUTE_XML_FORMAT, false, state.find_name((!)ns_uri));
+ string ns_name = "_";
+ try {
+ ns_name = state.find_name((!)ns_uri);
+ } catch (IOError e) {
+ warning("Error finding name: %s", e.message);
+ }
+ return printf(ATTRIBUTE_XML_FORMAT, false, ns_name);
}
}
@@ -65,7 +71,13 @@ public class StanzaAttribute : StanzaEntry {
if (ns_uri == state.current_ns_uri || (ns_uri == XMLNS_URI && name == "xmlns")) {
return printf(ATTRIBUTE_XML_ANSI_NO_NS_FORMAT, true);
} else {
- return printf(ATTRIBUTE_XML_ANSI_FORMAT, false, state.find_name((!)ns_uri));
+ string ns_name = "_";
+ try {
+ ns_name = state.find_name((!)ns_uri);
+ } catch (IOError e) {
+ warning("Error finding name: %s", e.message);
+ }
+ return printf(ATTRIBUTE_XML_ANSI_FORMAT, false, ns_name);
}
}
}
diff --git a/xmpp-vala/src/core/stanza_node.vala b/xmpp-vala/src/core/stanza_node.vala
index f44657f1..56f857d4 100644
--- a/xmpp-vala/src/core/stanza_node.vala
+++ b/xmpp-vala/src/core/stanza_node.vala
@@ -18,54 +18,62 @@ public abstract class StanzaEntry {
public string? encoded_val {
owned get {
if (val == null) return null;
- return ENCODABLE_VALUE_CHARS.replace_eval(val, -1, 0, 0, (match_info, result_builder) => {
- int start;
- match_info.fetch_pos(0, out start, null);
- unowned string src = match_info.get_string();
- switch (src[start]) {
- case '&': result_builder.append("&amp;"); break;
- case '"': result_builder.append("&quot;"); break;
- case '\'': result_builder.append("&apos;"); break;
- case '<': result_builder.append("&lt;"); break;
- case '>': result_builder.append("&gt;"); break;
- default: error("Unreachable"); break;
- }
- return false;
- });
+ try {
+ return ENCODABLE_VALUE_CHARS.replace_eval(val, -1, 0, 0, (match_info, result_builder) => {
+ int start;
+ match_info.fetch_pos(0, out start, null);
+ unowned string src = match_info.get_string();
+ switch (src[start]) {
+ case '&': result_builder.append("&amp;"); break;
+ case '"': result_builder.append("&quot;"); break;
+ case '\'': result_builder.append("&apos;"); break;
+ case '<': result_builder.append("&lt;"); break;
+ case '>': result_builder.append("&gt;"); break;
+ default: error("Unreachable");
+ }
+ return false;
+ });
+ } catch (RegexError e) {
+ error("Error encoding entities in string \"%s\": %s", val, e.message);
+ }
}
set {
if (value == null) {
val = null;
return;
}
- val = DECODABLE_VALUE_SEQUENCES.replace_eval(value, -1, 0, 0, (match_info, result_builder) => {
- int start, end;
- match_info.fetch_pos(0, out start, out end);
- unowned string src = match_info.get_string();
- switch (src[start+1]) {
- case 'g': result_builder.append_c('>'); break;
- case 'l': result_builder.append_c('<'); break;
- case 'q': result_builder.append_c('"'); break;
- case 'a':
- switch (src[start+2]) {
- case 'p': result_builder.append_c('\''); break;
- case 'm': result_builder.append_c('&'); break;
- default: critical("Invalid encoding: %s in %s", match_info.fetch(0), src); break;
- }
- break;
- case '#':
- unichar num = -1;
- if (src[start+2] == 'x') {
- src.substring(start+3, start-end-3).scanf("%x", &num);
- } else {
- num = int.parse(src.substring(start+2, start-end-2));
- }
- result_builder.append_unichar(num);
- break;
- default: critical("Invalid encoding: %s in %s", match_info.fetch(0), src); break;
- }
- return false;
- });
+ try {
+ val = DECODABLE_VALUE_SEQUENCES.replace_eval(value, -1, 0, 0, (match_info, result_builder) => {
+ int start, end;
+ match_info.fetch_pos(0, out start, out end);
+ unowned string src = match_info.get_string();
+ switch (src[start + 1]) {
+ case 'g': result_builder.append_c('>'); break;
+ case 'l': result_builder.append_c('<'); break;
+ case 'q': result_builder.append_c('"'); break;
+ case 'a':
+ switch (src[start + 2]) {
+ case 'p': result_builder.append_c('\''); break;
+ case 'm': result_builder.append_c('&'); break;
+ default: critical("Invalid encoding: %s in %s", match_info.fetch(0), src); break;
+ }
+ break;
+ case '#':
+ unichar num = -1;
+ if (src[start + 2] == 'x') {
+ src.substring(start + 3, start - end - 3).scanf("%x", &num);
+ } else {
+ num = int.parse(src.substring(start + 2, start - end - 2));
+ }
+ result_builder.append_unichar(num);
+ break;
+ default: critical("Invalid encoding: %s in %s", match_info.fetch(0), src); break;
+ }
+ return false;
+ });
+ } catch (RegexError e) {
+ error("Error decoding entities in string \"%s\": %s", value, e.message);
+ }
}
}
diff --git a/xmpp-vala/src/core/stanza_reader.vala b/xmpp-vala/src/core/stanza_reader.vala
index ff512497..4828600d 100644
--- a/xmpp-vala/src/core/stanza_reader.vala
+++ b/xmpp-vala/src/core/stanza_reader.vala
@@ -38,8 +38,15 @@ public class StanzaReader {
if (cancellable != null && cancellable.is_cancelled()) throw new IOError.CANCELLED("Input stream is canceled.");
try {
buffer_fill = (int) yield ((!)input).read_async(buffer, GLib.Priority.DEFAULT, cancellable);
- } catch (TlsError.EOF e) {
- throw new IOError.CLOSED("End of TLS stream reached");
+ } catch (Error e) {
+ if (e is IOError) {
+ throw (IOError) e;
+ } else if (e is TlsError.EOF) {
+ // The error can be TlsError.EOF instead of IOError.CLOSED, fixing that
+ throw new IOError.CLOSED("End of TLS stream reached");
+ } else {
+ throw new IOError.FAILED("Unknown error: %s", e.message);
+ }
}
if (buffer_fill == 0) throw new IOError.CLOSED("End of input stream reached.");
buffer_pos = 0;
diff --git a/xmpp-vala/src/core/stream_connect.vala b/xmpp-vala/src/core/stream_connect.vala
index 7e3843fa..a496fc3c 100644
--- a/xmpp-vala/src/core/stream_connect.vala
+++ b/xmpp-vala/src/core/stream_connect.vala
@@ -15,7 +15,7 @@ namespace Xmpp {
public async XmppStreamResult establish_stream(Jid bare_jid, Gee.List<XmppStreamModule> modules, string? log_options, owned TlsXmppStream.OnInvalidCert on_invalid_cert) {
Jid remote = bare_jid.domain_jid;
- TlsXmppStream.OnInvalidCertWrapper on_invalid_cert_wrapper = new TlsXmppStream.OnInvalidCertWrapper(on_invalid_cert);
+ TlsXmppStream.OnInvalidCertWrapper on_invalid_cert_wrapper = new TlsXmppStream.OnInvalidCertWrapper((owned) on_invalid_cert);
//Lookup xmpp-client and xmpps-client SRV records
GLib.List<SrvTargetInfo>? targets = new GLib.List<SrvTargetInfo>();
@@ -72,7 +72,13 @@ namespace Xmpp {
connection_timeout_id = Timeout.add_seconds(30, () => {
warning("Connection attempt timed out");
- stream.disconnect();
+ stream.disconnect.begin((_, res) => {
+ try {
+ stream.disconnect.end(res);
+ } catch (IOError e) {
+ debug("Error while disconnecting: %s", e.message);
+ }
+ });
connection_timeout_id = 0;
return Source.REMOVE;
});
diff --git a/xmpp-vala/src/file_content_type.vala b/xmpp-vala/src/file_content_type.vala
index 3656435e..bae493f6 100644
--- a/xmpp-vala/src/file_content_type.vala
+++ b/xmpp-vala/src/file_content_type.vala
@@ -14,8 +14,12 @@ namespace Xmpp {
}
public FileContentType.from_file(File file) {
- FileInfo file_info = file.query_info("*", FileQueryInfoFlags.NONE);
- this.from_file_info(file_info);
+ try {
+ FileInfo file_info = file.query_info("*", FileQueryInfoFlags.NONE);
+ this.from_file_info(file_info);
+ } catch (Error e) {
+ warning("Failed reading file content type: %s", e.message);
+ }
}
public string? get_mime_type() {
diff --git a/xmpp-vala/src/module/bookmarks_provider.vala b/xmpp-vala/src/module/bookmarks_provider.vala
index 6ddcc5af..458ff183 100644
--- a/xmpp-vala/src/module/bookmarks_provider.vala
+++ b/xmpp-vala/src/module/bookmarks_provider.vala
@@ -8,10 +8,10 @@ public interface BookmarksProvider : Object {
public signal void conference_changed(XmppStream stream, Conference conferences);
public signal void received_conferences(XmppStream stream, Set<Conference> conferences);
- public async abstract async Set<Conference>? get_conferences(XmppStream stream);
- public async abstract void add_conference(XmppStream stream, Conference conference);
- public async abstract void remove_conference(XmppStream stream, Conference conference);
- public async abstract void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference);
+ public async abstract async Set<Conference>? get_conferences(XmppStream stream) throws IOError;
+ public async abstract void add_conference(XmppStream stream, Conference conference) throws IOError;
+ public async abstract void remove_conference(XmppStream stream, Conference conference) throws IOError;
+ public async abstract void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference) throws IOError;
}
}
diff --git a/xmpp-vala/src/module/iq/module.vala b/xmpp-vala/src/module/iq/module.vala
index bb9260c9..c87db897 100644
--- a/xmpp-vala/src/module/iq/module.vala
+++ b/xmpp-vala/src/module/iq/module.vala
@@ -17,22 +17,39 @@ namespace Xmpp.Iq {
preprocess_outgoing_iq_set_get(stream, iq);
Iq.Stanza? return_stanza = null;
+ IOError? return_error = null;
+ bool yielded = false;
responseListeners[iq.id] = new ResponseListener((_, result_iq) => {
return_stanza = result_iq;
- if (cancellable == null || !cancellable.is_cancelled()) {
- Idle.add(send_iq_async.callback);
+ if (yielded) send_iq_async.callback();
+ });
+ stream.write_async.begin(iq.stanza, io_priority, cancellable, (_, res) => {
+ try {
+ stream.write_async.end(res);
+ } catch (IOError e) {
+ return_error = e;
}
});
- stream.write_async(iq.stanza, io_priority, cancellable);
ulong cancelled_handler_id = 0;
if (cancellable != null) {
- cancelled_handler_id = cancellable.cancelled.connect(() => Idle.add(send_iq_async.callback));
+ cancelled_handler_id = cancellable.connect(() => {
+ if (yielded) send_iq_async.callback();
+ });
+ }
+ if ((cancellable == null || !cancellable.is_cancelled()) && return_error == null) {
+ yielded = true;
+ yield;
+ yielded = false;
}
- yield;
if (cancellable != null) {
- cancellable.disconnect(cancelled_handler_id);
- cancellable.set_error_if_cancelled();
+ if (cancellable.is_cancelled()) {
+ cancellable.set_error_if_cancelled();
+ } else {
+ cancellable.disconnect(cancelled_handler_id);
+ }
}
+ responseListeners.unset(iq.id);
+ if (return_error != null) throw return_error;
return return_stanza;
}
diff --git a/xmpp-vala/src/module/sasl.vala b/xmpp-vala/src/module/sasl.vala
index 035cc723..f0c2d6ed 100644
--- a/xmpp-vala/src/module/sasl.vala
+++ b/xmpp-vala/src/module/sasl.vala
@@ -73,10 +73,14 @@ namespace Xmpp.Sasl {
} else if (node.name == "challenge" && stream.has_flag(Flag.IDENTITY)) {
Flag flag = stream.get_flag(Flag.IDENTITY);
if (flag.mechanism == Mechanism.SCRAM_SHA_1) {
- var challenge_response = compute_challenge_response(node.get_string_content(), flag.password, flag.client_nonce, flag.name);
- flag.server_signature = challenge_response.expected_server_signature;
- stream.write(new StanzaNode.build("response", NS_URI).add_self_xmlns()
- .put_node(new StanzaNode.text(Base64.encode((uchar[]) (challenge_response.response).to_utf8()))));
+ try {
+ var challenge_response = compute_challenge_response(node.get_string_content(), flag.password, flag.client_nonce, flag.name);
+ flag.server_signature = challenge_response.expected_server_signature;
+ stream.write(new StanzaNode.build("response", NS_URI).add_self_xmlns()
+ .put_node(new StanzaNode.text(Base64.encode((uchar[]) (challenge_response.response).to_utf8()))));
+ } catch (Error e) {
+ warning("Failed processing challenge: %s", e.message);
+ }
}
}
}
@@ -165,7 +169,7 @@ namespace Xmpp.Sasl {
public string response { get; set; }
}
- public static ChallengeResponse compute_challenge_response(string challenge, string password, string client_nonce, string name) {
+ public static ChallengeResponse compute_challenge_response(string challenge, string password, string client_nonce, string name) throws Error {
string challenge_base64 = (string) Base64.decode(challenge);
string? server_nonce = null;
uint8[] salt = null;
diff --git a/xmpp-vala/src/module/session.vala b/xmpp-vala/src/module/session.vala
index b1436d1e..fa947624 100644
--- a/xmpp-vala/src/module/session.vala
+++ b/xmpp-vala/src/module/session.vala
@@ -28,9 +28,13 @@ public class Module : XmppStreamNegotiationModule {
stream.add_flag(new Flag());
Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("session", NS_URI).add_self_xmlns()) { to=stream.remote_name };
- Iq.Stanza result_iq = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
- if (!result_iq.is_error()) {
- stream.get_flag(Flag.IDENTITY).finished = true;
+ try {
+ Iq.Stanza result_iq = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ if (!result_iq.is_error()) {
+ stream.get_flag(Flag.IDENTITY).finished = true;
+ }
+ } catch (IOError e) {
+ warning("Error establishing legacy session: %s", e.message);
}
}
}
diff --git a/xmpp-vala/src/module/xep/0004_data_forms.vala b/xmpp-vala/src/module/xep/0004_data_forms.vala
index 6b5624da..6c16a53d 100644
--- a/xmpp-vala/src/module/xep/0004_data_forms.vala
+++ b/xmpp-vala/src/module/xep/0004_data_forms.vala
@@ -18,6 +18,7 @@ public class DataForm {
}
public enum Type {
+ UNKNOWN,
BOOLEAN,
FIXED,
HIDDEN,
@@ -44,7 +45,7 @@ public class DataForm {
get { return node.get_attribute("label", NS_URI); }
set { node.set_attribute("label", value); }
}
- public virtual Type? type_ { get; internal set; default=null; }
+ public virtual Type type_ { get; internal set; default=Type.UNKNOWN; }
public string? var {
get { return node.get_attribute("var", NS_URI); }
set { node.set_attribute("var", value); }
@@ -82,11 +83,6 @@ public class DataForm {
value_node.put_node(new StanzaNode.text(val));
}
- internal void add_value_string(string val) {
- StanzaNode node = new StanzaNode.build("value");
- node.put_node(new StanzaNode.text(val));
- }
-
internal Gee.List<Option>? get_options() {
Gee.List<Option> ret = new ArrayList<Option>();
Gee.List<StanzaNode> option_nodes = node.get_subnodes("option", NS_URI);
diff --git a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
index 537e460b..20666820 100644
--- a/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
+++ b/xmpp-vala/src/module/xep/0030_service_discovery/module.vala
@@ -45,7 +45,7 @@ public class Module : XmppStreamModule, Iq.Handler {
return yield this.cache.get_entity_identities(jid);
}
- public async InfoResult? request_info(XmppStream stream, Jid jid) {
+ public async InfoResult? request_info(XmppStream stream, Jid jid) throws IOError {
var future = active_info_requests[jid];
if (future == null) {
var promise = new Promise<InfoResult?>();
@@ -53,10 +53,14 @@ public class Module : XmppStreamModule, Iq.Handler {
active_info_requests[jid] = future;
Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_INFO).add_self_xmlns()) { to=jid };
- Iq.Stanza iq_response = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
- InfoResult? result = InfoResult.create_from_iq(iq_response);
+ try {
+ Iq.Stanza iq_response = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ InfoResult? result = InfoResult.create_from_iq(iq_response);
- promise.set_value(result);
+ promise.set_value(result);
+ } catch (IOError e) {
+ promise.set_exception(e);
+ }
active_info_requests.unset(jid);
}
@@ -64,12 +68,17 @@ public class Module : XmppStreamModule, Iq.Handler {
InfoResult? res = yield future.wait_async();
return res;
} catch (FutureError error) {
+ if (error is FutureError.EXCEPTION) {
+ if (future.exception is IOError) {
+ throw (IOError) future.exception;
+ }
+ }
warning("Future error when waiting for info request result: %s", error.message);
return null;
}
}
- public async ItemsResult? request_items(XmppStream stream, Jid jid) {
+ public async ItemsResult? request_items(XmppStream stream, Jid jid) throws IOError {
StanzaNode query_node = new StanzaNode.build("query", NS_URI_ITEMS).add_self_xmlns();
Iq.Stanza iq = new Iq.Stanza.get(query_node) { to=jid };
diff --git a/xmpp-vala/src/module/xep/0045_muc/flag.vala b/xmpp-vala/src/module/xep/0045_muc/flag.vala
index d0d2c359..a72965b3 100644
--- a/xmpp-vala/src/module/xep/0045_muc/flag.vala
+++ b/xmpp-vala/src/module/xep/0045_muc/flag.vala
@@ -5,9 +5,6 @@ namespace Xmpp.Xep.Muc {
public class Flag : XmppStreamFlag {
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "muc");
- private HashMap<Jid, Gee.List<Feature>> room_features = new HashMap<Jid, Gee.List<Feature>>(Jid.hash_bare_func, Jid.equals_bare_func);
- private HashMap<Jid, string> room_names = new HashMap<Jid, string>(Jid.hash_bare_func, Jid.equals_bare_func);
-
private HashMap<Jid, string> enter_ids = new HashMap<Jid, string>(Jid.hash_bare_func, Jid.equals_bare_func);
public HashMap<Jid, Promise<JoinResult?>> enter_futures = new HashMap<Jid, Promise<JoinResult?>>(Jid.hash_func, Jid.equals_func);
private HashMap<Jid, string> own_nicks = new HashMap<Jid, string>(Jid.hash_bare_func, Jid.equals_bare_func);
@@ -18,12 +15,6 @@ public class Flag : XmppStreamFlag {
private HashMap<Jid, HashMap<Jid, Affiliation>> affiliations = new HashMap<Jid, HashMap<Jid, Affiliation>>(Jid.hash_bare_func, Jid.equals_bare_func);
private HashMap<Jid, Role> occupant_role = new HashMap<Jid, Role>(Jid.hash_func, Jid.equals_func);
- public string? get_room_name(Jid muc_jid) { return room_names.has_key(muc_jid.bare_jid) ? room_names[muc_jid.bare_jid] : null; }
-
- public bool has_room_feature(Jid muc_jid, Feature feature) {
- return room_features.has_key(muc_jid.bare_jid) && room_features[muc_jid.bare_jid].contains(feature);
- }
-
public Jid? get_real_jid(Jid full_jid) { return occupant_real_jids[full_jid]; }
public Jid? get_occupant_jid(Jid real_jid, Jid room) {
@@ -77,14 +68,6 @@ public class Flag : XmppStreamFlag {
public string? get_muc_subject(Jid muc_jid) { return subjects[muc_jid.bare_jid]; }
- internal void set_room_name(Jid muc_jid, string name) {
- room_names[muc_jid.bare_jid] = name;
- }
-
- internal void set_room_features(Jid muc_jid, Gee.List<Feature> features) {
- room_features[muc_jid.bare_jid] = features;
- }
-
internal void set_real_jid(Jid full_jid, Jid real_jid) { occupant_real_jids[full_jid] = real_jid; }
internal void set_offline_member(Jid muc_jid, Jid real_jid, Affiliation affiliation) {
diff --git a/xmpp-vala/src/module/xep/0045_muc/module.vala b/xmpp-vala/src/module/xep/0045_muc/module.vala
index ad929b00..e4c066f0 100644
--- a/xmpp-vala/src/module/xep/0045_muc/module.vala
+++ b/xmpp-vala/src/module/xep/0045_muc/module.vala
@@ -8,6 +8,12 @@ private const string NS_URI_OWNER = NS_URI + "#owner";
public const string NS_URI_USER = NS_URI + "#user";
private const string NS_URI_REQUEST = NS_URI + "#request";
+public const string FEATURE_STABLE_ID = "http://jabber.org/protocol/muc#stable_id";
+public const string FEATURE_MEMBERS_ONLY = "muc_membersonly";
+public const string FEATURE_MODERATED = "muc_moderated";
+public const string FEATURE_NON_ANONYMOUS = "muc_nonanonymous";
+public const string FEATURE_PASSWORD_PROTECTED = "muc_passwordprotected";
+
public enum MucEnterError {
PASSWORD_REQUIRED,
BANNED,
@@ -34,26 +40,6 @@ public enum Role {
VISITOR
}
-public enum Feature {
- REGISTER,
- ROOMCONFIG,
- ROOMINFO,
- HIDDEN,
- MEMBERS_ONLY,
- MODERATED,
- NON_ANONYMOUS,
- OPEN,
- PASSWORD_PROTECTED,
- PERSISTENT,
- PUBLIC,
- ROOMS,
- SEMI_ANONYMOUS,
- STABLE_ID,
- TEMPORARY,
- UNMODERATED,
- UNSECURED
-}
-
public static void add_muc_pm_message_stanza_x_node(MessageStanza message_stanza) {
StanzaNode x_node = new StanzaNode.build("x", "http://jabber.org/protocol/muc#user").add_self_xmlns();
message_stanza.stanza.put_node(x_node);
@@ -74,6 +60,7 @@ public class Module : XmppStreamModule {
public signal void subject_set(XmppStream stream, string? subject, Jid jid);
public signal void invite_received(XmppStream stream, Jid room_jid, Jid from_jid, string? password, string? reason);
public signal void voice_request_received(XmppStream stream, Jid room_jid, Jid from_jid, string nick);
+ public signal void room_info_changed(XmppStream stream, Jid muc_jid);
public signal void room_info_updated(XmppStream stream, Jid muc_jid);
public signal void self_removed_from_room(XmppStream stream, Jid jid, StatusCode code);
@@ -228,7 +215,7 @@ public class Module : XmppStreamModule {
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq);
}
- public async void change_affiliation(XmppStream stream, Jid muc_jid, Jid? user_jid, string? nick, string new_affiliation) {
+ public async void change_affiliation(XmppStream stream, Jid muc_jid, Jid? user_jid, string? nick, string new_affiliation) throws IOError {
StanzaNode item_node = new StanzaNode.build("item", NS_URI_ADMIN)
.put_attribute("affiliation", new_affiliation, NS_URI_ADMIN);
if (user_jid != null) {
@@ -242,7 +229,7 @@ public class Module : XmppStreamModule {
yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
}
- public async DataForms.DataForm? get_config_form(XmppStream stream, Jid jid) {
+ public async DataForms.DataForm? get_config_form(XmppStream stream, Jid jid) throws IOError {
Iq.Stanza get_iq = new Iq.Stanza.get(new StanzaNode.build("query", NS_URI_OWNER).add_self_xmlns()) { to=jid };
Iq.Stanza result_iq = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, get_iq);
@@ -254,7 +241,7 @@ public class Module : XmppStreamModule {
return null;
}
- public async void set_config_form(XmppStream stream, Jid jid, DataForms.DataForm data_form) {
+ public async void set_config_form(XmppStream stream, Jid jid, DataForms.DataForm data_form) throws IOError {
StanzaNode stanza_node = new StanzaNode.build("query", NS_URI_OWNER);
stanza_node.add_self_xmlns().put_node(data_form.get_submit_node());
Iq.Stanza set_iq = new Iq.Stanza.set(stanza_node) { to=jid };
@@ -299,7 +286,7 @@ public class Module : XmppStreamModule {
if (status_codes.contains(StatusCode.CONFIG_CHANGE_NON_PRIVACY) ||
status_codes.contains(StatusCode.NON_ANONYMOUS) ||
status_codes.contains(StatusCode.SEMI_ANONYMOUS)) {
- query_room_info.begin(stream, message.from.bare_jid);
+ room_info_changed(stream, message.from.bare_jid);
}
}
}
@@ -358,9 +345,6 @@ public class Module : XmppStreamModule {
if (status_codes.contains(StatusCode.SELF_PRESENCE)) {
Jid bare_jid = presence.from.bare_jid;
if (flag.get_enter_id(bare_jid) != null) {
-
- query_room_info.begin(stream, bare_jid);
-
flag.finish_muc_enter(bare_jid);
var join_result = new JoinResult() { nick=presence.from.resourcepart, newly_created=status_codes.contains(StatusCode.NEW_ROOM_CREATED) };
flag.enter_futures[bare_jid].set_value(join_result);
@@ -430,52 +414,13 @@ public class Module : XmppStreamModule {
}
}
- private async void query_room_info(XmppStream stream, Jid jid) {
- ServiceDiscovery.InfoResult? info_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, jid);
- if (info_result == null) return;
-
- Gee.List<Feature> features = new ArrayList<Feature>();
-
- foreach (ServiceDiscovery.Identity identity in info_result.identities) {
- if (identity.category == "conference" && identity.name != null) {
- stream.get_flag(Flag.IDENTITY).set_room_name(jid, identity.name);
- }
- }
-
- foreach (string feature in info_result.features) {
- Feature? parsed = null;
- switch (feature) {
- case "http://jabber.org/protocol/muc#register": parsed = Feature.REGISTER; break;
- case "http://jabber.org/protocol/muc#roomconfig": parsed = Feature.ROOMCONFIG; break;
- case "http://jabber.org/protocol/muc#roominfo": parsed = Feature.ROOMINFO; break;
- case "http://jabber.org/protocol/muc#stable_id": parsed = Feature.STABLE_ID; break;
- case "muc_hidden": parsed = Feature.HIDDEN; break;
- case "muc_membersonly": parsed = Feature.MEMBERS_ONLY; break;
- case "muc_moderated": parsed = Feature.MODERATED; break;
- case "muc_nonanonymous": parsed = Feature.NON_ANONYMOUS; break;
- case "muc_open": parsed = Feature.OPEN; break;
- case "muc_passwordprotected": parsed = Feature.PASSWORD_PROTECTED; break;
- case "muc_persistent": parsed = Feature.PERSISTENT; break;
- case "muc_public": parsed = Feature.PUBLIC; break;
- case "muc_rooms": parsed = Feature.ROOMS; break;
- case "muc_semianonymous": parsed = Feature.SEMI_ANONYMOUS; break;
- case "muc_temporary": parsed = Feature.TEMPORARY; break;
- case "muc_unmoderated": parsed = Feature.UNMODERATED; break;
- case "muc_unsecured": parsed = Feature.UNSECURED; break;
- }
- if (parsed != null) features.add(parsed);
- }
- stream.get_flag(Flag.IDENTITY).set_room_features(jid, features);
- room_info_updated(stream, jid);
- }
-
public async void fetch_affiliations(XmppStream stream, Jid muc_jid) {
query_affiliation.begin(stream, muc_jid, "member");
query_affiliation.begin(stream, muc_jid, "admin");
yield query_affiliation(stream, muc_jid, "owner");
}
- private async Gee.List<Jid>? query_affiliation(XmppStream stream, Jid jid, string affiliation) {
+ private async Gee.List<Jid>? query_affiliation(XmppStream stream, Jid jid, string affiliation) throws IOError {
Iq.Stanza iq = new Iq.Stanza.get(
new StanzaNode.build("query", NS_URI_ADMIN)
.add_self_xmlns()
@@ -593,14 +538,18 @@ public class ReceivedPipelineListener : StanzaListener<MessageStanza> {
if (item_nodes.size > 0) {
var affiliations = new HashMap<Jid, Affiliation>();
foreach (StanzaNode item_node in item_nodes) {
- string jid_str = item_node.get_attribute("jid", Muc.NS_URI_USER);
- Jid real_jid = Jid.from_string(jid_str);
- string affiliation_str = item_node.get_attribute("affiliation", Muc.NS_URI_USER);
- Muc.Affiliation affiliation = Muc.Module.parse_affiliation(affiliation_str);
+ try {
+ string jid_str = item_node.get_attribute("jid", Muc.NS_URI_USER);
+ Jid real_jid = Jid.from_string(jid_str);
+ string affiliation_str = item_node.get_attribute("affiliation", Muc.NS_URI_USER);
+ Muc.Affiliation affiliation = Muc.Module.parse_affiliation(affiliation_str);
- affiliations[real_jid] = affiliation;
+ affiliations[real_jid] = affiliation;
- stream.get_flag(Flag.IDENTITY).set_offline_member(message.from, real_jid, affiliation);
+ stream.get_flag(Flag.IDENTITY).set_offline_member(message.from, real_jid, affiliation);
+ } catch (InvalidJidError e) {
+ warning("Received invalid affiliation update: %s", e.message);
+ }
}
string? mav_since = MucAffiliationsVersioning.get_mav_since(x_node);
diff --git a/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala b/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala
index 1e423b49..74034a8a 100644
--- a/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala
+++ b/xmpp-vala/src/module/xep/0047_in_band_bytestreams.vala
@@ -177,7 +177,7 @@ public class Connection : IOStream {
if (read_callback != null) {
Idle.add((owned) read_callback, read_callback_priority);
read_callback = null;
- if (read_callback_cancellable != null) {
+ if (read_callback_cancellable != null && !read_callback_cancellable.is_cancelled()) {
read_callback_cancellable.disconnect(read_callback_cancellable_id);
}
read_callback_cancellable = null;
@@ -187,7 +187,7 @@ public class Connection : IOStream {
if (write_callback != null) {
Idle.add((owned) write_callback, write_callback_priority);
write_callback = null;
- if (write_callback_cancellable != null) {
+ if (write_callback_cancellable != null && !write_callback_cancellable.is_cancelled()) {
write_callback_cancellable.disconnect(write_callback_cancellable_id);
}
write_callback_cancellable = null;
diff --git a/xmpp-vala/src/module/xep/0048_bookmarks.vala b/xmpp-vala/src/module/xep/0048_bookmarks.vala
index 46814e4a..dc009a1e 100644
--- a/xmpp-vala/src/module/xep/0048_bookmarks.vala
+++ b/xmpp-vala/src/module/xep/0048_bookmarks.vala
@@ -6,7 +6,7 @@ private const string NS_URI = "storage:bookmarks";
public class Module : BookmarksProvider, XmppStreamModule {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0048_bookmarks_module");
- public async Set<Conference>? get_conferences(XmppStream stream) {
+ public async Set<Conference>? get_conferences(XmppStream stream) throws IOError {
StanzaNode get_node = new StanzaNode.build("storage", NS_URI).add_self_xmlns();
StanzaNode? result_node = yield stream.get_module(PrivateXmlStorage.Module.IDENTITY).retrieve(stream, get_node);
if (result_node == null) return null;
@@ -20,7 +20,7 @@ public class Module : BookmarksProvider, XmppStreamModule {
return ret;
}
- private async void set_conferences(XmppStream stream, Set<Conference> conferences) {
+ private async void set_conferences(XmppStream stream, Set<Conference> conferences) throws IOError {
StanzaNode storage_node = (new StanzaNode.build("storage", NS_URI)).add_self_xmlns();
foreach (Conference conference in conferences) {
Bookmarks1Conference? bookmarks1conference = conference as Bookmarks1Conference;
@@ -45,13 +45,13 @@ public class Module : BookmarksProvider, XmppStreamModule {
stream.get_module(Module.IDENTITY).received_conferences(stream, conferences);
}
- public async void add_conference(XmppStream stream, Conference conference) {
+ public async void add_conference(XmppStream stream, Conference conference) throws IOError {
Set<Conference>? conferences = yield get_conferences(stream);
conferences.add(conference);
yield set_conferences(stream, conferences);
}
- public async void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference) {
+ public async void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference) throws IOError {
Set<Conference>? conferences = yield get_conferences(stream);
foreach (Conference conference in conferences) {
if (conference.jid.equals(muc_jid)) {
@@ -64,7 +64,7 @@ public class Module : BookmarksProvider, XmppStreamModule {
yield set_conferences(stream, conferences);
}
- public async void remove_conference(XmppStream stream, Conference conference_remove) {
+ public async void remove_conference(XmppStream stream, Conference conference_remove) throws IOError {
Set<Conference>? conferences = yield get_conferences(stream);
conferences.remove(conference_remove);
yield set_conferences(stream, conferences);
diff --git a/xmpp-vala/src/module/xep/0049_private_xml_storage.vala b/xmpp-vala/src/module/xep/0049_private_xml_storage.vala
index 81ccde9b..a6501505 100644
--- a/xmpp-vala/src/module/xep/0049_private_xml_storage.vala
+++ b/xmpp-vala/src/module/xep/0049_private_xml_storage.vala
@@ -6,13 +6,13 @@ namespace Xmpp.Xep.PrivateXmlStorage {
public class Module : XmppStreamModule {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0049_private_xml_storage");
- public async void store(XmppStream stream, StanzaNode node) {
+ public async void store(XmppStream stream, StanzaNode node) throws IOError {
StanzaNode queryNode = new StanzaNode.build("query", NS_URI).add_self_xmlns().put_node(node);
Iq.Stanza iq = new Iq.Stanza.set(queryNode);
yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
}
- public async StanzaNode? retrieve(XmppStream stream, StanzaNode node) {
+ public async StanzaNode? retrieve(XmppStream stream, StanzaNode node) throws IOError {
StanzaNode queryNode = new StanzaNode.build("query", NS_URI).add_self_xmlns().put_node(node);
Iq.Stanza iq = new Iq.Stanza.get(queryNode);
Iq.Stanza iq_result = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
diff --git a/xmpp-vala/src/module/xep/0054_vcard/module.vala b/xmpp-vala/src/module/xep/0054_vcard/module.vala
index 4df1d9a5..4c02a2d1 100644
--- a/xmpp-vala/src/module/xep/0054_vcard/module.vala
+++ b/xmpp-vala/src/module/xep/0054_vcard/module.vala
@@ -2,7 +2,7 @@ namespace Xmpp.Xep.VCard {
private const string NS_URI = "vcard-temp";
private const string NS_URI_UPDATE = NS_URI + ":x:update";
-public async Bytes? fetch_image(XmppStream stream, Jid jid, string hash) {
+public async Bytes? fetch_image(XmppStream stream, Jid jid, string hash) throws IOError {
Iq.Stanza iq = new Iq.Stanza.get(new StanzaNode.build("vCard", NS_URI).add_self_xmlns()) { to=jid };
Iq.Stanza iq_res = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
diff --git a/xmpp-vala/src/module/xep/0060_pubsub.vala b/xmpp-vala/src/module/xep/0060_pubsub.vala
index c9af4263..88b9cd31 100644
--- a/xmpp-vala/src/module/xep/0060_pubsub.vala
+++ b/xmpp-vala/src/module/xep/0060_pubsub.vala
@@ -41,7 +41,7 @@ namespace Xmpp.Xep.Pubsub {
retract_listeners.unset(node);
}
- public async Gee.List<StanzaNode>? request_all(XmppStream stream, Jid? jid, string node) { // TODO multiple nodes gehen auch
+ public async Gee.List<StanzaNode>? request_all(XmppStream stream, Jid? jid, string node) throws IOError { // TODO multiple nodes gehen auch
Iq.Stanza request_iq = new Iq.Stanza.get(new StanzaNode.build("pubsub", NS_URI).add_self_xmlns().put_node(new StanzaNode.build("items", NS_URI).put_attribute("node", node)));
if (jid != null) request_iq.to = jid;
@@ -72,7 +72,7 @@ namespace Xmpp.Xep.Pubsub {
XmppStream stream, Jid? jid, string node_id, string? item_id, StanzaNode content,
PublishOptions? publish_options = null,
bool try_reconfiguring = true
- ) {
+ ) throws IOError {
StanzaNode pubsub_node = new StanzaNode.build("pubsub", NS_URI).add_self_xmlns();
StanzaNode publish_node = new StanzaNode.build("publish", NS_URI).put_attribute("node", node_id);
pubsub_node.put_node(publish_node);
@@ -142,7 +142,7 @@ namespace Xmpp.Xep.Pubsub {
stream.get_module(Iq.Module.IDENTITY).send_iq(stream, iq, null);
}
- public async DataForms.DataForm? request_node_config(XmppStream stream, Jid? jid, string node_id) {
+ public async DataForms.DataForm? request_node_config(XmppStream stream, Jid? jid, string node_id) throws IOError {
StanzaNode pubsub_node = new StanzaNode.build("pubsub", NS_URI_OWNER).add_self_xmlns();
StanzaNode publish_node = new StanzaNode.build("configure", NS_URI_OWNER).put_attribute("node", node_id);
pubsub_node.put_node(publish_node);
@@ -154,7 +154,7 @@ namespace Xmpp.Xep.Pubsub {
return DataForms.DataForm.create_from_node(data_form_node);
}
- public async bool submit_node_config(XmppStream stream, DataForms.DataForm data_form, string node_id) {
+ public async bool submit_node_config(XmppStream stream, DataForms.DataForm data_form, string node_id) throws IOError {
StanzaNode submit_node = data_form.get_submit_node();
StanzaNode pubsub_node = new StanzaNode.build("pubsub", Pubsub.NS_URI_OWNER).add_self_xmlns();
@@ -222,7 +222,7 @@ namespace Xmpp.Xep.Pubsub {
}
}
- private async bool change_node_config(XmppStream stream, Jid jid, string node, PublishOptions publish_options) {
+ private async bool change_node_config(XmppStream stream, Jid jid, string node, PublishOptions publish_options) throws IOError {
DataForms.DataForm? data_form = yield stream.get_module(Pubsub.Module.IDENTITY).request_node_config(stream, jid, node);
if (data_form == null) return false;
diff --git a/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala b/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala
index 97674f3f..4bb46837 100644
--- a/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala
+++ b/xmpp-vala/src/module/xep/0065_socks5_bytestreams.vala
@@ -25,6 +25,10 @@ public class Module : XmppStreamModule, Iq.Handler {
private GetLocalIpAddresses? get_local_ip_addresses_impl = null;
+ public Module.with_local_ip_address_handler(owned GetLocalIpAddresses get_local_ip_addresses) {
+ set_local_ip_address_handler((owned) get_local_ip_addresses);
+ }
+
public override void attach(XmppStream stream) {
stream.add_flag(new Flag());
query_availability.begin(stream);
@@ -46,7 +50,7 @@ public class Module : XmppStreamModule, Iq.Handler {
return get_local_ip_addresses_impl();
}
- private async void query_availability(XmppStream stream) {
+ private async void query_availability(XmppStream stream) throws IOError {
ServiceDiscovery.ItemsResult? items_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_items(stream, stream.remote_name);
if (items_result == null) return;
diff --git a/xmpp-vala/src/module/xep/0077_in_band_registration.vala b/xmpp-vala/src/module/xep/0077_in_band_registration.vala
index 12ed2f1c..0d2dae40 100644
--- a/xmpp-vala/src/module/xep/0077_in_band_registration.vala
+++ b/xmpp-vala/src/module/xep/0077_in_band_registration.vala
@@ -7,7 +7,7 @@ public const string NS_URI = "jabber:iq:register";
public class Module : XmppStreamNegotiationModule {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0077_in_band_registration");
- public async Form? get_from_server(XmppStream stream, Jid jid) {
+ public async Form? get_from_server(XmppStream stream, Jid jid) throws IOError {
StanzaNode query_node = new StanzaNode.build("query", NS_URI).add_self_xmlns();
Iq.Stanza request_form_iq = new Iq.Stanza.get(query_node) { to=jid };
request_form_iq.to = jid;
@@ -16,7 +16,7 @@ public class Module : XmppStreamNegotiationModule {
return new Form.from_node(stream, iq_result);
}
- public async string? submit_to_server(XmppStream stream, Jid jid, Form form) {
+ public async string? submit_to_server(XmppStream stream, Jid jid, Form form) throws IOError {
StanzaNode query_node = new StanzaNode.build("query", NS_URI).add_self_xmlns();
query_node.put_node(form.get_submit_node());
Iq.Stanza iq = new Iq.Stanza.set(query_node) { to=jid };
@@ -30,7 +30,7 @@ public class Module : XmppStreamNegotiationModule {
return null;
}
- public async ErrorStanza? change_password(XmppStream stream, Jid bare_jid, string new_pw) {
+ public async ErrorStanza? change_password(XmppStream stream, Jid bare_jid, string new_pw) throws IOError {
StanzaNode pw_change_node = new StanzaNode.build("query", NS_URI).add_self_xmlns();
StanzaNode username_node = new StanzaNode.build("username", NS_URI);
StanzaNode pw_node = new StanzaNode.build("password", NS_URI);
diff --git a/xmpp-vala/src/module/xep/0082_date_time_profiles.vala b/xmpp-vala/src/module/xep/0082_date_time_profiles.vala
index 3237208e..8cd3cfb1 100644
--- a/xmpp-vala/src/module/xep/0082_date_time_profiles.vala
+++ b/xmpp-vala/src/module/xep/0082_date_time_profiles.vala
@@ -15,8 +15,8 @@ public TimeZone? parse_tzd(string tzd) {
} else {
return null;
}
- int h_offset = unprefixed.substring(0, 2).to_int();
- int m_offset = unprefixed.substring(3, 2).to_int();
+ int h_offset = int.parse(unprefixed.substring(0, 2));
+ int m_offset = int.parse(unprefixed.substring(3, 2));
int offset = h_offset * 60 * 60 + m_offset * 60;
if (tzd.has_prefix("-")) {
offset = -offset;
diff --git a/xmpp-vala/src/module/xep/0084_user_avatars.vala b/xmpp-vala/src/module/xep/0084_user_avatars.vala
index 680c8e78..4e96dd8f 100644
--- a/xmpp-vala/src/module/xep/0084_user_avatars.vala
+++ b/xmpp-vala/src/module/xep/0084_user_avatars.vala
@@ -20,12 +20,15 @@ namespace Xmpp.Xep.UserAvatars {
stream.get_module(Pubsub.Module.IDENTITY).publish.begin(stream, null, NS_URI_METADATA, sha1, metadata_node);
}
- public void unset_avatar(XmppStream stream) {
- StanzaNode metadata_node = new StanzaNode.build("metadata", NS_URI_METADATA).add_self_xmlns();
- stream.get_module(Pubsub.Module.IDENTITY).delete_node(stream, null, NS_URI_METADATA);
+ public void unset_avatar(XmppStream stream, string? hash = null) {
+ var pubsub_module = stream.get_module(Pubsub.Module.IDENTITY);
+ pubsub_module.delete_node(stream, null, NS_URI_METADATA);
+ if (hash != null) {
+ pubsub_module.retract_item.begin(stream, null, NS_URI_DATA, hash, (_, res) => pubsub_module.retract_item.end(res));
+ }
}
- public async Bytes? fetch_image(XmppStream stream, Jid jid, string hash) {
+ public async Bytes? fetch_image(XmppStream stream, Jid jid, string hash) throws IOError {
Gee.List<StanzaNode>? items = yield stream.get_module(Pubsub.Module.IDENTITY).request_all(stream, jid, NS_URI_DATA);
if (items == null || items.size == 0 || items[0].sub_nodes.size == 0) return null;
diff --git a/xmpp-vala/src/module/xep/0115_entity_capabilities.vala b/xmpp-vala/src/module/xep/0115_entity_capabilities.vala
index 8e15e0c2..e39dcbbd 100644
--- a/xmpp-vala/src/module/xep/0115_entity_capabilities.vala
+++ b/xmpp-vala/src/module/xep/0115_entity_capabilities.vala
@@ -35,11 +35,6 @@ namespace Xmpp.Xep.EntityCapabilities {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0115_entity_capabilities");
private string own_ver_hash;
- private Storage storage;
-
- public Module(Storage storage) {
- this.storage = storage;
- }
private string get_own_hash(XmppStream stream) {
if (own_ver_hash == null) {
diff --git a/xmpp-vala/src/module/xep/0166_jingle/component.vala b/xmpp-vala/src/module/xep/0166_jingle/component.vala
index e30175d5..f08ffbce 100644
--- a/xmpp-vala/src/module/xep/0166_jingle/component.vala
+++ b/xmpp-vala/src/module/xep/0166_jingle/component.vala
@@ -41,7 +41,11 @@ namespace Xmpp.Xep.Jingle {
assert(!this.stream.ready);
promise.set_value(stream);
if (terminated != null) {
- yield stream.close_async();
+ try {
+ yield stream.close_async();
+ } catch (IOError e) {
+ warning("Failed closing stream provided for terminated connection: %s", e.message);
+ }
}
}
@@ -53,7 +57,11 @@ namespace Xmpp.Xep.Jingle {
if (terminated == null) {
terminated = (reason_name ?? "") + " - " + (reason_text ?? "") + @"we terminated? $we_terminated";
if (stream.ready) {
- yield stream.value.close_async();
+ try {
+ yield stream.value.close_async();
+ } catch (IOError e) {
+ warning("Failed closing stream when terminating connection: %s", e.message);
+ }
} else {
promise.set_exception(new IOError.FAILED("Jingle connection failed"));
}
diff --git a/xmpp-vala/src/module/xep/0166_jingle/content.vala b/xmpp-vala/src/module/xep/0166_jingle/content.vala
index f6af1b17..07cadc36 100644
--- a/xmpp-vala/src/module/xep/0166_jingle/content.vala
+++ b/xmpp-vala/src/module/xep/0166_jingle/content.vala
@@ -67,7 +67,7 @@ public class Xmpp.Xep.Jingle.Content : Object {
ContentType content_type, ContentParameters content_params,
Transport transport, TransportParameters? transport_params,
SecurityPrecondition? security_precondition, SecurityParameters? security_params,
- Jid local_full_jid, Jid peer_full_jid) throws Error {
+ Jid local_full_jid, Jid peer_full_jid) {
this.content_name = content_name;
this.senders = senders;
this.role = Role.RESPONDER;
@@ -142,7 +142,7 @@ public class Xmpp.Xep.Jingle.Content : Object {
this.content_params.accept(stream, session, this);
}
- internal void handle_accept(XmppStream stream, ContentNode content_node) {
+ internal void handle_accept(XmppStream stream, ContentNode content_node) throws IqError {
this.transport_params.handle_transport_accept(content_node.transport);
this.transport_params.create_transport_connection(stream, this);
this.content_params.handle_accept(stream, this.session, this, content_node.description);
@@ -157,7 +157,13 @@ public class Xmpp.Xep.Jingle.Content : Object {
return;
}
tried_transport_methods.add(new_transport.ns_uri);
- transport_params = new_transport.create_transport_parameters(stream, transport_params.components, local_full_jid, peer_full_jid);
+ try {
+ transport_params = new_transport.create_transport_parameters(stream, transport_params.components, local_full_jid, peer_full_jid);
+ } catch (Error e) {
+ session.terminate(ReasonElement.FAILED_TRANSPORT, null, e.message);
+ // TODO should we only terminate this content or really the whole session?
+ return;
+ }
set_transport_params(transport_params);
session.send_transport_replace(this, transport_params);
state = State.REPLACING_TRANSPORT;
diff --git a/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala b/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala
index 9f0acd27..f451f4c9 100644
--- a/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala
+++ b/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala
@@ -24,7 +24,12 @@ public class Xmpp.Xep.Jingle.Flag : XmppStreamFlag {
public async Session? get_session(string sid) {
if (promises.has_key(sid)) {
- return yield promises[sid].future.wait_async();
+ try {
+ return yield promises[sid].future.wait_async();
+ } catch (FutureError e) {
+ warning("Failed waiting for session: %s", e.message);
+ return null;
+ }
}
return sessions[sid];
}
diff --git a/xmpp-vala/src/module/xep/0166_jingle/session.vala b/xmpp-vala/src/module/xep/0166_jingle/session.vala
index 22e8e978..aa8d6656 100644
--- a/xmpp-vala/src/module/xep/0166_jingle/session.vala
+++ b/xmpp-vala/src/module/xep/0166_jingle/session.vala
@@ -222,7 +222,12 @@ public class Xmpp.Xep.Jingle.Session : Object {
.put_node(content.transport_params.to_transport_stanza_node("content-add")));
Iq.Stanza iq = new Iq.Stanza.set(content_add_node) { to=peer_full_jid };
- yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ try {
+ yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ } catch (IOError e) {
+ warning("Error adding content: %s", e.message);
+ // FIXME: Probably need to clean up some state
+ }
}
private void handle_content_accept(ContentNode content_node) throws IqError {
diff --git a/xmpp-vala/src/module/xep/0176_jingle_ice_udp/transport_parameters.vala b/xmpp-vala/src/module/xep/0176_jingle_ice_udp/transport_parameters.vala
index 490cc125..53057d9e 100644
--- a/xmpp-vala/src/module/xep/0176_jingle_ice_udp/transport_parameters.vala
+++ b/xmpp-vala/src/module/xep/0176_jingle_ice_udp/transport_parameters.vala
@@ -39,7 +39,11 @@ public abstract class Xmpp.Xep.JingleIceUdp.IceUdpTransportParameters : Jingle.T
remote_pwd = node.get_attribute("pwd");
remote_ufrag = node.get_attribute("ufrag");
foreach (StanzaNode candidateNode in node.get_subnodes("candidate")) {
- remote_candidates.add(Candidate.parse(candidateNode));
+ try {
+ remote_candidates.add(Candidate.parse(candidateNode));
+ } catch (Jingle.IqError e) {
+ warning("Ignoring invalid candidate %s: %s", candidateNode.to_string(), e.message);
+ }
}
StanzaNode? fingerprint_node = node.get_subnode("fingerprint", DTLS_NS_URI);
diff --git a/xmpp-vala/src/module/xep/0177_jingle_raw_udp.vala b/xmpp-vala/src/module/xep/0177_jingle_raw_udp.vala
index 200cdfa9..b59c1b06 100644
--- a/xmpp-vala/src/module/xep/0177_jingle_raw_udp.vala
+++ b/xmpp-vala/src/module/xep/0177_jingle_raw_udp.vala
@@ -13,6 +13,10 @@ namespace Xmpp.Xep.JingleRawUdp {
private GetLocalIpAddresses? get_local_ip_addresses_impl = null;
+ public Module.with_local_ip_address_handler(owned GetLocalIpAddresses get_local_ip_addresses) {
+ set_local_ip_address_handler((owned) get_local_ip_addresses);
+ }
+
public override void attach(XmppStream stream) {
stream.get_module(Jingle.Module.IDENTITY).register_transport(this);
stream.get_module(ServiceDiscovery.Module.IDENTITY).add_feature(stream, NS_URI);
diff --git a/xmpp-vala/src/module/xep/0191_blocking_command.vala b/xmpp-vala/src/module/xep/0191_blocking_command.vala
index 9e5ede78..c037c480 100644
--- a/xmpp-vala/src/module/xep/0191_blocking_command.vala
+++ b/xmpp-vala/src/module/xep/0191_blocking_command.vala
@@ -88,11 +88,15 @@ public class Module : XmppStreamModule, Iq.Handler {
bool has_feature = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).has_entity_feature(stream, stream.remote_name, NS_URI);
if (has_feature) {
stream.add_flag(new Flag());
- stream.get_flag(Flag.IDENTITY).blocklist = yield get_blocklist(stream);
+ try {
+ stream.get_flag(Flag.IDENTITY).blocklist = yield get_blocklist(stream);
+ } catch (IOError e) {
+ warning("Failed to retrieve blocklist: %s", e.message);
+ }
}
}
- private async Gee.List<string> get_blocklist(XmppStream stream) {
+ private async Gee.List<string> get_blocklist(XmppStream stream) throws IOError {
StanzaNode blocklist_node = new StanzaNode.build("blocklist", NS_URI).add_self_xmlns();
Iq.Stanza iq = new Iq.Stanza.get(blocklist_node);
diff --git a/xmpp-vala/src/module/xep/0199_ping.vala b/xmpp-vala/src/module/xep/0199_ping.vala
index 18fa538c..7bc234bc 100644
--- a/xmpp-vala/src/module/xep/0199_ping.vala
+++ b/xmpp-vala/src/module/xep/0199_ping.vala
@@ -6,7 +6,7 @@ namespace Xmpp.Xep.Ping {
public class Module : XmppStreamModule, Iq.Handler {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0199_ping");
- public async Iq.Stanza send_ping(XmppStream stream, Jid jid) {
+ public async Iq.Stanza send_ping(XmppStream stream, Jid jid) throws IOError {
StanzaNode ping_node = new StanzaNode.build("ping", NS_URI).add_self_xmlns();
Iq.Stanza iq = new Iq.Stanza.get(ping_node) { to=jid };
return yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq, Priority.HIGH);
diff --git a/xmpp-vala/src/module/xep/0215_external_service_discovery.vala b/xmpp-vala/src/module/xep/0215_external_service_discovery.vala
index 5bad71cd..67f67c05 100644
--- a/xmpp-vala/src/module/xep/0215_external_service_discovery.vala
+++ b/xmpp-vala/src/module/xep/0215_external_service_discovery.vala
@@ -4,7 +4,7 @@ namespace Xmpp.Xep.ExternalServiceDiscovery {
private const string NS_URI = "urn:xmpp:extdisco:2";
- public static async Gee.List<Service> request_services(XmppStream stream) {
+ public static async Gee.List<Service> request_services(XmppStream stream) throws IOError {
Iq.Stanza request_iq = new Iq.Stanza.get((new StanzaNode.build("services", NS_URI)).add_self_xmlns()) { to=stream.remote_name };
Iq.Stanza response_iq = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, request_iq);
diff --git a/xmpp-vala/src/module/xep/0234_jingle_file_transfer.vala b/xmpp-vala/src/module/xep/0234_jingle_file_transfer.vala
index f85049ac..43edefad 100644
--- a/xmpp-vala/src/module/xep/0234_jingle_file_transfer.vala
+++ b/xmpp-vala/src/module/xep/0234_jingle_file_transfer.vala
@@ -42,7 +42,7 @@ public class Module : Jingle.ContentType, XmppStreamModule {
return yield stream.get_module(Jingle.Module.IDENTITY).is_available(stream, required_transport_type, required_components, full_jid);
}
- public async void offer_file_stream(XmppStream stream, Jid receiver_full_jid, InputStream input_stream, string basename, int64 size, string? precondition_name = null, Object? precondition_options = null) throws Jingle.Error {
+ public async void offer_file_stream(XmppStream stream, Jid receiver_full_jid, InputStream input_stream, string basename, int64 size, string? precondition_name = null, Object? precondition_options = null) throws Jingle.Error, Jingle.IqError {
StanzaNode file_node;
StanzaNode description = new StanzaNode.build("description", NS_URI)
.add_self_xmlns()
diff --git a/xmpp-vala/src/module/xep/0260_jingle_socks5_bytestreams.vala b/xmpp-vala/src/module/xep/0260_jingle_socks5_bytestreams.vala
index 852cc7eb..7f44bda2 100644
--- a/xmpp-vala/src/module/xep/0260_jingle_socks5_bytestreams.vala
+++ b/xmpp-vala/src/module/xep/0260_jingle_socks5_bytestreams.vala
@@ -328,9 +328,13 @@ class LocalListener {
}
} catch (Error e) {
warning("Jingle SOCKS5 bytestream establish error cid %s: %s", cid, e.message);
- // Send a "general SOCKS server failure" (0x01)
- yield conn.output_stream.write_all_async({0x05, 0x01}, GLib.Priority.DEFAULT, null, out written);
- yield conn.output_stream.close_async();
+ try {
+ // Send a "general SOCKS server failure" (0x01)
+ yield conn.output_stream.write_all_async({0x05, 0x01}, GLib.Priority.DEFAULT, null, out written);
+ yield conn.output_stream.close_async();
+ } catch (Error sub) {
+ // Ignoring
+ }
}
}
diff --git a/xmpp-vala/src/module/xep/0261_jingle_in_band_bytestreams.vala b/xmpp-vala/src/module/xep/0261_jingle_in_band_bytestreams.vala
index 09eaf711..09134a61 100644
--- a/xmpp-vala/src/module/xep/0261_jingle_in_band_bytestreams.vala
+++ b/xmpp-vala/src/module/xep/0261_jingle_in_band_bytestreams.vala
@@ -65,10 +65,6 @@ class Parameters : Jingle.TransportParameters, Object {
return new Parameters(Jingle.Role.RESPONDER, peer_full_jid, sid, block_size);
}
- public string transport_ns_uri() {
- return NS_URI;
- }
-
public void set_content(Jingle.Content content) {
}
diff --git a/xmpp-vala/src/module/xep/0272_muji.vala b/xmpp-vala/src/module/xep/0272_muji.vala
index 8226da10..b287295c 100644
--- a/xmpp-vala/src/module/xep/0272_muji.vala
+++ b/xmpp-vala/src/module/xep/0272_muji.vala
@@ -56,9 +56,13 @@ namespace Xmpp.Xep.Muji {
muji_node.put_node(content_node);
}
- Presence.Stanza presence_stanza = new Presence.Stanza() { to=muc_jid.with_resource(group_call.our_nick) };
- presence_stanza.stanza.put_node(muji_node);
- stream.get_module(Presence.Module.IDENTITY).send_presence(stream, presence_stanza);
+ try {
+ Presence.Stanza presence_stanza = new Presence.Stanza() { to=muc_jid.with_resource(group_call.our_nick) };
+ presence_stanza.stanza.put_node(muji_node);
+ stream.get_module(Presence.Module.IDENTITY).send_presence(stream, presence_stanza);
+ } catch (InvalidJidError e) {
+ error("Group call participant jid was invalid: %s", e.message);
+ }
return group_call;
}
@@ -86,7 +90,12 @@ namespace Xmpp.Xep.Muji {
GroupCall group_call = stream.get_flag(Flag.IDENTITY).calls[muc_jid];
group_call.waiting_for_finish_prepares[promise] = preparing_peers;
- return yield promise.future.wait_async();
+ try {
+ return yield promise.future.wait_async();
+ } catch (FutureError e) {
+ warning("Failed waiting for preparing peers: %s", e.message);
+ return new ArrayList<Presence.Stanza>();
+ }
}
private async void compute_payload_intersection(XmppStream stream, GroupCall group_call, string media) {
diff --git a/xmpp-vala/src/module/xep/0280_message_carbons.vala b/xmpp-vala/src/module/xep/0280_message_carbons.vala
index b396ee54..f8008bfe 100644
--- a/xmpp-vala/src/module/xep/0280_message_carbons.vala
+++ b/xmpp-vala/src/module/xep/0280_message_carbons.vala
@@ -10,13 +10,21 @@ public class Module : XmppStreamModule {
public async void enable(XmppStream stream) {
if (stream.get_flag(Flag.IDENTITY) == null) {
Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("enable", NS_URI).add_self_xmlns());
- yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ try {
+ yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ } catch (IOError e) {
+ warning("Failed enabling carbons: %s", e.message);
+ }
}
}
public async void disable(XmppStream stream) {
Iq.Stanza iq = new Iq.Stanza.set(new StanzaNode.build("disable", NS_URI).add_self_xmlns());
- yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ try {
+ yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ } catch (IOError e) {
+ warning("Failed enabling carbons: %s", e.message);
+ }
}
public override void attach(XmppStream stream) {
diff --git a/xmpp-vala/src/module/xep/0313_2_message_archive_management.vala b/xmpp-vala/src/module/xep/0313_2_message_archive_management.vala
index 298a1c61..17b93d55 100644
--- a/xmpp-vala/src/module/xep/0313_2_message_archive_management.vala
+++ b/xmpp-vala/src/module/xep/0313_2_message_archive_management.vala
@@ -61,7 +61,7 @@ namespace Xmpp.MessageArchiveManagement.V2 {
return MessageArchiveManagement.create_base_query(stream, mam_params.query_id, fields);
}
- public async QueryResult query_archive(XmppStream stream, MamQueryParams mam_params, Cancellable? cancellable = null) {
+ public async QueryResult query_archive(XmppStream stream, MamQueryParams mam_params, Cancellable? cancellable = null) throws IOError {
var query_node = create_base_query(stream, mam_params);
if (!mam_params.use_ns2_extended) {
query_node.put_node(ResultSetManagement.create_set_rsm_node_before(mam_params.end_id));
@@ -70,7 +70,7 @@ namespace Xmpp.MessageArchiveManagement.V2 {
return yield MessageArchiveManagement.query_archive(stream, mam_params.mam_server, query_node, cancellable);
}
- public async QueryResult page_through_results(XmppStream stream, MamQueryParams mam_params, QueryResult prev_result, Cancellable? cancellable = null) {
+ public async QueryResult page_through_results(XmppStream stream, MamQueryParams mam_params, QueryResult prev_result, Cancellable? cancellable = null) throws IOError {
var query_node = create_base_query(stream, mam_params);
query_node.put_node(ResultSetManagement.create_set_rsm_node_before(prev_result.first));
diff --git a/xmpp-vala/src/module/xep/0313_message_archive_management.vala b/xmpp-vala/src/module/xep/0313_message_archive_management.vala
index a9149d4e..f054a047 100644
--- a/xmpp-vala/src/module/xep/0313_message_archive_management.vala
+++ b/xmpp-vala/src/module/xep/0313_message_archive_management.vala
@@ -57,7 +57,7 @@ public class Module : XmppStreamModule {
return query_node;
}
- internal async QueryResult query_archive(XmppStream stream, Jid? mam_server, StanzaNode query_node, Cancellable? cancellable = null) {
+ internal async QueryResult query_archive(XmppStream stream, Jid? mam_server, StanzaNode query_node, Cancellable? cancellable = null) throws IOError {
var res = new QueryResult();
Flag flag = Flag.get_flag(stream);
diff --git a/xmpp-vala/src/module/xep/0363_http_file_upload.vala b/xmpp-vala/src/module/xep/0363_http_file_upload.vala
index cba422ba..bd82109b 100644
--- a/xmpp-vala/src/module/xep/0363_http_file_upload.vala
+++ b/xmpp-vala/src/module/xep/0363_http_file_upload.vala
@@ -117,24 +117,28 @@ public class Module : XmppStreamModule {
public override string get_id() { return IDENTITY.id; }
private async void query_availability(XmppStream stream) {
- ServiceDiscovery.InfoResult? info_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, stream.remote_name);
- bool available = check_ns_in_info(stream, stream.remote_name, info_result);
- if (!available) {
- ServiceDiscovery.ItemsResult? items_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_items(stream, stream.remote_name);
- if (items_result == null) return;
+ try {
+ ServiceDiscovery.InfoResult? info_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, stream.remote_name);
+ bool available = check_ns_in_info(stream, stream.remote_name, info_result);
+ if (!available) {
+ ServiceDiscovery.ItemsResult? items_result = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_items(stream, stream.remote_name);
+ if (items_result == null) return;
- for (int i = 0; i < 2; i++) {
- foreach (Xep.ServiceDiscovery.Item item in items_result.items) {
+ for (int i = 0; i < 2; i++) {
+ foreach (Xep.ServiceDiscovery.Item item in items_result.items) {
- // First try the promising items and only afterwards all the others
- bool promising_upload_item = item.jid.to_string().has_prefix("upload");
- if ((i == 0 && !promising_upload_item) || (i == 1) && promising_upload_item) continue;
+ // First try the promising items and only afterwards all the others
+ bool promising_upload_item = item.jid.to_string().has_prefix("upload");
+ if ((i == 0 && !promising_upload_item) || (i == 1) && promising_upload_item) continue;
- ServiceDiscovery.InfoResult? info_result2 = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, item.jid);
- bool available2 = check_ns_in_info(stream, item.jid, info_result2);
- if (available2) return;
+ ServiceDiscovery.InfoResult? info_result2 = yield stream.get_module(ServiceDiscovery.Module.IDENTITY).request_info(stream, item.jid);
+ bool available2 = check_ns_in_info(stream, item.jid, info_result2);
+ if (available2) return;
+ }
}
}
+ } catch (IOError e) {
+ warning("Error querying file upload availability: %s", e.message);
}
}
diff --git a/xmpp-vala/src/module/xep/0388_extensible_sasl_profile.vala b/xmpp-vala/src/module/xep/0388_extensible_sasl_profile.vala
index 1c6afb30..54d00482 100644
--- a/xmpp-vala/src/module/xep/0388_extensible_sasl_profile.vala
+++ b/xmpp-vala/src/module/xep/0388_extensible_sasl_profile.vala
@@ -43,19 +43,27 @@ namespace Xmpp.Xep.ExtensibleSaslProfile {
stream.expect_further_negotiation_stanzas = true;
var authorisation_identifier = node.get_subnode("authorization-identifier", NS_URI);
- string jid_string = authorisation_identifier.get_string_content();
- Jid jid = Jid.from_string(jid_string);
+ string jid_string = authorisation_identifier != null ? authorisation_identifier.get_string_content() : "";
+ try {
+ Jid jid = Jid.from_string(jid_string);
- foreach (var inline_provider in inline_activation_providers.values) {
- inline_provider.on_bound(stream, jid, node);
+ foreach (var inline_provider in inline_activation_providers.values) {
+ inline_provider.on_bound(stream, jid, node);
+ }
+ } catch (InvalidJidError e) {
+ warning("Server provided invalid authorization-identifier \"%s\": %s", jid_string, e.message);
}
} else if (node.name == "challenge" && stream.has_flag(Flag.IDENTITY)) {
Flag flag = stream.get_flag(Flag.IDENTITY);
if (flag.mechanism == Mechanism.SCRAM_SHA_1) {
- var challenge_response = compute_challenge_response(node.get_string_content(), flag.password, flag.client_nonce, flag.name);
- flag.server_signature = challenge_response.expected_server_signature;
- stream.write(new StanzaNode.build("response", NS_URI).add_self_xmlns()
- .put_node(new StanzaNode.text(Base64.encode((uchar[]) (challenge_response.response).to_utf8()))));
+ try {
+ var challenge_response = compute_challenge_response(node.get_string_content(), flag.password, flag.client_nonce, flag.name);
+ flag.server_signature = challenge_response.expected_server_signature;
+ stream.write(new StanzaNode.build("response", NS_URI).add_self_xmlns()
+ .put_node(new StanzaNode.text(Base64.encode((uchar[]) (challenge_response.response).to_utf8()))));
+ } catch (Error e) {
+ warning("Error computing challenge response: %s", e.message);
+ }
}
} else if (node.name == "failure") {
stream.remove_flag(stream.get_flag(Flag.IDENTITY));
diff --git a/xmpp-vala/src/module/xep/0392_consistent_color/hsluv.vala b/xmpp-vala/src/module/xep/0392_consistent_color/hsluv.vala
index b45d84de..9efe0970 100644
--- a/xmpp-vala/src/module/xep/0392_consistent_color/hsluv.vala
+++ b/xmpp-vala/src/module/xep/0392_consistent_color/hsluv.vala
@@ -1,4 +1,4 @@
-namespace Hsluv {
+namespace Xmpp.Xep.ConsistentColor.Hsluv {
private const double[] M0 = { 3.240969941904521, -1.537383177570093, -0.498610760293 };
private const double[] M1 = { -0.96924363628087, 1.87596750150772, 0.041555057407175 };
@@ -8,10 +8,6 @@ private const double[] MInv0 = { 0.41239079926595, 0.35758433938387, 0.180480788
private const double[] MInv1 = { 0.21263900587151, 0.71516867876775, 0.072192315360733 };
private const double[] MInv2 = { 0.019330818715591, 0.11919477979462, 0.95053215224966 };
-private double RefX = 0.95045592705167;
-private double RefY = 1.0;
-private double RefZ = 1.089057750759878;
-
private double RefU = 0.19783000664283;
private double RefV = 0.46831999493879;
@@ -129,22 +125,19 @@ private double to_linear(double c) {
}
private int[] rgb_prepare(double[] tuple) {
- for (int i = 0; i < tuple.length; ++i) {
- tuple[i] = round(tuple[i], 3);
- }
-
- for (int i = 0; i < tuple.length; ++i) {
- double ch = tuple[i];
-
- if (ch < -0.0001 || ch > 1.0001) {
- return null; //throw new Error("Illegal rgb value: " + ch);
- }
- }
-
var results = new int[tuple.length];
for (int i = 0; i < tuple.length; ++i) {
- results[i] = (int) Math.round(tuple[i] * 255);
+ double ch = round(tuple[i], 3);
+ if (ch < -0.0001) {
+ warning("RGB value underflow: %f", tuple[i]);
+ results[i] = 0;
+ } else if (ch > 1.0001) {
+ warning("RGB value overflow: %f", tuple[i]);
+ results[i] = 255;
+ } else {
+ results[i] = (int) Math.round(ch * 255);
+ }
}
return results;
@@ -174,17 +167,17 @@ internal double[] rgb_to_xyz(double[] tuple) {
private double y_to_l(double Y) {
if (Y <= Epsilon) {
- return (Y / RefY) * Kappa;
+ return Y * Kappa;
} else {
- return 116 * Math.pow(Y / RefY, 1.0 / 3.0) - 16;
+ return 116 * Math.pow(Y, 1.0 / 3.0) - 16;
}
}
private double l_to_y(double L) {
if (L <= 8) {
- return RefY * L / Kappa;
+ return L / Kappa;
} else {
- return RefY * Math.pow((L + 16) / 116, 3);
+ return Math.pow((L + 16) / 116, 3);
}
}
@@ -340,9 +333,9 @@ internal string rgb_to_hex(double[] tuple) {
internal double[] hex_to_tgb(string hex) {
return new double[] {
- hex.substring(1, 2).to_long(null, 16) / 255.0,
- hex.substring(3, 2).to_long(null, 16) / 255.0,
- hex.substring(5, 2).to_long(null, 16) / 255.0
+ long.parse(hex.substring(1, 2), 16) / 255.0,
+ long.parse(hex.substring(3, 2), 16) / 255.0,
+ long.parse(hex.substring(5, 2), 16) / 255.0
};
}
@@ -356,37 +349,37 @@ internal double[] rgb_to_lch(double[] tuple) {
// Rgb <--> Hsluv(p)
-internal double[] hsluv_to_rgb(double[] tuple) {
+public double[] hsluv_to_rgb(double[] tuple) {
return lch_to_rgb(hsluv_to_lch(tuple));
}
-internal double[] rgb_to_hsluv(double[] tuple) {
+public double[] rgb_to_hsluv(double[] tuple) {
return lch_to_hsluv(rgb_to_lch(tuple));
}
-internal double[] hpluv_to_rgb(double[] tuple) {
+public double[] hpluv_to_rgb(double[] tuple) {
return lch_to_rgb(hpluv_to_lch(tuple));
}
-internal double[] rgb_to_hpluv(double[] tuple) {
+public double[] rgb_to_hpluv(double[] tuple) {
return lch_to_hpluv(rgb_to_lch(tuple));
}
// Hex
-internal string hsluv_to_hex(double[] tuple) {
+public string hsluv_to_hex(double[] tuple) {
return rgb_to_hex(hsluv_to_rgb(tuple));
}
-internal string hpluv_to_hex(double[] tuple) {
+public string hpluv_to_hex(double[] tuple) {
return rgb_to_hex(hpluv_to_rgb(tuple));
}
-internal double[] hex_to_hsluv(string s) {
+public double[] hex_to_hsluv(string s) {
return rgb_to_hsluv(hex_to_tgb(s));
}
-internal double[] hex_to_hpluv(string s) {
+public double[] hex_to_hpluv(string s) {
return rgb_to_hpluv(hex_to_tgb(s));
}
diff --git a/xmpp-vala/src/module/xep/0402_bookmarks2.vala b/xmpp-vala/src/module/xep/0402_bookmarks2.vala
index 938af0e9..3a7e5211 100644
--- a/xmpp-vala/src/module/xep/0402_bookmarks2.vala
+++ b/xmpp-vala/src/module/xep/0402_bookmarks2.vala
@@ -8,7 +8,7 @@ public const string NS_URI_COMPAT = NS_URI + "#compat";
public class Module : BookmarksProvider, XmppStreamModule {
public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "0402_bookmarks2");
- public async Set<Conference>? get_conferences(XmppStream stream) {
+ public async Set<Conference>? get_conferences(XmppStream stream) throws IOError {
HashMap<Jid, Conference>? hm = null;
Flag? flag = stream.get_flag(Flag.IDENTITY);
@@ -35,7 +35,7 @@ public class Module : BookmarksProvider, XmppStreamModule {
return ret;
}
- public async void add_conference(XmppStream stream, Conference conference) {
+ public async void add_conference(XmppStream stream, Conference conference) throws IOError {
StanzaNode conference_node = new StanzaNode.build("conference", NS_URI).add_self_xmlns()
.put_attribute("autojoin", conference.autojoin.to_string());
if (conference.name != null) {
@@ -56,7 +56,7 @@ public class Module : BookmarksProvider, XmppStreamModule {
yield stream.get_module(Pubsub.Module.IDENTITY).publish(stream, stream.get_flag(Bind.Flag.IDENTITY).my_jid.bare_jid, NS_URI, conference.jid.to_string(), conference_node, publish_options);
}
- public async void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference) {
+ public async void replace_conference(XmppStream stream, Jid muc_jid, Conference modified_conference) throws IOError {
yield add_conference(stream, modified_conference);
}
diff --git a/xmpp-vala/src/module/xep/0410_muc_self_ping.vala b/xmpp-vala/src/module/xep/0410_muc_self_ping.vala
index 84772333..6511789e 100644
--- a/xmpp-vala/src/module/xep/0410_muc_self_ping.vala
+++ b/xmpp-vala/src/module/xep/0410_muc_self_ping.vala
@@ -1,16 +1,20 @@
namespace Xmpp.Xep.MucSelfPing {
public static async bool is_joined(XmppStream stream, Jid jid) {
- Iq.Stanza iq_result = yield stream.get_module(Xmpp.Xep.Ping.Module.IDENTITY).send_ping(stream, jid);
+ try {
+ Iq.Stanza iq_result = yield stream.get_module(Xmpp.Xep.Ping.Module.IDENTITY).send_ping(stream, jid);
- if (!iq_result.is_error()) {
- return true;
- } else {
- var error_stanza = iq_result.get_error();
- if (error_stanza.condition in new string[] {ErrorStanza.CONDITION_SERVICE_UNAVAILABLE, ErrorStanza.CONDITION_FEATURE_NOT_IMPLEMENTED}) {
- // the client is joined, but the pinged client does not implement XMPP Ping
+ if (!iq_result.is_error()) {
return true;
+ } else {
+ var error_stanza = iq_result.get_error();
+ if (error_stanza.condition in new string[] {ErrorStanza.CONDITION_SERVICE_UNAVAILABLE, ErrorStanza.CONDITION_FEATURE_NOT_IMPLEMENTED}) {
+ // the client is joined, but the pinged client does not implement XMPP Ping
+ return true;
+ }
}
+ } catch (IOError e) {
+ // Ignoring, same as if ping failed
}
return false;
}
diff --git a/xmpp-vala/src/module/xep/0425_message_moderation.vala b/xmpp-vala/src/module/xep/0425_message_moderation.vala
index 80fab905..934e5ff3 100644
--- a/xmpp-vala/src/module/xep/0425_message_moderation.vala
+++ b/xmpp-vala/src/module/xep/0425_message_moderation.vala
@@ -7,13 +7,17 @@ namespace Xmpp.Xep.MessageModeration {
* @return whether the moderation was successful
*/
public static async bool moderate(XmppStream stream, Jid muc_jid, string message_id) {
- StanzaNode moderate_node = new StanzaNode.build("moderate", NS_URI)
- .add_self_xmlns()
- .put_attribute("id", message_id)
- .put_node(new StanzaNode.build("retract", Xep.MessageRetraction.NS_URI).add_self_xmlns());
- Iq.Stanza iq = new Iq.Stanza.set(moderate_node) { to = muc_jid };
+ try {
+ StanzaNode moderate_node = new StanzaNode.build("moderate", NS_URI)
+ .add_self_xmlns()
+ .put_attribute("id", message_id)
+ .put_node(new StanzaNode.build("retract", Xep.MessageRetraction.NS_URI).add_self_xmlns());
+ Iq.Stanza iq = new Iq.Stanza.set(moderate_node) { to = muc_jid };
- Iq.Stanza result_stanza = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
- return !result_stanza.is_error();
+ Iq.Stanza result_stanza = yield stream.get_module(Iq.Module.IDENTITY).send_iq_async(stream, iq);
+ return !result_stanza.is_error();
+ } catch (IOError e) {
+ return false;
+ }
}
} \ No newline at end of file
diff --git a/xmpp-vala/src/module/xep/0447_stateless_file_sharing.vala b/xmpp-vala/src/module/xep/0447_stateless_file_sharing.vala
index 86da6a3a..7e9b12ba 100644
--- a/xmpp-vala/src/module/xep/0447_stateless_file_sharing.vala
+++ b/xmpp-vala/src/module/xep/0447_stateless_file_sharing.vala
@@ -5,7 +5,7 @@ namespace Xmpp.Xep.StatelessFileSharing {
public const string NS_URI = "urn:xmpp:sfs:0";
- public static Gee.List<FileShare> get_file_shares(MessageStanza message) {
+ public static Gee.List<FileShare>? get_file_shares(MessageStanza message) {
var ret = new ArrayList<FileShare>();
foreach (StanzaNode file_sharing_node in message.stanza.get_subnodes("file-sharing", NS_URI)) {
var metadata = Xep.FileMetadataElement.get_file_metadata(file_sharing_node);
diff --git a/xmpp-vala/src/module/xep/0461_replies.vala b/xmpp-vala/src/module/xep/0461_replies.vala
index af84aa3d..23849d69 100644
--- a/xmpp-vala/src/module/xep/0461_replies.vala
+++ b/xmpp-vala/src/module/xep/0461_replies.vala
@@ -36,6 +36,5 @@ namespace Xmpp.Xep.Replies {
} catch (InvalidJidError e) {
return null;
}
- return null;
}
} \ No newline at end of file
diff --git a/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala b/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
index 38437735..b129c571 100644
--- a/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
+++ b/xmpp-vala/src/module/xep/0490_message_displayed_synchronization.vala
@@ -10,15 +10,19 @@ namespace Xmpp.Xep.MessageDisplayedSynchronization {
private void handle_displayed_node_item(XmppStream stream, string? id, StanzaNode? item) {
if (id == null || item == null) return;
- Jid conversation_jid = Jid.from_string(id);
- StanzaNode? stanza_id_node = item.get_subnode("stanza-id", UniqueStableStanzaIDs.NS_URI);
- if (stanza_id_node == null || stanza_id_node.get_attribute("by") == null || stanza_id_node.get_attribute("id") == null) return;
- Jid stanza_id_by_jid = Jid.from_string(stanza_id_node.get_attribute("by"));
- string stanza_id = stanza_id_node.get_attribute("id");
- if (stream.has_flag(Flag.IDENTITY)) {
- stream.get_flag(Flag.IDENTITY).learn_mds(conversation_jid, stanza_id_by_jid, stanza_id);
+ try {
+ Jid conversation_jid = Jid.from_string(id);
+ StanzaNode? stanza_id_node = item.get_subnode("stanza-id", UniqueStableStanzaIDs.NS_URI);
+ if (stanza_id_node == null || stanza_id_node.get_attribute("by") == null || stanza_id_node.get_attribute("id") == null) return;
+ Jid stanza_id_by_jid = Jid.from_string(stanza_id_node.get_attribute("by"));
+ string stanza_id = stanza_id_node.get_attribute("id");
+ if (stream.has_flag(Flag.IDENTITY)) {
+ stream.get_flag(Flag.IDENTITY).learn_mds(conversation_jid, stanza_id_by_jid, stanza_id);
+ }
+ on_message_displayed(conversation_jid, stanza_id_by_jid, stanza_id);
+ } catch (InvalidJidError e) {
+ warning("Received mds item with invalid jid, ignoring: %s", e.message);
}
- on_message_displayed(conversation_jid, stanza_id_by_jid, stanza_id);
}
private void on_pubsub_item(XmppStream stream, Jid jid, string id, StanzaNode? item) {
@@ -32,9 +36,13 @@ namespace Xmpp.Xep.MessageDisplayedSynchronization {
private void on_initial_presence_sent(XmppStream stream) {
var pubsub = stream.get_module(Pubsub.Module.IDENTITY);
pubsub.request_all.begin(stream, null, NS_URI, (_, res) => {
- Gee.List<StanzaNode>? items = pubsub.request_all.end(res);
- foreach (StanzaNode node_item in items) {
- handle_displayed_node_item(stream, node_item.get_attribute("id"), node_item.get_subnode("displayed", NS_URI));
+ try {
+ Gee.List<StanzaNode>? items = pubsub.request_all.end(res);
+ foreach (StanzaNode node_item in items) {
+ handle_displayed_node_item(stream, node_item.get_attribute("id"), node_item.get_subnode("displayed", NS_URI));
+ }
+ } catch (IOError e) {
+ warning("Failed requesting initial mds set: %s", e.message);
}
});
}
@@ -50,7 +58,12 @@ namespace Xmpp.Xep.MessageDisplayedSynchronization {
.set_max_items("max")
.set_send_last_published_item("never")
.set_access_model("whitelist");
- return yield pubsub.publish(stream, stream.get_flag(Bind.Flag.IDENTITY).my_jid.bare_jid, NS_URI, conversation_jid.to_string(), node, options);
+ try {
+ return yield pubsub.publish(stream, stream.get_flag(Bind.Flag.IDENTITY).my_jid.bare_jid, NS_URI, conversation_jid.to_string(), node, options);
+ } catch (IOError e) {
+ warning("Failed publishing mds item: %s", e.message);
+ return false;
+ }
}
public override void attach(XmppStream stream) {
diff --git a/xmpp-vala/src/weak_map.vala b/xmpp-vala/src/weak_map.vala
index a7f4bc44..4c0d4504 100644
--- a/xmpp-vala/src/weak_map.vala
+++ b/xmpp-vala/src/weak_map.vala
@@ -39,7 +39,7 @@ public class WeakMap<K, V> : Gee.AbstractMap<K, V> {
notify_map.clear();
}
- public override V @get(K key) {
+ public override V? @get(K key) {
if (!hash_map.has_key(key)) return null;
var v = hash_map[key];
diff --git a/xmpp-vala/tests/color.vala b/xmpp-vala/tests/color.vala
index ded67d53..b76e9cbb 100644
--- a/xmpp-vala/tests/color.vala
+++ b/xmpp-vala/tests/color.vala
@@ -9,7 +9,7 @@ class ColorTest : Gee.TestCase {
add_test("xep-vectors-angle", () => { text_xep_vectors_angle(); });
add_test("xep-vectors-rgbf", () => { test_xep_vectors_rgbf(); });
- add_test("rgb-to-angle", () => { test_rgb_to_angle(); });
+// add_test("rgb-to-angle", () => { test_rgb_to_angle(); });
}
public void text_xep_vectors_angle() {
@@ -36,15 +36,15 @@ class ColorTest : Gee.TestCase {
fail_if_not_eq_rgbf(ConsistentColor.string_to_rgbf("Board"), {0.000f,0.527f,0.457f});
}
- public void test_rgb_to_angle() {
- string[] colors = {"e57373", "f06292", "ba68c8", "9575cd", "7986cb", "64b5f6", "4fc3f7", "4dd0e1", "4db6ac", "81c784", "aed581", "dce775", "fff176", "ffd54f", "ffb74d", "ff8a65"};
- foreach(string hex_color in colors) {
- uint8 r = (uint8) ((double) hex_color.substring(0, 2).to_long(null, 16));
- uint8 g = (uint8) ((double) hex_color.substring(2, 2).to_long(null, 16));
- uint8 b = (uint8) ((double) hex_color.substring(4, 2).to_long(null, 16));
- //print(@"$hex_color, $r, $g, $b, $(ConsistentColor.rgb_to_angle(r, g, b))\n");
- }
- }
+// public void test_rgb_to_angle() {
+// string[] colors = {"e57373", "f06292", "ba68c8", "9575cd", "7986cb", "64b5f6", "4fc3f7", "4dd0e1", "4db6ac", "81c784", "aed581", "dce775", "fff176", "ffd54f", "ffb74d", "ff8a65"};
+// foreach(string hex_color in colors) {
+// uint8 r = (uint8) ((double) long.parse(hex_color.substring(0, 2), 16));
+// uint8 g = (uint8) ((double) long.parse(hex_color.substring(2, 2), 16));
+// uint8 b = (uint8) ((double) long.parse(hex_color.substring(4, 2), 16));
+// print(@"$hex_color, $r, $g, $b, $(ConsistentColor.rgb_to_angle(r, g, b))\n");
+// }
+// }
}
} \ No newline at end of file
diff --git a/xmpp-vala/tests/common.vala b/xmpp-vala/tests/common.vala
index 5bd7bbb6..978bca62 100644
--- a/xmpp-vala/tests/common.vala
+++ b/xmpp-vala/tests/common.vala
@@ -7,6 +7,7 @@ int main(string[] args) {
TestSuite.get_root().add_suite(new Xmpp.Test.UtilTest().get_suite());
TestSuite.get_root().add_suite(new Xmpp.Test.JidTest().get_suite());
TestSuite.get_root().add_suite(new Xmpp.Test.ColorTest().get_suite());
+ TestSuite.get_root().add_suite(new Xmpp.Test.WeakMapTest().get_suite());
return GLib.Test.run();
}
@@ -23,9 +24,9 @@ void fail_if_reached(string? reason = null) {
fail_if(true, reason);
}
-delegate void ErrorFunc() throws Error;
+public delegate void ErrorFunc() throws Error;
-void fail_if_not_error_code(ErrorFunc func, int expectedCode, string? reason = null) {
+public void fail_if_not_error_code(ErrorFunc func, int expectedCode, string? reason = null) {
try {
func();
fail_if_reached(@"$(reason + ": " ?? "")no error thrown");
@@ -103,20 +104,20 @@ bool fail_if_eq_str(string? left, string? right, string? reason = null) {
return fail_if(!nullcheck && left == right, @"$(reason + ": " ?? "")'$left' == '$right'");
}
-bool fail_if_not_eq_uint8_arr(uint8[] left, uint8[] right, string? reason = null) {
+public bool fail_if_not_eq_uint8_arr(uint8[] left, uint8[] right, string? reason = null) {
if (fail_if_not_eq_int(left.length, right.length, @"$(reason + ": " ?? "")array length not equal")) return true;
return fail_if_not_eq_str(Base64.encode(left), Base64.encode(right), reason);
}
-bool fail_if_not_zero_int(int zero, string? reason = null) {
+public bool fail_if_not_zero_int(int zero, string? reason = null) {
return fail_if_not_eq_int(zero, 0, reason);
}
-bool fail_if_zero_int(int zero, string? reason = null) {
+public bool fail_if_zero_int(int zero, string? reason = null) {
return fail_if_eq_int(zero, 0, reason);
}
-bool fail_if_null(void* what, string? reason = null) {
+public bool fail_if_null(void* what, string? reason = null) {
return fail_if(what == null || (size_t)what == 0, reason);
}
diff --git a/xmpp-vala/tests/stanza.vala b/xmpp-vala/tests/stanza.vala
index 42e19f9a..b573995f 100644
--- a/xmpp-vala/tests/stanza.vala
+++ b/xmpp-vala/tests/stanza.vala
@@ -21,11 +21,15 @@ class StanzaTest : Gee.TestCase {
.put_node(new StanzaNode.build("testbb", "ns3_uri")
.add_self_xmlns());
- var xml1 = node1.to_xml();
- var node2 = yield new StanzaReader.for_string(xml1).read_node();
- fail_if_not(node1.equals(node2));
- fail_if_not_eq_str(node1.to_string(), node2.to_string());
- cb();
+ try {
+ var xml1 = node1.to_xml();
+ var node2 = yield new StanzaReader.for_string(xml1).read_node();
+ fail_if_not(node1.equals(node2));
+ fail_if_not_eq_str(node1.to_string(), node2.to_string());
+ cb();
+ } catch (GLib.Error e) {
+ cb(e);
+ }
}
private async void test_typical_stream(Gee.TestFinishedCallback cb) {
@@ -55,12 +59,16 @@ class StanzaTest : Gee.TestCase {
.put_node(new StanzaNode.build("body")
.put_node(new StanzaNode.text(" I'll send a friar with speed, to Mantua, with my letters to thy lord.")));
- var reader = new StanzaReader.for_string(stream);
- fail_if_not_eq_node(root_node_cmp, yield reader.read_root_node());
- fail_if_not_eq_node(node_cmp, yield reader.read_node());
- yield reader.read_node();
- yield fail_if_not_end_of_stream(reader);
- cb();
+ try {
+ var reader = new StanzaReader.for_string(stream);
+ fail_if_not_eq_node(root_node_cmp, yield reader.read_root_node());
+ fail_if_not_eq_node(node_cmp, yield reader.read_node());
+ yield reader.read_node();
+ yield fail_if_not_end_of_stream(reader);
+ cb();
+ } catch (GLib.Error e) {
+ cb(e);
+ }
}
private async void fail_if_not_end_of_stream(StanzaReader reader) {
@@ -105,13 +113,17 @@ class StanzaTest : Gee.TestCase {
.put_node(new StanzaNode.build("required", "urn:ietf:params:xml:ns:xmpp-bind")));
var node2_cmp = new StanzaNode.build("r", "http://jabber.org/protocol/ack");
- var reader = new StanzaReader.for_string(stream);
- fail_if_not_eq_node(root_node_cmp, yield reader.read_root_node());
- fail_if_not_eq_node(node_cmp, yield reader.read_node());
- fail_if_not_eq_node(node2_cmp, yield reader.read_node());
- yield reader.read_node();
- yield fail_if_not_end_of_stream(reader);
- cb();
+ try {
+ var reader = new StanzaReader.for_string(stream);
+ fail_if_not_eq_node(root_node_cmp, yield reader.read_root_node());
+ fail_if_not_eq_node(node_cmp, yield reader.read_node());
+ fail_if_not_eq_node(node2_cmp, yield reader.read_node());
+ yield reader.read_node();
+ yield fail_if_not_end_of_stream(reader);
+ cb();
+ } catch (GLib.Error e) {
+ cb(e);
+ }
}
private void test_encoded_val() {
diff --git a/xmpp-vala/tests/testcase.vala b/xmpp-vala/tests/testcase.vala
index 178b6353..10da78f6 100644
--- a/xmpp-vala/tests/testcase.vala
+++ b/xmpp-vala/tests/testcase.vala
@@ -62,7 +62,7 @@ public abstract class Gee.TestCase : Object {
namespace Gee {
public delegate void TestMethod ();
- public delegate void TestFinishedCallback ();
+ public delegate void TestFinishedCallback (GLib.Error? error = null);
public delegate void AsyncTestMethod (TestFinishedCallback cb);
}
@@ -128,8 +128,15 @@ private class Gee.TestAsyncAdaptor : Object, TestAdaptor {
main_loop.run ();
}
- public void finish () {
- Idle.add (() => { main_loop.quit (); return false; });
+ public void finish (GLib.Error? error = null) {
+ Idle.add(() => {
+ main_loop.quit();
+ if (error != null) {
+ Test.fail();
+ Test.message("Error: %s", error.message);
+ }
+ return false;
+ });
}
public bool finish_timeout () {
diff --git a/libdino/tests/weak_map.vala b/xmpp-vala/tests/weak_map.vala
index 3f552661..ee4a8b02 100644
--- a/libdino/tests/weak_map.vala
+++ b/xmpp-vala/tests/weak_map.vala
@@ -1,6 +1,4 @@
-using Dino.Entities;
-
-namespace Dino.Test {
+namespace Xmpp.Test {
class WeakMapTest : Gee.TestCase {
@@ -88,10 +86,10 @@ namespace Dino.Test {
assert_false(map.has_key(0));
}
- private void test_non_object_construction() {
- WeakMap<int, int> map = new WeakMap<int, int>();
- assert_not_reached();
- }
+// private void test_non_object_construction() {
+// WeakMap<int, int> map = new WeakMap<int, int>();
+// assert_not_reached();
+// }
}
}