view sat_frontends/quick_frontend/quick_list_manager.py @ 2701:2ea2369ae7de

plugin XEP-0313: implementation of MAM for messages: - (core/xmpp): new messageGetBridgeArgs to easily retrieve arguments used in bridge from message data - : parseMessage is not static anymore - : new "message_parse" trigger point - (xep-0313) : new "MAMGet" bridge method to retrieve history from MAM instead of local one - : on profileConnected, if previous MAM message is found (i.e. message with a stanza_id), message received while offline are retrieved and injected in message workflow. In other words, one2one history is synchronised on connection. - : new "parseExtra" method which parse MAM (and optionally RSM) option from extra dictionary used in bridge.
author Goffi <goffi@goffi.org>
date Sat, 01 Dec 2018 10:33:43 +0100
parents 56f94936df1e
children 559a625a236b
line wrap: on
line source

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

# Libervia: a Salut à Toi frontend
# Copyright (C) 2013-2016 Adrien Cossa <souliane@mailoo.org>

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


class QuickTagList(object):
    """This class manages a sorted list of tagged items, and a complementary sorted list of suggested but non tagged items."""

    def __init__(self, items=None):
        """

        @param items (list): the suggested list of non tagged items
        """
        self.tagged = []
        self.original = (
            items[:] if items else []
        )  # XXX: copy the list! It will be modified
        self.untagged = (
            items[:] if items else []
        )  # XXX: copy the list! It will be modified
        self.untagged.sort()

    @property
    def items(self):
        """Return a sorted list of all items, tagged or untagged.
        
        @return list
        """
        res = list(set(self.tagged).union(self.untagged))
        res.sort()
        return res

    def tag(self, items):
        """Tag some items.

        @param items (list): items to be tagged
        """
        for item in items:
            if item not in self.tagged:
                self.tagged.append(item)
            if item in self.untagged:
                self.untagged.remove(item)
        self.tagged.sort()
        self.untagged.sort()

    def untag(self, items):
        """Untag some items.
  
        @param items (list): items to be untagged
        """
        for item in items:
            if item not in self.untagged and item in self.original:
                self.untagged.append(item)
            if item in self.tagged:
                self.tagged.remove(item)
        self.tagged.sort()
        self.untagged.sort()