73 cmd = args[0]; |
73 cmd = args[0]; |
74 |
74 |
75 if (args[1]) { |
75 if (args[1]) { |
76 const char *j = args[1]; |
76 const char *j = args[1]; |
77 if (check_jid_syntax(j)) { |
77 if (check_jid_syntax(j)) { |
78 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8, |
78 scr_log_print(LPRINT_NORMAL|LPRINT_NOTUTF8, |
79 "<%s> is not a valid Jabber ID.", j); |
79 "<%s> is not a valid Jabber ID.", j); |
80 return; |
80 return; |
81 } |
81 } |
82 jid = g_strdup(j); |
82 jid = g_strdup(j); |
83 if (!jid) { |
83 if (!jid) { |
84 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8, |
84 scr_log_print (LPRINT_NORMAL|LPRINT_NOTUTF8, |
85 "Unexpected error."); |
85 "Unexpected error."); |
86 return; |
86 return; |
87 } |
87 } |
88 jfree = TRUE; |
88 jfree = TRUE; |
89 } |
89 } |
90 } else |
90 } else |
96 |
96 |
97 if (current_buddy) |
97 if (current_buddy) |
98 j = CURRENT_JID; |
98 j = CURRENT_JID; |
99 |
99 |
100 if (!j) { |
100 if (!j) { |
101 scr_LogPrint(LPRINT_NORMAL, "No buddy is currently selected."); |
101 scr_log_print (LPRINT_NORMAL, "No buddy is currently selected."); |
102 return; |
102 return; |
103 } |
103 } |
104 |
104 |
105 jid = g_strdup(j); |
105 jid = g_strdup (j); |
106 jfree = TRUE; |
106 jfree = TRUE; |
107 |
|
108 // TODO: handle group marking :) |
|
109 } |
107 } |
110 |
108 |
111 |
109 |
112 if (!strcmp (cmd, "set")) { |
110 if (!strcmp (cmd, "set")) { |
113 |
111 |
114 if (!g_slist_find_custom (marked_jids, jid, (GCompareFunc) g_strcmp0)) { |
112 if (!g_slist_find_custom (marked_jids, jid, (GCompareFunc) g_strcmp0)) { |
115 marked_jids = g_slist_append (marked_jids, jid); |
113 marked_jids = g_slist_append (marked_jids, jid); |
116 marked = 1; |
114 marked = 1; |
117 jfree = FALSE; |
115 jfree = FALSE; |
118 } |
116 } |
119 |
117 |
120 } else if (!strcmp (cmd, "clear")) { |
118 } else if (!strcmp (cmd, "clear")) { |
121 |
119 |
122 GSList *mel = g_slist_find_custom (marked_jids, jid, (GCompareFunc) g_strcmp0); |
120 GSList *mel = g_slist_find_custom (marked_jids, jid, (GCompareFunc) g_strcmp0); |
123 |
121 |
124 if (mel) { |
122 if (mel) { |
125 g_free (mel->data); |
123 g_free (mel->data); |
126 marked_jids = g_slist_delete_link (marked_jids, mel); |
124 marked_jids = g_slist_delete_link (marked_jids, mel); |
127 marked = 0; |
125 marked = 0; |
128 } |
126 } |
129 |
127 |
130 } else if (!strcmp (cmd, "toggle")) { |
128 } else if (!strcmp (cmd, "toggle")) { |
131 |
129 |
132 GSList *mel = g_slist_find_custom (marked_jids, jid, (GCompareFunc) g_strcmp0); |
130 GSList *mel = g_slist_find_custom (marked_jids, jid, (GCompareFunc) g_strcmp0); |
133 |
131 |
134 if (mel) { |
132 if (mel) { |
135 g_free (mel->data); |
133 g_free (mel->data); |
136 marked_jids = g_slist_delete_link (marked_jids, mel); |
134 marked_jids = g_slist_delete_link (marked_jids, mel); |
137 marked = 0; |
135 marked = 0; |
138 } else { |
136 } else { |
139 marked_jids = g_slist_append (marked_jids, jid); |
137 marked_jids = g_slist_append (marked_jids, jid); |
140 marked = 1; |
138 marked = 1; |
141 jfree = FALSE; |
139 jfree = FALSE; |
142 } |
140 } |
143 } |
141 } |
144 |
142 |
145 len = g_slist_length(marked_jids); |
143 len = g_slist_length(marked_jids); |
146 if (marked == 1) { |
144 if (marked == 1) { |
149 } else if (marked == 0) { |
147 } else if (marked == 0) { |
150 scr_write_incoming_message (jid, "Mark cleared", 0, |
148 scr_write_incoming_message (jid, "Mark cleared", 0, |
151 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0); |
149 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0); |
152 } |
150 } |
153 if (marked >= 0) { |
151 if (marked >= 0) { |
154 scr_LogPrint(LPRINT_NORMAL, "<%s> is now %s (%u mark%s).", jid, |
152 scr_log_print (LPRINT_NORMAL, "<%s> is now %s (%u mark%s).", jid, |
155 marked == 1 ? "marked" : "unmarked", |
153 marked == 1 ? "marked" : "unmarked", |
156 len, len > 1 ? "s" : ""); |
154 len, len > 1 ? "s" : ""); |
157 } |
155 } |
158 |
156 |
159 if (jfree && jid) |
157 if (jfree && jid) |
160 g_free (jid); |
158 g_free (jid); |
161 |
159 |
173 cmd = "list"; |
171 cmd = "list"; |
174 |
172 |
175 if (!strcmp (cmd, "list")) { |
173 if (!strcmp (cmd, "list")) { |
176 |
174 |
177 GSList *mel; |
175 GSList *mel; |
178 guint len = g_slist_length(marked_jids); |
176 guint len = g_slist_length (marked_jids); |
179 |
177 |
180 if (!marked_jids) { |
178 if (!marked_jids) { |
181 scr_log_print (LPRINT_NORMAL, "No marked JIDs."); |
179 scr_log_print (LPRINT_NORMAL, "No marked JIDs."); |
182 } else { |
180 } else { |
183 scr_log_print (LPRINT_NORMAL, "%d marked JIDs:", len); |
181 scr_log_print (LPRINT_NORMAL, "%d marked JIDs:", len); |
184 for (mel = marked_jids; mel; mel = mel->next) { |
182 for (mel = marked_jids; mel; mel = mel->next) { |
185 char *jid = (char *) mel->data; |
183 char *jid = (char *) mel->data; |
186 scr_log_print (LPRINT_NORMAL, " * %s", jid); |
184 scr_log_print (LPRINT_NORMAL, " * %s", jid); |
187 } |
185 } |
188 // Smartly set the status flag if we have more marks than the log |
186 // XXX Smartly set the status flag if we have more marks than the log |
189 // window height. |
187 // window height. |
190 if (len + 1 > scr_getlogwinheight()) { |
188 if (len + 1 > scr_getlogwinheight()) { |
191 scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); |
189 scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); |
192 scr_setattentionflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE, |
190 scr_setattentionflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE, |
193 ROSTER_UI_PRIO_STATUS_WIN_MESSAGE, prio_max); |
191 ROSTER_UI_PRIO_STATUS_WIN_MESSAGE, prio_max); |
250 } |
248 } |
251 |
249 |
252 void marking_init (void) |
250 void marking_init (void) |
253 { |
251 { |
254 #ifndef MCABBER_API_HAVE_CMD_ID |
252 #ifndef MCABBER_API_HAVE_CMD_ID |
255 cmd_add ("mark", "", 0, COMPL_JID, do_mark, NULL); |
253 cmd_add ("mark", "", 0, COMPL_JID, do_mark, NULL); |
256 cmd_add ("marked", "", 0, COMPL_CMD, do_marked, NULL); |
254 cmd_add ("marked", "", 0, COMPL_CMD, do_marked, NULL); |
257 #else |
255 #else |
258 mark_cmid = cmd_add ("mark", "", 0, COMPL_JID, do_mark, NULL); |
256 mark_cmid = cmd_add ("mark", "", 0, COMPL_JID, do_mark, NULL); |
259 marked_cmid = cmd_add ("marked", "", 0, COMPL_CMD, do_marked, NULL); |
257 marked_cmid = cmd_add ("marked", "", 0, COMPL_CMD, do_marked, NULL); |
260 #endif |
258 #endif |
261 } |
259 } |
262 |
260 |
263 void marking_uninit (void) |
261 void marking_uninit (void) |