Index: utils/README
===================================================================
--- utils/README	(revision 9e08d5d5ba8958807158d7afaedd40e60cfb40ff)
+++ utils/README	(revision b0a89cc6e5ffff050ddecd09e9af8eb6723f9ba6)
@@ -18,31 +18,8 @@
 
 
-* create_nicksfile.pl (Christian Friedl <christian.friedl@chello.at>)
+* convert_purple.py
 
-This program reads your ~/.licq/ configuration data and convert it to a
-correct .nicks file. This program can be extended to read other contact
-list file formats as well.
-
-
-* centericq2bitlbee.sh (geno <geno@xenyon.com>)
-
-Converter script for CenterICQ ICQ contact lists. See the documentation
-for more information.
-
-
-* convert_gnomeicu.txt
-
-Not a program, but this one contains a regex which should correctly
-convert GnomeICU configuration files into the BitlBee format.
-
-
-* Dynamic MOTD for BitlBee (Geert Hauwaerts <geert@hauwaerts.be>)
-
-Originally, I wanted to put this program here, but Geert put it online
-on his own server, with docs and stuff, so I guess it's better to put
-a link here. dmotd is a little script which generates a motd with some
-nice statistics, especially nice for servers with many people on it.
-
-See http://dmotd.hauwaerts.be/ for more information.
+Converts libpurple configs into something BitlBee can use, so you don't
+have to re-add all your accounts by hand.
 
 
Index: utils/centericq2bitlbee.sh
===================================================================
--- utils/centericq2bitlbee.sh	(revision 9e08d5d5ba8958807158d7afaedd40e60cfb40ff)
+++ 	(revision )
@@ -1,115 +1,0 @@
-#!/bin/bash
-#
-#  Author       geno, <geno@xenyon.com>
-#  Date         2004-04-24
-#  Version      0.1c
-#
-
-show_help()
-{
-cat << _EOF_
-
-This script converts your CenterICQ contacts (AIM/ICQ) to BitlBee's contacts.
-The use of this script is on you own risk. You agree by using this script. :-)
-
-SYNTAX: `basename $0` <protoname> [<add_proto_tag>]
-
-	protoname     - Choose the protocol you want to get your contacts from
-			by using "aim" or "icq" here.
-
-	add_proto_tag - This is optional and adds a suffix to each nickname.
-			For an AIM contact it will look like this: geno|aim
-			For an ICQ contact it will be |icq , WOW! :-D
-			To enable this option use "on". 
-
-NOTE:
-	After the conversion of one protocol is done you will find a file
-	called bitlbee_[protoname] in ~/.centericq . Append the content of
-	this file to /var/lib/bitlbee/[username].nicks .
-
-	[username] is your username you use to talk to the BitlBee Server.
-	You will have to be root to edit this file!
-
-CREDITS:
-	This script was written by geno (geno@xenyon.com).
-	I hope it will help you to make the switch to BitlBee a bit easier. :-)
-
-_EOF_
-exit 0
-}
-
-case $1 in
-	"") show_help ;;
-	"icq")
-		nick_protocol="[1-9]*/"
-		protocol_const="3"
-	;;
-	
-	"aim")
-		nick_protocol="a*/"
-		protocol_const="1"
-	;;
-	
-	*) show_help ;;
-esac
-
-# can we see CenterICQ's directory ?
-if [ ! -d ~/.centericq ]; then
-	echo "The directory of CenterICQ (~/.centericq) was not found!"
-	echo "Maybe you are logged in with the wrong username."
-	exit 1
-fi
-
-# change to the center of all evil ;)
-cd ~/.centericq
-
-# get the listing of all nicks
-nick_listing=`ls -d $nick_protocol | sed 's/\ /_DuMmY_/g' | sed 's/\/_DuMmY_/\/ /g'`
-
-echo -e "\nConverting ...\n"
-
-# remove old conversion
-rm -f ~/.centericq/bitlbee_$1
-
-for nick_accountname in $nick_listing; do
-	# get rid of the slash and replace _DuMmY_ with space
-	nick_accountname=`echo "$nick_accountname" | sed 's/\/$//' | sed 's/_DuMmY_/\ /g'`
-	
-	# find centericq alias
-	nick_cicq_alias=`cat "$nick_accountname/info" | sed '46!d'`
-	
-	# if the centericq alias is the same as the account's name then
-	# it's not a real alias; search for account nickname
-	if [ "$nick_accountname" == "$nick_cicq_alias" ]; then
-		nick_accountalias=`cat "$nick_accountname/info" | sed '1!d'`
-	fi
-
-	# save the best nickname for conversion
-	if [ "x$nick_accountalias" == "x" ]; then
-		nick="$nick_cicq_alias"
-	else
-		nick="$nick_accountalias"
-	fi
-
-	# cut off the prefix 'a' of the accountname
-	if [ "$1" == "aim" ]; then
-		nick_accountname=`echo "$nick_accountname" | sed 's/^a//'`
-	fi
-
-	# replace each space with an underscore (spaces are not allowed in irc nicknames)
-	nick=`echo "$nick" | sed 's/\ /_/g'`
-
-	# if tags are wanted we will add them here
-	if [ "$2" == "on" ]; then
-		nick=`echo "$nick"\|$1`
-	fi
-
-	# print output to std
-	echo "Found '$nick_accountname' with alias '$nick'"
-	# save output to file
-	echo "$nick_accountname" $protocol_const "$nick" >> ~/.centericq/bitlbee_$1
-done
-
-echo -e "\nYou can find this list as a file in ~/.centericq/bitlbee_$1."
-echo -e "See help if you don't know what you have to do next.\n"
-
Index: utils/convert_gnomeicu.txt
===================================================================
--- utils/convert_gnomeicu.txt	(revision 9e08d5d5ba8958807158d7afaedd40e60cfb40ff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-15:03:38        zoo| wilmer: watch this:
-15:03:40        zoo| cat ~/.icq/contacts.xml | sed "s/<\/user>/\n/g" |
-                     sed "s/^.*<uin>//g" | sed "s/<\/nick>//" | sed "s/ /_/g" |
-                     sed "s/<\/uin><nick>/ 3 /g" | grep -v -e "^<"
-15:04:23        zoo| it does output your gnomeicu nicks to stdout
-
-Thanks to Claas Langbehn. Use this at your own risk, it's not tested by us.
Index: utils/convert_purple.py
===================================================================
--- utils/convert_purple.py	(revision b0a89cc6e5ffff050ddecd09e9af8eb6723f9ba6)
+++ utils/convert_purple.py	(revision b0a89cc6e5ffff050ddecd09e9af8eb6723f9ba6)
@@ -0,0 +1,113 @@
+#!/usr/bin/python
+#
+# Part of BitlBee. Reads a libpurple accounts.xml file and generates some
+# commands/XML that BitlBee understands. For easy migration from Pidgin/
+# Finch/whatever to BitlBee, be it a public server or your own.
+#
+# Licensed under the GPL2 like the rest of BitlBee.
+#
+# Copyright 2010 Wilmer van der Gaast <wilmer@gaast.net>
+#
+
+import getopt
+import getpass
+import os
+import subprocess
+import sys
+
+import xml.dom.minidom
+
+BITLBEE = '/usr/sbin/bitlbee'
+
+def parse_purple(f):
+	protomap = {
+		'msn-pecan': 'msn',
+		'aim': 'oscar',
+		'icq': 'oscar',
+	}
+	supported = ('msn', 'jabber', 'oscar', 'yahoo', 'twitter')
+	accs = list()
+	
+	if os.path.isdir(f):
+		f = f + '/accounts.xml'
+	xt = xml.dom.minidom.parse(f)
+	for acc in xt.getElementsByTagName('account')[1:]:
+		protocol = acc.getElementsByTagName('protocol')[0].firstChild.wholeText
+		name = acc.getElementsByTagName('name')[0].firstChild.wholeText
+		password = acc.getElementsByTagName('password')[0].firstChild.wholeText
+		if protocol.startswith('prpl-'):
+			protocol = protocol[5:]
+		if name.endswith('/'):
+			name = name[:-1]
+		if protocol in protomap:
+			protocol = protomap[protocol]
+		if protocol not in supported:
+			print 'Warning: protocol probably not supported by BitlBee: ' + protocol
+		accs.append((protocol, name, password))
+	
+	return accs
+
+def print_commands(accs):
+	print 'To copy all your Pidgin accounts to BitlBee, just copy-paste the following'
+	print 'commands into your &bitlbee channel:'
+	print
+	for acc in accs:
+		print 'account add %s %s %s' % acc
+
+def bitlbee_x(*args):
+	bb = subprocess.Popen([BITLBEE, '-x'] + list(args), stdout=subprocess.PIPE)
+	return bb.stdout.read().strip()
+
+def print_xml(accs):
+	try:
+		bitlbee_x('hash', 'blaataap')
+	except:
+		print "Can't find/use BitlBee binary. It has to be a 1.2.5 binary or higher."
+		print
+		usage()
+	
+	print 'BitlBee .xml files are encrypted using the identify password. Please type your'
+	print 'preferred identify password.'
+	user = getpass.getuser()
+	pwd = getpass.getpass()
+	
+	root = xml.dom.minidom.Element('user')
+	root.setAttribute('nick', user)
+	root.setAttribute('password', bitlbee_x('hash', pwd))
+	root.setAttribute('version', '1')
+	for acc in accs:
+		accx = xml.dom.minidom.Element('account')
+		accx.setAttribute('protocol', acc[0])
+		accx.setAttribute('handle', acc[1])
+		accx.setAttribute('password', bitlbee_x('enc', pwd, acc[2]))
+		accx.setAttribute('autoconnect', '1')
+		root.appendChild(accx)
+	
+	print
+	print 'Write the following XML data to a file called %s.xml (rename it if'
+	print 'you want to use a different nickname). It should be in the directory where'
+	print 'your BitlBee account files are stored (most likely /var/lib/bitlbee).'
+	print
+	print root.toprettyxml()
+
+def usage():
+	print 'Usage: %s [-f <purple accounts file>] [-b <bitlbee executable>] [-x]' % sys.argv[0]
+	print
+	print 'Generates "account add" commands by default. -x generates a .xml file instead.'
+	print 'The accounts file can normally be found in ~/.purple/.'
+	sys.exit(os.EX_USAGE)
+
+try:
+	flags = dict(getopt.getopt(sys.argv[1:], 'f:b:x')[0])
+except getopt.GetoptError:
+	usage()
+if '-f' not in flags:
+	usage()
+if '-b' in flags:
+	BITLBEE = flags['-b']
+
+parsed = parse_purple(flags['-f'])
+if '-x' in flags:
+	print_xml(parsed)
+else:
+	print_commands(parsed)
Index: utils/create_nicksfile.pl
===================================================================
--- utils/create_nicksfile.pl	(revision 9e08d5d5ba8958807158d7afaedd40e60cfb40ff)
+++ 	(revision )
@@ -1,210 +1,0 @@
-#!/usr/bin/perl
-use strict;
-use Getopt::Long;
-
-
-my $conn                = undef;
-my %readline_funcs      = ( 'licq' => \&import_readline_licq );
-my %open_funcs          = ( 'licq' => \&import_open_licq );
-my %close_funcs         = ( 'licq' => \&import_close_licq );
-my $funcname            = undef;
-my $dirname             = undef;
-my $filename            = undef;
-my $imported            = 0;
-my $not_imported        = 0;
-my $debug               = 0;
-
-main();
-exit(0);
-
-
-sub main {
-        my ($server,$port,$nick,$pass,$func,$dir,$file,$outfile);
-        my $dirfile;
-        if (($dirfile=pop @ARGV) =~ /^\-/ || !$dirfile) {
-                tell_usage();
-                exit(0);
-        }
-        if ($dirfile =~ m|/|) {
-                $dirfile =~ m|^(.*)(/.+)$|;
-                $dir=$1;
-                $file=$2;
-        } else {
-                $dir=undef;
-                $file = $dirfile;
-        }
-        GetOptions(
-                'from=s',  => \$func,
-                'of=s',  => \$outfile,
-                'debug',  => \$debug
-        );
-        if (!import_start($func,$dir,$file,$outfile,$debug)) {
-                tell_usage();
-        }
-}
-
-sub tell_usage {
-        print "Usage: create_nicksfile.pl [--from=FROM] [--of=OUTPUTFILE] [--debug] FILENAME\n";
-        print "       FROM defines which application we import from.\n",
-        print "       Note that currently the only valid value for FROM is licq.\n";
-        print "       For further information, you might want to do perldoc create_nicksfile.pl\n";
-}
-
-sub import_start {
-        $funcname          = (shift) || 'licq';
-        $dirname        = shift;
-        $filename       = shift;
-        my $outfile        = shift || 'bitlbee.nicks';
-        $debug          = shift;
-        my ($alias,$protocol,$name,$found);
-        open(OUT,'>'.$outfile) || die "unable to open $outfile";
-        if (defined $open_funcs{$funcname}) {
-                if (&{$open_funcs{$funcname}}($dirname,$filename)) {
-                        do {
-                                ($alias,$protocol,$name,$found)=&{$readline_funcs{$funcname}}();
-                                print OUT "$alias $protocol $name\n" if $found;
-                        } while ($found);
-                } else {
-                        import_err('Unable to open '.$filename);
-                        return 0;
-                }
-        } else {
-                import_err($funcname.' is no defined import function.');
-                return 0;
-        }
-        close OUT;
-        &{$close_funcs{$funcname}}();
-        return 1;
-}
-
-sub import_err {
-        my $msg=shift;
-        print "\nError: $msg\n";
-}
-
-sub import_open_licq {
-        my ($dir,$name)=@_;
-        return open(IN,'<'.$dir.'/users.conf');
-}
-sub import_close_licq {
-        close IN;
-}
-sub import_readline_licq {
-        my ($uin,$alias);
-        my $line;
-GETLINE:
-        $line=<IN>;
-        if ($line) {
-                while ($line && $line !~ /^User\d+/) {
-                        $line=<IN>;
-                }
-                if ($line) {
-                        if ($line =~ /^User\d+\s*=\s*(\d+)(\.Licq)?$/) { # getting UIN
-                                $uin=$1;
-                                open(ALIAS,'<'.$dirname.'/users/'.$uin.'.Licq') ||
-                                open(ALIAS,'<'.$dirname.'/users/'.$uin.'.uin') || do {
-                                        warn "unable to open userfile for $uin";
-                                        return (undef,undef,0);
-                                };
-                                while (<ALIAS>) {
-                                        if (/^Alias\s*=\s*(.*)$/) {
-                                                $alias=$1;
-                                                $alias =~ s/\s+/_/g;
-                                                last;
-                                        }
-                                }
-                                close ALIAS;
-                                $imported++;
-                                return ($uin,3,$alias,1);
-                        } else {
-                                warn('Unknown line format: '.$line);
-                                $not_imported++;
-                                goto GETLINE; #### grrrr, sometimes there are negative uins in licq files...
-                        }
-                } else {
-                        return (undef,undef,0);
-                }
-        } else {
-                return undef;
-        }
-}
-
-__END__
-
-=head1 NAME
-
-create_nicksfile.pl - Create a valid bitlbee .nicks file
-
-=head1 SYNOPSIS
-
-create_nicksfile.pl [--from=FROM] [--of=OUTPUTFILE] [--debug] FILENAME
-
-        FROM defines which application we import from.
-        Note that currently the only valid value for FROM 
-        is licq.
-
-        If of is missing, we write to bitlbee.nicks.
-
-=head1 DESCRIPTION
-
-We run thru the
-files where the contacts reside and create
-a bitlbee .nicks-file from them.
-
-=head1 DEPENDENCIES
-
-On the perlside, we need Getopt::Long.
-
-=head1 CAVEATS
-
-=head1 TODO
-
-&import_readline_... should take a filehandle as argument.
-
-Add more import functions. If you are interested,
-to do so, you need to write the following functions:
-
-=over
-
-=item *
-
-import_open_<WHATEVER>(DIR,FILENAME)
-
-=item *
-
-import_close_<WHATEVER>()
-
-=item *
-
-import_readline_<WHATEVER>()
-
-=back
-
-and add them to the hashes
-
-=over
-
-=item *
-
-%readline_funcs
-
-=item *
-
-%open_funcs
-
-=item *
-
-%close_funcs
-
-=back
-
-at the top of this script.
-
-
-=head1 AUTHORS
-
-Christian Friedl <vijeno@chello.at>
-
-Updated for the new Licq list firmat by Hugo Buddelmeijer <kmail@hugo.doemaarwat.nl>
-
-=cut
