示例#1
0
    def resort(self, mock = False):
        assert on_thread('sorter').now

        rootgroups = [display_copy(g) for g in self.rootgroups if isinstance(g, GroupTypes)]
        self.personalities = self.track_personalities(rootgroups)

        metacontacts = self.safe_metacontacts(rootgroups)

        # Always collect metacontacts, but exit early here if sorting is paused.
        if self.sorting_paused:# or not profile.prefs_loaded:
            return

        metrics.event('Buddylist Sort')

        self._setup_blist_sorter()

        # invalidate all sorter knowledge of contacts.
        # results in more CPU usage, but until we put metacontact combining into the sorter
        # this might be necessary.
        self.new_sorter.removeAllContacts()

        newroots = rootgroups[:] + [metacontacts]
        for i, root in enumerate(newroots):
            root.name = "Root" + str(i)
            root._root = True
        root = DGroup('none', [], [], newroots)
        if mock: self.mock_root = make_mocklist(root)
        self.new_sorter.set_root(root)

        view = get_view_from_sorter(self.new_sorter)

        if getattr(self, '_search_by', ''):
            if len(view) > 0:
                contacts_group = view[0]

                # don't allow renaming, etc of the search "Contacts" group
                contacts_group._disallow_actions = True
                num_contacts = len(contacts_group)
            else:
                num_contacts = -1

            self._search_results = self._search_results[1], num_contacts
        else:
            if pref('buddylist.hide_offline_dependant', False, bool):
                hide_offline_groups = not pref('buddylist.show_offline') and pref('buddylist.hide_offline_groups')
            else:
                hide_offline_groups = pref('buddylist.hide_offline_groups')
            if hide_offline_groups:
                view[:] = filter((lambda g: not offline_nonempty_group_re.match(g.display_string)), view)

        for g in view: remove_duplicate_contacts(g)

        self.add_search_entries(view)

        hooks.notify('buddylist.sorted', view)

        return view
示例#2
0
    def __init__(self, parent, initial_tab=default_selected_tab):
        wx.Frame.__init__(self,
                          parent,
                          title=_('Digsby Preferences'),
                          size=self.default_size,
                          style=prefs_dialog_style,
                          name='Preferences Window')

        self.loaded_panels = {}
        self.SetMinSize(self.default_size)

        metrics.event('Prefs Dialog Opened')

        self.create_gui()
        self.bind_events()
        self.layout_gui()
        self.exithooks = Delegate()

        with traceguard:
            from gui import skin
            self.SetFrameIcon(skin.get('AppDefaults.TaskbarIcon'))

        if not wxMac:
            self.BackgroundColour = wx.WHITE
            self.Bind(wx.EVT_ERASE_BACKGROUND, lambda e: None)

        self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

        # Fake a first selection
        self.tabs.SetSelection(initial_tab)
        self.on_tab_selected(initial_tab)

        self.tabnames = names = [
            module_name for module_name, nice_name in tabnames
        ]

        self.Bind(wx.EVT_CLOSE, self.on_close)
        self._loaded = 0

        # Obey the windows.sticky prreference
        snap_pref(self)

        profile.prefs.add_observer(self.incoming_network_prefs)

        from gui.uberwidgets.keycatcher import KeyCatcher
        k = self._keycatcher = KeyCatcher(self)
        k.OnDown('ctrl+w', self.Close)
        k.OnDown('escape', self.Close)
示例#3
0
    def __init__(self, parent, initial_tab = default_selected_tab):
        wx.Frame.__init__(self, parent, title = _('Digsby Preferences'),
                           size = self.default_size,
                           style = prefs_dialog_style,
                           name = 'Preferences Window')

        self.loaded_panels = {}
        self.SetMinSize(self.default_size)

        metrics.event('Prefs Dialog Opened')

        self.create_gui()
        self.bind_events()
        self.layout_gui()
        self.exithooks = Delegate()

        with traceguard:
            from gui import skin
            self.SetFrameIcon(skin.get('AppDefaults.TaskbarIcon'))

        if not wxMac:
            self.BackgroundColour = wx.WHITE
            self.Bind(wx.EVT_ERASE_BACKGROUND, lambda e: None)

        self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

        # Fake a first selection
        self.tabs.SetSelection(initial_tab)
        self.on_tab_selected(initial_tab)

        self.tabnames = names = [module_name for module_name, nice_name in tabnames]

        self.Bind(wx.EVT_CLOSE, self.on_close)
        self._loaded = 0

        # Obey the windows.sticky prreference
        snap_pref(self)

        profile.prefs.add_observer(self.incoming_network_prefs)

        from gui.uberwidgets.keycatcher import KeyCatcher
        k = self._keycatcher = KeyCatcher(self)
        k.OnDown('ctrl+w', self.Close)
        k.OnDown('escape', self.Close)
