# Guida all'implementazione per l'estensione Pipes di &kopete;

A partire dalla versione 1.0, &kopete; include un'estensione chiamata Pipes (canali). I canali ti consentono di instradare i messaggi in arrivo o in uscita tramite uno script od un programma esterno. Un messaggio in arrivo sarà instradato verso un programma esterno prima di raggiungere la finestra di chat, mentre un messaggio in uscita sarà instradato verso un programma esterno prima di essere inviato attraverso la rete. I canali possono ricevere testo in tre forme:

Corpo del messaggio in testo semplice

  Il corpo del messaggio, in testo semplice &ascii;

Corpo del messaggio in &html;

  Il corpo del messaggio in &html;, come se l'altro partecipante alla chat avesse spedito testo in HTML, e che sarà visualizzato dalla finesta di chat

Messaggio completo in &xml;

  Un documento &xml; che descrive tutte le caratteristiche del messaggio, incluso il relativo corpo in &html;.

Questo documento descrive le specifiche del formato &xml; e come scrivere un programma in grado di gestirlo.

## Output &xml;

Questo è un esempio di quello che un programma riceverà nel suo standard input:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <message subject=""
            route="outbound"
            importance="1"
            formattedTimestamp="11:06:46 am"
            timestamp="Sat Dec 1 11:06:46 2007"
            type="normal"
            mainContactId="spacemonkey1234"
            time="11:06 am" >
            <from>
                    <contact contactId="tdurden"
                            protocolIcon="aim_protocol"
                            userPhoto="/home/kde-devel/.kde4/share/apps/kopete/oscarpictures/tdurden.jpg" >
                            <contactDisplayName dir="ltr" text="tdurden" />
                            <metaContactDisplayName dir="ltr"
                                    text="Tyler" />
                    </contact>
            </from>
            <to>
                    <contact contactId="spacemonkey1234"
                            protocolIcon="aim_protocol"
                            userPhoto="/home/kde-devel/.kde4/share/apps/kopete/avatars/User/7e542903e0ac7519a7496e85f5a5b99d.png" >
                            <contactDisplayName dir="ltr" text="spacemonkey1234" />
                            <metaContactDisplayName dir="ltr" text="Robert Paulson" />
                    </contact>
                    </to>
            <body dir="ltr"
                    bgcolor="#000000"
                    color="#000000" >
                    &lt;span style=" color:#000000;"
    >ciao&lt;/span
    ></body>
    </message>

Questo formato &xml; è vagamente basato sullo schema XSD utilizzati per lo stile delle chat, consultabile presso il sito di Kopete. Questo codice rappresenta un messaggio. Ci sono alcuni dettagli da tenere in considerazione:

- L'attributo «timestamp» dell'elemento «message» è in formato ISO 8601.

- L'attributo «protocolIcon» dell'elemento «contact» viene scelto come segue:

  1. Se l'oggetto contatto ha la proprietà foto impostata, viene usato quel percorso.

  2. Altrimenti, viene considerato il percorso dell'immagine per il metacontatto del contatto in questione, e viene utilizzato comunque, anche se vuoto.

- Gli attributi «color» e «bgcolor» dell'elemento «body» sono stringhe vuote se non impostati in Kopete. Sono rappresentati nel formato dei colori del web.

- Nel contenuto dell'elemento «body», l'entità «<» è stata trasformatatramite caratteri di escape in modo da non essere confusa con la struttura &xml;. Ovviamente, per interpretare correttamente il corpo del messaggio come HTML, bisogna convertire le occorrenze di «&lt;» in «<».

## Input &xml;

Il tuo programma riceverà i dati &xml; nel suo standard input, potrà quindi elaborarli e infine dovrà ripassarli indietro a &kopete; utilizzando il proprio standard output. Se il programma modifica uno degli elementi indicati di seguito, la conoscenza che &kopete; ha internamente del messaggio sarà modificata per riflettere i cambiamenti.

- attributo «timestamp» di «message», ma non gli altri attributi temporali

- attributo «subject» di «message»

- attributo «type» di «message»

- attributo «importance» di «message»

- attributo «color» di «body». Il valore di questo attributo normalmente rappresenta un codice di colore web, ma può essere un nome. I nomi definiti da SVG sono accettati da QColor in Qt 4 e sono quindi gli unici nomi utilizzabili.

- attributo «bgcolor» di «body» — stesso comportamento di «color»

- il contenuto dell'elemento «body»

Se modifichi elementi o attributi non citati qui sopra, i cambiamenti effettuati non avranno alcun effetto.

## Valori accettabili

Alcuni attributi hanno dei requisiti riguardo i valori accettabili. L'output dell'estensione Pipes avrà sempre valori validi. Se il tuo programma modifica questi attributi, il relativo valore deve rimanere valido. In caso contrario il comportamento di &kopete; è indefinito.

Attributo «route» dell'elemento «message»

  Deve essere «inbound», «outbound» o «internal»

Attributo «type» dell'elemento «message»

  Deve essere «action» o «normal»

Attributo «importance» dell'elemento «message»

  Deve essere «0» per bassa, «1» per normale e «2» per alta

Attributo «dir» di vari elementi

  Deve essere «ltr» per la indicare da sinistra a destra, o «rtl» per la direzione da destra a sinistra