------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
         
http://bugs.kde.org/show_bug.cgi?id=130895         
kedgedev centrum cz changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED



------- Additional Comments From kedgedev centrum cz  2007-01-06 18:03 -------
SVN commit 620581 by rjarosz:

Add general Xtraz notification support.
Add Xtraz status support.
 - we can send and receive Xtraz status.
 - Kopete automatically retrieves Xtraz status.
 - for now we only show Xtraz status description in contact list.

TODO:
 - add GUI interface for own Xtraz status.
 - create OnlineStatus for buddy with Xtraz status icon and title.

FEATURE: 130895



 M  +14 -4     icq/icqcontact.cpp  
 M  +10 -9     icqcontactbase.cpp  
 M  +2 -1      icqcontactbase.h  
 M  +2 -1      liboscar/CMakeLists.txt  
 M  +57 -1     liboscar/client.cpp  
 M  +2 -2      liboscar/client.h  
 M  +1 -1      liboscar/profiletask.cpp  
 A             liboscar/xtrazxawayservice.cpp   [License: LGPL (v2+)]
 A             liboscar/xtrazxawayservice.h   [License: LGPL (v2+)]
 A             liboscar/xtrazxrandomizerservice.cpp   [License: LGPL (v2+)]
 A             liboscar/xtrazxrandomizerservice.h   [License: LGPL (v2+)]
 A             liboscar/xtrazxservice.cpp   [License: LGPL (v2+)]
 A             liboscar/xtrazxservice.h   [License: LGPL (v2+)]
 A             liboscar/xtrazxtraznotify.cpp   [License: LGPL (v2+)]
 A             liboscar/xtrazxtraznotify.h   [License: LGPL (v2+)]


--- trunk/KDE/kdenetwork/kopete/protocols/oscar/icq/icqcontact.cpp 
#620580:620581
 @ -96,15 +96,25  @
        ICQ::Presence presence = ICQ::Presence::fromOscarStatus( 
details.extendedStatus() & 0xffff );
        setOnlineStatus( presence.toOnlineStatus() );
 
