Ejemplo n.º 1
0
 def __init__(self,parent):
     plasmascript.Applet.__init__(self,parent)
     self._kopeteCore = KopeteCore()
     self._contactsInfo = {}
Ejemplo n.º 2
0
class Kosmoid(plasmascript.Applet):
    def __init__(self,parent):
        plasmascript.Applet.__init__(self,parent)
        self._kopeteCore = KopeteCore()
        self._contactsInfo = {}

    def init(self):
        self.resize(200,345)
        self.imgPath = self.package().path() + "contents/images/"
        self.setHasConfigurationInterface(False)
        self.setAspectRatioMode(Plasma.IgnoreAspectRatio)
        
        #self.theme = Plasma.Svg(self)
        #self.theme.setImagePath("widgets/background")
        self.setBackgroundHints(Plasma.Applet.NoBackground)
        
        self.timer = QTimer()
                        
        self.contactsList = QTreeWidget()
        #self.contactsList.setStyleSheet("QTreeWidget {border: none;} QTreeView::item:hover {background-color: #5f5f5f;}")
        
        self.contactsList.setColumnCount(3)
        self.contactsList.header().setResizeMode(0, QHeaderView.ResizeToContents)
        self.contactsList.header().setResizeMode(1, QHeaderView.Stretch)
        self.contactsList.header().setResizeMode(2, QHeaderView.ResizeToContents)
        self.contactsList.header().setStretchLastSection(False)          
        self.contactsList.header().hide()
        
        self.contactsList.setIconSize(QSize(22, 22))
        self.contactsList.setRootIsDecorated(False)        
        self.contactsList.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.contactsList.setVerticalScrollMode(QAbstractItemView.ScrollPerItem)
        
        self.connect(self.timer, SIGNAL("timeout()"), self.reload)
        self.connect(self.contactsList, SIGNAL("itemClicked(QTreeWidgetItem *, int)"), self.startConversation)        
        
        # here we put the contact list and any other thing we want...        
        self.layout = QGridLayout()        
        self.layout.addWidget(self.contactsList)        
        #self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        
        # groupbox which contains our list, it has to be changed
        groupBox = Plasma.GroupBox()
        groupBox.nativeWidget().setFlat(True)
        groupBox.nativeWidget().setLayout(self.layout)
        groupBox.nativeWidget().setContentsMargins(0, 0, 0, 0)
        
        self.layout = QGraphicsLinearLayout(self.applet)
        self.layout.setOrientation(Qt.Vertical)
        self.layout.addItem(groupBox)
        self.layout.setContentsMargins(0, 0, 0, 0)
        
        self.reload()
        
        self.timer.start(2500)
  
    def reload(self):
        self._kopeteCore.reload()
        self.setContacts()
        
    def setContacts(self, force=False):
        # extracts info about contacts from KopeteCore object
        items = []
        if self._kopeteCore._kopete == None:
            self.contactsList.clear()
            print 'kopete is not running'
            return
        elif (self._kopeteCore._kopete != None) and (len(self._kopeteCore.connectedAccounts())==0):
            self.contactsList.clear()
            print 'not connected to an account'
            return

        tempContactsInfo = {}
        for c in self._kopeteCore.contacts.values(): # get contacts
            id = c[0]
            alias = c[1]
            status = c[2]
            picture = c[3]
            status_message = c[4]
            messages = c[5]
            idle_time = c[6]
            item =  KopeteItem(self,id, alias, status, picture, status_message, messages, idle_time)
            tempContactsInfo[id] = (alias, status, picture, status_message, messages, idle_time)
            items.append(item)

        if (tempContactsInfo == self._contactsInfo) and not force:
            # update list only if contacts are changed
            return
        else:
            print 'contact list changed'
            self.contactsList.clear()
            self._contactsInfo = tempContactsInfo
            
        items.sort(cmp=KopeteItem.compare)
        i = 0
        for item in items:
            item.set_color(i)
            i = i+1
        self.contactsList.insertTopLevelItems(0, items)

    def startConversation(self, item, row):
        self.setContacts(force=True)
        if (item.id=="X") and (item.status=="Away"):
            self._kopeteCore._kopete.connectAll() #StopGap-Measure because we can't know which account to connect
            return
        try:
            self._kopeteCore.openChat(item.id)
        except:
            if self._kopeteCore._kopete == None:
                print("Launching kopete")
                try:
                    os.system("kopete")
                except:
                    pass
                self._kopeteCore.reload()