--- loncom/lonnet/perl/lonnet.pm 2001/11/17 18:20:33 1.172 +++ loncom/lonnet/perl/lonnet.pm 2001/11/22 20:09:22 1.177 @@ -35,9 +35,9 @@ # 8/4,8/7,8/8,8/9,8/11,8/16,8/17,8/18,8/20,8/23,9/20,9/21,9/26, # 10/2 Gerd Kortemeyer # 10/5,10/10,11/13,11/15 Scott Harrison -# 11/17 Gerd Kortemeyer +# 11/17,11/20,11/22 Gerd Kortemeyer # -# $Id: lonnet.pm,v 1.172 2001/11/17 18:20:33 www Exp $ +# $Id: lonnet.pm,v 1.177 2001/11/22 20:09:22 www Exp $ # ### @@ -1662,7 +1662,6 @@ sub definerole { sub metadata_query { my ($query,$custom,$customshow)=@_; - # need to put in a library server loop here and return a hash my %rhash; for my $server (keys %libserv) { unless ($custom or $customshow) { @@ -2233,17 +2232,17 @@ sub EXT { # ---------------------------------------------------------------- Get metadata sub metadata { - my ($uri,$what,$liburi,$prefix)=@_; + my ($uri,$what,$liburi,$prefix,$depthcount)=@_; $uri=&declutter($uri); my $filename=$uri; $uri=~s/\.meta$//; # # Is the metadata already cached? -# If "keys" are set, the assumption is that everything is already cached. +# Look at timestamp of caching # Everything is cached by the main uri, libraries are never directly cached # - unless ($metacache{$uri.':keys'}) { + unless (abs($metacache{$uri.':cachedtimestamp'}-time)<600) { # # Is this a recursive call for a library? # @@ -2302,18 +2301,15 @@ sub metadata { # # This is not a package - some other kind of start tag # - my $entry=$token->[1]; - if ($entry eq 'import') { -# -# Importing a library here -# - my $libid=$token->[2]->{'id'}; - - - } else { - my $unikey=$entry; + my $entry=$token->[1]; + my $unikey; + if ($entry eq 'import') { + $unikey=''; + } else { + $unikey=$entry; + } if ($prefix) { - $unikey.='_'.$prefix; + $unikey.=$prefix; } else { if (defined($token->[2]->{'part'})) { $unikey.='_'.$token->[2]->{'part'}; @@ -2322,6 +2318,22 @@ sub metadata { if (defined($token->[2]->{'id'})) { $unikey.='_'.$token->[2]->{'id'}; } + + if ($entry eq 'import') { +# +# Importing a library here +# + if (defined($depthcount)) { $depthcount++; } else + { $depthcount=0; } + if ($depthcount<20) { + map { + $metathesekeys{$_}=1; + } split(/\,/,&metadata($uri,'keys', + $parser->get_text('/import'),$unikey, + $depthcount)); + } + } else { + if (defined($token->[2]->{'name'})) { $unikey.='_'.$token->[2]->{'name'}; } @@ -2335,13 +2347,15 @@ sub metadata { $metacache{$uri.':'.$unikey.'.default'}; } # end of not-a-package not-a-library import - } + } # end of not-a-package start tag } # the next is the end of "start tag" } } $metacache{$uri.':keys'}=join(',',keys %metathesekeys); + $metacache{$uri.':cachedtimestamp'}=time; +# this is the end of "was not already recently cached } return $metacache{$uri.':'.$what}; }