mirror of
https://github.com/opensim/opensim.git
synced 2026-08-01 06:06:06 +08:00
more useless changes on some oar/iar files
This commit is contained in:
@@ -131,12 +131,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <value>
|
||||
/// original oar region size. not using Constants.RegionSize
|
||||
/// </value>
|
||||
protected Vector3 m_incomingRegionSize = new Vector3(256f, 256f, float.MaxValue);
|
||||
protected Vector3 m_incomingRegionSize = new(256f, 256f, float.MaxValue);
|
||||
|
||||
/// <value>
|
||||
/// Center around which to apply the rotation relative to the original oar position
|
||||
/// </value>
|
||||
protected Vector3 m_rotationCenter = new Vector3(128f, 128f, 0f);
|
||||
protected Vector3 m_rotationCenter = new(128f, 128f, 0f);
|
||||
|
||||
/// <value>
|
||||
/// Corner 1 of a bounding cuboid which specifies which objects we load from the oar
|
||||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <value>
|
||||
/// Size of a bounding cuboid which specifies which objects we load from the oar
|
||||
/// </value>
|
||||
protected Vector3 m_boundingSize = new Vector3(Constants.MaximumRegionSize, Constants.MaximumRegionSize, float.MaxValue);
|
||||
protected Vector3 m_boundingSize = new(Constants.MaximumRegionSize, Constants.MaximumRegionSize, float.MaxValue);
|
||||
|
||||
protected bool m_noObjects = false;
|
||||
protected bool m_boundingBox = false;
|
||||
@@ -155,17 +155,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <summary>
|
||||
/// Used to cache lookups for valid uuids.
|
||||
/// </summary>
|
||||
private IDictionary<UUID, bool> m_validUserUuids = new Dictionary<UUID, bool>();
|
||||
private readonly Dictionary<UUID, bool> m_validUserUuids = new();
|
||||
|
||||
private IUserManagement m_UserMan;
|
||||
private IUserManagement UserManager
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_UserMan == null)
|
||||
{
|
||||
m_UserMan = m_rootScene.RequestModuleInterface<IUserManagement>();
|
||||
}
|
||||
m_UserMan ??= m_rootScene.RequestModuleInterface<IUserManagement>();
|
||||
return m_UserMan;
|
||||
}
|
||||
}
|
||||
@@ -173,11 +170,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <summary>
|
||||
/// Used to cache lookups for valid groups.
|
||||
/// </summary>
|
||||
private IDictionary<UUID, bool> m_validGroupUuids = new Dictionary<UUID, bool>();
|
||||
private readonly Dictionary<UUID, bool> m_validGroupUuids = new();
|
||||
|
||||
private IGroupsModule m_groupsModule;
|
||||
private readonly IGroupsModule m_groupsModule;
|
||||
|
||||
private IAssetService m_assetService = null;
|
||||
private readonly IAssetService m_assetService = null;
|
||||
|
||||
private UUID m_defaultUser;
|
||||
|
||||
@@ -294,10 +291,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
private void loadNeededAssets(assetfileInfo[] assetsFiles, int count, ref int successfulAssetRestores,
|
||||
ref int failedAssetRestores, ref int skipedAssetRestores)
|
||||
{
|
||||
List<string> ids = new List<string>(count);
|
||||
List<UUID> uuids = new List<UUID>(count);
|
||||
List<sbyte> types = new List<sbyte>(count);
|
||||
List<byte[]> datas = new List<byte[]>(count);
|
||||
List<string> ids = new(count);
|
||||
List<UUID> uuids = new(count);
|
||||
List<sbyte> types = new(count);
|
||||
List<byte[]> datas = new(count);
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
@@ -307,7 +304,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
assetsFiles[i].path = null;
|
||||
assetsFiles[i].data = null;
|
||||
|
||||
string filename = assetPath.Substring(ArchiveConstants.ASSETS_PATH.Length);
|
||||
string filename = assetPath[ArchiveConstants.ASSETS_PATH.Length..];
|
||||
int indx = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR);
|
||||
if (indx < 0)
|
||||
{
|
||||
@@ -317,7 +314,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
failedAssetRestores++;
|
||||
continue;
|
||||
}
|
||||
string extension = filename.Substring(indx);
|
||||
string extension = filename[indx..];
|
||||
if (ArchiveConstants.EXTENSION_TO_ASSET_TYPE.ContainsKey(extension))
|
||||
{
|
||||
string id = filename.Remove(indx);
|
||||
@@ -336,7 +333,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
bool[] exits = m_assetService.AssetsExist(ids.ToArray());
|
||||
ids.Clear();
|
||||
|
||||
if (exits == null)
|
||||
if (exits is null)
|
||||
{
|
||||
m_log.Error("[ARCHIVER]: asset service AssetsExists failed");
|
||||
failedAssetRestores += uuids.Count;
|
||||
@@ -388,19 +385,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|
||||
// We dearchive all the scenes at once, because the files in the TAR archive might be mixed.
|
||||
// Therefore, we have to keep track of the dearchive context of all the scenes.
|
||||
Dictionary<UUID, DearchiveContext> sceneContexts = new Dictionary<UUID, DearchiveContext>();
|
||||
Dictionary<UUID, DearchiveContext> sceneContexts = new();
|
||||
|
||||
string fullPath = "NONE";
|
||||
TarArchiveReader archive = null;
|
||||
byte[] data;
|
||||
TarArchiveReader.TarEntryType entryType;
|
||||
assetfileInfo[] assetsFiles = new assetfileInfo[32];
|
||||
int assetsFilesCount = 0;
|
||||
try
|
||||
{
|
||||
FindAndLoadControlFile(out archive, out dearchivedScenes);
|
||||
|
||||
while ((data = archive.ReadEntry(out fullPath, out entryType)) != null)
|
||||
while ((data = archive.ReadEntry(out fullPath, out TarArchiveReader.TarEntryType entryType)) is not null)
|
||||
{
|
||||
//m_log.DebugFormat(
|
||||
// "[ARCHIVER]: Successfully read {0} ({1} bytes)", filePath, data.Length);
|
||||
@@ -410,13 +406,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|
||||
// Find the scene that this file belongs to
|
||||
|
||||
Scene scene;
|
||||
string filePath;
|
||||
if (!dearchivedScenes.GetRegionFromPath(fullPath, out scene, out filePath))
|
||||
if (!dearchivedScenes.GetRegionFromPath(fullPath, out Scene scene, out string filePath))
|
||||
continue; // this file belongs to a region that we're not loading
|
||||
|
||||
DearchiveContext sceneContext = null;
|
||||
if (scene != null)
|
||||
if (scene is not null)
|
||||
{
|
||||
if (!sceneContexts.TryGetValue(scene.RegionInfo.RegionID, out sceneContext))
|
||||
{
|
||||
@@ -427,36 +421,43 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|
||||
// Process the file
|
||||
|
||||
if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH) && !m_noObjects)
|
||||
if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH))
|
||||
{
|
||||
sceneContext.SerialisedSceneObjects.Add(Encoding.UTF8.GetString(data));
|
||||
if(!m_noObjects)
|
||||
sceneContext.SerialisedSceneObjects.Add(Encoding.UTF8.GetString(data));
|
||||
}
|
||||
else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH) && !m_skipAssets)
|
||||
else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH))
|
||||
{
|
||||
assetfileInfo asf = new assetfileInfo
|
||||
if(!m_skipAssets)
|
||||
{
|
||||
path = filePath,
|
||||
data = data
|
||||
};
|
||||
assetfileInfo asf = new()
|
||||
{
|
||||
path = filePath,
|
||||
data = data
|
||||
};
|
||||
|
||||
assetsFiles[assetsFilesCount++] = asf;
|
||||
if (assetsFilesCount == 32)
|
||||
{
|
||||
loadNeededAssets(assetsFiles, assetsFilesCount, ref successfulAssetRestores, ref failedAssetRestores, ref skippedAssetRestores);
|
||||
assetsFilesCount = 0;
|
||||
assetsFiles[assetsFilesCount++] = asf;
|
||||
if (assetsFilesCount == 32)
|
||||
{
|
||||
loadNeededAssets(assetsFiles, assetsFilesCount, ref successfulAssetRestores, ref failedAssetRestores, ref skippedAssetRestores);
|
||||
assetsFilesCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH) && (!m_merge || m_mergeTerrain))
|
||||
else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH))
|
||||
{
|
||||
LoadTerrain(scene, filePath, data);
|
||||
if(!m_merge || m_mergeTerrain)
|
||||
LoadTerrain(scene, filePath, data);
|
||||
}
|
||||
else if (!m_merge && filePath.StartsWith(ArchiveConstants.SETTINGS_PATH))
|
||||
else if (filePath.StartsWith(ArchiveConstants.SETTINGS_PATH))
|
||||
{
|
||||
LoadRegionSettings(scene, filePath, data, dearchivedScenes);
|
||||
if(!m_merge)
|
||||
LoadRegionSettings(scene, filePath, data, dearchivedScenes);
|
||||
}
|
||||
else if (filePath.StartsWith(ArchiveConstants.LANDDATA_PATH) && (!m_merge || m_mergeParcels))
|
||||
else if (filePath.StartsWith(ArchiveConstants.LANDDATA_PATH))
|
||||
{
|
||||
sceneContext.SerialisedParcels.Add(Encoding.UTF8.GetString(data));
|
||||
if(!m_merge || m_mergeParcels)
|
||||
sceneContext.SerialisedParcels.Add(Encoding.UTF8.GetString(data));
|
||||
}
|
||||
else if (filePath == ArchiveConstants.CONTROL_FILE_PATH)
|
||||
{
|
||||
@@ -471,33 +472,32 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.Error(
|
||||
String.Format("[ARCHIVER]: Aborting load with error in archive file {0} ", fullPath), e);
|
||||
m_errorMessage += e.ToString();
|
||||
m_log.Error($"[ARCHIVER]: Aborting load with error in archive file {fullPath}: {e.Message}");
|
||||
m_errorMessage += e.Message;
|
||||
m_rootScene.EventManager.TriggerOarFileLoaded(m_requestId, new List<UUID>(), m_errorMessage);
|
||||
return;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (archive != null)
|
||||
if (archive is not null)
|
||||
archive.Close();
|
||||
}
|
||||
|
||||
if (!m_skipAssets)
|
||||
{
|
||||
m_log.InfoFormat("[ARCHIVER]: Restored {0} assets", successfulAssetRestores + skippedAssetRestores);
|
||||
m_log.InfoFormat("[ARCHIVER]: Skipped {0} asset uploads", skippedAssetRestores);
|
||||
m_log.Info($"[ARCHIVER]: Restored {successfulAssetRestores + skippedAssetRestores} assets");
|
||||
m_log.Info($"[ARCHIVER]: Skipped {skippedAssetRestores} asset uploads");
|
||||
|
||||
if (failedAssetRestores > 0)
|
||||
{
|
||||
m_log.ErrorFormat("[ARCHIVER]: Failed to load {0} assets", failedAssetRestores);
|
||||
m_errorMessage += String.Format("Failed to load {0} assets", failedAssetRestores);
|
||||
m_log.Error($"[ARCHIVER]: Failed to load {failedAssetRestores} assets");
|
||||
m_errorMessage += $"Failed to load {failedAssetRestores} assets";
|
||||
}
|
||||
}
|
||||
|
||||
foreach (DearchiveContext sceneContext in sceneContexts.Values)
|
||||
{
|
||||
m_log.InfoFormat("[ARCHIVER]: Loading region {0}", sceneContext.Scene.RegionInfo.RegionName);
|
||||
m_log.Info($"[ARCHIVER]: Loading region {sceneContext.Scene.RegionInfo.RegionName}");
|
||||
|
||||
if (!m_merge)
|
||||
{
|
||||
@@ -513,13 +513,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
// Inform any interested parties that the region has changed. We waited until now so that all
|
||||
// of the region's objects will be loaded when we send this notification.
|
||||
IEstateModule estateModule = sceneContext.Scene.RequestModuleInterface<IEstateModule>();
|
||||
if (estateModule != null)
|
||||
if (estateModule is not null)
|
||||
estateModule.TriggerRegionInfoChange();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.Error("[ARCHIVER]: Error loading parcels or objects ", e);
|
||||
m_errorMessage += e.ToString();
|
||||
m_log.Error($"[ARCHIVER]: Error loading parcels or objects :{e.Message}");
|
||||
m_errorMessage += e.Message;
|
||||
m_rootScene.EventManager.TriggerOarFileLoaded(m_requestId, new List<UUID>(), m_errorMessage);
|
||||
return;
|
||||
}
|
||||
@@ -544,7 +544,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
sceneContext.SceneObjects.Clear();
|
||||
}
|
||||
m_log.Info("[ARCHIVER]: Start scripts done");
|
||||
}, null, string.Format("ReadArchiveStartScripts (request {0})", m_requestId));
|
||||
}, null, $"ReadArchiveStartScripts (request {m_requestId})");
|
||||
}
|
||||
|
||||
m_log.InfoFormat("[ARCHIVER]: Successfully loaded archive");
|
||||
@@ -567,12 +567,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
archive = new TarArchiveReader(m_loadStream);
|
||||
dearchivedScenes = new DearchiveScenesInfo();
|
||||
|
||||
string filePath;
|
||||
byte[] data;
|
||||
TarArchiveReader.TarEntryType entryType;
|
||||
bool firstFile = true;
|
||||
|
||||
while ((data = archive.ReadEntry(out filePath, out entryType)) != null)
|
||||
while ((data = archive.ReadEntry(out string filePath, out TarArchiveReader.TarEntryType entryType)) is not null)
|
||||
{
|
||||
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType)
|
||||
continue;
|
||||
@@ -582,7 +580,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
LoadControlFile(filePath, data, dearchivedScenes);
|
||||
|
||||
// Find which scenes are available in the simulator
|
||||
ArchiveScenesGroup simulatorScenes = new ArchiveScenesGroup();
|
||||
ArchiveScenesGroup simulatorScenes = new();
|
||||
SceneManager.Instance.ForEachScene(delegate(Scene scene2)
|
||||
{
|
||||
simulatorScenes.AddScene(scene2);
|
||||
@@ -598,7 +596,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
m_loadStream.Seek(0, SeekOrigin.Begin);
|
||||
}
|
||||
else if (m_loadPath != null)
|
||||
else if (m_loadPath is not null)
|
||||
{
|
||||
archive.Close();
|
||||
archive = null;
|
||||
@@ -629,10 +627,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
protected void LoadObjects(Scene scene, List<string> serialisedSceneObjects, List<SceneObjectGroup> sceneObjects)
|
||||
{
|
||||
// Reload serialized prims
|
||||
m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count);
|
||||
m_log.Info($"[ARCHIVER]: Loading {serialisedSceneObjects.Count} scene objects. Please wait.");
|
||||
|
||||
// Convert rotation to radians
|
||||
double rotation = Math.PI * m_rotation / 180f;
|
||||
double rotation = MathF.PI * m_rotation / 180f;
|
||||
|
||||
OpenMetaverse.Quaternion rot = OpenMetaverse.Quaternion.CreateFromAxisAngle(0, 0, 1, (float)rotation);
|
||||
|
||||
@@ -640,7 +638,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|
||||
IRegionSerialiserModule serialiser = scene.RequestModuleInterface<IRegionSerialiserModule>();
|
||||
int sceneObjectsLoadedCount = 0;
|
||||
Vector3 boundingExtent = new Vector3(m_boundingOrigin.X + m_boundingSize.X, m_boundingOrigin.Y + m_boundingSize.Y, m_boundingOrigin.Z + m_boundingSize.Z);
|
||||
Vector3 boundingExtent = new(m_boundingOrigin.X + m_boundingSize.X, m_boundingOrigin.Y + m_boundingSize.Y, m_boundingOrigin.Z + m_boundingSize.Z);
|
||||
|
||||
int mergeskip = 0;
|
||||
foreach (string serialisedSceneObject in serialisedSceneObjects)
|
||||
@@ -660,7 +658,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|
||||
Vector3 pos = sceneObject.AbsolutePosition;
|
||||
if (m_debug)
|
||||
m_log.DebugFormat("[ARCHIVER]: Loading object from OAR with original scene position {0}.", pos.ToString());
|
||||
m_log.Debug($"[ARCHIVER]: Loading object from OAR with original scene position {pos}");
|
||||
|
||||
// Happily this does not do much to the object since it hasn't been added to the scene yet
|
||||
if (!sceneObject.IsAttachment)
|
||||
@@ -669,8 +667,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
//fix the rotation center to the middle of the incoming region now as it's otherwise hopelessly confusing on varRegions
|
||||
//as it only works with objects and terrain (using old Merge method) and not parcels
|
||||
m_rotationCenter.X = m_incomingRegionSize.X / 2;
|
||||
m_rotationCenter.Y = m_incomingRegionSize.Y / 2;
|
||||
m_rotationCenter.X = m_incomingRegionSize.X * 0.5f;
|
||||
m_rotationCenter.Y = m_incomingRegionSize.Y * 0.5f;
|
||||
|
||||
// Rotate the object
|
||||
sceneObject.RootPart.RotationOffset = rot * sceneObject.GroupRotation;
|
||||
@@ -680,7 +678,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
offset *= rot;
|
||||
// Restore the object position back to relative to the region
|
||||
pos = m_rotationCenter + offset;
|
||||
if (m_debug) m_log.DebugFormat("[ARCHIVER]: After rotation, object from OAR is at scene position {0}.", pos.ToString());
|
||||
if (m_debug) m_log.Debug($"[ARCHIVER]: After rotation, object from OAR is at scene position {pos}");
|
||||
}
|
||||
if (m_boundingBox)
|
||||
{
|
||||
@@ -688,7 +686,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|| pos.Y < m_boundingOrigin.Y || pos.Y >= boundingExtent.Y
|
||||
|| pos.Z < m_boundingOrigin.Z || pos.Z >= boundingExtent.Z)
|
||||
{
|
||||
if (m_debug) m_log.DebugFormat("[ARCHIVER]: Skipping object from OAR in scene because it's position {0} is outside of bounding cube.", pos.ToString());
|
||||
if (m_debug) m_log.Debug($"[ARCHIVER]: Skipping object from OAR in scene because it's position {pos} is outside of bounding cube.");
|
||||
continue;
|
||||
}
|
||||
//adjust object position to be relative to <0,0> so we can apply the displacement
|
||||
@@ -702,15 +700,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|| pos.Y < 0 || pos.Y >= scene.RegionInfo.RegionSizeY
|
||||
|| pos.Z < Constants.MinSimulationHeight || pos.Z > Constants.MaxSimulationHeight)
|
||||
{
|
||||
if (m_debug) m_log.DebugFormat("[ARCHIVER]: Skipping object from OAR After displacement clip {0}.", pos.ToString());
|
||||
if (m_debug) m_log.Debug($"[ARCHIVER]: Skipping object from OAR After displacement clip {pos}");
|
||||
continue;
|
||||
}
|
||||
if (m_debug) m_log.DebugFormat("[ARCHIVER]: After displacement, object from OAR is at scene position {0}.", pos.ToString());
|
||||
if (m_debug) m_log.Debug($"[ARCHIVER]: After displacement, object from OAR is at scene position {pos}");
|
||||
}
|
||||
sceneObject.AbsolutePosition = pos;
|
||||
}
|
||||
if (m_debug)
|
||||
m_log.DebugFormat("[ARCHIVER]: Placing object from OAR in scene at position {0}. ", pos.ToString());
|
||||
m_log.Debug($"[ARCHIVER]: Placing object from OAR in scene at position {pos}. ");
|
||||
|
||||
bool isTelehub = (sceneObject.UUID.Equals(oldTelehubUUID)) && (!oldTelehubUUID.IsZero());
|
||||
|
||||
@@ -739,22 +737,22 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
}
|
||||
}
|
||||
|
||||
m_log.InfoFormat("[ARCHIVER]: Loaded {0} scene objects to the scene", sceneObjectsLoadedCount);
|
||||
m_log.Info($"[ARCHIVER]: Loaded {sceneObjectsLoadedCount} scene objects to the scene");
|
||||
int ignoredObjects = serialisedSceneObjects.Count - sceneObjectsLoadedCount - mergeskip;
|
||||
|
||||
if(mergeskip > 0)
|
||||
{
|
||||
if(m_mergeReplaceObjects)
|
||||
m_log.InfoFormat("[ARCHIVER]: Replaced {0} scene objects", mergeskip);
|
||||
m_log.Info($"[ARCHIVER]: Replaced {mergeskip} scene objects");
|
||||
else
|
||||
m_log.InfoFormat("[ARCHIVER]: Skipped {0} scene objects that already existed in the scene", mergeskip);
|
||||
m_log.Info($"[ARCHIVER]: Skipped {mergeskip} scene objects that already existed in the scene");
|
||||
}
|
||||
if (ignoredObjects > 0)
|
||||
m_log.WarnFormat("[ARCHIVER]: Ignored {0} possible out of bounds", ignoredObjects);
|
||||
m_log.Warn($"[ARCHIVER]: Ignored {ignoredObjects} possible out of bounds");
|
||||
|
||||
if (!oldTelehubUUID.IsZero())
|
||||
{
|
||||
m_log.WarnFormat("[ARCHIVER]: Telehub object not found: {0}", oldTelehubUUID);
|
||||
m_log.Warn($"[ARCHIVER]: Telehub object not found: {oldTelehubUUID}");
|
||||
scene.RegionInfo.RegionSettings.TelehubObject = UUID.Zero;
|
||||
scene.RegionInfo.RegionSettings.ClearSpawnPoints();
|
||||
}
|
||||
@@ -775,7 +773,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
if (!ResolveUserUuid(scene, part.CreatorID))
|
||||
part.CreatorID = m_defaultUser;
|
||||
}
|
||||
if (UserManager != null)
|
||||
if (UserManager is not null)
|
||||
UserManager.AddCreatorUser(part.CreatorID, part.CreatorData);
|
||||
|
||||
if (!(ResolveUserUuid(scene, part.OwnerID) || ResolveGroupUuid(part.OwnerID)))
|
||||
@@ -796,11 +794,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
// being no copy/no mod for everyone
|
||||
lock (part.TaskInventory)
|
||||
{
|
||||
/* avination code disabled for opensim
|
||||
// And zap any troublesome sit target information
|
||||
part.SitTargetOrientation = new Quaternion(0, 0, 0, 1);
|
||||
part.SitTargetPosition = new Vector3(0, 0, 0);
|
||||
*/
|
||||
// Fix ownership/creator of inventory items
|
||||
// Not doing so results in inventory items
|
||||
// being no copy/no mod for everyone
|
||||
@@ -820,14 +813,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
kvp.Value.CreatorID = m_defaultUser;
|
||||
}
|
||||
|
||||
if (UserManager != null)
|
||||
if (UserManager is not null)
|
||||
UserManager.AddCreatorUser(kvp.Value.CreatorID, kvp.Value.CreatorData);
|
||||
|
||||
if (!ResolveGroupUuid(kvp.Value.GroupID))
|
||||
kvp.Value.GroupID = UUID.Zero;
|
||||
}
|
||||
part.TaskInventory.LockItemsForRead(false);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -846,15 +838,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
}
|
||||
|
||||
// Reload serialized parcels
|
||||
m_log.InfoFormat("[ARCHIVER]: Loading {0} parcels. Please wait.", serialisedParcels.Count);
|
||||
List<LandData> landData = new List<LandData>();
|
||||
ILandObject landObject = scene.RequestModuleInterface<ILandObject>();
|
||||
m_log.Info($"[ARCHIVER]: Loading {serialisedParcels.Count} parcels. Please wait.");
|
||||
List<LandData> landData = new();
|
||||
ILandObject landObject;
|
||||
List<ILandObject> parcels;
|
||||
Vector3 parcelDisp = new Vector3(m_displacement.X, m_displacement.Y, 0f);
|
||||
Vector2 displacement = new Vector2(m_displacement.X, m_displacement.Y);
|
||||
Vector2 boundingOrigin = new Vector2(m_boundingOrigin.X, m_boundingOrigin.Y);
|
||||
Vector2 boundingSize = new Vector2(m_boundingSize.X, m_boundingSize.Y);
|
||||
Vector2 regionSize = new Vector2(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY);
|
||||
Vector2 displacement = new(m_displacement.X, m_displacement.Y);
|
||||
Vector2 boundingOrigin = new(m_boundingOrigin.X, m_boundingOrigin.Y);
|
||||
Vector2 boundingSize = new(m_boundingSize.X, m_boundingSize.Y);
|
||||
Vector2 regionSize = new(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY);
|
||||
|
||||
// Gather any existing parcels before we add any more. Later as we add parcels we can check if the new parcel
|
||||
// data overlays any of the old data, and we can modify and remove (if empty) the old parcel so that there's no conflict
|
||||
@@ -866,31 +857,30 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
LandData parcel = LandDataSerializer.Deserialize(serialisedParcel);
|
||||
bool overrideRegionSize = true; //use the src land parcel data size not the dst region size
|
||||
bool isEmptyNow;
|
||||
|
||||
// create a new LandObject that we can use to manipulate the incoming source parcel data
|
||||
// this is ok, but just beware that some of the LandObject functions (that we haven't used here) still
|
||||
// assume we're always using the destination region size
|
||||
LandData ld = new LandData();
|
||||
landObject = new LandObject(ld, scene);
|
||||
landObject.LandData = parcel;
|
||||
LandData ld = new();
|
||||
landObject = new LandObject(ld, scene)
|
||||
{
|
||||
LandData = parcel
|
||||
};
|
||||
|
||||
bool[,] srcLandBitmap = landObject.ConvertBytesToLandBitmap(overrideRegionSize);
|
||||
if (landObject.IsLandBitmapEmpty(srcLandBitmap))
|
||||
{
|
||||
m_log.InfoFormat("[ARCHIVER]: Skipping source parcel {0} with GlobalID: {1} LocalID: {2} that has no claimed land.",
|
||||
parcel.Name, parcel.GlobalID, parcel.LocalID);
|
||||
m_log.Info($"[ARCHIVER]: Skipping source parcel {parcel.Name} with GlobalID: {parcel.GlobalID} LocalID: {parcel.LocalID} that has no claimed land.");
|
||||
continue;
|
||||
}
|
||||
//m_log.DebugFormat("[ARCHIVER]: Showing claimed land for source parcel: {0} with GlobalID: {1} LocalID: {2}.",
|
||||
// parcel.Name, parcel.GlobalID, parcel.LocalID);
|
||||
//landObject.DebugLandBitmap(srcLandBitmap);
|
||||
|
||||
bool[,] dstLandBitmap = landObject.RemapLandBitmap(srcLandBitmap, displacement, m_rotation, boundingOrigin, boundingSize, regionSize, out isEmptyNow);
|
||||
bool[,] dstLandBitmap = landObject.RemapLandBitmap(srcLandBitmap, displacement, m_rotation, boundingOrigin, boundingSize, regionSize, out bool isEmptyNow);
|
||||
if (isEmptyNow)
|
||||
{
|
||||
m_log.WarnFormat("[ARCHIVER]: Not adding destination parcel {0} with GlobalID: {1} LocalID: {2} because, after applying rotation, bounding and displacement, it has no claimed land.",
|
||||
parcel.Name, parcel.GlobalID, parcel.LocalID);
|
||||
m_log.Warn($"[ARCHIVER]: Not adding destination parcel {parcel.Name} with GlobalID: {parcel.GlobalID} LocalID: {parcel.LocalID} because, after applying rotation, bounding and displacement, it has no claimed land.");
|
||||
continue;
|
||||
}
|
||||
//m_log.DebugFormat("[ARCHIVER]: Showing claimed land for destination parcel: {0} with GlobalID: {1} LocalID: {2} after applying rotation, bounding and displacement.",
|
||||
@@ -909,7 +899,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
//and if so modify or lose the existing parcels
|
||||
for (int i = 0; i < parcels.Count; i++)
|
||||
{
|
||||
if (parcels[i] != null)
|
||||
if (parcels[i] is not null)
|
||||
{
|
||||
bool[,] modLandBitmap = parcels[i].ConvertBytesToLandBitmap(overrideRegionSize);
|
||||
modLandBitmap = parcels[i].RemoveFromLandBitmap(modLandBitmap, dstLandBitmap, out isEmptyNow);
|
||||
@@ -950,7 +940,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner;
|
||||
}
|
||||
|
||||
List<LandAccessEntry> accessList = new List<LandAccessEntry>();
|
||||
List<LandAccessEntry> accessList = new();
|
||||
foreach (LandAccessEntry entry in parcel.ParcelAccessList)
|
||||
{
|
||||
if (ResolveUserUuid(scene, entry.AgentID))
|
||||
@@ -959,13 +949,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
}
|
||||
parcel.ParcelAccessList = accessList;
|
||||
|
||||
if (m_debug) m_log.DebugFormat("[ARCHIVER]: Adding parcel {0}, local id {1}, owner {2}, group {3}, isGroupOwned {4}, area {5}",
|
||||
parcel.Name, parcel.LocalID, parcel.OwnerID, parcel.GroupID, parcel.IsGroupOwned, parcel.Area);
|
||||
if (m_debug)
|
||||
m_log.Debug($"[ARCHIVER]: Adding parcel {parcel.Name}, local id {parcel.LocalID}, owner {parcel.OwnerID}, group {parcel.GroupID}, isGroupOwned {parcel.IsGroupOwned}, area {parcel.Area}");
|
||||
|
||||
landData.Add(parcel);
|
||||
}
|
||||
|
||||
m_log.InfoFormat("[ARCHIVER]: Clearing {0} parcels.", parcels.Count);
|
||||
m_log.Info($"[ARCHIVER]: Clearing {parcels.Count} parcels.");
|
||||
bool setupDefaultParcel = (landData.Count == 0);
|
||||
scene.LandChannel.Clear(setupDefaultParcel);
|
||||
|
||||
@@ -974,17 +964,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
int j = 0;
|
||||
for (int i = 0; i < parcels.Count; i++) //if merging then we need to also add back in any existing parcels
|
||||
{
|
||||
if (parcels[i] != null)
|
||||
if (parcels[i] is not null)
|
||||
{
|
||||
landData.Add(parcels[i].LandData);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
m_log.InfoFormat("[ARCHIVER]: Keeping {0} old parcels.", j);
|
||||
m_log.Info($"[ARCHIVER]: Keeping {j} old parcels.");
|
||||
}
|
||||
|
||||
scene.EventManager.TriggerIncomingLandDataFromStorage(landData);
|
||||
m_log.InfoFormat("[ARCHIVER]: Added {0} total parcels.", landData.Count);
|
||||
m_log.Info($"[ARCHIVER]: Added {landData.Count} total parcels.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1002,7 +992,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
// Note: we call GetUserAccount() inside the lock because this UserID is likely
|
||||
// to occur many times, and we only want to query the users service once.
|
||||
UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.ScopeID, uuid);
|
||||
m_validUserUuids.Add(uuid, account != null);
|
||||
m_validUserUuids.Add(uuid, account is not null);
|
||||
}
|
||||
|
||||
return m_validUserUuids[uuid];
|
||||
@@ -1021,7 +1011,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
if (!m_validGroupUuids.ContainsKey(uuid))
|
||||
{
|
||||
bool exists;
|
||||
if (m_groupsModule == null)
|
||||
if (m_groupsModule is null)
|
||||
{
|
||||
exists = false;
|
||||
}
|
||||
@@ -1029,7 +1019,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
// Note: we call GetGroupRecord() inside the lock because this GroupID is likely
|
||||
// to occur many times, and we only want to query the groups service once.
|
||||
exists = (m_groupsModule.GetGroupRecord(uuid) != null);
|
||||
exists = (m_groupsModule.GetGroupRecord(uuid) is not null);
|
||||
}
|
||||
m_validGroupUuids.Add(uuid, exists);
|
||||
}
|
||||
@@ -1042,7 +1032,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
if (assetType == (sbyte)AssetType.Unknown)
|
||||
{
|
||||
m_log.WarnFormat("[ARCHIVER]: Importing {0} byte asset {1} with unknown type", data.Length, assetID.ToString());
|
||||
m_log.Warn($"[ARCHIVER]: Importing {data.Length} byte asset {assetID} with unknown type");
|
||||
}
|
||||
else if (assetType == (sbyte)AssetType.Object)
|
||||
{
|
||||
@@ -1053,13 +1043,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
return true;
|
||||
});
|
||||
|
||||
if (data == null)
|
||||
if (data is null)
|
||||
return false;
|
||||
}
|
||||
|
||||
//m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
||||
AssetBase asset = new AssetBase(assetID, string.Empty, assetType, UUID.Zero.ToString());
|
||||
asset.Data = data;
|
||||
AssetBase asset = new(assetID, string.Empty, assetType, UUID.Zero.ToString())
|
||||
{
|
||||
Data = data
|
||||
};
|
||||
|
||||
m_assetService.Store(asset);
|
||||
return true; // not right
|
||||
@@ -1078,21 +1070,20 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
private bool LoadRegionSettings(Scene scene, string settingsPath, byte[] data, DearchiveScenesInfo dearchivedScenes)
|
||||
{
|
||||
RegionSettings loadedRegionSettings;
|
||||
ViewerEnvironment regionEnv = null;
|
||||
ViewerEnvironment regionEnv;
|
||||
try
|
||||
{
|
||||
loadedRegionSettings = RegionSettingsSerializer.Deserialize(data, out regionEnv, scene.RegionInfo.EstateSettings);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat(
|
||||
"[ARCHIVER]: Could not parse region settings file {0}. Ignoring. Exception was {1}",
|
||||
settingsPath, e);
|
||||
m_log.Error(
|
||||
$"[ARCHIVER]: Could not parse region settings file {settingsPath}: {e.Message}");
|
||||
return false;
|
||||
}
|
||||
|
||||
IEnvironmentModule mEnv = scene.RequestModuleInterface<IEnvironmentModule>();
|
||||
if(mEnv != null)
|
||||
if(mEnv is not null)
|
||||
{
|
||||
mEnv.StoreOnRegion(regionEnv);
|
||||
mEnv.WindlightRefresh(0);
|
||||
@@ -1144,7 +1135,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
scene.EstateDataServiceSafe?.StoreEstateSettings(scene.RegionInfo.EstateSettings);
|
||||
|
||||
IEstateModule estateModule = scene.RequestModuleInterface<IEstateModule>();
|
||||
if (estateModule != null)
|
||||
if (estateModule is not null)
|
||||
estateModule.sendRegionHandshakeToAll();
|
||||
|
||||
return true;
|
||||
@@ -1162,21 +1153,20 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
private bool LoadTerrain(Scene scene, string terrainPath, byte[] data)
|
||||
{
|
||||
ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>();
|
||||
using (MemoryStream ms = new MemoryStream(data))
|
||||
using MemoryStream ms = new(data);
|
||||
|
||||
if (!m_displacement.IsZero() || m_rotation != 0f || m_boundingBox)
|
||||
{
|
||||
if (!m_displacement.IsZero() || m_rotation != 0f || m_boundingBox)
|
||||
{
|
||||
Vector2 boundingOrigin = new Vector2(m_boundingOrigin.X, m_boundingOrigin.Y);
|
||||
Vector2 boundingSize = new Vector2(m_boundingSize.X, m_boundingSize.Y);
|
||||
terrainModule.LoadFromStream(terrainPath, m_displacement, m_rotation, boundingOrigin, boundingSize, ms); ;
|
||||
}
|
||||
else
|
||||
{
|
||||
terrainModule.LoadFromStream(terrainPath, ms);
|
||||
}
|
||||
Vector2 boundingOrigin = new(m_boundingOrigin.X, m_boundingOrigin.Y);
|
||||
Vector2 boundingSize = new(m_boundingSize.X, m_boundingSize.Y);
|
||||
terrainModule.LoadFromStream(terrainPath, m_displacement, m_rotation, boundingOrigin, boundingSize, ms); ;
|
||||
}
|
||||
else
|
||||
{
|
||||
terrainModule.LoadFromStream(terrainPath, ms);
|
||||
}
|
||||
|
||||
m_log.DebugFormat("[ARCHIVER]: Restored terrain {0}", terrainPath);
|
||||
m_log.Debug($"[ARCHIVER]: Restored terrain {terrainPath}");
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1189,10 +1179,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <param name="dearchivedScenes"></param>
|
||||
public DearchiveScenesInfo LoadControlFile(string path, byte[] data, DearchiveScenesInfo dearchivedScenes)
|
||||
{
|
||||
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
|
||||
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
|
||||
XmlTextReader xtr = new XmlTextReader(Encoding.ASCII.GetString(data), XmlNodeType.Document, context);
|
||||
xtr.DtdProcessing = DtdProcessing.Ignore;
|
||||
XmlNamespaceManager nsmgr = new(new NameTable());
|
||||
XmlParserContext context = new(null, nsmgr, null, XmlSpace.None);
|
||||
XmlTextReader xtr = new(Encoding.ASCII.GetString(data), XmlNodeType.Document, context)
|
||||
{
|
||||
DtdProcessing = DtdProcessing.Ignore
|
||||
};
|
||||
|
||||
// Loaded metadata will be empty if no information exists in the archive
|
||||
dearchivedScenes.LoadedCreationDateTime = 0;
|
||||
@@ -1213,17 +1205,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
if (majorVersion > MAX_MAJOR_VERSION)
|
||||
{
|
||||
throw new Exception(
|
||||
string.Format(
|
||||
"The OAR you are trying to load has major version number of {0} but this version of OpenSim can only load OARs with major version number {1} and below",
|
||||
majorVersion, MAX_MAJOR_VERSION));
|
||||
$"The OAR you are trying to load has major version number of {majorVersion} but this version can only load OARs with major version number {MAX_MAJOR_VERSION} and below");
|
||||
}
|
||||
|
||||
m_log.InfoFormat("[ARCHIVER]: Loading OAR with version {0}", version);
|
||||
m_log.InfoFormat($"[ARCHIVER]: Loading OAR with version {version}");
|
||||
}
|
||||
else if (xtr.Name.ToString() == "datetime")
|
||||
{
|
||||
int value;
|
||||
if (Int32.TryParse(xtr.ReadElementContentAsString(), out value))
|
||||
if (Int32.TryParse(xtr.ReadElementContentAsString(), out int value))
|
||||
dearchivedScenes.LoadedCreationDateTime = value;
|
||||
}
|
||||
else if (xtr.Name.ToString() == "row")
|
||||
@@ -1248,15 +1237,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
}
|
||||
else if (xtr.Name.ToString() == "size_in_meters")
|
||||
{
|
||||
Vector3 value;
|
||||
string size = "<" + xtr.ReadElementContentAsString() + ",0>";
|
||||
if (Vector3.TryParse(size, out value))
|
||||
string size = $"<{xtr.ReadElementContentAsString()},0>";
|
||||
if (Vector3.TryParse(size, out Vector3 value))
|
||||
{
|
||||
m_incomingRegionSize = value;
|
||||
if(multiRegion)
|
||||
dearchivedScenes.SetRegionSize(m_incomingRegionSize);
|
||||
m_log.DebugFormat("[ARCHIVER]: Found region_size info {0}",
|
||||
m_incomingRegionSize.ToString());
|
||||
m_log.Debug($"[ARCHIVER]: Found region_size info {m_incomingRegionSize}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1274,7 +1261,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
}
|
||||
|
||||
ControlFileLoaded = true;
|
||||
if(xtr != null)
|
||||
if(xtr is not null)
|
||||
xtr.Close();
|
||||
|
||||
return dearchivedScenes;
|
||||
|
||||
@@ -29,7 +29,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using log4net;
|
||||
using OpenMetaverse;
|
||||
@@ -49,7 +48,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
/// <summary>
|
||||
/// Store for asset data we received before we get the metadata
|
||||
/// </summary>
|
||||
protected Dictionary<string, byte[]> m_assetDataAwaitingMetadata = new Dictionary<string, byte[]>();
|
||||
protected Dictionary<string, byte[]> m_assetDataAwaitingMetadata = new();
|
||||
|
||||
/// <summary>
|
||||
/// Asset metadata. Is null if asset metadata isn't yet available.
|
||||
@@ -91,9 +90,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
m_metadata = new Dictionary<string, AssetMetadata>();
|
||||
|
||||
StringReader sr = new StringReader(xml);
|
||||
XmlTextReader reader = new XmlTextReader(sr);
|
||||
reader.DtdProcessing = DtdProcessing.Ignore;
|
||||
StringReader sr = new(xml);
|
||||
XmlTextReader reader = new(sr)
|
||||
{
|
||||
DtdProcessing = DtdProcessing.Ignore
|
||||
};
|
||||
|
||||
reader.ReadStartElement("assets");
|
||||
reader.Read();
|
||||
@@ -102,7 +103,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
{
|
||||
reader.Read();
|
||||
|
||||
AssetMetadata metadata = new AssetMetadata();
|
||||
AssetMetadata metadata = new();
|
||||
|
||||
string filename = reader.ReadElementString("filename");
|
||||
m_log.Debug($"[DEARCHIVER]: Reading node {filename}");
|
||||
@@ -143,7 +144,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
protected void ResolveAssetData(string assetPath, byte[] data)
|
||||
{
|
||||
// Right now we're nastily obtaining the UUID from the filename
|
||||
string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length);
|
||||
string filename = assetPath[ArchiveConstants.ASSETS_PATH.Length..];
|
||||
|
||||
if (m_metadata.ContainsKey(filename))
|
||||
{
|
||||
@@ -155,9 +156,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||
|
||||
m_log.Debug($"[ARCHIVER]: Importing asset {filename}");
|
||||
|
||||
AssetBase asset = new AssetBase(new UUID(filename), metadata.Name, metadata.AssetType, UUID.ZeroString);
|
||||
asset.Description = metadata.Description;
|
||||
asset.Data = data;
|
||||
AssetBase asset = new(new UUID(filename), metadata.Name, metadata.AssetType, UUID.ZeroString)
|
||||
{
|
||||
Description = metadata.Description,
|
||||
Data = data
|
||||
};
|
||||
|
||||
m_cache.Store(asset);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user