Assets generator

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
m (Usage)
Line 1: Line 1:
 +
__NOTOC__
 +
{{Template:Quicklinks}}
 +
 
==Description==
 
==Description==
 
This script generates the XML files needed to create a new asset set and associated inventory libraries for OpenSim.Given a directory tree of jp2 and lsl files, and it will traverse the tree and generate the assets file, the inventory folder file, and the inventory items file.
 
This script generates the XML files needed to create a new asset set and associated inventory libraries for OpenSim.Given a directory tree of jp2 and lsl files, and it will traverse the tree and generate the assets file, the inventory folder file, and the inventory items file.

Revision as of 02:39, 21 May 2009

Description

This script generates the XML files needed to create a new asset set and associated inventory libraries for OpenSim.Given a directory tree of jp2 and lsl files, and it will traverse the tree and generate the assets file, the inventory folder file, and the inventory items file.

Usage

  • Put the code in a file named genassets.pl, and copy it to your library preparation directory (/opt/opensim/library)
  • Download the perl UUID module
  • Install the UUID module
perl Makefile.PL
make
make test
make install
  • Create Asset directories
mkdir /opt/opensim/production/bin/inventory/MyCoolOpenSimLibrary/
mkdir /opt/opensim/production/bin/assets/MyCoolOpenSimAssetSet/
  • Launch script (Adds the content in /opt/opensim/production/library to the OpenSim inventory/asset storage)
perl /opt/opensim/production/library/genassets.pl

Code

######################################
#
# genassets.pl
#
# by: Illuminous Beltran/IBM
#
# This script generates the XML files
# needed to create a new asset set
# and associated inventory libraries
# for OpenSim.
#
# Given a directory tree of jp2 and lsl
# files, and it will traverse the tree
# and generate the assets file, the 
# inventory folder file, and the
# inventory items file.
#
# Requires the Data::UUID module
#
# http://search.cpan.org/~rjbs/Data-UUID-1.148/UUID.pm
#
######################################
use Data::UUID;

# Library name
$libName = "My Cool OpenSim Library";

# Root of your library, where your
# jp2 and lsl files are
$inputRoot="/opt/opensim/library";

# Where to put the inventory files
$invOutputDir="/opt/opensim/production/bin/inventory/MyCoolOpenSimLibrary/";

# Where to put the asset set file
$assetOutputDir="/opt/opensim/production/bin/assets/MyCoolOpenSimAssetSet/";

# Root key for OpenSim library folder
# This is a static value fixed in opensim
# so you should not have to change it unless
# it changes
$rootFolder = "00000112-000f-0000-0000-000100bba000";

#
# No user servicable parts below
#

$parent = $rootFolder;
$treeLevel = 0;

print("ROOT FOLDER:" . $rootFolder . "\n");

open(INVFDATOUT,">" . $invOutputDir . "3DDCInventoryFolders.xml") || die("Cannot Open Folders File");
print INVFDATOUT "<Nini>\n";

open(INVIDATOUT,">" . $invOutputDir . "3DDCInventoryItems.xml") || die("Cannot Open Items File");
print INVIDATOUT "<Nini>\n";

open(ASSETDATOUT,">" . $assetOutputDir . "3DDCAssetSet.xml") || die("Cannot Open Asset File");
print ASSETDATOUT "<Nini>\n";

walkTree($parent, $inputRoot, 0, "0");

print INVFDATOUT "</Nini>\n";
print INVIDATOUT "</Nini>\n";
print ASSETDATOUT "</Nini>\n";

close(INVFDATOUT);
close(INVIDATOUT);
close(ASSETDATOUT);

