--- 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};
 }