[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kopete-devel
Subject:    Re: [Kopete-devel] BUGS (do you hate me yet martijn ?)
From:       Duncan Mac-Vicar Prett <duncan () kde ! org>
Date:       2002-05-31 21:03:26
[Download RAW message or body]

Attached 2 patches, one for libkopete, another for msn, that prevents this to 
happen, if you disconnect, all protocol sessions willl not be able to send
and MSN will clean its sessions automaticly when connected.
old widnows are left open, may be the user want to finish reading them.

Test them as muh as you can, if I dont receive any reply within a couple of 
hours I will commit and post the tarballs with this fix included.

Apply the patches in libkopete and protocols/msn respectively

Cheers
Duncan

-- 
=============================================
Duncan Mac-Vicar Prett     | duncan@puc.cl  | 
KDE Developer              | duncan@kde.org |

http://www.mac-vicar.com   | ICQ: 31947372  |

- Kopete, The KDE Instant Messenger
  http://kopete.kde.org

=============================================
KDE 3.0, Konquer your Desktop. www.kde.org
=============================================
Public Key available at:
www.mac-vicar.com/~duncan/pgpkey.txt
Key ID      : 667E42D1
Fingerprint : 75DA 7B97 1FD6 ADB9 A880 BA9F CD1E B6A9 667E 42D1


["04-msnbug-libkopete.diff" (text/x-diff)]

Index: kopetemessagemanager.cpp
===================================================================
RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanager.cpp,v
retrieving revision 1.28
diff -u -3 -d -p -r1.28 kopetemessagemanager.cpp
--- kopetemessagemanager.cpp	2002/05/25 16:03:42	1.28
+++ kopetemessagemanager.cpp	2002/05/31 21:03:12
@@ -32,7 +32,7 @@ KopeteMessageManager::KopeteMessageManag
 		KopeteProtocol *protocol, QString logFile, enum WidgetType widget,
 		QObject *parent, const char *name) : QObject( parent, name)
 {
-
+    mSendEnabled = true;
 	mContactList = others;
 	mUser = user;
 	mChatWindow = 0L;
@@ -59,8 +59,19 @@ KopeteMessageManager::~KopeteMessageMana
 	emit dying(this);
 }
 
+void KopeteMessageManager::slotSendEnabled( bool e )
+{
+	mSendEnabled = e;
+	if ( mChatWindow )
+	{
+		mChatWindow->setSendEnabled(e);
+	}	
+}
+
 void KopeteMessageManager::newChatWindow() {
 	mChatWindow = new KopeteChatWindow();
+	mChatWindow->setSendEnabled( mSendEnabled);	
+
 	if (mContactList.first() != 0L)
 		mChatWindow->setCaption(mContactList.first()->name()); //TODO: add multi-user support
 	/* When the window is shown, we have to delete this contact event */
Index: kopetemessagemanager.h
===================================================================
RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanager.h,v
retrieving revision 1.14
diff -u -3 -d -p -r1.14 kopetemessagemanager.h
--- kopetemessagemanager.h	2002/05/21 10:13:16	1.14
+++ kopetemessagemanager.h	2002/05/31 21:03:12
@@ -115,7 +115,7 @@ signals:
 
 public slots:
 	void readModeChanged();
-	
+	void slotSendEnabled( bool );
 protected slots:
 	void cancelUnreadMessageEvent();
 	void slotEventDeleted(KopeteEvent *);
@@ -142,6 +142,7 @@ private:
 	enum WidgetType mWidget;
 	QMap<const KopeteContact *, QStringList> resources;
 	KopeteProtocol *mProtocol;
+	bool mSendEnabled;
 };
 
 #endif
Index: kopetemessagemanagerfactory.cpp
===================================================================
RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanagerfactory.cpp,v
retrieving revision 1.13
diff -u -3 -d -p -r1.13 kopetemessagemanagerfactory.cpp
--- kopetemessagemanagerfactory.cpp	2002/05/26 16:18:24	1.13
+++ kopetemessagemanagerfactory.cpp	2002/05/31 21:03:12
@@ -113,5 +113,30 @@ void KopeteMessageManagerFactory::slotRe
 	(mSessionList).remove(session);
 }
 
