pidgin/plugins/disco/gtkdisco.c

changeset 42037
af20db93f2c2
parent 42034
f05baca349b3
child 42074
58ae70ad7f21
equal deleted inserted replaced
42036:941734e74261 42037:af20db93f2c2
101 g_simple_action_set_enabled(dialog->add_action, FALSE); 101 g_simple_action_set_enabled(dialog->add_action, FALSE);
102 */ 102 */
103 } 103 }
104 } 104 }
105 105
106 static char *
107 pidgin_disco_get_icon_name(XmppDiscoService *service)
108 {
109 char *icon_name = NULL;
110
111 g_return_val_if_fail(service != NULL, NULL);
112
113 if (service->type == XMPP_DISCO_SERVICE_TYPE_GATEWAY && service->gateway_type) {
114 icon_name = g_strconcat("im-", service->gateway_type, NULL);
115 #if 0
116 } else if (service->type == XMPP_DISCO_SERVICE_TYPE_USER) {
117 icon_name = g_strdup("person");
118 #endif
119 } else if (service->type == XMPP_DISCO_SERVICE_TYPE_CHAT) {
120 icon_name = g_strdup("chat");
121 }
122
123 return icon_name;
124 }
125
126 static void 106 static void
127 dialog_select_account_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, 107 dialog_select_account_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec,
128 gpointer data) 108 gpointer data)
129 { 109 {
130 PidginDiscoDialog *dialog = data; 110 PidginDiscoDialog *dialog = data;
144 gpointer data) 124 gpointer data)
145 { 125 {
146 PidginDiscoDialog *dialog = data; 126 PidginDiscoDialog *dialog = data;
147 XmppDiscoService *service = dialog->selected; 127 XmppDiscoService *service = dialog->selected;
148 128
149 g_return_if_fail(service != NULL); 129 g_return_if_fail(XMPP_DISCO_IS_SERVICE(service));
150 130
151 xmpp_disco_service_register(service); 131 xmpp_disco_register_service(service);
152 } 132 }
153 133
154 static void discolist_cancel_cb(PidginDiscoList *pdl, const char *server) 134 static void discolist_cancel_cb(PidginDiscoList *pdl, const char *server)
155 { 135 {
156 pdl->dialog->prompt_handle = NULL; 136 pdl->dialog->prompt_handle = NULL;
246 G_GNUC_UNUSED GVariant *parameter, 226 G_GNUC_UNUSED GVariant *parameter,
247 gpointer data) 227 gpointer data)
248 { 228 {
249 PidginDiscoDialog *dialog = data; 229 PidginDiscoDialog *dialog = data;
250 XmppDiscoService *service = dialog->selected; 230 XmppDiscoService *service = dialog->selected;
231 PidginDiscoList *list = NULL;
251 PurpleAccount *account; 232 PurpleAccount *account;
252 const char *jid; 233 const char *jid;
253 234
254 g_return_if_fail(service != NULL); 235 g_return_if_fail(XMPP_DISCO_IS_SERVICE(service));
255 236
256 account = purple_connection_get_account(service->list->pc); 237 list = xmpp_disco_service_get_list(service);
257 jid = service->jid; 238 account = purple_connection_get_account(list->pc);
258 239 jid = xmpp_disco_service_get_jid(service);
259 if (service->type == XMPP_DISCO_SERVICE_TYPE_CHAT) { 240
241 if(xmpp_disco_service_get_service_type(service) == XMPP_DISCO_SERVICE_TYPE_CHAT) {
260 purple_blist_request_add_chat(account, NULL, NULL, jid); 242 purple_blist_request_add_chat(account, NULL, NULL, jid);
261 } else { 243 } else {
262 purple_blist_request_add_buddy(account, jid, NULL, NULL); 244 purple_blist_request_add_buddy(account, jid, NULL, NULL);
263 } 245 }
264 } 246 }
316 val.g_type = 0; 298 val.g_type = 0;
317 gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model), &iter, 299 gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model), &iter,
318 SERVICE_COLUMN, &val); 300 SERVICE_COLUMN, &val);
319 dialog->selected = g_value_get_pointer(&val); 301 dialog->selected = g_value_get_pointer(&val);
320 if (dialog->selected != NULL) { 302 if (dialog->selected != NULL) {
321 allow_add = (dialog->selected->flags & XMPP_DISCO_ADD); 303 XmppDiscoServiceFlags flags = xmpp_disco_service_get_flags(dialog->selected);
322 allow_register = (dialog->selected->flags & XMPP_DISCO_REGISTER); 304 allow_add = (flags & XMPP_DISCO_ADD) != 0;
305 allow_register = (flags & XMPP_DISCO_REGISTER) != 0;
323 } 306 }
324 } 307 }
325 308
326 g_simple_action_set_enabled(dialog->add_action, allow_add); 309 g_simple_action_set_enabled(dialog->add_action, allow_add);
327 g_simple_action_set_enabled(dialog->register_action, allow_register); 310 g_simple_action_set_enabled(dialog->register_action, allow_register);
349 gpointer user_data) 332 gpointer user_data)
350 { 333 {
351 PidginDiscoDialog *dialog = user_data; 334 PidginDiscoDialog *dialog = user_data;
352 GtkTreeIter iter; 335 GtkTreeIter iter;
353 XmppDiscoService *service; 336 XmppDiscoService *service;
337 XmppDiscoServiceFlags flags;
354 GValue val; 338 GValue val;
355 339
356 if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path)) { 340 if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model), &iter, path)) {
357 return; 341 return;
358 } 342 }
360 val.g_type = 0; 344 val.g_type = 0;
361 gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model), &iter, 345 gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model), &iter,
362 SERVICE_COLUMN, &val); 346 SERVICE_COLUMN, &val);
363 service = g_value_get_pointer(&val); 347 service = g_value_get_pointer(&val);
364 348
365 if (service->flags & XMPP_DISCO_BROWSE) { 349 flags = xmpp_disco_service_get_flags(service);
350 if((flags & XMPP_DISCO_BROWSE) != 0) {
366 if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(dialog->tree), path)) { 351 if (gtk_tree_view_row_expanded(GTK_TREE_VIEW(dialog->tree), path)) {
367 gtk_tree_view_collapse_row(GTK_TREE_VIEW(dialog->tree), path); 352 gtk_tree_view_collapse_row(GTK_TREE_VIEW(dialog->tree), path);
368 } else { 353 } else {
369 gtk_tree_view_expand_row(GTK_TREE_VIEW(dialog->tree), path, FALSE); 354 gtk_tree_view_expand_row(GTK_TREE_VIEW(dialog->tree), path, FALSE);
370 } 355 }
371 } else if (service->flags & XMPP_DISCO_REGISTER) { 356 } else if((flags & XMPP_DISCO_REGISTER) != 0) {
372 g_action_activate(G_ACTION(dialog->register_action), NULL); 357 g_action_activate(G_ACTION(dialog->register_action), NULL);
373 } else if (service->flags & XMPP_DISCO_ADD) { 358 } else if((flags & XMPP_DISCO_ADD) != 0) {
374 g_action_activate(G_ACTION(dialog->add_action), NULL); 359 g_action_activate(G_ACTION(dialog->add_action), NULL);
375 } 360 }
376 } 361 }
377 362
378 static void 363 static void
450 if (!service) { 435 if (!service) {
451 gtk_tree_path_free(path); 436 gtk_tree_path_free(path);
452 return FALSE; 437 return FALSE;
453 } 438 }
454 439
455 switch (service->type) { 440 switch(xmpp_disco_service_get_service_type(service)) {
456 case XMPP_DISCO_SERVICE_TYPE_UNSET: 441 case XMPP_DISCO_SERVICE_TYPE_UNSET:
457 type = _("Unknown"); 442 type = _("Unknown");
458 break; 443 break;
459 444
460 case XMPP_DISCO_SERVICE_TYPE_GATEWAY: 445 case XMPP_DISCO_SERVICE_TYPE_GATEWAY:
480 case XMPP_DISCO_SERVICE_TYPE_OTHER: 465 case XMPP_DISCO_SERVICE_TYPE_OTHER:
481 type = _("Other"); 466 type = _("Other");
482 break; 467 break;
483 } 468 }
484 469
485 name = g_markup_escape_text(service->name, -1); 470 name = g_markup_escape_text(xmpp_disco_service_get_name(service), -1);
486 jid = g_markup_escape_text(service->jid, -1); 471 jid = g_markup_escape_text(xmpp_disco_service_get_jid(service), -1);
487 if (service->description != NULL) { 472 if(xmpp_disco_service_get_description(service) != NULL) {
488 desc = g_markup_escape_text(service->description, -1); 473 desc = g_markup_escape_text(xmpp_disco_service_get_description(service),
474 -1);
489 } 475 }
490 476
491 markup = g_strdup_printf("<span size='x-large' weight='bold'>%s</span>\n<b>%s:</b> %s%s%s", 477 markup = g_strdup_printf("<span size='x-large' weight='bold'>%s</span>\n<b>%s:</b> %s%s%s",
492 name, type, jid, 478 name, type, jid,
493 service->description ? _("\n<b>Description:</b> ") : "", 479 desc != NULL ? _("\n<b>Description:</b> ") : "",
494 service->description ? desc : ""); 480 desc != NULL ? desc : "");
495 481
496 gtk_tooltip_set_markup(tooltip, markup); 482 gtk_tooltip_set_markup(tooltip, markup);
497 gtk_tree_view_set_tooltip_row(GTK_TREE_VIEW(widget), tooltip, path); 483 gtk_tree_view_set_tooltip_row(GTK_TREE_VIEW(widget), tooltip, path);
498 484
499 g_free(markup); 485 g_free(markup);
661 647
662 dialog = pdl->dialog; 648 dialog = pdl->dialog;
663 g_return_if_fail(dialog != NULL); 649 g_return_if_fail(dialog != NULL);
664 650
665 if (service != NULL) { 651 if (service != NULL) {
666 purple_debug_info("xmppdisco", "Adding service \"%s\"", service->name); 652 purple_debug_info("xmppdisco", "Adding service \"%s\"",
653 xmpp_disco_service_get_name(service));
667 } else { 654 } else {
668 purple_debug_info("xmppdisco", "Service \"%s\" has no children", 655 purple_debug_info("xmppdisco", "Service \"%s\" has no children",
669 parent->name); 656 xmpp_disco_service_get_name(parent));
670 } 657 }
671 658
672 gtk_progress_bar_pulse(GTK_PROGRESS_BAR(dialog->progress)); 659 gtk_progress_bar_pulse(GTK_PROGRESS_BAR(dialog->progress));
673 660
674 if (parent) { 661 if (parent) {
708 (parent ? &parent_iter : NULL)); 695 (parent ? &parent_iter : NULL));
709 } else { 696 } else {
710 iter = child; 697 iter = child;
711 } 698 }
712 699
713 if (service->flags & XMPP_DISCO_BROWSE) { 700 if((xmpp_disco_service_get_flags(service) & XMPP_DISCO_BROWSE) != 0) {
714 GtkTreeRowReference *rr; 701 GtkTreeRowReference *rr;
715 GtkTreePath *path; 702 GtkTreePath *path;
716 703
717 gtk_tree_store_append(dialog->model, &child, &iter); 704 gtk_tree_store_append(dialog->model, &child, &iter);
718 705
722 path); 709 path);
723 g_hash_table_insert(pdl->services, service, rr); 710 g_hash_table_insert(pdl->services, service, rr);
724 gtk_tree_path_free(path); 711 gtk_tree_path_free(path);
725 } 712 }
726 713
727 icon_name = pidgin_disco_get_icon_name(service); 714 icon_name = xmpp_disco_service_get_icon_name(service);
728 715
729 gtk_tree_store_set(dialog->model, &iter, ICON_NAME_COLUMN, icon_name, 716 gtk_tree_store_set(dialog->model, &iter, ICON_NAME_COLUMN, icon_name,
730 NAME_COLUMN, service->name, DESCRIPTION_COLUMN, 717 NAME_COLUMN, xmpp_disco_service_get_name(service),
731 service->description, SERVICE_COLUMN, service, -1); 718 DESCRIPTION_COLUMN, xmpp_disco_service_get_description(service),
719 SERVICE_COLUMN, service, -1);
732 720
733 g_free(icon_name); 721 g_free(icon_name);
734 } 722 }
735 723

mercurial