/* empathy-import-widget.c */
-#include "empathy-import-dialog.h"
+#include "config.h"
#include "empathy-import-widget.h"
-#include "empathy-import-pidgin.h"
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include <libempathy/empathy-debug.h>
-#include <libempathy/empathy-account.h>
-#include <libempathy/empathy-account-manager.h>
-#include <libempathy/empathy-connection-managers.h>
-#include <libempathy/empathy-utils.h>
-
-#include <libempathy-gtk/empathy-ui-utils.h>
+#include <glib/gi18n-lib.h>
+#include <tp-account-widgets/tpaw-builder.h>
+#include <tp-account-widgets/tpaw-utils.h>
+#include <telepathy-glib/telepathy-glib-dbus.h>
-#include <telepathy-glib/util.h>
+#include "empathy-ui-utils.h"
+#include "empathy-utils.h"
-#include <glib/gi18n.h>
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
G_DEFINE_TYPE (EmpathyImportWidget, empathy_import_widget, G_TYPE_OBJECT)
};
enum {
- PROP_APPLICATION_ID = 1
+ PROP_APPLICATION_ID = 1,
+ PROP_CMS
};
typedef struct {
GtkWidget *vbox;
GtkWidget *treeview;
+ GtkWidget *scrolledwindow;
GList *accounts;
EmpathyImportApplication app_id;
- EmpathyConnectionManagers *cms;
+ TpawConnectionManagers *cms;
gboolean dispose_run;
} EmpathyImportWidgetPriv;
for (l = accounts; l; l = l->next)
{
- EmpathyAccount *account = l->data;
- const gchar *account_string;
- GValue *value;
- gboolean result;
+ TpAccount *account = l->data;
const GHashTable *parameters;
- parameters = empathy_account_get_parameters (account);
-
- value = g_hash_table_lookup ((GHashTable *) parameters, "account");
-
- if (value == NULL)
- continue;
+ parameters = tp_account_get_parameters (account);
- account_string = g_value_get_string (value);
-
- result = tp_strdiff (account_string, account_id);
-
- if (!result)
+ if (!tp_strdiff (tp_asv_get_string (parameters, "account"), account_id))
return TRUE;
}
return FALSE;
}
-static gboolean
-protocol_is_supported (EmpathyImportWidget *self,
- EmpathyImportAccountData *data)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
- GList *cms = empathy_connection_managers_get_cms (priv->cms);
- GList *l;
- gboolean proto_is_supported = FALSE;
-
- for (l = cms; l; l = l->next)
- {
- TpConnectionManager *tp_cm = l->data;
- const gchar *cm_name = tp_connection_manager_get_name (tp_cm);
- if (tp_connection_manager_has_protocol (tp_cm,
- (const gchar*) data->protocol))
- {
- data->connection_manager = g_strdup (cm_name);
- proto_is_supported = TRUE;
- break;
- }
- }
-
- return proto_is_supported;
-}
+#define MAX_TREEVIEW_HEIGHT 300
static void
import_widget_add_accounts_to_model (EmpathyImportWidget *self)
{
+ TpAccountManager *manager;
GtkTreeModel *model;
- GtkTreeIter iter;
GList *l;
EmpathyImportWidgetPriv *priv = GET_PRIV (self);
- EmpathyAccountManager *manager = empathy_account_manager_dup_singleton ();
+ gint min, natural;
+
+ manager = tp_account_manager_dup ();
model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
EmpathyImportAccountData *data = l->data;
gboolean import;
GList *accounts;
+ TpConnectionManager *cm = NULL;
- if (!protocol_is_supported (self, data))
+ if (!empathy_import_protocol_is_supported (data->protocol, &cm))
continue;
+ data->connection_manager = g_strdup (
+ tp_connection_manager_get_name (cm));
+
value = g_hash_table_lookup (data->settings, "account");
- accounts = empathy_account_manager_dup_accounts (manager);
+ accounts = tp_account_manager_dup_valid_accounts (manager);
/* Only set the "Import" cell to be active if there isn't already an
* account set up with the same account id. */
import = !import_widget_account_id_in_list (accounts,
g_value_get_string (value));
- g_list_foreach (accounts, (GFunc) g_object_unref, NULL);
- g_list_free (accounts);
-
- gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ g_list_free_full (accounts, g_object_unref);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (model), NULL, -1,
COL_IMPORT, import,
COL_PROTOCOL, data->protocol,
COL_NAME, g_value_get_string (value),
COL_SOURCE, data->source,
COL_ACCOUNT_DATA, data,
-1);
+
}
+ /* Display as much rows as possible */
+ gtk_widget_get_preferred_height (priv->treeview, &min, &natural);
+ gtk_widget_set_size_request (priv->scrolledwindow, -1,
+ MIN (natural, MAX_TREEVIEW_HEIGHT));
+
g_object_unref (manager);
}
GAsyncResult *result,
gpointer user_data)
{
- EmpathyAccount *account;
+ TpAccountManager *account_manager;
+ TpAccount *account;
GError *error = NULL;
EmpathyImportWidget *self = user_data;
- account = empathy_account_manager_create_account_finish (
- EMPATHY_ACCOUNT_MANAGER (source), result, &error);
+ account = tp_account_manager_create_account_finish (
+ TP_ACCOUNT_MANAGER (source), result, &error);
if (account == NULL)
{
DEBUG ("account created\n");
+ if (tp_account_is_enabled (account))
+ {
+ account_manager = tp_account_manager_dup ();
+ tpaw_connect_new_account (account, account_manager);
+ g_object_unref (account_manager);
+ }
+
g_object_unref (self);
}
import_widget_add_account (EmpathyImportWidget *self,
EmpathyImportAccountData *data)
{
- EmpathyAccountManager *account_manager;
- gchar *display_name;
+ TpAccountManager *account_manager;
+ gchar *display_name = NULL;
GHashTable *properties;
GValue *username;
- account_manager = empathy_account_manager_dup_singleton ();
+ account_manager = tp_account_manager_dup ();
DEBUG ("connection_manager: %s\n", data->connection_manager);
/* Set the display name of the account */
username = g_hash_table_lookup (data->settings, "account");
- display_name = g_strdup_printf ("%s (%s)",
- data->protocol,
- g_value_get_string (username));
+
+ if (!tp_strdiff (data->protocol, "irc"))
+ {
+ const gchar *server;
+
+ server = tp_asv_get_string (data->settings, "server");
+
+ if (server != NULL)
+ display_name = g_strdup_printf ("%s on %s",
+ g_value_get_string (username), server);
+ }
+
+ if (display_name == NULL)
+ {
+ display_name = g_strdup_printf ("%s (%s)",
+ data->protocol, g_value_get_string (username));
+ }
DEBUG ("display name: %s\n", display_name);
- properties = g_hash_table_new (NULL, NULL);
+ properties = tp_asv_new (NULL, NULL);
+ tp_asv_set_boolean (properties, TP_IFACE_ACCOUNT ".Enabled", data->enabled);
- empathy_account_manager_create_account_async (account_manager,
+ tp_account_manager_create_account_async (account_manager,
(const gchar*) data->connection_manager, data->protocol, display_name,
data->settings, properties, import_widget_create_account_cb,
g_object_ref (self));
GtkTreeViewColumn *column;
GtkCellRenderer *cell;
+ priv->accounts = empathy_import_accounts_load (priv->app_id);
+
store = gtk_list_store_new (COL_COUNT, G_TYPE_BOOLEAN, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
import_widget_add_accounts_to_model (self);
}
-static void
-import_widget_cms_ready_cb (EmpathyConnectionManagers *cms,
- GParamSpec *pspec,
- EmpathyImportWidget *self)
-{
- if (empathy_connection_managers_is_ready (cms))
- import_widget_set_up_account_list (self);
-}
-
static void
import_widget_destroy_cb (GtkWidget *w,
EmpathyImportWidget *self)
case PROP_APPLICATION_ID:
g_value_set_int (value, priv->app_id);
break;
+ case PROP_CMS:
+ g_value_set_object (value, priv->cms);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
case PROP_APPLICATION_ID:
priv->app_id = g_value_get_int (value);
break;
+ case PROP_CMS:
+ priv->cms = g_value_dup_object (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
GtkBuilder *gui;
gchar *filename;
- priv->accounts = empathy_import_accounts_load (priv->app_id);
-
filename = empathy_file_lookup ("empathy-import-dialog.ui", "src");
- gui = empathy_builder_get_file (filename,
+ gui = tpaw_builder_get_file (filename,
"widget_vbox", &priv->vbox,
"treeview", &priv->treeview,
+ "scrolledwindow", &priv->scrolledwindow,
NULL);
g_free (filename);
- empathy_builder_unref_and_keep_widget (gui, priv->vbox);
+ tpaw_builder_unref_and_keep_widget (gui, priv->vbox);
g_signal_connect (priv->vbox, "destroy",
G_CALLBACK (import_widget_destroy_cb), self);
- if (empathy_connection_managers_is_ready (priv->cms))
- import_widget_set_up_account_list (self);
- else
- g_signal_connect (priv->cms, "notify::ready",
- G_CALLBACK (import_widget_cms_ready_cb), self);
+ import_widget_set_up_account_list (self);
}
static void
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (oclass, PROP_APPLICATION_ID, param_spec);
+ param_spec = g_param_spec_object ("cms",
+ "TpawConnectionManagers", "TpawConnectionManagers",
+ TPAW_TYPE_CONNECTION_MANAGERS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property (oclass, PROP_CMS, param_spec);
+
g_type_class_add_private (klass, sizeof (EmpathyImportWidgetPriv));
}
EmpathyImportWidgetPriv);
self->priv = priv;
-
- priv->cms = empathy_connection_managers_dup_singleton ();
}
EmpathyImportWidget *
-empathy_import_widget_new (EmpathyImportApplication id)
+empathy_import_widget_new (EmpathyImportApplication id,
+ TpawConnectionManagers *cms)
{
- return g_object_new (EMPATHY_TYPE_IMPORT_WIDGET, "application-id", id, NULL);
+ g_return_val_if_fail (TPAW_IS_CONNECTION_MANAGERS (cms), NULL);
+
+ return g_object_new (EMPATHY_TYPE_IMPORT_WIDGET,
+ "application-id", id,
+ "cms", cms,
+ NULL);
}
GtkWidget *