Merge branch 'master' of /home/opensim/var/repo/opensim
						commit
						1e7c523670
					
				|  | @ -93,7 +93,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// </summary> | ||||
|         public void StartScripts() | ||||
|         { | ||||
|             m_log.InfoFormat("[SCENE]: Starting scripts in {0}, please wait.", RegionInfo.RegionName); | ||||
| //            m_log.InfoFormat("[SCENE]: Starting scripts in {0}, please wait.", RegionInfo.RegionName); | ||||
| 
 | ||||
|             IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -468,7 +468,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             if (!InventoryService.AddFolder(folder)) | ||||
|             { | ||||
|                 m_log.WarnFormat( | ||||
|                      "[AGENT INVENTORY]: Failed to move create folder for user {0} {1}", | ||||
|                      "[AGENT INVENTORY]: Failed to create folder for user {0} {1}", | ||||
|                      remoteClient.Name, remoteClient.AgentId); | ||||
|             } | ||||
|         } | ||||
|  |  | |||
|  | @ -3562,7 +3562,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting.  Removing existing presence.", | ||||
|                     sp.Name, sp.UUID, RegionInfo.RegionName); | ||||
| 
 | ||||
|                 sp.ControllingClient.Close(); | ||||
|                 sp.ControllingClient.Close(true); | ||||
|                 sp = null; | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
|  | @ -300,7 +300,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         public bool AddNewSceneObject( | ||||
|             SceneObjectGroup sceneObject, bool attachToBackup, Vector3? pos, Quaternion? rot, Vector3 vel) | ||||
|         { | ||||
|             AddNewSceneObject(sceneObject, true, false); | ||||
|             AddNewSceneObject(sceneObject, attachToBackup, false); | ||||
| 
 | ||||
|             if (pos != null) | ||||
|                 sceneObject.AbsolutePosition = (Vector3)pos; | ||||
|  |  | |||
|  | @ -891,7 +891,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             { | ||||
|                 if (wasChild && HasAttachments()) | ||||
|                 { | ||||
|                     m_log.DebugFormat("[SCENE PRESENCE]: Restarting scripts in attachments..."); | ||||
|                     m_log.DebugFormat( | ||||
|                         "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name); | ||||
|                      | ||||
|                     // Resume scripts | ||||
|                     foreach (SceneObjectGroup sog in m_attachments) | ||||
|                     { | ||||
|  |  | |||
|  | @ -5828,7 +5828,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|             List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|             foreach (var part in parts) | ||||
|             foreach (SceneObjectPart part in parts) | ||||
|             { | ||||
|                 SetTextureAnim(part, mode, face, sizex, sizey, start, length, rate); | ||||
|             } | ||||
|  | @ -6190,7 +6190,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|             List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|             foreach (var part in parts) | ||||
|             foreach (SceneObjectPart part in parts) | ||||
|             { | ||||
|                 SetParticleSystem(part, rules); | ||||
|             } | ||||
|  | @ -7238,10 +7238,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             foreach (SceneObjectPart part in parts) | ||||
|                 remaining = SetPrimParams(part, rules); | ||||
| 
 | ||||
|             while(remaining != null && remaining.Length > 2) | ||||
|             while (remaining != null && remaining.Length > 2) | ||||
|             { | ||||
|                 linknumber = remaining.GetLSLIntegerItem(0); | ||||
|                 rules = remaining.GetSublist(1,-1); | ||||
|                 rules = remaining.GetSublist(1, -1); | ||||
|                 parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|                 foreach (SceneObjectPart part in parts) | ||||
|  | @ -7910,7 +7910,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|         public LSL_List llGetPrimitiveParams(LSL_List rules) | ||||
|         { | ||||
|             m_host.AddScriptLPS(1); | ||||
|             return GetLinkPrimitiveParams(m_host, rules); | ||||
| 
 | ||||
|             LSL_List result = new LSL_List(); | ||||
| 
 | ||||
|             LSL_List remaining = GetPrimParams(m_host, rules, ref result); | ||||
| 
 | ||||
|             while (remaining != null && remaining.Length > 2) | ||||
|             { | ||||
|                 int linknumber = remaining.GetLSLIntegerItem(0); | ||||
|                 rules = remaining.GetSublist(1, -1); | ||||
|                 List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|                 foreach (SceneObjectPart part in parts) | ||||
|                     remaining = GetPrimParams(part, rules, ref result); | ||||
|             } | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         public LSL_List llGetLinkPrimitiveParams(int linknumber, LSL_List rules) | ||||
|  | @ -7920,19 +7935,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|             LSL_List res = new LSL_List(); | ||||
|             LSL_List remaining = null; | ||||
| 
 | ||||
|             foreach (var part in parts) | ||||
|             foreach (SceneObjectPart part in parts) | ||||
|             { | ||||
|                 LSL_List partRes = GetLinkPrimitiveParams(part, rules); | ||||
|                 res += partRes; | ||||
|                 remaining = GetPrimParams(part, rules, ref res); | ||||
|             } | ||||
| 
 | ||||
|             while (remaining != null && remaining.Length > 2) | ||||
|             { | ||||
|                 linknumber = remaining.GetLSLIntegerItem(0); | ||||
|                 rules = remaining.GetSublist(1, -1); | ||||
|                 parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|                 foreach (SceneObjectPart part in parts) | ||||
|                     remaining = GetPrimParams(part, rules, ref res); | ||||
|             } | ||||
| 
 | ||||
|             return res; | ||||
|         } | ||||
| 
 | ||||
|         public LSL_List GetLinkPrimitiveParams(SceneObjectPart part, LSL_List rules) | ||||
|         public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) | ||||
|         { | ||||
|             LSL_List res = new LSL_List(); | ||||
|             int idx=0; | ||||
|             while (idx < rules.Length) | ||||
|             { | ||||
|  | @ -8077,7 +8101,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|                     case (int)ScriptBaseClass.PRIM_TEXTURE: | ||||
|                         if (remain < 1) | ||||
|                             return res; | ||||
|                             return null; | ||||
| 
 | ||||
|                         int face = (int)rules.GetLSLIntegerItem(idx++); | ||||
|                         Primitive.TextureEntry tex = part.Shape.Textures; | ||||
|  | @ -8117,7 +8141,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|                     case (int)ScriptBaseClass.PRIM_COLOR: | ||||
|                         if (remain < 1) | ||||
|                             return res; | ||||
|                             return null; | ||||
| 
 | ||||
|                         face=(int)rules.GetLSLIntegerItem(idx++); | ||||
| 
 | ||||
|  | @ -8146,7 +8170,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|                     case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | ||||
|                         if (remain < 1) | ||||
|                             return res; | ||||
|                             return null; | ||||
| 
 | ||||
|                         face=(int)rules.GetLSLIntegerItem(idx++); | ||||
| 
 | ||||
|  | @ -8177,7 +8201,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|                     case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | ||||
|                         if (remain < 1) | ||||
|                             return res; | ||||
|                             return null; | ||||
| 
 | ||||
|                         face=(int)rules.GetLSLIntegerItem(idx++); | ||||
| 
 | ||||
|  | @ -8219,7 +8243,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|                     case (int)ScriptBaseClass.PRIM_TEXGEN: | ||||
|                         if (remain < 1) | ||||
|                             return res; | ||||
|                             return null; | ||||
| 
 | ||||
|                         face=(int)rules.GetLSLIntegerItem(idx++); | ||||
| 
 | ||||
|  | @ -8260,7 +8284,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|                     case (int)ScriptBaseClass.PRIM_GLOW: | ||||
|                         if (remain < 1) | ||||
|                             return res; | ||||
|                             return null; | ||||
| 
 | ||||
|                         face=(int)rules.GetLSLIntegerItem(idx++); | ||||
| 
 | ||||
|  | @ -8312,9 +8336,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                             0 | ||||
|                         )); | ||||
|                         break; | ||||
|                     case (int)ScriptBaseClass.PRIM_LINK_TARGET: | ||||
|                         if(remain < 3) | ||||
|                             return null; | ||||
| 
 | ||||
|                         return rules.GetSublist(idx, -1); | ||||
|                 } | ||||
|             } | ||||
|             return res; | ||||
| 
 | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         public LSL_List llGetPrimMediaParams(int face, LSL_List rules) | ||||
|  | @ -10752,16 +10782,28 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public LSL_List GetLinkPrimitiveParamsEx(LSL_Key prim, LSL_List rules) | ||||
|         public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) | ||||
|         { | ||||
|             SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); | ||||
|             if (obj == null) | ||||
|                 return new LSL_List(); | ||||
| 
 | ||||
|             if (obj.OwnerID != m_host.OwnerID) | ||||
|                 return new LSL_List(); | ||||
|             LSL_List result = new LSL_List(); | ||||
| 
 | ||||
|             return GetLinkPrimitiveParams(obj, rules); | ||||
|             if (obj != null && obj.OwnerID != m_host.OwnerID) | ||||
|             { | ||||
|                 LSL_List remaining = GetPrimParams(obj, rules, ref result); | ||||
| 
 | ||||
|                 while (remaining != null && remaining.Length > 2) | ||||
|                 { | ||||
|                     int linknumber = remaining.GetLSLIntegerItem(0); | ||||
|                     rules = remaining.GetSublist(1, -1); | ||||
|                     List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||||
| 
 | ||||
|                     foreach (SceneObjectPart part in parts) | ||||
|                         remaining = GetPrimParams(part, rules, ref result); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
|         public void print(string str) | ||||
|  |  | |||
|  | @ -2246,11 +2246,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             CheckThreatLevel(ThreatLevel.High, "osGetLinkPrimitiveParams"); | ||||
|             m_host.AddScriptLPS(1); | ||||
|             InitLSL(); | ||||
|             // One needs to cast m_LSL_Api because we're using functions not | ||||
|             // on the ILSL_Api interface. | ||||
|             LSL_Api LSL_Api = (LSL_Api)m_LSL_Api; | ||||
|             LSL_List retVal = new LSL_List(); | ||||
|             List<SceneObjectPart> parts = ((LSL_Api)m_LSL_Api).GetLinkParts(linknumber); | ||||
|             LSL_List remaining = null; | ||||
|             List<SceneObjectPart> parts = LSL_Api.GetLinkParts(linknumber); | ||||
|             foreach (SceneObjectPart part in parts) | ||||
|             { | ||||
|                 retVal += ((LSL_Api)m_LSL_Api).GetLinkPrimitiveParams(part, rules); | ||||
|                 remaining = LSL_Api.GetPrimParams(part, rules, ref retVal); | ||||
|             } | ||||
| 
 | ||||
|             while (remaining != null && remaining.Length > 2) | ||||
|             { | ||||
|                 linknumber = remaining.GetLSLIntegerItem(0); | ||||
|                 rules = remaining.GetSublist(1, -1); | ||||
|                 parts = LSL_Api.GetLinkParts(linknumber); | ||||
| 
 | ||||
|                 foreach (SceneObjectPart part in parts) | ||||
|                     remaining = LSL_Api.GetPrimParams(part, rules, ref retVal); | ||||
|             } | ||||
|             return retVal; | ||||
|         } | ||||
|  | @ -2965,7 +2979,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             m_host.AddScriptLPS(1); | ||||
|             InitLSL(); | ||||
|              | ||||
|             return m_LSL_Api.GetLinkPrimitiveParamsEx(prim, rules); | ||||
|             return m_LSL_Api.GetPrimitiveParamsEx(prim, rules); | ||||
|         } | ||||
| 
 | ||||
|         public void osSetPrimitiveParams(LSL_Key prim, LSL_List rules) | ||||
|  |  | |||
|  | @ -425,6 +425,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
|               void print(string str); | ||||
| 
 | ||||
|               void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules); | ||||
|           LSL_List GetLinkPrimitiveParamsEx(LSL_Key prim, LSL_List rules); | ||||
|           LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -923,6 +923,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
|                 // This delay exists to stop mono problems where script compilation and startup would stop the sim | ||||
|                 // working properly for the session. | ||||
|                 System.Threading.Thread.Sleep(m_StartDelay); | ||||
| 
 | ||||
|                 m_log.InfoFormat("[XEngine]: Performing initial script startup on {0}", m_Scene.Name); | ||||
|             } | ||||
| 
 | ||||
