#!/usr/bin/perl -w
# OneClickInstallUI http://i.opensu.se/devel:languages:perl/perl-Fuse

use strict;
use POSIX;
use Fuse;
use LWP::UserAgent;
my $mnt=shift || die "usage: $0 MNT\n";
my $baseurl="http://localhost/~bernhard";
my $ua=LWP::UserAgent->new(parse_head=>0, timeout=>9);
our %cache;

sub diag{}

sub my_getdir($)
{ my($f)=@_;
	$f=~s{[^/]$}{$&/}; # add trailing slash
	my $url="$baseurl$f";
	diag "getdir: $url\n";
	my $r = $ua->get($url);
	if($r->code!=200) {
		return -1*ENOENT;
	}
	my $c=$r->content;
	my @ref;
	foreach my $ref ($c=~m/a href="([^"]+)"/g) {
		my $d=($ref=~s{/$}{});
		next unless $ref=~m/^[^?\/]+$/; # filter out dynamic links and upward links
#		diag "cache: $f$ref\n";
	   	$cache{$f.$ref}->{dir}=$d;
		push(@ref,$ref);
	}
	return (".","..",@ref,0);
	#print $r->status_line, $r->content;
#	return (".", "testab", "2", 0);
}

sub my_getattr($)
{ my($f)=@_;
    my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)=(0,0);
	$mode=0040755; # dir
	if($cache{$f} && !$cache{$f}->{dir}) {$mode=0100644}
	$nlink=1;
	$uid=$<;
	($gid)=split / /,$(;
	$size=0;
	$rdev=0;
	$atime=time;
	$mtime=$atime;
	$ctime=$mtime;
	$blksize=1024;
	$blocks=1;
    return ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks);
	return -1*ENOENT;
}

#my $response = $ua->get("http://localhost/~bernhard/");
#print $response->status_line, $response->content;
#exit 0;
Fuse::main(
#	debug=>1,
	mountpoint=>$mnt,
	getdir=>\&my_getdir,
	getattr=>\&my_getattr,
);
