#!/usr/bin/perl -W
# Copyright 2004 Rowan Rodrik van der Molen
# Distributed under the terms of the GNU General Public Licence v2

use strict;
use XML::Writer;
use IO;

# IE's favorites folder
our $IE_FAV_DIR = shift;


our $writer = new XML::Writer(OUTPUT => 'STDOUT');

$writer->startTag("xbel", "version" => "1.0");

ie_fav_dir2xbel_folder($IE_FAV_DIR, 0);

$writer->endTag("xbel");
$writer->end();

exit 0;


sub ie_fav_dir2xbel_folder {
    my $fav_dir = shift;

    chdir($fav_dir)
        or die "Changing to IE's favorites dir '$fav_dir' failed: $!";

    $fav_dir = substr($fav_dir, 1 + rindex($fav_dir, '/'));

    opendir(FAV_DIR, $fav_dir)
        or die "Opening IE's favorites dir '$fav_dir' failed: $!";

    $writer->startTag("folder");

    $writer->startTag("title");
    $writer->characters($fav_dir);
    $writer->endTag("title");

    while (my $fav_dir_item = readdir(FAV_DIR)) {
        # Skip this directory and its superdirectory
        next if $fav_dir_item eq '.' or $fav_dir_item eq '..';

        if ( -d $fav_dir_item ) {
            ie_fav_dir2xbel_folder($fav_dir_item);
        }
        elsif ( -f $fav_dir_item and rindex($fav_dir_item, ".url") != -1 ) {
            ie_url_file2xbel_bookmark($fav_dir_item);
        }
    }

    $writer->endTag("folder");
}


sub ie_url_file2xbel_bookmark {
    my $url_file = shift;

    open(URL_FILE, "<$url_file")
        or die "Opening URL file '$url_file' failed: $!";

    undef $/;

    my $url_file_contents = <URL_FILE>;

    (my $url) = $url_file_contents =~ m/^URL=(.*?)$/msi;
    chop($url);

    $writer->startTag("bookmark", "href" => $url);

    $writer->startTag("title");
    $writer->characters(substr($url_file, 0, -4));
    $writer->endTag("title");

    $writer->endTag("bookmark");
}