|             object[] o; | ||||
|  | @ -938,13 +940,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
|                     if (m_InitialStartup) | ||||
|                         if (scriptsStarted % 50 == 0) | ||||
|                             m_log.InfoFormat( | ||||
|                                 "[XEngine]: Started {0} scripts in {1}", scriptsStarted, m_Scene.RegionInfo.RegionName); | ||||
|                                 "[XEngine]: Started {0} scripts in {1}", scriptsStarted, m_Scene.Name); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (m_InitialStartup) | ||||
|                 m_log.InfoFormat( | ||||
|                     "[XEngine]: Completed starting {0} scripts on {1}", scriptsStarted, m_Scene.RegionInfo.RegionName); | ||||
|                     "[XEngine]: Completed starting {0} scripts on {1}", scriptsStarted, m_Scene.Name); | ||||
| 
 | ||||
|             // NOTE: Despite having a lockless queue, this lock is required | ||||
|             // to make sure there is never no compile thread while there | ||||
|  |  | |||
|  | @ -137,9 +137,14 @@ namespace OpenSim.Services.GridService | |||
|             if (regionInfos.RegionID == UUID.Zero) | ||||
|                 return "Invalid RegionID - cannot be zero UUID"; | ||||
| 
 | ||||
|             // This needs better sanity testing. What if regionInfo is registering in | ||||
|             // overlapping coords? | ||||
|             RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | ||||
|             if ((region != null) && (region.RegionID != regionInfos.RegionID)) | ||||
|             { | ||||
|                 m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.",  | ||||
|                     regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | ||||
|                 return "Region overlaps another region"; | ||||
|             } | ||||
| 
 | ||||
