marking.c
changeset 30 48213f7bb577
parent 29 2464d2194e57
child 31 55395c6ef7ea
equal deleted inserted replaced
29:2464d2194e57 30:48213f7bb577
    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)