Mon, 30 Dec 2024 13:15:48 +0100
add exec maven plugin
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | package de.unixwork.im; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | import javax.swing.*; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | import java.util.HashMap; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | import java.util.List; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | import java.util.Map; |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
7 | import org.jivesoftware.smack.packet.Presence; |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | import org.jivesoftware.smack.roster.RosterEntry; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | import org.jxmpp.jid.Jid; |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
10 | import org.jxmpp.jid.parts.Resourcepart; |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | public class App { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | private static App instance; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | private final ContactListFrame contactListFrame; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | private final Map<String, ConversationFrame> conversations; |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
18 | private final Map<String, PresenceInfo> presence = new HashMap<>(32); |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | private final Xmpp xmpp; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | public App(Xmpp xmpp) throws Exception { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | if(instance != null) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | throw new Exception("App already initilized"); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | App.instance = this; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | conversations = new HashMap<>(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | this.xmpp = xmpp; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | // Create the contact list window |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | contactListFrame = new ContactListFrame(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | contactListFrame.setContactClickListener(contact -> { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | openConversation(contact.getJid().asUnescapedString()); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | }); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | contactListFrame.setVisible(true); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | public static App getInstance() { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | return instance; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | public Xmpp getXmpp() { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | return xmpp; |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | // Method to open a conversation window |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | public void openConversation(String xid) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | SwingUtilities.invokeLater(() -> { |
|
3
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
49 | ConversationFrame conversationFrame = conversations.get(xid); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
50 | if (conversationFrame == null) { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
51 | conversationFrame = new ConversationFrame(xid); |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | conversations.put(xid, conversationFrame); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | conversationFrame.setVisible(true); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | } else { |
|
3
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
55 | conversationFrame.setVisible(true); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
56 | conversationFrame.toFront(); |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | }); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | public void dispatchMessage(Jid from, String msg, boolean secure) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | SwingUtilities.invokeLater(() -> { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | // add message to the correct conversation |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | // if no conversation exists yet, create a new window |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | String xid = from.asBareJid().toString(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | //String resource = from.getResourceOrNull(); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | ConversationFrame conversation = conversations.get(xid); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | if(conversation == null) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | conversation = new ConversationFrame(xid); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | conversations.put(xid, conversation); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | conversation.addToLog(msg, true, false); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | conversation.setVisible(true); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | }); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | public void setContacts(List<RosterEntry> contacts) { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | SwingUtilities.invokeLater(() -> { |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | contactListFrame.setContacts(contacts); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | }); |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | } |
|
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | |
|
3
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
85 | public PresenceInfo getPresenceForXID(String xid) { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
86 | return presence.get(xid); |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | } |
|
3
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
88 | |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
89 | public String getStatusForXID(String xid) { |
|
3
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
90 | PresenceInfo ps = getPresenceForXID(xid); |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
91 | if(ps == null) { |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
92 | return "<offline> "; |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
93 | } |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
94 | return ps.getOnlineStatus(); |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
95 | } |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
96 | |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
97 | void handlePresence(Jid from, Presence.Type type) { |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
98 | System.out.println("presence from: " + from.toString() + " type: " + type.toString()); |
|
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
99 | |
|
3
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
100 | SwingUtilities.invokeLater(() -> { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
101 | String xid = from.asBareJid().toString(); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
102 | PresenceInfo ps = presence.get(xid); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
103 | if(ps == null) { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
104 | ps = new PresenceInfo(); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
105 | presence.put(xid, ps); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
106 | } |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
107 | |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
108 | // update presence |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
109 | Resourcepart resource = from.getResourceOrNull(); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
110 | if(resource != null) { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
111 | ps.setStatus(resource.toString(), type); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
112 | } else { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
113 | // TODO |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
114 | } |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
115 | |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
116 | contactListFrame.reload(); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
117 | ConversationFrame conversation = conversations.get(xid); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
118 | if(conversation != null) { |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
119 | conversation.updatePresence(ps); |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
120 | } |
|
25a32e2dfde5
update status in contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
2
diff
changeset
|
121 | }); |
|
2
94c6a715fa44
handle presence messages
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
122 | } |
|
0
f3095cda599e
add initial code with minimal working contact list and conversations
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
123 | } |