Script

Revision 2 as of 2006-05-17 06:17:13

Clear message

#A prototype for a "migration wizard".
#TODO: Make it safer, trap interrupts, more checks, etc.


set -e

winroot=
docroot=
sysroot=
winuser=
tempbookmarks=`mktemp`
bookmarks=$HOME/.mozilla/firefox/*.default/bookmarks.html


#Import one folder of bookmarks (recursively for nested folders) and write it to tempfile
import_bookmark_level() {
        echo "<DT><H3>`basename "$1"`</H3>" >> $tempbookmarks
        echo "<DL><p>" >> $tempbookmarks

        #Loop through subdirectories
        find "$1" -maxdepth 1 -mindepth 1 -type d | \
        while read i
        do
                import_bookmark_level "$i/"
        done

        #Loop through .url files (where IE stores bookmarks)
        find "$1" -maxdepth 1 -name "*.url" | \
        while read i
        do
                bmhref=`grep "^URL=" "$i" | sed 's|URL=||' | sed 's/.$//'`
                bmname=`basename "$i" .url`
                echo "<DT><A HREF=\"$bmhref\">$bmname</A>" >> $tempbookmarks
        done
        
        echo "</DL><p>" >> $tempbookmarks
}

#Import all bookmarks from IE
import_bookmarks() {
        if [[ -n "`ps -A | grep firefox`" ]]
        then
                zenity --error --text 'Firefox is open! Please close it and restart this program!'
                exit 1
        else
                favorites="$docroot/$winuser/Favorites/"
                import_bookmark_level "$favorites"
        fi
}

#Find out which Windows user we are
ask_user() {
        while [[ -z "$winuser" ]]
        do
                winuser=`ls "$docroot" | sed '/All Users\|Default User\|LocalService\|NetworkService/d' | zenity --list --column User --text "Migration Wizard has found these users. Select one:"`
                if [[ -n `echo "$winuser" | grep '|'` || -z "$winuser" ]]
                then
                        zenity --error --text 'Please select -one- user!'
                        unset winuser
                fi
        done
}

#Find where the Windows drive is mounted
find_winroot() {
        for i in /media/*
        do
                tmp=`find $i -maxdepth 1 -iname "documents and settings"`
                if [[ -n "$tmp" ]]
                then
                        winroot=$i
                        docroot=$tmp
                        sysroot=`find $i -maxdepth 1 -iname "windows"`
                        echo "Found Windows drive at $winroot..."
                fi
        done
}

find_winroot

ask_user

#Inserts our imported bookmarks into Firefox's bookmark file
cat $bookmarks | sed '$d' > $tempbookmarks
import_bookmarks
echo "</DL><p>" >> $tempbookmarks

mv $tempbookmarks $bookmarks