summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/msn/msnaccount.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/msn/msnaccount.h')
-rw-r--r--kopete/protocols/msn/msnaccount.h271
1 files changed, 271 insertions, 0 deletions
diff --git a/kopete/protocols/msn/msnaccount.h b/kopete/protocols/msn/msnaccount.h
new file mode 100644
index 00000000..e7a80f4a
--- /dev/null
+++ b/kopete/protocols/msn/msnaccount.h
@@ -0,0 +1,271 @@
+/*
+ msnaccount.h - Manages a single MSN account
+
+ Copyright (c) 2003-2005 by Olivier Goffart <ogoffart@ kde.org>
+ Copyright (c) 2005 by Michaêl Larouche <michael.larouche@kdemail.net>
+
+ Kopete (c) 2003-2005 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 MSNACCOUNT_H
+#define MSNACCOUNT_H
+
+#include <tqobject.h>
+
+#include "kopetepasswordedaccount.h"
+
+#include "msnprotocol.h"
+
+class TDEAction;
+class TDEActionMenu;
+
+class MSNNotifySocket;
+class MSNContact;
+
+/**
+ * MSNAccount encapsulates everything that is account-based, as opposed to
+ * protocol based. This basically means sockets, current status, and account
+ * info are stored in the account, whereas the protocol is only the
+ * 'manager' class that creates and manages accounts.
+ */
+class MSNAccount : public Kopete::PasswordedAccount
+{
+ Q_OBJECT
+
+
+public:
+ MSNAccount( MSNProtocol *parent, const TQString &accountID, const char *name = 0L );
+
+ /*
+ * return the menu for this account
+ */
+ virtual TDEActionMenu* actionMenu();
+
+ //------ internal functions
+ /**
+ * change the publicName to this new name
+ */
+ void setPublicName( const TQString &name );
+ void setPersonalMessage(MSNProtocol::PersonalMessageType type, const TQString &personalMessage );
+
+ /**
+ * Returns the address of the MSN server
+ */
+ TQString serverName();
+
+ /**
+ * Returns the address of the MSN server port
+ */
+ uint serverPort();
+
+ MSNNotifySocket *notifySocket();
+
+ /**
+ * return true if we are able to send mail, or to open hotmail inbox
+ */
+ bool isHotmail() const;
+
+
+ /**
+ * Return the picture url.
+ */
+ TQString pictureUrl();
+
+ /**
+ * Set the picture url.
+ */
+ void setPictureUrl(const TQString &url);
+
+ /**
+ * return the <msnobj> tag of the display picture
+ */
+ TQString pictureObject();
+
+ /**
+ * reset the <msnobj>. This method should be called if the displayimage has changed
+ * If we are actualy connected, it will imediatly update the <msgobj> on the server, exepted
+ * if @param silent is set to true
+ * @param force Force the application of MSN picture
+ */
+ void resetPictureObject(bool silent=false, bool force=false);
+
+ //BEGIN Http
+
+ bool useHttpMethod() const;
+
+ //END
+
+ /**
+ * Return the client ID for the myself contact of this account.
+ * It is dynamic to see if we really have a webcam or not.
+ */
+ TQString myselfClientId() const;
+
+public slots:
+ virtual void connectWithPassword( const TQString &password ) ;
+ virtual void disconnect() ;
+ virtual void setOnlineStatus( const Kopete::OnlineStatus &status , const TQString &reason = TQString());
+
+ /**
+ * Ask to the account to create a new chat session
+ */
+ void slotStartChatSession( const TQString& handle );
+
+ /**
+ * Single slot to display error message.
+ */
+ void slotErrorMessageReceived( int type, const TQString &msg );
+
+protected:
+ virtual bool createContact( const TQString &contactId, Kopete::MetaContact *parentContact );
+
+
+private slots:
+ // Actions related
+ void slotStartChat();
+ void slotOpenInbox();
+ void slotChangePublicName();
+
+//#if !defined NDEBUG //(Stupid moc which don't see when he don't need to slot this slot)
+ /**
+ * Show simple debugging aid
+ */
+ void slotDebugRawCommand();
+//#endif
+
+ // notifySocket related
+ void slotStatusChanged( const Kopete::OnlineStatus &status );
+ void slotNotifySocketClosed();
+ void slotPersonalMessageChanged(const TQString& personalMessage);
+ void slotContactRemoved(const TQString& handle, const TQString& list, const TQString& contactGuid, const TQString& groupGuid );
+ void slotContactAdded(const TQString& handle, const TQString& list, const TQString& publicName, const TQString& contactGuid, const TQString &groupGuid );
+ void slotContactListed( const TQString& handle, const TQString& publicName, const TQString &contactGuid, uint lists, const TQString& groups );
+ void slotNewContactList();
+ /**
+ * The group has successful renamed in the server
+ * groupName: is new new group name
+ */
+ void slotGroupRenamed(const TQString &groupGuid, const TQString& groupName );
+ /**
+ * A new group was created on the server (or received durring an LSG command)
+ */
+ void slotGroupAdded( const TQString& groupName, const TQString &groupGuid );
+ /**
+ * Group was removed from the server
+ */
+ void slotGroupRemoved( const TQString &groupGuid );
+ /**
+ * Incoming RING command: connect to the Switchboard server and send
+ * the startChat signal
+ */
+ void slotCreateChat( const TQString& sessionID, const TQString& address, const TQString& auth,
+ const TQString& handle, const TQString& publicName );
+ /**
+ * Incoming XFR command: this is an result from
+ * slotStartChatSession(handle)
+ * connect to the switchboard server and sen startChat signal
+ */
+ void slotCreateChat( const TQString& address, const TQString& auth);
+
+
+ // ui related
+ /**
+ * A kopetegroup is renamed, rename group on the server
+ */
+ void slotKopeteGroupRenamed( Kopete::Group *g );
+
+ /**
+ * A kopetegroup is removed, remove the group in the server
+ **/
+ void slotKopeteGroupRemoved( Kopete::Group* );
+
+ /**
+ * add contact ui
+ */
+ void slotContactAddedNotifyDialogClosed( const TQString &handle);
+
+ /**
+ * When the dispatch server sends us the notification server to use.
+ */
+ void createNotificationServer( const TQString &host, uint port );
+
+ /**
+ * When a global identity key get changed.
+ */
+ void slotGlobalIdentityChanged( const TQString &key, const TQVariant &value );
+
+private:
+ MSNNotifySocket *m_notifySocket;
+ TDEAction *m_openInboxAction;
+ TDEAction *m_startChatAction;
+ TDEAction *m_changeDNAction;
+
+ // status which will be using for connecting
+ Kopete::OnlineStatus m_connectstatus;
+
+ TQStringList m_msgHandle;
+
+ bool m_newContactList;
+
+
+ /**
+ * Add the contact on the server in the given groups.
+ * this is a helper function called bu createContact and slotStatusChanged
+ */
+ void addContactServerside(const TQString &contactId, TQPtrList<Kopete::Group> groupList);
+
+
+
+public: //FIXME: should be private
+ TQMap<TQString, Kopete::Group*> m_groupList;
+
+ void addGroup( const TQString &groupName, const TQString &contactToAdd = TQString() );
+
+ /**
+ * Find and retrive a MSNContact by its contactGuid. (Helper function)
+ */
+ MSNContact *findContactByGuid(const TQString &contactGuid);
+private:
+
+ // server data
+ TQStringList m_allowList;
+ TQStringList m_blockList;
+ TQStringList m_reverseList;
+
+ Kopete::MetaContact *m_addWizard_metaContact;
+ TQMap< TQString, TQStringList > tmp_addToNewGroup;
+ TQMap< TQString, TQStringList > tmp_addNewContactToGroup;
+
+ TQString m_pictureObj; //a cache of the <msnobj>
+ TQString m_pictureFilename; // the picture filename.
+
+ //this is the translation between old to new groups id when syncing from server.
+ TQMap<TQString, Kopete::Group*> m_oldGroupList;
+
+ /**
+ * I need the password in createNotificationServer.
+ * but i can't ask it there with password() because a nested loop will provoque crash
+ * at this place. so i'm forced to keep it here.
+ * I would like an API to request the password WITHOUT askling it.
+ */
+ TQString m_password;
+
+ /**
+ * Cliend ID is a bitfield that contains supported features for a MSN contact.
+ */
+ uint m_clientId;
+};
+
+#endif
+
+// vim: set noet ts=4 sts=4 sw=4:
+