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

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwurstsalat <mailtrash@posteo.de>2022-11-29 21:31:40 +0300
committerwurstsalat <mailtrash@posteo.de>2022-11-29 21:31:58 +0300
commit7de69ca41549a3c8b4fc538be10465bbfba181d8 (patch)
tree8e428fcaf0197d9ce7f815e7db7fefbc627cf5da
parent171a6f5cf951bed6d5c8fb28d406a134662701cf (diff)
[clients_icons] 7.10.6
-rw-r--r--clients_icons/__init__.py2
-rw-r--r--clients_icons/clients.py35
-rw-r--r--clients_icons/clients_icons.py61
-rw-r--r--clients_icons/config_dialog.py50
-rw-r--r--clients_icons/plugin-manifest.json2
5 files changed, 88 insertions, 62 deletions
diff --git a/clients_icons/__init__.py b/clients_icons/__init__.py
index e23b75c..d3ab0bc 100644
--- a/clients_icons/__init__.py
+++ b/clients_icons/__init__.py
@@ -1 +1 @@
-from .clients_icons import ClientsIconsPlugin
+from .clients_icons import ClientsIconsPlugin # type: ignore
diff --git a/clients_icons/clients.py b/clients_icons/clients.py
index 4643b26..745fafe 100644
--- a/clients_icons/clients.py
+++ b/clients_icons/clients.py
@@ -13,16 +13,24 @@
# You should have received a copy of the GNU General Public License
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+from __future__ import annotations
+
+from typing import Any
+from typing import Optional
+
from collections import UserDict
-from collections import namedtuple
+from dataclasses import dataclass
from gajim.plugins.plugins_i18n import _
-ClientData = namedtuple('ClientData', ['default', 'variations'])
-ClientData.__new__.__defaults__ = (None,)
+@dataclass
+class ClientData:
+ default: Optional[tuple[str, str]] = None
+ variations: Optional[dict[str, str]] = None
-def get_variations(client_name):
+
+def get_variations(client_name: str) -> list[str]:
# get_variations('Conversation Legacy 1.2.3')
#
# Returns List:
@@ -32,29 +40,32 @@ def get_variations(client_name):
if client_name is None:
return []
alts = client_name.split()
- alts = [" ".join(alts[:(i + 1)]) for i in range(len(alts))]
+ alts = [' '.join(alts[:(i + 1)]) for i in range(len(alts))]
alts.reverse()
return alts
-class ClientsDict(UserDict):
- def get_client_data(self, name, node):
+class ClientsDict(UserDict[str, ClientData]):
+ def get_client_data(self, name: str, node: str) -> tuple[str, str]:
client_data = self.get(node)
if client_data is None:
return _('Unknown'), 'xmpp-client-unknown'
if client_data.variations is None:
+ assert client_data.default is not None
client_name, icon_name = client_data.default
- return client_name, 'xmpp-client-%s' % icon_name
+ return client_name, f'xmpp-client-{icon_name}'
variations = get_variations(name)
for var in variations:
try:
- return var, 'xmpp-client-%s' % client_data.variations[var]
+ return var, f'xmpp-client-{client_data.variations[var]}'
except KeyError:
pass
+
+ assert client_data.default is not None
client_name, icon_name = client_data.default
- return client_name, 'xmpp-client-%s' % icon_name
+ return client_name, f'xmpp-client-{icon_name}'
# ClientData(
@@ -62,6 +73,7 @@ class ClientsDict(UserDict):
# variations={Shown name, icon name}
# )
+# pylint: disable=too-many-lines
CLIENTS = ClientsDict({
'http://gajim.org': ClientData(('Gajim', 'gajim')),
'https://gajim.org': ClientData(('Gajim', 'gajim')),
@@ -193,7 +205,8 @@ CLIENTS = ClientsDict({
'http://www.xfire.com/caps': ClientData(('Xfire', 'xfire')),
'http://xu-6.jabbrik.ru/caps': ClientData(('XU-6', 'bot')),
})
+# pylint: enable=too-many-lines
-def get_data(*args):
+def get_data(*args: Any) -> tuple[str, str]:
return CLIENTS.get_client_data(*args)
diff --git a/clients_icons/clients_icons.py b/clients_icons/clients_icons.py
index f873cdc..0bc1d8f 100644
--- a/clients_icons/clients_icons.py
+++ b/clients_icons/clients_icons.py
@@ -13,18 +13,29 @@
# You should have received a copy of the GNU General Public License
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+from __future__ import annotations
+
+from typing import cast
+from typing import Optional
+from typing import Union
+
import logging
from pathlib import Path
from functools import partial
from gi.repository import Gtk
+from nbxmpp.structs import DiscoInfo
+
from gajim.common import app
-from gajim.gui.util import load_icon_surface
+from gajim.common.modules.contacts import GroupchatParticipant
+from gajim.common.modules.contacts import ResourceContact
from gajim.plugins import GajimPlugin
from gajim.plugins.plugins_i18n import _
+from gajim.gui.util import load_icon_surface
+
from clients_icons import clients
from clients_icons.config_dialog import ClientsIconsConfigDialog
@@ -32,7 +43,7 @@ log = logging.getLogger('gajim.p.client_icons')
class ClientsIconsPlugin(GajimPlugin):
- def init(self):
+ def init(self) -> None:
self.description = _('Shows client icons in your contact list '
'and in the groupchat participants list.')
self.config_dialog = partial(ClientsIconsConfigDialog, self)
@@ -41,10 +52,7 @@ class ClientsIconsPlugin(GajimPlugin):
'roster_tooltip_resource_populate': (
self._roster_tooltip_resource_populate,
None),
- 'gc_tooltip_populate': (
- self._gc_roster_tooltip_populate,
- None),
- }
+ }
self.config_default_values = {
'show_in_tooltip': (True, ''),
@@ -56,12 +64,18 @@ class ClientsIconsPlugin(GajimPlugin):
_icon_theme.append_search_path(str(Path(__file__).parent))
@staticmethod
- def _get_client_identity_name(disco_info):
+ def _get_client_identity_name(disco_info: DiscoInfo) -> Optional[str]:
for identity in disco_info.identities:
if identity.category == 'client':
return identity.name
+ return None
+
+ def _get_image_and_client_name(self,
+ contact: Union[
+ GroupchatParticipant, ResourceContact],
+ _widget: Gtk.Widget
+ ) -> Optional[tuple[Gtk.Image, str]]:
- def _get_image_and_client_name(self, contact, _widget):
disco_info = app.storage.cache.get_last_disco_info(contact.jid)
if disco_info is None:
return None
@@ -77,7 +91,11 @@ class ClientsIconsPlugin(GajimPlugin):
surface = load_icon_surface(icon_name)
return Gtk.Image.new_from_surface(surface), client_name
- def _roster_tooltip_resource_populate(self, resource_box, resource):
+ def _roster_tooltip_resource_populate(self,
+ resource_box: Gtk.Box,
+ resource: ResourceContact
+ ) -> None:
+
if not self.config['show_in_tooltip']:
return
@@ -94,26 +112,5 @@ class ClientsIconsPlugin(GajimPlugin):
client_box.add(label)
children = resource_box.get_children()
- children[0].add(client_box)
-
- def _gc_roster_tooltip_populate(self, tooltip, contact, tooltip_grid):
- if not self.config['show_in_tooltip']:
- return
-
- result = self._get_image_and_client_name(contact, tooltip_grid)
- if result is None:
- return
-
- image, client_name = result
-
- label = Gtk.Label(label=client_name)
-
- box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
- box.add(image)
- box.add(label)
- box.show_all()
-
- tooltip_grid.insert_next_to(tooltip._ui.affiliation,
- Gtk.PositionType.BOTTOM)
- tooltip_grid.attach_next_to(box, tooltip._ui.affiliation,
- Gtk.PositionType.BOTTOM, 1, 1)
+ box = cast(Gtk.Box, children[9])
+ box.add(client_box)
diff --git a/clients_icons/config_dialog.py b/clients_icons/config_dialog.py
index c0b7f3e..3c1aabb 100644
--- a/clients_icons/config_dialog.py
+++ b/clients_icons/config_dialog.py
@@ -13,34 +13,50 @@
# You should have received a copy of the GNU General Public License
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+from __future__ import annotations
+
+from typing import Any
+from typing import TYPE_CHECKING
+
from gi.repository import Gtk
+from gajim.plugins.plugins_i18n import _
+
from gajim.gui.settings import SettingsDialog
from gajim.gui.const import Setting
from gajim.gui.const import SettingKind
from gajim.gui.const import SettingType
-from gajim.plugins.plugins_i18n import _
+if TYPE_CHECKING:
+ from .clients_icons import ClientsIconsPlugin
class ClientsIconsConfigDialog(SettingsDialog):
- def __init__(self, plugin, parent):
+ def __init__(self, plugin: ClientsIconsPlugin, parent: Gtk.Window) -> None:
self.plugin = plugin
settings = [
-
- Setting(SettingKind.SWITCH, _('Show Icons in Tooltip'),
- SettingType.VALUE, self.plugin.config['show_in_tooltip'],
- callback=self._on_setting, data='show_in_tooltip'),
-
- Setting(SettingKind.SWITCH, _('Show Icon for Unknown Clients'),
- SettingType.VALUE, self.plugin.config['show_unknown_icon'],
- callback=self._on_setting, data='show_unknown_icon'),
-
- ]
-
- SettingsDialog.__init__(self, parent, _('Clients Icons Configuration'),
- Gtk.DialogFlags.MODAL, settings, None)
-
- def _on_setting(self, value, data):
+ Setting(SettingKind.SWITCH,
+ _('Show Icons in Tooltip'),
+ SettingType.VALUE,
+ self.plugin.config['show_in_tooltip'],
+ callback=self._on_setting,
+ data='show_in_tooltip'),
+
+ Setting(SettingKind.SWITCH,
+ _('Show Icon for Unknown Clients'),
+ SettingType.VALUE,
+ self.plugin.config['show_unknown_icon'],
+ callback=self._on_setting,
+ data='show_unknown_icon'),
+ ]
+
+ SettingsDialog.__init__(self,
+ parent,
+ _('Clients Icons Configuration'),
+ Gtk.DialogFlags.MODAL,
+ settings,
+ '')
+
+ def _on_setting(self, value: Any, data: Any) -> None:
self.plugin.config[data] = value
diff --git a/clients_icons/plugin-manifest.json b/clients_icons/plugin-manifest.json
index bba9611..f59dd36 100644
--- a/clients_icons/plugin-manifest.json
+++ b/clients_icons/plugin-manifest.json
@@ -18,5 +18,5 @@
"gajim>=1.4.0"
],
"short_name": "clients_icons",
- "version": "7.10.5"
+ "version": "7.10.6"
} \ No newline at end of file