-       // ICQ does not support status messages for state Online
+       bool selfVisible = ( ICQ::Presence::fromOnlineStatus( 
account()->myself()->onlineStatus() ).visibility() == ICQ::Presence::Visible );
        if ( presence.type() == ICQ::Presence::Online )
        {
-               mAccount->engine()->removeICQAwayMessageRequest( contactId() );
-               removeProperty( mProtocol->awayMessage );
+               if ( details.xtrazStatusSpecified() )
+               {
+                       if ( selfVisible )
+                               mAccount->engine()->addICQAwayMessageRequest( 
contactId(), Client::ICQXStatus );
+                       else
+                               
mAccount->engine()->removeICQAwayMessageRequest( contactId() );
+               }
+               else
+               {
+                       mAccount->engine()->removeICQAwayMessageRequest( 
contactId() );
+                       removeProperty( mProtocol->awayMessage );
+               }
        }
        else
        {
-               if ( ICQ::Presence::fromOnlineStatus( 
account()->myself()->onlineStatus() ).visibility() == ICQ::Presence::Visible )
+               if ( selfVisible )
                {
                        switch ( presence.type() )
                        {
--- trunk/KDE/kdenetwork/kopete/protocols/oscar/icqcontactbase.cpp 
#620580:620581
 @ -30,10 +30,10  @
 {
        m_requestingNickname = false;
 
-       QObject::connect( mAccount->engine(), SIGNAL( receivedIcqShortInfo( 
const QString& ) ),
-                         this, SLOT( receivedShortInfo( const QString& ) ) );
-       QObject::connect( mAccount->engine(), SIGNAL( receivedAwayMessage( 
const Oscar::Message& ) ),
-                         this, SLOT( receivedStatusMessage( const 
Oscar::Message& ) ) );
+       QObject::connect( mAccount->engine(), SIGNAL(receivedIcqShortInfo(const 
QString&)),
+                         this, SLOT(receivedShortInfo(const QString&)) );
+       QObject::connect( mAccount->engine(), 
SIGNAL(receivedXStatusMessage(const QString&, int, const QString&, const 
QString&)),
+                         this, SLOT(receivedXStatusMessage(const QString&, 
int, const QString&, const QString&)) );
 }
 
 ICQContactBase::~ICQContactBase()
 @ -79,14 +79,15  @
        }
 }
 
-void ICQContactBase::receivedStatusMessage( const Oscar::Message &message )
+void ICQContactBase::receivedXStatusMessage( const QString& contact, int icon, 
const QString& title, const QString& desc )
 {
-       if ( Oscar::normalize( message.sender() ) != Oscar::normalize( 
contactId() ) )
+       if ( Oscar::normalize( contact ) != Oscar::normalize( contactId() ) )
                return;
+
+       // TODOL create OnlineStatus with icon and title
+       setAwayMessage( desc );
        
-       //decode message
-       QTextCodec* codec = contactCodec();
-       setAwayMessage( message.text(codec) );
+       m_haveAwayMessage = true;
 }
 
 void ICQContactBase::slotSendMsg( Kopete::Message& msg, Kopete::ChatSession* 
session )
--- trunk/KDE/kdenetwork/kopete/protocols/oscar/icqcontactbase.h #620580:620581
 @ -29,6 +29,7  @
  *  author Richard Smith
  *  author Matt Rogers
  */
+
 class KOPETE_EXPORT ICQContactBase : public OscarContact
 {
 Q_OBJECT
 @ -53,7 +54,7  @
 
 private slots:
        void receivedShortInfo( const QString& contact );
-       void receivedStatusMessage( const Oscar::Message &message );
+       void receivedXStatusMessage( const QString& contact, int icon, const 
QString& title, const QString& desc );
 
 };
 
--- trunk/KDE/kdenetwork/kopete/protocols/oscar/liboscar/CMakeLists.txt 
#620580:620581
 @ -25,13 +25,14  @
 buddyicontask.cpp serverredirecttask.cpp oscarsettings.cpp filetransfertask.cpp
 localcontactlisttask.cpp chatnavservicetask.cpp connectionhandler.cpp 
chatservicetask.cpp oscarguid.cpp 
 icquserinfoupdatetask.cpp icqchangepasswordtask.cpp oscarmessageplugin.cpp 
oftmetatransfer.cpp
+xtrazxawayservice.cpp xtrazxservice.cpp xtrazxtraznotify.cpp 
xtrazxrandomizerservice.cpp
 )
 
 kde4_automoc(${liboscar_SRCS} )
 
 kde4_add_library( oscar SHARED ${liboscar_SRCS} )
 
-target_link_libraries( oscar ${KDE4_KDECORE_LIBS} ${QT_QTNETWORK_LIBRARY} )
+target_link_libraries( oscar ${KDE4_KDECORE_LIBS} ${QT_QTNETWORK_LIBRARY} 
${QT_QTXML_LIBRARY} )
 
 install(TARGETS oscar  DESTINATION ${LIB_INSTALL_DIR})
 
--- trunk/KDE/kdenetwork/kopete/protocols/oscar/liboscar/client.cpp 
#620580:620581
 @ -65,6 +65,8  @
 #include "icquserinfoupdatetask.h"
 #include "icqchangepasswordtask.h"
 #include "oscarmessageplugin.h"
+#include "xtrazxtraznotify.h"
+#include "xtrazxawayservice.h"
 
 
 namespace
 @ -545,6 +547,31  @
                        response.setText( Oscar::Message::UserDefined, 
statusMessage(), codec );
                        emit userReadsStatusMessage( msg.sender() );
                }
