Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwurstsalat <mailtrash@posteo.de>2023-04-16 16:03:06 +0300
committerwurstsalat <mailtrash@posteo.de>2023-04-16 16:10:03 +0300
commit047f5138361780a086511315305fa4c4b3e97c36 (patch)
tree943c05e097a396c6d7551c7fa1ae71cdaf8aaf35
parentb7235b5a3664cb6ad312c19509b4c8edfe543d0f (diff)
refactor: Move QR code generation to helpers
-rw-r--r--gajim/common/helpers.py19
-rw-r--r--gajim/gtk/omemo_trust_manager.py42
2 files changed, 31 insertions, 30 deletions
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index df60e00a3..8962f5a13 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -48,6 +48,7 @@ import re
import socket
import string
import sys
+import tempfile
import unicodedata
import weakref
import webbrowser
@@ -61,8 +62,10 @@ from urllib.parse import unquote
from urllib.parse import urlparse
import precis_i18n.codec # noqa: F401
+import qrcode
from cryptography import x509
from cryptography.hazmat.backends import default_backend
+from gi.repository import GdkPixbuf
from gi.repository import Gio
from gi.repository import GLib
from gi.repository import GObject
@@ -366,6 +369,22 @@ def get_contact_dict_for_account(account: str) -> dict[str, types.BareContact]:
return contacts_dict
+def generate_qr_code(content: str) -> GdkPixbuf.Pixbuf | None:
+ image_path = os.path.join(
+ tempfile.gettempdir(),
+ f'{get_random_string()}.png')
+ qr = qrcode.QRCode(version=None,
+ error_correction=qrcode.constants.ERROR_CORRECT_L,
+ box_size=6,
+ border=4)
+ qr.add_data(content)
+ qr.make(fit=True)
+
+ img = qr.make_image(fill_color='black', back_color='white')
+ img.save(image_path)
+ return GdkPixbuf.Pixbuf.new_from_file(image_path)
+
+
def play_sound(sound_event: str,
account: Optional[str] = None,
force: bool = False,
diff --git a/gajim/gtk/omemo_trust_manager.py b/gajim/gtk/omemo_trust_manager.py
index b51168cba..c81016d21 100644
--- a/gajim/gtk/omemo_trust_manager.py
+++ b/gajim/gtk/omemo_trust_manager.py
@@ -23,8 +23,6 @@ from typing import Union
import locale
import logging
-import os
-import tempfile
import time
from gi.repository import GdkPixbuf
@@ -38,6 +36,7 @@ from gajim.common import types
from gajim.common.events import AccountConnected
from gajim.common.events import AccountDisconnected
from gajim.common.ged import EventHelper
+from gajim.common.helpers import generate_qr_code
from gajim.common.i18n import _
from gajim.common.modules.contacts import BareContact
from gajim.common.omemo.util import get_fingerprint
@@ -235,39 +234,22 @@ class OMEMOTrustManager(Gtk.Box, EventHelper):
self._ui.list.add(row)
@staticmethod
- def _get_qrcode(jid: str, sid: int, identity_key: IdentityKeyPair) -> str:
- fingerprint = get_fingerprint(identity_key)
- path = os.path.join(tempfile.gettempdir(),
- 'omemo_{}.png'.format(jid))
+ def _get_qrcode(jid: str,
+ sid: int,
+ identity_key: IdentityKeyPair
+ ) -> GdkPixbuf.Pixbuf | None:
+ fingerprint = get_fingerprint(identity_key)
ver_string = 'xmpp:{}?omemo-sid-{}={}'.format(jid, sid, fingerprint)
log.debug('Verification String: %s', ver_string)
-
- import qrcode
- qr = qrcode.QRCode(version=None,
- error_correction=qrcode.constants.ERROR_CORRECT_L,
- box_size=6,
- border=4)
- qr.add_data(ver_string)
- qr.make(fit=True)
-
- img = qr.make_image(fill_color='black', back_color='white')
- img.save(path)
- return path
+ return generate_qr_code(ver_string)
def _load_qrcode(self) -> None:
- try:
- client = app.get_client(self._account)
- path = self._get_qrcode(client.get_own_jid().bare,
- self._omemo.backend.own_device,
- self._identity_key)
- except ImportError:
- log.exception('Failed to generate QR code')
- self._ui.qr_code_image.hide()
- else:
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(path)
- self._ui.qr_code_image.set_from_pixbuf(pixbuf)
- self._ui.qr_code_image.show()
+ client = app.get_client(self._account)
+ pixbuf = self._get_qrcode(client.get_own_jid().bare,
+ self._omemo.backend.own_device,
+ self._identity_key)
+ self._ui.qr_code_image.set_from_pixbuf(pixbuf)
def _on_show_inactive(self, switch: Gtk.Switch, _param: Any) -> None:
self._ui.list.invalidate_filter()