|             if (region != null) | ||||
|             { | ||||
|                 // There is a preexisting record | ||||
|  | @ -176,32 +181,7 @@ namespace OpenSim.Services.GridService | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if ((region != null) && (region.RegionID != regionInfos.RegionID)) | ||||
|             { | ||||
|                 m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.",  | ||||
|                     regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | ||||
|                 return "Region overlaps another region"; | ||||
|             } | ||||
| 
 | ||||
|             if ((region != null) && (region.RegionID == regionInfos.RegionID) &&  | ||||
|                 ((region.posX != regionInfos.RegionLocX) || (region.posY != regionInfos.RegionLocY))) | ||||
|             { | ||||
|                 if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.NoMove) != 0) | ||||
|                     return "Can't move this region"; | ||||
| 
 | ||||
|                 // Region reregistering in other coordinates. Delete the old entry | ||||
|                 m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) was previously registered at {2}-{3}. Deleting old entry.", | ||||
|                     regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY); | ||||
| 
 | ||||
|                 try | ||||
|                 { | ||||
|                     m_Database.Delete(regionInfos.RegionID); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.DebugFormat("[GRID SERVICE]: Database exception: {0}", e); | ||||
|                 } | ||||
|             } | ||||
|             // If we get here, the destination is clear. Now for the real check. | ||||
| 
 | ||||