sub walkTree() {

    local $parent = shift;
    local $thisDir = shift;
    local $level = shift;
    local $atype = shift;
    local @dirs = ();
    local @files = ();

    opendir(HOMEDIR, $thisDir) || die("unable to open directory");

    while($filename = readdir(HOMEDIR)) {

        if( -d ($thisDir . "/" . $filename) ) {
           if( ($filename eq ".") || ($filename eq "..") || ($filename eq ".svn")) {next;}
           push(@dirs, $filename);
	}
    else {
          if( substr($filename, -4) eq ".jp2" || substr($filename, -4) eq ".lsl") {
              push(@files, $filename);
          }
       }
   }

   closedir(HOMEDIR);

   $uuidGen = new Data::UUID;
   $thisFolder = $uuidGen->create_str();

   print("Processing:" . $fName . "\n");

   if($_ eq "") {
       $fName = $libName;
   }
   else
   {
       $fName = $_;
   }
   if($level == 1) {
       $assetType = getType($fName);
   }
   else {
   $assetType = $atype;
   }

   writeFolder($fName, $thisFolder, $parent, $assetType);

   foreach(@files) {
   $assetID = writeAsset($thisDir, $_, $assetType);
   writeItem($_, $assetID, $thisFolder, $assetType);
   }

   $parent = $thisFolder;

   $level ++;
   foreach(@dirs) {
 
          walkTree($parent, ($thisDir . "/" . $_), $level, $assetType);
   }

   print("\n");

}

sub getType() {

$assetType = shift;

   if( index($assetType, "lsl", 0) > 0 || index($assetType, "script", 0) > 0 )
   {
       return "10";
   }
   else
   {
       return "0";
   }
}

sub writeFolder() {

   $name = shift;
   $folderID = shift;
   $parentID = shift;
   $type = shift;

   print INVFDATOUT "<Section Name=\"" . $name . " \">\n";
   print INVFDATOUT "<Key Name=\"folderID\" Value=\"" . $folderID . "\" />\n";
   print INVFDATOUT "<Key Name=\"parentFolderID\" Value=\"" . $parentID . "\" />\n";
   print INVFDATOUT "<Key Name=\"name\" Value=\"" . $name . "\" />\n";
   print INVFDATOUT "<Key Name=\"type\" Value=\"".$type."\" />\n";
   print INVFDATOUT "</Section>\n";
   print INVFDATOUT "\n";
}

sub writeItem() {
   $name = shift;
   $assetID = shift;
   $folderID = shift;
   $type = shift;

   $uuidGen = new Data::UUID;
   $inventoryID = $uuidGen->create_str();
   print INVIDATOUT "<Section Name=\"" . $name . "\">\n";
   print INVIDATOUT "<Key Name=\"inventoryID\" Value=\"" . $inventoryID . "\" />\n";
   print INVIDATOUT "<Key Name=\"assetID\" Value=\"" . $assetID . "\" />\n";
   print INVIDATOUT "<Key Name=\"folderID\" Value=\"" . $folderID . "\" />\n";
   print INVIDATOUT "<Key Name=\"name\" Value=\"" . $name . "\" />\n";
   print INVIDATOUT "<Key Name=\"description\" Value=\"" . $name . "\" />\n";
   print INVIDATOUT "<Key Name=\"assetType\" Value=\"".$type."\" />\n";
   print INVIDATOUT "<Key Name=\"inventoryType\" Value=\"".$type."\" />\n";
   print INVIDATOUT "<Key Name=\"currentPermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "<Key Name=\"nextPermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "<Key Name=\"everyonePermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "<Key Name=\"basePermissions\" Value=\"2147483647\" />\n";
   print INVIDATOUT "</Section>\n";
   print INVIDATOUT "\n";

}
    
sub writeAsset() {

   $dir = shift;
   $name = shift;
   $type = shift;

   $uuidGen = new Data::UUID;
   $assetID = $uuidGen->create_str();

   print ASSETDATOUT "<Section Name=\"" . $name . "\">\n";
   print ASSETDATOUT "<Key Name=\"assetID\" Value=\"" . $assetID . "\" />\n";
   print ASSETDATOUT "<Key Name=\"name\" Value=\"" . $name . "\" />\n";
   print ASSETDATOUT "<Key Name=\"assetType\" Value=\"".$type."\" />\n";
   print ASSETDATOUT "<Key Name=\"inventoryType\" Value=\"".$type."\" />\n";
   print ASSETDATOUT "<Key Name=\"fileName\" Value=\"" . $dir . "/" . $name . "\" />\n";
   print ASSETDATOUT "</Section>\n";
   print ASSETDATOUT "\n";

   return $assetID;
 
}
Personal tools
General
About This Wiki