+KopeteMessageManagerList KopeteMessageManagerFactory::protocolSessions( KopeteProtocol *protocol)
+{
+	KopeteMessageManager *tmpKmm;
+	KopeteMessageManagerList this_protocol_sessions;
+	for ( tmpKmm = mSessionList.first(); tmpKmm ; tmpKmm = mSessionList.next() )
+	{
+		if ( tmpKmm->protocol() == protocol )
+		{
+			this_protocol_sessions.append(tmpKmm);
+		}
+	}
+	return this_protocol_sessions;
+}
+
+void KopeteMessageManagerFactory::cleanSessions( KopeteProtocol *protocol)
+{
+	KopeteMessageManager *tmpKmm;
+	KopeteMessageManagerList protocol_sessions = protocolSessions( protocol );
+	for ( tmpKmm = protocol_sessions.first(); tmpKmm ; tmpKmm = protocol_sessions.next() )
+	{
+			slotRemoveSession(tmpKmm);
+	}
+}
+
+
 // vim: set noet ts=4 sts=4 sw=4:
 
Index: kopetemessagemanagerfactory.h
===================================================================
RCS file: /home/kde/kdenonbeta/kopete/libkopete/kopetemessagemanagerfactory.h,v
retrieving revision 1.9
diff -u -3 -d -p -r1.9 kopetemessagemanagerfactory.h
--- kopetemessagemanagerfactory.h	2002/05/21 10:13:16	1.9
+++ kopetemessagemanagerfactory.h	2002/05/31 21:03:12
@@ -57,6 +57,14 @@ public:
 	 * Get a list of all open sessions
 	 */
 	static const KopeteMessageManagerList& sessions();
+	/**
+	 * Get a list of all open sessions  for a protocol
+	 */
+	KopeteMessageManagerList protocolSessions( KopeteProtocol *);
+	/**
+	  *	Clean sessions for a protocol
+	  */
+	void cleanSessions( KopeteProtocol *);
 
 protected slots:
 	void slotRemoveSession( KopeteMessageManager *session );

["04-msnbug-msnplugin.diff" (text/x-diff)]

? ui/msndebugrawcommand_base.cpp
? ui/msndebugrawcommand_base.h
Index: msnprotocol.cpp
===================================================================
RCS file: /home/kde/kdenonbeta/kopete/protocols/msn/msnprotocol.cpp,v
retrieving revision 1.78
diff -u -3 -d -p -r1.78 msnprotocol.cpp
--- msnprotocol.cpp	2002/05/29 14:07:44	1.78
+++ msnprotocol.cpp	2002/05/31 21:03:43
@@ -363,6 +363,7 @@ void MSNProtocol::slotOnlineStatusChange
 	mIsConnected = status == MSNSocket::Connected;
 	if ( mIsConnected )
 	{
+		kopeteapp->sessionFactory()->cleanSessions(this);
 		// Sync public name when needed
 		if( m_publicNameSyncNeeded )
 		{
@@ -429,6 +430,14 @@ void MSNProtocol::slotOnlineStatusChange
 	}
 	else if( status == MSNSocket::Disconnected )
 	{
+
+		KopeteMessageManagerList protocol_sessions = kopeteapp->sessionFactory()->protocolSessions( this );
+		KopeteMessageManager *tmpKmm;
+		for ( tmpKmm = protocol_sessions.first(); tmpKmm ; tmpKmm = protocol_sessions.next() )
+        {
+			tmpKmm->slotSendEnabled(false);
+		}
+
 		QMap<QString, MSNContact*>::Iterator it = m_contacts.begin();
 		while( it != m_contacts.end() )
 		{

_______________________________________________
Kopete-devel mailing list
Kopete-devel@mail.kde.org
http://mail.kde.org/mailman/listinfo/kopete-devel

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic