You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/protocols/yahoo/yahooaccount.h

303 lines
10 KiB

/*
yahooaccount.h - Manages a single Yahoo account
Copyright (c) 2003 by Gav Wood <gav@kde.org>
Copyright (c) 2003 by Matt Rogers <mattrogers@sbcglobal.net>
Based on code by Olivier Goffart <ogoffart@kde.org>
Kopete (c) 2003 by the Kopete developers <kopete-devel@kde.org>
*************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
*************************************************************************
*/
#ifndef YAHOOACCOUNT_H
#define YAHOOACCOUNT_H
// Qt
#include <tqobject.h>
#include <tqmap.h>
#include <tqpixmap.h>
#include <tqpair.h>
// KDE
#include <kurl.h>
// Kopete
#include "kopetepasswordedaccount.h"
// Local
#include "yahooprotocol.h"
#include "yahootypes.h"
class TQColor;
class KAction;
class KActionMenu;
class YahooContact;
class YahooAccount;
class YahooProtocol;
class YahooWebcam;
class YahooConferenceChatSession;
class YahooChatChatSession;
class KTemporaryFile;
namespace Kopete{
class Transfer;
class ChatSession;
class StatusMessage;
class FileTransferInfo;
}
class Client;
struct YABEntry;
class KJob;
namespace KIO{
class Job;
}
class YahooAccount : public Kopete::PasswordedAccount
{
Q_OBJECT
public:
enum SignalConnectionType { MakeConnections, DeleteConnections };
YahooAccount(YahooProtocol *parent,const TQString& accountID, const char *name = 0);
~YahooAccount();
/*
* Returns a contact of name @p id
*/
YahooContact *contact(const TQString &id);
virtual KActionMenu* actionMenu();
/**
* Sets the yahoo away status
*/
virtual void setAway(bool, const TQString &);
/**
* The session
*/
Client *yahooSession();
/**
* Returns true if contact @p id is on the server-side contact list
*/
bool isOnServer(const TQString &id) { return IDs.contains(id); }
/**
* Returns true if we have the server-side contact list
*/
bool haveContactList() const { return theHaveContactList; }
void setUseServerGroups(bool newSetting);
void setImportContacts(bool newSetting);
/**
* Set the pager server
*/
void setServer( const TQString &server );
/**
* Set the port of the pager server
*/
void setPort( int port );
/**
* Set Buddy Icon
*/
void setBuddyIcon( const KURL &url );
void verifyAccount( const TQString &word );
void sendConfMessage( YahooConferenceChatSession *s, const Kopete::Message &message );
void sendChatMessage( const Kopete::Message &msg, const TQString &handle );
void prepareConference( const TQString &who );
void sendFile( YahooContact *to, const KURL &url );
public slots:
/**
* Connect to the Yahoo service
*/
virtual void connectWithPassword( const TQString & );
/**
* Disconnect from the Yahoo service
*/
virtual void disconnect();
/** Reimplemented from Kopete::Account */
void setOnlineStatus( const Kopete::OnlineStatus&, const TQString &reason = TQString::null);
signals:
/**
* Emitted when we receive notification that the person we're talking to is typing
*/
void receivedTypingMsg(const TQString &contactId, bool isTyping);
/**
* Emitted when our Buddy Icon has changed
*/
void signalBuddyIconChanged( int type );
protected:
/**
* Adds our Yahoo contact to a metacontact
*/
virtual bool createContact(const TQString &contactId, Kopete::MetaContact *parentContact);
virtual bool createChatContact( const TQString &nick );
/**
* Gets the just-received message color
*/
TQColor getMsgColor(const TQString& msg);
/**
* Remove color codes from a message
*/
TQString stripMsgColorCodes(const TQString& msg);
protected slots:
void slotConnected();
void slotGoOnline();
void slotGoOffline();
void slotOpenInbox(); // Open Yahoo Mailbox in browser
void slotOpenYAB(); // Open Yahoo Addressbook in browser
void slotEditOwnYABEntry(); // Show own Yahoo Addressbook entry
void slotJoinChatRoom();
void slotChatCategorySelected( const Yahoo::ChatCategory &category );
void slotGoStatus(int status, const TQString &awayMessage = TQString());
void slotLoginResponse(int succ, const TQString &url);
void slotDisconnected();
void slotLoginFailed();
void slotGotBuddy(const TQString &userid, const TQString &alias, const TQString &group);
void slotBuddyAddResult(const TQString &userid, const TQString &group, bool success);
void slotBuddyRemoveResult(const TQString &userid, const TQString &group, bool success);
void slotBuddyChangeGroupResult(const TQString &userid, const TQString &group, bool success);
void slotAuthorizationAccepted( const TQString &who );
void slotAuthorizationRejected( const TQString &who, const TQString &msg );
void slotgotAuthorizationRequest( const TQString &, const TQString &, const TQString & );
void slotContactAddedNotifyDialogClosed( const TQString &user );
//void slotAddedInfoEventActionActivated( uint actionId );
void slotGotIgnore(const TQStringList &);
void slotGotIdentities(const TQStringList &);
void slotStatusChanged(const TQString &who, int stat, const TQString &msg, int away, int idle, int pictureChecksum);
void slotStealthStatusChanged(const TQString &who, Yahoo::StealthStatus state);
void slotGotIm(const TQString &who, const TQString &msg, long tm, int stat);
void slotGotBuzz(const TQString &who, long tm);
void slotGotConfInvite(const TQString &who, const TQString &room, const TQString &msg, const TQStringList &members);
void slotConfUserDecline(const TQString &who, const TQString &room, const TQString &msg);
void slotConfUserJoin(const TQString &who, const TQString &room);
void slotConfUserLeave(const TQString &who, const TQString &room);
void slotConfMessage(const TQString &who, const TQString &room, const TQString &msg);
void slotConfLeave( YahooConferenceChatSession *s );
void slotInviteConference( const TQString &room, const TQStringList &who, const TQStringList &members, const TQString &msg );
void slotAddInviteConference( const TQString &room, const TQStringList &who, const TQStringList &members, const TQString &msg );
void slotGotFile(const TQString &who, const TQString &url, long expires, const TQString &msg, const TQString &fname, unsigned long fesize, const TQPixmap &);
void slotContactAdded(const TQString &myid, const TQString &who, const TQString &msg);
void slotRejected(const TQString &, const TQString &);
void slotTypingNotify(const TQString &, int );
void slotGameNotify(const TQString &, int);
void slotMailNotify(const TQString &, const TQString &, int);
void slotSystemMessage(const TQString &);
void slotRemoveHandler(int fd);
//void slotHostConnect(const TQString &host, int port);
void slotGotWebcamInvite(const TQString &);
void slotWebcamNotAvailable( const TQString &who );
void slotGotWebcamImage(const TQString&, const TQPixmap&);
void slotWebcamReadyForTransmission();
void slotWebcamStopTransmission();
void slotOutgoingWebcamClosing();
void slotWebcamClosed(const TQString&, int);
void slotWebcamPaused(const TQString&);
void slotWebcamViewerJoined( const TQString & );
void slotWebcamViewerLeft( const TQString & );
void slotWebcamViewerRequest( const TQString & );
void slotPictureStatusNotify( const TQString&, int);
void slotGotBuddyIcon(const TQString&, const TQByteArray&, int);
void slotGotBuddyIconInfo(const TQString&, KURL, int);
void slotGotBuddyIconChecksum(const TQString&, int);
void slotGotBuddyIconRequest(const TQString &);
void slotBuddyIconChanged(const TQString&, int);
void slotGotYABEntry( YABEntry *entry );
void slotGotYABRevision( long revision, bool merged );
void slotSaveYABEntry( YABEntry &entry );
void slotModifyYABEntryError( YABEntry *entry, const TQString & );
void slotChatJoined( int roomId, int categoryId, const TQString &comment, const TQString &handle );
void slotChatBuddyHasJoined( const TQString &nick, const TQString &handle, bool suppressNotification );
void slotChatBuddyHasLeft( const TQString &nick, const TQString &handle );
void slotChatMessageReceived( const TQString &nick, const TQString &message, const TQString &handle );
void slotLeavChat();
void slotReceiveFileAccepted( Kopete::Transfer *trans, const TQString& fileName );
void slotReceiveFileRefused( const Kopete::FileTransferInfo& info );
void slotFileTransferComplete( unsigned int id );
void slotFileTransferError( unsigned int id, int error, const TQString &desc );
void slotFileTransferBytesProcessed( unsigned int id, unsigned int bytes );
void slotFileTransferResult( KIO::Job * );
void slotError( int level );
private:
/**
* Handle the signal and slot connections and disconnects
*/
void initConnectionSignals( enum SignalConnectionType sct );
void setupActions( bool connected );
TQString prepareIncomingMessage( const TQString &msg );
/**
* internal (to the plugin) controls/flags
* This should be kept in sync with server - if a buddy is removed, this should be changed accordingly.
*/
TQMap<TQString, QPair<TQString, TQString> > IDs;
/**
* Conferences list, maped by room name (id)
*/
TQMap<TQString, YahooConferenceChatSession *> m_conferences;
YahooChatChatSession * m_chatChatSession;
TQStringList m_pendingConfInvites;
TQStringList m_pendingWebcamInvites;
TQStringList m_pendingFileTransfers;
TQMap<unsigned int, Kopete::Transfer *> m_fileTransfers;
bool theHaveContactList; // Do we have the full server-side contact list yet?
int stateOnConnection; // The state to change to on connection
/**
* External Settings and Descriptors
*/
bool m_useServerGroups; // Use the groups on the server for import
bool m_importContacts; // Import the contacts from the server
int m_sessionId; // The Yahoo session descriptor
int m_lastDisconnectCode; // The last disconnect code.
int m_currentMailCount;
long m_YABLastMerge; // The YAB Revision on which the last merge was done
long m_YABLastRemoteRevision; // The last remote YAB Revision on which a sync was done
YahooProtocol *m_protocol; // The Protocol Object
YahooWebcam *m_webcam;
KAction *m_openInboxAction; // Menu item openInbox
KAction *m_openYABAction; // Menu item openYahooAddressbook
KAction *m_editOwnYABEntry; // Menu item editOwnYABEntry
KAction *m_joinChatAction; // Menu item joinChatAction
Client *m_session; // The Connection object
};
#endif // YAHOOACCOUNT_H