|             if (!m_AllowDuplicateNames) | ||||
|             { | ||||
|  | @ -220,6 +200,31 @@ namespace OpenSim.Services.GridService | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // If there is an old record for us, delete it if it is elsewhere. | ||||
|             region = m_Database.Get(regionInfos.RegionID, scopeID); | ||||
|             if ((region != null) && (region.RegionID == regionInfos.RegionID) &&  | ||||
|                 ((region.posX != regionInfos.RegionLocX) || (region.posY != regionInfos.RegionLocY))) | ||||
|             { | ||||
|                 if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.NoMove) != 0) | ||||
|                     return "Can't move this region"; | ||||
| 
 | ||||
|                 if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.LockedOut) != 0) | ||||
|                     return "Region locked out"; | ||||
| 
 | ||||
|                 // Region reregistering in other coordinates. Delete the old entry | ||||
|                 m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) was previously registered at {2}-{3}. Deleting old entry.", | ||||
|                     regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY); | ||||
| 
 | ||||
|                 try | ||||
|                 { | ||||
|                     m_Database.Delete(regionInfos.RegionID); | ||||
|                 } | ||||
|                 catch (Exception e) | ||||
|                 { | ||||
|                     m_log.DebugFormat("[GRID SERVICE]: Database exception: {0}", e); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // Everything is ok, let's register | ||||
|             RegionData rdata = RegionInfo2RegionData(regionInfos); | ||||
|             rdata.ScopeID = scopeID; | ||||
|  | @ -227,8 +232,6 @@ namespace OpenSim.Services.GridService | |||
|             if (region != null) | ||||
|             { | ||||
|                 int oldFlags = Convert.ToInt32(region.Data["flags"]); | ||||
|                 if ((oldFlags & (int)OpenSim.Data.RegionFlags.LockedOut) != 0) | ||||
|                     return "Region locked out"; | ||||
| 
 | ||||
|                 oldFlags &= ~(int)OpenSim.Data.RegionFlags.Reservation; | ||||
| 
 | ||||
|  |  | |||
|  | @ -229,10 +229,28 @@ namespace OpenSim.Services.InventoryService | |||
|         public virtual InventoryFolderBase GetFolderForType(UUID principalID, AssetType type) | ||||
|         { | ||||
| //            m_log.DebugFormat("[XINVENTORY SERVICE]: Getting folder type {0} for user {1}", type, principalID); | ||||
| 
 | ||||
|             InventoryFolderBase rootFolder = GetRootFolder(principalID); | ||||
| 
 | ||||
|             if (rootFolder == null) | ||||
|             { | ||||
|                 m_log.WarnFormat( | ||||
|                     "[XINVENTORY]: Found no root folder for {0} in GetFolderForType() when looking for {1}", | ||||
|                     principalID, type); | ||||
| 
 | ||||
|                 return null; | ||||
|             } | ||||
|              | ||||
|             return GetSystemFolderForType(rootFolder, type); | ||||
|         } | ||||
| 
 | ||||
|         private InventoryFolderBase GetSystemFolderForType(InventoryFolderBase rootFolder, AssetType type) | ||||
|         { | ||||
| //            m_log.DebugFormat("[XINVENTORY SERVICE]: Getting folder type {0} for user {1}", type, principalID); | ||||
|              | ||||
|             XInventoryFolder[] folders = m_Database.GetFolders( | ||||
|                     new string[] { "agentID", "type"}, | ||||
|                     new string[] { principalID.ToString(), ((int)type).ToString() }); | ||||
|                     new string[] { "agentID", "parentFolderID", "type"}, | ||||
|                     new string[] { rootFolder.Owner.ToString(), rootFolder.ID.ToString(), ((int)type).ToString() }); | ||||
| 
 | ||||
|             if (folders.Length == 0) | ||||
|             { | ||||
|  | @ -308,22 +326,38 @@ namespace OpenSim.Services.InventoryService | |||
|             if (check != null) | ||||
|                 return false; | ||||
| 
 | ||||
|             if (folder.Type == (short)AssetType.Folder | ||||
|                 || folder.Type == (short)AssetType.Unknown | ||||
|                 || folder.Type == (short)AssetType.OutfitFolder | ||||
|                 || GetFolderForType(folder.Owner, (AssetType)(folder.Type)) == null) | ||||
|             if (folder.Type != (short)AssetType.Folder || folder.Type != (short)AssetType.Unknown) | ||||
|             { | ||||
|                 XInventoryFolder xFolder = ConvertFromOpenSim(folder); | ||||
|                 return m_Database.StoreFolder(xFolder); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 m_log.WarnFormat( | ||||
|                     "[XINVENTORY]: Folder of type {0} already exists when tried to add {1} to {2} for {3}", | ||||
|                     folder.Type, folder.Name, folder.ParentID, folder.Owner); | ||||
|                 InventoryFolderBase rootFolder = GetRootFolder(folder.Owner); | ||||
| 
 | ||||
|                 if (rootFolder == null) | ||||
|                 { | ||||
|                     m_log.WarnFormat( | ||||
|                         "[XINVENTORY]: Found no root folder for {0} in AddFolder() when looking for {1}", | ||||
|                         folder.Owner, folder.Type); | ||||
| 
 | ||||
|                     return false; | ||||
|                 } | ||||
| 
 | ||||
|                 // Check we're not trying to add this as a system folder. | ||||
|                 if (folder.ParentID == rootFolder.ID) | ||||
|                 { | ||||
|                     InventoryFolderBase existingSystemFolder | ||||
|                         = GetSystemFolderForType(rootFolder, (AssetType)folder.Type); | ||||
| 
 | ||||
|                     if (existingSystemFolder != null) | ||||
|                     { | ||||
|                         m_log.WarnFormat( | ||||
|                             "[XINVENTORY]: System folder of type {0} already exists when tried to add {1} to {2} for {3}", | ||||
|                             folder.Type, folder.Name, folder.ParentID, folder.Owner); | ||||
|      | ||||
|                         return false; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             return false; | ||||
|             XInventoryFolder xFolder = ConvertFromOpenSim(folder); | ||||
|             return m_Database.StoreFolder(xFolder); | ||||
|         } | ||||
| 
 | ||||
|         public virtual bool UpdateFolder(InventoryFolderBase folder) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 BlueWall
						BlueWall