comparison libpurple/protocols/gg/gg.c @ 32742:26ffd7fdba7d

Gadu-Gadu: better handling of invisible and chatty statuses. Fixes #13836
author tomkiewicz@cpw.pidgin.im
date Fri, 14 Oct 2011 18:33:52 +0000
parents 318345f39e98
children 326591e64aaa
comparison
equal deleted inserted replaced
32741:318345f39e98 32742:26ffd7fdba7d
1150 case GG_STATUS_NOT_AVAIL_DESCR: 1150 case GG_STATUS_NOT_AVAIL_DESCR:
1151 st = purple_primitive_get_id_from_type(PURPLE_STATUS_OFFLINE); 1151 st = purple_primitive_get_id_from_type(PURPLE_STATUS_OFFLINE);
1152 break; 1152 break;
1153 case GG_STATUS_FFC: 1153 case GG_STATUS_FFC:
1154 case GG_STATUS_FFC_DESCR: 1154 case GG_STATUS_FFC_DESCR:
1155 st = purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE); 1155 st = "freeforchat";
1156 break; 1156 break;
1157 case GG_STATUS_AVAIL: 1157 case GG_STATUS_AVAIL:
1158 case GG_STATUS_AVAIL_DESCR: 1158 case GG_STATUS_AVAIL_DESCR:
1159 st = purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE); 1159 st = purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE);
1160 break; 1160 break;
1161 case GG_STATUS_BUSY: 1161 case GG_STATUS_BUSY:
1162 case GG_STATUS_BUSY_DESCR: 1162 case GG_STATUS_BUSY_DESCR:
1163 st = purple_primitive_get_id_from_type(PURPLE_STATUS_AWAY); 1163 st = purple_primitive_get_id_from_type(PURPLE_STATUS_AWAY);
1164 break;
1165 case GG_STATUS_INVISIBLE:
1166 case GG_STATUS_INVISIBLE_DESCR:
1167 st = purple_primitive_get_id_from_type(PURPLE_STATUS_INVISIBLE);
1164 break; 1168 break;
1165 case GG_STATUS_DND: 1169 case GG_STATUS_DND:
1166 case GG_STATUS_DND_DESCR: 1170 case GG_STATUS_DND_DESCR:
1167 st = purple_primitive_get_id_from_type(PURPLE_STATUS_UNAVAILABLE); 1171 st = purple_primitive_get_id_from_type(PURPLE_STATUS_UNAVAILABLE);
1168 break; 1172 break;
2148 static GList *ggp_status_types(PurpleAccount *account) 2152 static GList *ggp_status_types(PurpleAccount *account)
2149 { 2153 {
2150 PurpleStatusType *type; 2154 PurpleStatusType *type;
2151 GList *types = NULL; 2155 GList *types = NULL;
2152 2156
2153 type = purple_status_type_new_with_attrs( 2157 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE,
2154 PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, 2158 NULL, NULL, TRUE, TRUE, FALSE,
2155 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 2159 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2156 NULL); 2160 NULL);
2157 types = g_list_append(types, type); 2161 types = g_list_append(types, type);
2158 2162
2159 /* 2163 /*
2160 * Without this selecting Invisible as own status doesn't 2164 * New status for GG 8.0: PoGGadaj ze mna (chatty).
2161 * work. It's not used and not needed to show status of buddies. 2165 * NOTE: at this time, this is used only to set our own status.
2162 */ 2166 */
2163 type = purple_status_type_new_with_attrs( 2167 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE,
2164 PURPLE_STATUS_INVISIBLE, NULL, NULL, TRUE, TRUE, FALSE, 2168 "freeforchat", _("Chatty"), TRUE, TRUE, FALSE,
2165 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 2169 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2166 NULL); 2170 NULL);
2167 types = g_list_append(types, type); 2171 types = g_list_append(types, type);
2168 2172
2169 type = purple_status_type_new_with_attrs( 2173 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY,
2170 PURPLE_STATUS_AWAY, NULL, NULL, TRUE, TRUE, FALSE, 2174 NULL, NULL, TRUE, TRUE, FALSE,
2171 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 2175 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2172 NULL); 2176 NULL);
2173 types = g_list_append(types, type); 2177 types = g_list_append(types, type);
2174 2178
2175 /* 2179 /*
2176 * New statuses for GG 8.0 like PoGGadaj ze mna (not yet because 2180 * New status for GG 8.0: Nie przeszkadzac (do not disturb).
2177 * libpurple can't support Chatty status) and Nie przeszkadzac
2178 */ 2181 */
2179 type = purple_status_type_new_with_attrs( 2182 type = purple_status_type_new_with_attrs(PURPLE_STATUS_UNAVAILABLE,
2180 PURPLE_STATUS_UNAVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, 2183 NULL, NULL, TRUE, TRUE, FALSE,
2181 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 2184 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2182 NULL); 2185 NULL);
2186 types = g_list_append(types, type);
2187
2188 /*
2189 * It's used on buddy list if and only if it's showing our own
2190 * (invisible) status.
2191 */
2192 type = purple_status_type_new_with_attrs(PURPLE_STATUS_INVISIBLE,
2193 NULL, NULL, TRUE, TRUE, FALSE,
2194 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2195 NULL);
2183 types = g_list_append(types, type); 2196 types = g_list_append(types, type);
2184 2197
2185 /* 2198 /*
2186 * This status is necessary to display guys who are blocking *us*. 2199 * This status is necessary to display guys who are blocking *us*.
2187 */ 2200 */
2188 type = purple_status_type_new_with_attrs( 2201 type = purple_status_type_new_with_attrs(PURPLE_STATUS_INVISIBLE,
2189 PURPLE_STATUS_INVISIBLE, "blocked", _("Blocked"), TRUE, FALSE, FALSE, 2202 "blocked", _("Blocked"), TRUE, FALSE, FALSE,
2190 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), NULL); 2203 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2204 NULL);
2191 types = g_list_append(types, type); 2205 types = g_list_append(types, type);
2192 2206
2193 type = purple_status_type_new_with_attrs( 2207 type = purple_status_type_new_with_attrs(PURPLE_STATUS_OFFLINE,
2194 PURPLE_STATUS_OFFLINE, NULL, NULL, TRUE, TRUE, FALSE, 2208 NULL, NULL, TRUE, TRUE, FALSE,
2195 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), 2209 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),
2196 NULL); 2210 NULL);
2197 types = g_list_append(types, type); 2211 types = g_list_append(types, type);
2198 2212
2199 return types; 2213 return types;
2200 } 2214 }
2201 2215
2563 status_id); 2577 status_id);
2564 2578
2565 if (strcmp(status_id, "available") == 0) { 2579 if (strcmp(status_id, "available") == 0) {
2566 new_status = GG_STATUS_AVAIL; 2580 new_status = GG_STATUS_AVAIL;
2567 new_status_descr = GG_STATUS_AVAIL_DESCR; 2581 new_status_descr = GG_STATUS_AVAIL_DESCR;
2582 } else if (strcmp(status_id, "freeforchat") == 0) {
2583 new_status = GG_STATUS_FFC;
2584 new_status_descr = GG_STATUS_FFC_DESCR;
2568 } else if (strcmp(status_id, "away") == 0) { 2585 } else if (strcmp(status_id, "away") == 0) {
2569 new_status = GG_STATUS_BUSY; 2586 new_status = GG_STATUS_BUSY;
2570 new_status_descr = GG_STATUS_BUSY_DESCR; 2587 new_status_descr = GG_STATUS_BUSY_DESCR;
2571 } else if (strcmp(status_id, "unavailable") == 0) { 2588 } else if (strcmp(status_id, "unavailable") == 0) {
2572 new_status = GG_STATUS_DND; 2589 new_status = GG_STATUS_DND;