--- a/listhandler/gen_xml_files.c Fri Sep 28 12:28:14 2007 -0400
+++ b/listhandler/gen_xml_files.c Wed Oct 03 06:34:39 2007 -0400
@@ -80,7 +80,7 @@
lh_util_add_buddy(group_name, purple_group,
xmlnode_get_attrib(buddy, "screenname"),
xmlnode_get_attrib(buddy, "alias"), target_account,
- xmlnode_get_attrib(buddy, "notes"));
+ xmlnode_get_attrib(buddy, "notes"), 0, 0, 0, 0, NULL, NULL, NULL); /* get the next buddy in the current group */
buddy = xmlnode_get_next_twin(buddy);
--- a/listhandler/lh_util.c Fri Sep 28 12:28:14 2007 -0400
+++ b/listhandler/lh_util.c Wed Oct 03 06:34:39 2007 -0400
@@ -26,19 +26,34 @@
lh_util_add_buddy(const gchar *group, PurpleGroup *purple_group,
const gchar *buddy, const gchar *alias, PurpleAccount *account,
- const gchar *buddynotes)
+ const gchar *buddynotes, gint signed_on, gint signed_off, gint lastseen, + gint last_seen, const gchar *gf_theme, const gchar *icon_file, gchar *lastsaid) - /* create a PurpleBuddy and add it to the list in the specified group.
- * The first NULL is because we have no contact. Let the user do that.
- * The second NULL is because we're prepending to the group. Let the
- * user organize in whatever order he/she wants. This also is surprisingly
- PurpleBuddy *purple_buddy = purple_buddy_new(account, buddy, alias);
+ PurpleBuddy *purple_buddy = NULL; + PurpleBlistNode *node = NULL; + purple_buddy = purple_buddy_new(account, buddy, alias); + node = (PurpleBlistNode *)purple_buddy; purple_blist_add_buddy(purple_buddy, NULL, purple_group, NULL);
purple_account_add_buddy(account, purple_buddy);
- purple_blist_node_set_string((PurpleBlistNode *)purple_buddy, "notes", buddynotes);
+ purple_blist_node_set_string(node, "notes", buddynotes); + purple_blist_node_set_int(node, "signedon", signed_on); + purple_blist_node_set_int(node, "signedoff", signed_off); + purple_blist_node_set_int(node, "lastseen", lastseen); + purple_blist_node_set_int(node, "last_seen", last_seen); + purple_blist_node_set_string(node, "guifications-theme", gf_theme); + purple_blist_node_set_string(node, "buddy_icon", icon_file); + purple_blist_node_set_string(node, "lastsaid", lastsaid); purple_debug_info("listhandler: import",
"group: %s\tbuddy: %s\talias: %s\thas been added to the list\n",
--- a/listhandler/lh_util.h Fri Sep 28 12:28:14 2007 -0400
+++ b/listhandler/lh_util.h Wed Oct 03 06:34:39 2007 -0400
@@ -22,8 +22,10 @@
void lh_util_add_buddy(const gchar *group, PurpleGroup *purple_group,
- const gchar *buddy, const gchar *alias,
- PurpleAccount *account, const gchar *buddynotes);
+ const gchar *buddy, const gchar *alias, PurpleAccount *account, + const gchar *buddynotes, gint signed_on, gint signed_off, + gint lastseen, gint last_seen, const gchar *gf_theme, + const gchar *icon_file, gchar *lastsaid); void lh_util_add_to_blist(GList *buddies, GList *groups);
--- a/listhandler/purple_blist_xml.c Fri Sep 28 12:28:14 2007 -0400
+++ b/listhandler/purple_blist_xml.c Wed Oct 03 06:34:39 2007 -0400
@@ -52,7 +52,6 @@
****************************************************************************/
static GList *infolist = NULL;
-static GList *accountlist = NULL;
/*****************************************************************************
@@ -85,8 +84,15 @@
****************************************************************************/
-lh_pbx_find_accounts(void)
+lh_pbx_import_cleanup(void) + for(; tmp; tmp = g_list_next(tmp)) + lh_pbx_info_destroy((LhPbxInfo *)(tmp->data)); @@ -137,13 +143,13 @@
data = xmlnode_get_data(siter);
if(g_ascii_strcasecmp("signedon", setting_name))
- tmpinfo->signed_on = atoi(data);
+ tmpinfo->signed_on = data ? atoi(data) : 0; else if(g_ascii_strcasecmp("signedoff", setting_name))
- tmpinfo->signed_off = atoi(data);
+ tmpinfo->signed_off = data ? atoi(data) : 0; else if(g_ascii_strcasecmp("lastseen", setting_name))
- tmpinfo->lastseen = atoi(data);
+ tmpinfo->lastseen = data ? atoi(data) : 0; else if(g_ascii_strcasecmp("last_seen", setting_name))
- tmpinfo->last_seen = atoi(data);
+ tmpinfo->last_seen = data ? atoi(data) : 0; else if(g_ascii_strcasecmp("guifications-theme", setting_name))
tmpinfo->gf_theme = data;
else if(g_ascii_strcasecmp("buddy_icon", setting_name))
@@ -167,35 +173,75 @@
****************************************************************************/
-lh_pbx_import_target_request(void)
+lh_pbx_import_add_buddies(void *ignored, PurpleRequestFields *fields) + PurpleAccount *target = NULL; + const gchar *target_name = NULL, *target_prpl = NULL; + target = purple_request_fields_get_account(fields, "pbx_target_acct"); + target_name = purple_account_get_username(target); + target_prpl = purple_account_get_protocol_id(target); + purple_debug_info("listhandler: import", "Got target account: %s on %s\n", + target_name, target_prpl); for(; tmp; tmp = tmp->next) {
- purple_debug_info("listhandler: import", "Buddy in infolist:\n\tScreenname: %s\n\tAlias: "
- "%s\n\tGroup: %s\n\tAccount name: %s\n\tProtocol ID: %s\n\tSigned on/off: "
- "%i/%i\n\tLast seens: %i/%i\n\tGuifications theme: %s\n\tIcon file: %s\n\t"
- "Last said: %s\n\tBuddy Notes: %s\n\n\n", itmp->screenname, itmp->alias,
- itmp->alias, itmp->group, itmp->account, itmp->prpl_id, itmp->signed_on,
- itmp->signed_off, itmp->lastseen, itmp->last_seen, itmp->gf_theme, itmp->icon_file,
- itmp->lastsaid, itmp->notes);
+ if(!strcmp(itmp->account, target_name) && !strcmp(itmp->prpl_id, target_prpl)) { + purple_debug_info("listhandler: import", + "Current entry in infolist matches target account!\n"); + lh_util_add_buddy(itmp->group, purple_group_new(itmp->group), itmp->screenname, + itmp->alias, target, itmp->notes, itmp->signed_on, itmp->signed_off, + itmp->lastseen, itmp->last_seen, itmp->gf_theme, itmp->icon_file, +lh_pbx_import_target_request(void) + PurpleRequestField *field = NULL; + PurpleRequestFields *request = NULL; + PurpleRequestFieldGroup *group = NULL; + request = purple_request_fields_new(); + group = purple_request_field_group_new(NULL); + purple_request_fields_add_group(request, group); + field = purple_request_field_account_new("pbx_target_acct", _("Account"), NULL); + purple_request_field_set_required(field, TRUE); + purple_request_field_group_add_field(group, field); + purple_request_fields(purple_get_blist(), _("Listhandler - Importing"), + _("Choose the account whose buddy list you wish to restore:"), + NULL, request, _("_Import"), G_CALLBACK(lh_pbx_import_add_buddies), + _("_Cancel"), NULL, NULL, NULL, NULL, NULL); lh_pbx_import_request_cb(void *user_data, const char *file)
purple_debug_info("listhandler: import", "In request callback\n");
lh_pbx_import_file_parse(file);
- lh_pbx_find_accounts();
lh_pbx_import_target_request();
+ lh_pbx_import_cleanup();