Quick background: I’m working on a bot with a strophe frontend. The bot can be interacted with directly, but the strophe client also uses it to manage a dashboard. In the strophe client, I am specifically setting a thread value on my messages as well as a unique resource when logging in. I log in with the same account Adium uses for my normal chat behavior. Every so often, I’d get bot responses in my Adium window while doing development on the dashboard. I tracked the reason down to Smack’s internal chat management. If it can’t find a chat that matches the thread, it uses one from the user or bare user cache (in order). Anyway, I wanted to be able to turn this behavior off. I made the following change in the ChatManager source for 3.3.1 (context provided), I’d be interested if this could become a core feature so I don’t have to patch future versions:
*** 91,96 ****
— 91,98 ----
= new WeakHashMap<PacketInterceptor, PacketFilter>();
private Connection connection;
-
private boolean strictThreadsResources = false;
ChatManager(Connection connection) {
this.connection = connection;
*** 116,122 ****
}
else {
chat = getThreadChat(message.getThread());
! if (chat == null) {
// Try to locate the chat based on the sender of the message
chat = getUserChat(message.getFrom());
}
— 118,124 ----
}
else {
chat = getThreadChat(message.getThread());
! if (chat == null && !strictThreadsResources) {
// Try to locate the chat based on the sender of the message
chat = getUserChat(message.getFrom());
}
*** 129,134 ****
— 131,148 ----
}
}, filter);
}
-
/**
-
* Force smack to not fall back to user chat matching when looking up a matching
-
* chat for messages with a thread. If the thread don't match, create a new chat
-
*/
-
public void setStrictThreadsResources(boolean strict) {
-
strictThreadsResources = strict;
-
}
-
public boolean getStrictThreadsResources() {
-
return strictThreadsResources;
-
}
/**
- Creates a new chat and returns it.
ChatManager.diff.zip (683 Bytes)