private HashSet <UUID> CollectFullPermTexturesIfNecessary(ref UUID userId, GroupLoader.LoaderParams parms, OpenSim.Data.IInventoryStorage inv)
        {
            HashSet <UUID> fullPermTextures;

            if ((parms.Checks & LoaderChecks.TexturesMustBeFullPerm) != 0)
            {
                fullPermTextures = new HashSet <UUID>();

                //check the textures folder...
                InventoryFolderBase textureFolder     = inv.FindFolderForType(userId, AssetType.Texture);
                InventoryFolderBase fullTextureFolder = inv.GetFolder(textureFolder.ID);

                if (textureFolder != null)
                {
                    RecursiveCollectFullPermTextureIds(inv, fullTextureFolder, fullPermTextures);
                }
                else
                {
                    throw new ApplicationException("Could not find texture folder");
                }

                InventoryFolderBase objFolder = inv.FindFolderForType(userId, AssetType.Object);
                InventoryFolderBase dsFolder  = null;
                foreach (InventorySubFolderBase subFolder in objFolder.SubFolders)
                {
                    if (subFolder.Name.ToLower() == "dreamshare")
                    {
                        dsFolder = inv.GetFolder(subFolder.ID);
                    }
                }

                if (dsFolder != null)
                {
                    RecursiveCollectFullPermTextureIds(inv, dsFolder, fullPermTextures);
                }

                return(fullPermTextures);
            }

            return(null);
        }
        private void RecursiveCollectFullPermTextureIds(OpenSim.Data.IInventoryStorage inv, InventoryFolderBase parentFolder, HashSet <UUID> fullPermTextures)
        {
            //depth first
            foreach (var childFolder in parentFolder.SubFolders)
            {
                InventoryFolderBase fullChild = inv.GetFolder(childFolder.ID);
                RecursiveCollectFullPermTextureIds(inv, fullChild, fullPermTextures);
            }

            foreach (var item in parentFolder.Items)
            {
                if (item.AssetType == (int)AssetType.Texture)
                {
                    if (((item.CurrentPermissions & (uint)PermissionMask.Copy) != 0) &&
                        ((item.CurrentPermissions & (uint)PermissionMask.Modify) != 0) &&
                        ((item.CurrentPermissions & (uint)PermissionMask.Transfer) != 0))
                    {
                        fullPermTextures.Add(item.AssetID);
                    }
                }
            }
        }