示例#4
0
    def test_Context(self):
        log_data = StringIO.StringIO()
        handler = logging.StreamHandler(log_data)
        handler.setLevel(logging.INFO)
        handler.setFormatter(formatter)
        logger.addHandler(handler)

        start = time()
        with metrics.Context(a=5) as c:
            self.assertEquals(c['a'], 5)
            c['b'] = 6
            self.assertEquals(c['b'], 6)
            with metrics.Timer('foo', d=7) as t:
                self.assertEquals(t['d'], 7)
                t['e'] = 8
                self.assertEquals(t['e'], 8)

            self.assertEquals(len(metrics.context.events), 1)

            metrics.event('bar', f=9)

            self.assertEquals(len(metrics.context.events), 2)
        duration = time()-start

        logger.removeHandler(handler)
        data = json.loads(log_data.getvalue())
        from pprint import pprint
        pprint(data)
        self.assertEquals(data['a'], 5)
        self.assertEquals(data['b'], 6)
        self.assertAlmostEquals(data['start'], start, 2)
        self.assertAlmostEquals(data['duration'], duration, 2)
        self.assertEquals(len(data['events']), 2)

        e0 = data['events'][0]
        self.assertAlmostEquals(e0['start'], start, 2)
        self.assertAlmostEquals(e0['duration'], duration, 2)
        self.assertEquals(e0['name'], 'foo')
        self.assertEquals(e0['d'], 7)
        self.assertEquals(e0['e'], 8)

        e1 = data['events'][1]
        self.assertAlmostEquals(e1['start'], start, 2)
        self.assertEquals(e1['name'], 'bar')
        self.assertEquals(e1['f'], 9)
示例#5
0
    def __init__(self, parent, initialContents = '', url = None):
        metrics.event('IE Window Created')

        iewin.IEHtmlWindow.__init__(self, parent, style = wx.NO_BORDER)

        self.OnNav = Delegate() # Called for NavigateComplete2 events
        self.OnBeforeNav = Delegate() # Called for Navigate2 events
        self.OnDoc = Delegate() # Called for DocumentComplete events

        # allow security popups to appear
        self._set_Silent(False)

        if url is not None:
            self.seturl = url
            assert isinstance(url, basestring)
            self.LoadUrl(url)
        else:
            s = initialContents or ''
            if s:
                self.SetPage(s)
示例#6
0
    def __init__(self, parent, pos = wx.DefaultPosition):
        wx.Panel.__init__(self, parent, pos = (-300, -300))
        InstanceTracker.track(self)

        self.BackgroundStyle = wx.BG_STYLE_CUSTOM
        self.Sizer = BoxSizer(VERTICAL)
        self.showncontrol = None

        self.link_observers()
        self.construct_gui()
        self.setup_delegation()

        ImWinCtrl.__init__(self)
        imwinmenu.add_menus(self)

        metrics.event('IM Window Opened')

        self.UpdateSkin()

        self.IMControl.OnSelection += self.on_im_to_changed

        self.Bind(wx.EVT_SIZE, self.OnSize)
示例#7
0
    def on_state_change(self, state):
        log.info('on_state_change: %r', state)

        if state == 'online':
            self.change_state(self.Statuses.ONLINE)
            self._on_online.call_and_clear()

        elif state == 'autherror':
            self.set_offline(self.Reasons.BAD_PASSWORD)

        elif state == 'oautherror':
            if self._should_retry_oauth():
                log.warning('negotiating new OAuth token')
                metrics.event('Twitter OAuth Refresh Token')
                self.Disconnect(set_state=False)
                self.oauth_token = None
                self.Connect()
            else:
                self.set_offline(self.Reasons.BAD_PASSWORD)

        elif state == 'connfail':
            self.set_offline(self.Reasons.CONN_FAIL)
            self.Disconnect(set_state=False)
示例#8
0
    def on_state_change(self, state):
        log.info('on_state_change: %r', state)

        if state == 'online':
            self.change_state(self.Statuses.ONLINE)
            self._on_online.call_and_clear()

        elif state == 'autherror':
            self.set_offline(self.Reasons.BAD_PASSWORD)

        elif state == 'oautherror':
            if self._should_retry_oauth():
                log.warning('negotiating new OAuth token')
                metrics.event('Twitter OAuth Refresh Token')
                self.Disconnect(set_state=False)
                self.oauth_token = None
                self.Connect()
            else:
                self.set_offline(self.Reasons.BAD_PASSWORD)

        elif state == 'connfail':
            self.set_offline(self.Reasons.CONN_FAIL)
            self.Disconnect(set_state=False)
示例#9
0
 def test_no_context(self):
     """Without a context, we shouldn't see any exceptions, although the
     log will complain."""
     with metrics.Timer('foo') as t:
         pass
     metrics.event('bar')