+               else if ( msg.messageType() == Oscar::MessageType::Plugin )
+               {
+                       Oscar::MessagePlugin::Types type = msg.plugin()->type();
+                       Oscar::WORD subType = msg.plugin()->subTypeId();
+                       if ( type == Oscar::MessagePlugin::XtrazScript )
+                       {
+                               if ( subType == 
Oscar::MessagePlugin::SubScriptNotify )
+                               {
+                                       using namespace Xtraz;
+                                       XtrazNotify xNotify;
+                                       xNotify.handle( msg.plugin() );
+                                       if ( xNotify.type() == 
XtrazNotify::Request && xNotify.pluginId() == "srvMng" )
+                                       {
+                                               if ( xNotify.findService( 
"cAwaySrv" ) )
+                                               {
+                                                       //TODO: Send own Xtraz 
status
+                                                       /* XtrazNotify 
xNotifyResponse;
+                                                       
xNotifyResponse.setSenderUni( userId() );
+                                                       response.setPlugin( 
xNotifyResponse.statusResponse( 1, "title", "desc" ) );
+                                                       emit 
userReadsStatusMessage( msg.sender() );*/
+                                               }
+                                       }
+                               }
+                       }
+               }
                else
                {
                        response.setEncoding( Oscar::Message::UserDefined );
 @ -568,7 +595,26  @
                }
                else if ( msg.messageType() == Oscar::MessageType::Plugin )
                {
-                       kDebug( OSCAR_RAW_DEBUG ) << k_funcinfo << "Received a 
plugin message response." << endl;
+                       kDebug( OSCAR_RAW_DEBUG ) << k_funcinfo << "Received an 
plugin message response." << endl;
+
+                       Oscar::MessagePlugin::Types type = msg.plugin()->type();
+                       Oscar::WORD subType = msg.plugin()->subTypeId();
+                       if ( type == Oscar::MessagePlugin::XtrazScript )
+                       {
+                               if ( subType == 
Oscar::MessagePlugin::SubScriptNotify )
+                               {
+                                       using namespace Xtraz;
+                                       XtrazNotify xNotify;
+                                       xNotify.handle( msg.plugin() );
+                                       if ( xNotify.type() == 
XtrazNotify::Response )
+                                       {
+                                               const Xtraz::XAwayService* 
service = dynamic_cast<const XAwayService*>(xNotify.findService( "cAwaySrv" ));
+                                               if ( service )
+                                                       emit 
receivedXStatusMessage( service->senderId(), service->iconIndex(),
+                                                                               
     service->title(), service->description() );
+                                       }
+                               }
+                       }
                }
        }
        else
 @ -922,6 +968,16  @
        case ICQFreeForChat:
                msg.setMessageType( Oscar::MessageType::AutoFFC ); // free for 
chat
                break;
+       case ICQXStatus:
+               {
+                       msg.setMessageType( Oscar::MessageType::Plugin ); // 
plugin message
+                       msg.addProperty( ~ Oscar::Message::StatusMessageRequest 
);
+
+                       Xtraz::XtrazNotify xNotify;
+                       xNotify.setSenderUni( userId() );
+                       msg.setPlugin( xNotify.statusRequest() );
+                       break;
+               }
        default:
                // may be a good way to deal with possible error and lack of 
online status message?
                emit receivedAwayMessage( contact, "Sorry, this protocol does 
not support this type of status message" );
--- trunk/KDE/kdenetwork/kopete/protocols/oscar/liboscar/client.h #620580:620581
 @ -75,7 +75,7  @
                FatalProtocolError = 3
        };
 
-       enum ICQStatus { ICQOnline = 0, ICQAway, ICQNotAvailable, ICQOccupied, 
ICQDoNotDisturb, ICQFreeForChat };
+       enum ICQStatus { ICQOnline = 0, ICQAway, ICQNotAvailable, ICQOccupied, 
ICQDoNotDisturb, ICQFreeForChat, ICQXStatus };
 
        /*************
          EXTERNAL API
 @ -439,7 +439,7  @
 
        void receivedProfile( const QString& contact, const QString& profile );
        void receivedAwayMessage( const QString& contact, const QString& 
message );
-       void receivedAwayMessage( const Oscar::Message& message );
+       void receivedXStatusMessage( const QString& contact, int icon, const 
QString& title, const QString& desc );
        void receivedUserInfo( const QString& contact, const UserDetails& 
details );
        void userReadsStatusMessage( const QString& contact );
 
--- trunk/KDE/kdenetwork/kopete/protocols/oscar/liboscar/profiletask.cpp 
#620580:620581
 @ -104,7 +104,7  @
                        capBuf.addGuid( 
oscar_caps[CAP_DIRECT_ICQ_COMMUNICATION] ); // we support direct communication
                        //capBuf.addGuid( oscar_caps[CAP_RTFMSGS] ); // we do 
incoming RTF messages
                        capBuf.addGuid( oscar_caps[CAP_NEWCAPS] ); // we 
understand the new format of caps (xtra status)
-                       //capBuf.addGuid( oscar_caps[CAP_XTRAZ] ); // we 
support xtraz
+                       capBuf.addGuid( oscar_caps[CAP_XTRAZ] ); // we support 
xtraz
                }
                else
                {
_______________________________________________
kopete-devel mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kopete-devel

Reply via email to