[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bugs-dist
Subject: [Bug 130895] Extra Status for ICQ protocol in kopete (aka
From: Roman Jarosz <kedgedev () centrum ! cz>
Date: 2007-01-06 17:03:45
Message-ID: 20070106170345.19523.qmail () ktown ! kde ! org
[Download RAW message or body]
------- 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
{
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic