| 1 | #!/bin/bash |
|---|
| 2 | # |
|---|
| 3 | ############################################################# |
|---|
| 4 | # |
|---|
| 5 | # Converts a Trillian Contact List into a Licq contact list |
|---|
| 6 | # |
|---|
| 7 | # only the icq-part, of course |
|---|
| 8 | # |
|---|
| 9 | ############################################################## |
|---|
| 10 | # |
|---|
| 11 | # You need to have a working licq.conf in your LICQ_DIR |
|---|
| 12 | # |
|---|
| 13 | # All old group/User information already in Licq will be lost! |
|---|
| 14 | # |
|---|
| 15 | # Back up your licq dir before using this tool! |
|---|
| 16 | # |
|---|
| 17 | ############################################################## |
|---|
| 18 | # |
|---|
| 19 | # Written by Steffen Stein |
|---|
| 20 | # |
|---|
| 21 | ############################################################# |
|---|
| 22 | |
|---|
| 23 | # your buddies file from Trillian |
|---|
| 24 | # usually located in c:\program files\Trillian\default\ |
|---|
| 25 | SOURCE_FILE="buddies.xml" |
|---|
| 26 | |
|---|
| 27 | # Licq default $HOME/.licq |
|---|
| 28 | LICQ_DIR="$HOME/licq_tmp" |
|---|
| 29 | LICQ_USER_DIR="$LICQ_DIR/users" |
|---|
| 30 | LICQ_CONF="$LICQ_DIR/licq.conf" |
|---|
| 31 | |
|---|
| 32 | CONTACT_COUNT=`cat $SOURCE_FILE | grep buddy | grep ICQ | wc -l` |
|---|
| 33 | |
|---|
| 34 | |
|---|
| 35 | # Some checks to start with |
|---|
| 36 | if ! [ -d $LICQ_DIR ] |
|---|
| 37 | then |
|---|
| 38 | echo "Licq Directory not found!!" |
|---|
| 39 | echo "either update LICQ_DIR in this file or prepare $LICQ_DIR with a working licq.conf" |
|---|
| 40 | exit 1 |
|---|
| 41 | fi |
|---|
| 42 | |
|---|
| 43 | if ! [ -f $LICQ_CONF ] |
|---|
| 44 | then |
|---|
| 45 | echo "You need to have a working licq.conf in $LICQ_DIR!" |
|---|
| 46 | exit 1 |
|---|
| 47 | fi |
|---|
| 48 | |
|---|
| 49 | if ! [ -d $LICQ_USER_DIR ] |
|---|
| 50 | then |
|---|
| 51 | mkdir $LICQ_USER_DIR |
|---|
| 52 | fi |
|---|
| 53 | |
|---|
| 54 | |
|---|
| 55 | echo "Writing users.conf" |
|---|
| 56 | |
|---|
| 57 | #write users.conf |
|---|
| 58 | echo "[users]" > "$LICQ_DIR/users.conf" |
|---|
| 59 | echo "NumOfUsers = $CONTACT_COUNT" >> "$LICQ_DIR/users.conf" |
|---|
| 60 | |
|---|
| 61 | I=1; |
|---|
| 62 | for UIN in `cat $SOURCE_FILE | grep buddy | grep ICQ | awk -F ">" '{print $1}' \ |
|---|
| 63 | | sed "s/^[^%3A]*%3A//" | sed "s/%3A.*$//"` |
|---|
| 64 | do |
|---|
| 65 | echo "User$I = $UIN.Licq" >> "$LICQ_DIR/users.conf" |
|---|
| 66 | I=$(($I+1)) |
|---|
| 67 | done |
|---|
| 68 | |
|---|
| 69 | # edit licq.conf -> remove groups section and replace by new one |
|---|
| 70 | |
|---|
| 71 | echo "Initializing groups in $LICQ_CONF" |
|---|
| 72 | |
|---|
| 73 | #remove old groups part (lets hope there is a blank line afterwards!) |
|---|
| 74 | sed "/^\[groups\]$/,/^$/d" $LICQ_CONF > $LICQ_CONF.2 |
|---|
| 75 | mv $LICQ_CONF.2 $LICQ_CONF # the one not so good thing in sed.... |
|---|
| 76 | |
|---|
| 77 | #make new groups section |
|---|
| 78 | echo >> $LICQ_CONF |
|---|
| 79 | echo [groups] >> $LICQ_CONF |
|---|
| 80 | echo "NumOfGroups = `cat $SOURCE_FILE | grep group -A 2 | grep title | wc -l`" >> $LICQ_CONF |
|---|
| 81 | echo "DefaultGroup = 0" >> $LICQ_CONF |
|---|
| 82 | echo "NewUserGroup = 0" >> $LICQ_CONF |
|---|
| 83 | |
|---|
| 84 | #sorry blanks become underscores :( don't know how to do it better. |
|---|
| 85 | NUM=1 |
|---|
| 86 | for GROUP in `cat $SOURCE_FILE | grep "[G,g][R,r][O,o][U,u][P,p]" -A 2 | grep "[T,t][I,i][T,t][L,l][E,e]" | sed -e "s/<[^>]*>//g" -e "s/^ *//" -e "s/ /_/g"` |
|---|
| 87 | do |
|---|
| 88 | echo "Group$NUM.name = $GROUP" >> $LICQ_CONF |
|---|
| 89 | NUM=$(($NUM + 1)) |
|---|
| 90 | done |
|---|
| 91 | |
|---|
| 92 | NUM_BUD=0 |
|---|
| 93 | UPD_BUD=0 |
|---|
| 94 | |
|---|
| 95 | echo "Adding/Updating Buddies" |
|---|
| 96 | |
|---|
| 97 | for ((j=1;$j<$NUM;j++)) |
|---|
| 98 | do |
|---|
| 99 | echo "Group$j.id = 0" >> $LICQ_CONF |
|---|
| 100 | START_GROUP=`cat -n $SOURCE_FILE | grep \<group | head -n $j | tail -n 1 |awk '{print $1}'` |
|---|
| 101 | END_GROUP=`cat -n $SOURCE_FILE | grep \</group | head -n $j | tail -n 1 |awk '{print $1}'` |
|---|
| 102 | |
|---|
| 103 | GROUP_CODE=$((2**$(($j-1)) )) |
|---|
| 104 | |
|---|
| 105 | for UIN in `head -n $END_GROUP $SOURCE_FILE | tail -n $(($END_GROUP - $START_GROUP +1)) | grep buddy | grep ICQ | \ |
|---|
| 106 | awk -F ">" '{print $1}' | sed "s/^[^%3A]*%3A//" | sed "s/%3A.*$//"` |
|---|
| 107 | do |
|---|
| 108 | USR_FILE="$LICQ_USER_DIR/$UIN.Licq" |
|---|
| 109 | echo -n "." |
|---|
| 110 | |
|---|
| 111 | if [ -f "$USR_FILE" ] |
|---|
| 112 | then |
|---|
| 113 | #user file already exits -> add current GROUP_CODE to the one already there |
|---|
| 114 | UPD_BUD=$(($UPD_BUD+1)) |
|---|
| 115 | G_CODE=`cat $USR_FILE | awk -F = '/Groups\.User/ {printf "%i",$2}'` |
|---|
| 116 | if ! [ $G_CODE -eq $GROUP_CODE ] |
|---|
| 117 | then |
|---|
| 118 | G_CODE=$(($G_CODE+$GROUP_CODE)) |
|---|
| 119 | fi |
|---|
| 120 | sed "s/^Groups\.User.*$/Groups.User = $G_CODE/" $USR_FILE > $USR_FILE.2 |
|---|
| 121 | mv $USR_FILE.2 $USR_FILE |
|---|
| 122 | else |
|---|
| 123 | #create new user file |
|---|
| 124 | NUM_BUD=$(($NUM_BUD + 1)) |
|---|
| 125 | ALIAS=`cat $SOURCE_FILE | grep $UIN | sed -e "s/<[^>]*>//g" -e "s/^ *//" | head -n 1` |
|---|
| 126 | echo "[user]" > $USR_FILE |
|---|
| 127 | echo "History = default" >> $USR_FILE |
|---|
| 128 | echo "Groups.System = 0" >> $USR_FILE |
|---|
| 129 | echo "Groups.User = $GROUP_CODE" >> $USR_FILE |
|---|
| 130 | echo "Alias = $ALIAS" >> $USR_FILE |
|---|
| 131 | fi |
|---|
| 132 | done |
|---|
| 133 | |
|---|
| 134 | done |
|---|
| 135 | |
|---|
| 136 | echo |
|---|
| 137 | echo "added $NUM_BUD Buddies, updated $UPD_BUD Buddies" |
|---|