From 5fe921af84c3327d629e8d02399b224b9fab98ff Mon Sep 17 00:00:00 2001
From: lovetox <philipp@hoerist.com>
Date: Sat, 18 Apr 2020 12:45:16 +0200
Subject: [PATCH] Refactor get_os_info()

---
 gajim/common/app.py     |  2 --
 gajim/common/helpers.py | 22 +++++++++++-----------
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/gajim/common/app.py b/gajim/common/app.py
index 783381c25d..531d6bda1d 100644
--- a/gajim/common/app.py
+++ b/gajim/common/app.py
@@ -71,8 +71,6 @@
 
 css_config = None
 
-os_info = None # used to cache os information
-
 transport_type = {}  # type: Dict[str, str]
 
 # dict of time of the latest incoming message per jid
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index 73c1f6895d..031c98d28a 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -45,6 +45,8 @@
 import json
 import copy
 import collections
+import platform
+import functools
 from collections import defaultdict
 import random
 import weakref
@@ -702,21 +704,19 @@ def get_random_string(count=16):
     allowed = string.ascii_uppercase + string.digits
     return ''.join(random.choice(allowed) for char in range(count))
 
+@functools.lru_cache(maxsize=1)
 def get_os_info():
-    if app.os_info:
-        return app.os_info
-    app.os_info = 'N/A'
-    if os.name == 'nt' or sys.platform == 'darwin':
-        import platform
-        app.os_info = platform.system() + " " + platform.release()
-    elif os.name == 'posix':
+    info = 'N/A'
+    if sys.platform in ('win32', 'darwin'):
+        info = f'{platform.system()} {platform.release()}'
+
+    elif sys.platform == 'linux':
         try:
             import distro
-            app.os_info = distro.name(pretty=True)
+            info = distro.name(pretty=True)
         except ImportError:
-            import platform
-            app.os_info = platform.system()
-    return app.os_info
+            info = platform.system()
+    return info
 
 def allow_showing_notification(account, type_='notify_on_new_message',
 is_first_message=True):
-- 
GitLab