X-Git-Url: http://cgit.babelmonkeys.de/?p=jubjub.git;a=blobdiff_plain;f=src%2Fgui%2Fgtk%2FJubGtkRosterUI.m;h=9a2da292a1f68075d0f02e176e2bf0c9efd9b4bb;hp=acdffb6c96dfdcbffd36a1252616472a0319f603;hb=d5df5e6b07d60d4ac8f43213e719d3331a8b5eb6;hpb=3a233a0664461f57f4aef6ca9ca98e15a77a081c diff --git a/src/gui/gtk/JubGtkRosterUI.m b/src/gui/gtk/JubGtkRosterUI.m index acdffb6..9a2da29 100644 --- a/src/gui/gtk/JubGtkRosterUI.m +++ b/src/gui/gtk/JubGtkRosterUI.m @@ -1,5 +1,6 @@ #import "JubGtkRosterUI.h" #import "JubGObjectMap.h" +#import "JubGtkChatUI.h" static gboolean filter_roster_by_presence(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) @@ -38,6 +39,7 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, initWithKeyFunctions: keyFunctions valueFunctions: rowRefFunctions]; contactMap = [[OFMutableDictionary alloc] init]; + chatMap = [[OFMutableDictionary alloc] init]; presences = [[OFCountedSet alloc] init]; builder = g_object_ref(builder_); @@ -94,6 +96,34 @@ static gboolean refilter_roster(gpointer data) g_idle_add(refilter_roster, roster_filter); } +// FIXME: This needs to move somewhere else +- (void)connection: (XMPPConnection*)connection + didReceiveMessage: (XMPPMessage*)message +{ + JubGtkChatUI *chat = [chatMap objectForKey: [message.from bareJID]]; + if (chat == nil) { + OFString * title = [@"Chat with " stringByAppendingString: + [message.from bareJID]]; + chat = [JubGtkChatUI alloc]; + [[chat initWithTitle: title + sendBlock: ^(OFString *text) { + XMPPMessage *msg = + [XMPPMessage messageWithType: @"chat"]; + msg.to = message.from; + msg.body = text; + [connection sendStanza: msg]; + + [chat addMessage: msg.body + sender: [message.to bareJID]]; + }] autorelease]; + + [chatMap setObject: chat + forKey: [message.from bareJID]]; + } + [chat addMessage: message.body + sender: [message.from bareJID]]; +} + /* Roster Delegate methods */ struct add_roster_item_param { OFString *group;