diff cagou/plugins/plugin_wid_file_sharing.py @ 237:059c5b39032d

plugin file sharing: moved common discovery widgets to new core.common_widgets module
author Goffi <goffi@goffi.org>
date Fri, 31 Aug 2018 16:59:38 +0200
parents a676cb07c1cb
children 7918a5668304
line wrap: on
line diff
--- a/cagou/plugins/plugin_wid_file_sharing.py	Fri Aug 31 16:58:15 2018 +0200
+++ b/cagou/plugins/plugin_wid_file_sharing.py	Fri Aug 31 16:59:38 2018 +0200
@@ -27,15 +27,14 @@
 from sat_frontends.tools import jid
 from cagou.core.constants import Const as C
 from cagou.core import cagou_widget
-from cagou.core.menu import (EntitiesSelectorMenu, TouchMenuBehaviour,
-                             TouchMenuItemBehaviour)
+from cagou.core.menu import EntitiesSelectorMenu, TouchMenuBehaviour
 from cagou.core.utils import FilterBehavior
+from cagou.core.common_widgets import (Identities, ItemWidget, DeviceWidget,
+                                       CategorySeparator)
 from cagou import G
 from kivy import properties
 from kivy.uix.label import Label
 from kivy.uix.button import Button
-from kivy.uix.boxlayout import BoxLayout
-from kivy.metrics import dp
 from kivy import utils as kivy_utils
 from functools import partial
 import os.path
@@ -80,36 +79,6 @@
             exceptions.InternalError(u"Unknown mode: {mode}".format(mode=new_mode))
 
 
-class Identities(object):
-
-    def __init__(self, entity_ids):
-        identities = {}
-        for cat, type_, name in entity_ids:
-            identities.setdefault(cat, {}).setdefault(type_, []).append(name)
-        client = identities.get('client', {})
-        if 'pc' in client:
-            self.type = 'desktop'
-        elif 'phone' in client:
-            self.type = 'phone'
-        elif 'web' in client:
-            self.type = 'web'
-        elif 'console' in client:
-            self.type = 'console'
-        else:
-            self.type = 'desktop'
-
-        self.identities = identities
-
-    @property
-    def name(self):
-        return self.identities.values()[0].values()[0][0]
-
-
-class ItemWidget(TouchMenuItemBehaviour, BoxLayout):
-    name = properties.StringProperty()
-    base_width = properties.NumericProperty(dp(100))
-
-
 class PathWidget(ItemWidget):
 
     def __init__(self, filepath, main_wid, **kw):
@@ -171,46 +140,13 @@
             self.main_wid.request_item(self)
             return True
 
-
-class DeviceWidget(ItemWidget):
-
-    def __init__(self, main_wid, entity_jid, identities, **kw):
-        self.entity_jid = entity_jid
-        self.identities = identities
-        own_jid = next(G.host.profiles.itervalues()).whoami
-        self.own_device = entity_jid.bare == own_jid
-        if self.own_device:
-            name = self.identities.name
-        elif self.entity_jid.node:
-            name = self.entity_jid.node
-        elif self.entity_jid.domain.endswith(own_jid.domain):
-            name = _(u"your server")
-        else:
-            name = _(u"sharing component")
-
-        super(DeviceWidget, self).__init__(name=name, main_wid=main_wid, **kw)
-
-    def getSymbol(self):
-        if self.identities.type == 'desktop':
-            return 'desktop'
-        elif self.identities.type == 'phone':
-            return 'mobile'
-        elif self.identities.type == 'web':
-            return 'globe'
-        elif self.identities.type == 'console':
-            return 'terminal'
-        else:
-            return 'desktop'
+class SharingDeviceWidget(DeviceWidget):
 
     def do_item_action(self, touch):
         self.main_wid.remote_entity = self.entity_jid
         self.main_wid.remote_dir = u''
 
 
-class CategorySeparator(Label):
-    pass
-
-
 class FileSharing(quick_widgets.QuickWidget, cagou_widget.CagouWidget, FilterBehavior,
                   TouchMenuBehaviour):
     SINGLE=False
@@ -302,9 +238,8 @@
                 self.layout.add_widget(CategorySeparator(text=title))
                 for entity_str, entity_ids in entities_map.iteritems():
                     entity_jid = jid.JID(entity_str)
-                    item = DeviceWidget(self,
-                                        entity_jid,
-                                        Identities(entity_ids))
+                    item = SharingDeviceWidget(
+                        self, entity_jid, Identities(entity_ids))
                     self.layout.add_widget(item)
         if not entities_services and not entities_own and not entities_roster:
             self.layout.add_widget(Label(