Persistent prim inventory phase 3. Now retrieving prim item data from persistent store, but this doesn't yet show up for the client. Still no user functionality and not
enabled in normal code.afrisby
parent
9ea4c03b8f
commit
70361bceb8
|
@ -60,14 +60,21 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
[XmlIgnore] public PhysicsActor PhysActor = null;
|
[XmlIgnore] public PhysicsActor PhysActor = null;
|
||||||
|
|
||||||
// Holds in memory prim inventory
|
/// <summary>
|
||||||
protected Dictionary<LLUUID, TaskInventoryItem> m_taskInventory
|
/// Holds in memory prim inventory
|
||||||
|
/// </summary>
|
||||||
|
protected IDictionary<LLUUID, TaskInventoryItem> m_taskInventory
|
||||||
= new Dictionary<LLUUID, TaskInventoryItem>();
|
= new Dictionary<LLUUID, TaskInventoryItem>();
|
||||||
|
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public Dictionary<LLUUID, TaskInventoryItem> TaskInventory
|
/// <summary>
|
||||||
|
/// Not really ideal to allow this to be set, but currently expedient for inserting a prim inventory
|
||||||
|
/// from persistence.
|
||||||
|
/// </summary>
|
||||||
|
public IDictionary<LLUUID, TaskInventoryItem> TaskInventory
|
||||||
{
|
{
|
||||||
get { return m_taskInventory; }
|
get { return m_taskInventory; }
|
||||||
|
set { m_taskInventory = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public LLUUID LastOwnerID;
|
public LLUUID LastOwnerID;
|
||||||
|
|
|
@ -121,6 +121,7 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
{
|
{
|
||||||
ds.Tables.Add(createItemsTable());
|
ds.Tables.Add(createItemsTable());
|
||||||
setupItemsCommands(itemsDa, conn);
|
setupItemsCommands(itemsDa, conn);
|
||||||
|
itemsDa.Fill(ds.Tables["primitems"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
ds.Tables.Add(createTerrainTable());
|
ds.Tables.Add(createTerrainTable());
|
||||||
|
@ -265,12 +266,14 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
SceneObjectPart prim = null;
|
||||||
|
|
||||||
string uuid = (string) primRow["UUID"];
|
string uuid = (string) primRow["UUID"];
|
||||||
string objID = (string) primRow["SceneGroupID"];
|
string objID = (string) primRow["SceneGroupID"];
|
||||||
if (uuid == objID) //is new SceneObjectGroup ?
|
if (uuid == objID) //is new SceneObjectGroup ?
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = new SceneObjectGroup();
|
SceneObjectGroup group = new SceneObjectGroup();
|
||||||
SceneObjectPart prim = buildPrim(primRow);
|
prim = buildPrim(primRow);
|
||||||
DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
|
DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
|
||||||
if (shapeRow != null)
|
if (shapeRow != null)
|
||||||
{
|
{
|
||||||
|
@ -290,7 +293,7 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SceneObjectPart prim = buildPrim(primRow);
|
prim = buildPrim(primRow);
|
||||||
DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
|
DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
|
||||||
if (shapeRow != null)
|
if (shapeRow != null)
|
||||||
{
|
{
|
||||||
|
@ -305,8 +308,10 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
createdObjects[new LLUUID(objID)].AddPart(prim);
|
createdObjects[new LLUUID(objID)].AddPart(prim);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add inventory restore code here, probably in a separate method.
|
if (persistPrimInventories)
|
||||||
|
{
|
||||||
|
LoadItems(prim);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -326,25 +331,28 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
/// Load in a prim's persisted inventory.
|
/// Load in a prim's persisted inventory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="prim"></param>
|
/// <param name="prim"></param>
|
||||||
/*
|
private void LoadItems(SceneObjectPart prim)
|
||||||
private void LoadPrimInventory(SceneObjectPart prim)
|
|
||||||
{
|
{
|
||||||
String sql = String.Format("primID = '{0}'", primID);
|
MainLog.Instance.Verbose("DATASTORE", "Loading inventory for {0}, {1}", prim.Name, prim.UUID);
|
||||||
|
|
||||||
|
DataTable dbItems = ds.Tables["primitems"];
|
||||||
|
|
||||||
|
String sql = String.Format("primID = '{0}'", prim.UUID.ToString());
|
||||||
DataRow[] dbItemRows = dbItems.Select(sql);
|
DataRow[] dbItemRows = dbItems.Select(sql);
|
||||||
|
|
||||||
DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
|
IDictionary<LLUUID, SceneObjectPart.TaskInventoryItem> inventory
|
||||||
if (shapeRow != null)
|
= new Dictionary<LLUUID, SceneObjectPart.TaskInventoryItem>();
|
||||||
{
|
|
||||||
prim.Shape = buildShape(shapeRow);
|
foreach (DataRow row in dbItemRows)
|
||||||
}
|
{
|
||||||
else
|
SceneObjectPart.TaskInventoryItem item = buildItem(row);
|
||||||
{
|
inventory.Add(item.item_id, item);
|
||||||
MainLog.Instance.Notice(
|
|
||||||
"No shape found for prim in storage, so setting default box shape");
|
MainLog.Instance.Verbose("DATASTORE", "Restored item {0}, {1}", item.name, item.item_id);
|
||||||
prim.Shape = PrimitiveBaseShape.Default;
|
}
|
||||||
}
|
|
||||||
|
prim.TaskInventory = inventory;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
public void StoreTerrain(double[,] ter, LLUUID regionID)
|
public void StoreTerrain(double[,] ter, LLUUID regionID)
|
||||||
{
|
{
|
||||||
|
@ -699,11 +707,11 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
createCol(items, "lastOwnerID", typeof (String));
|
createCol(items, "lastOwnerID", typeof (String));
|
||||||
createCol(items, "groupID", typeof (String));
|
createCol(items, "groupID", typeof (String));
|
||||||
|
|
||||||
createCol(items, "nextPermissions", typeof (Int32));
|
createCol(items, "nextPermissions", typeof (UInt32));
|
||||||
createCol(items, "currentPermissions", typeof (Int32));
|
createCol(items, "currentPermissions", typeof (UInt32));
|
||||||
createCol(items, "basePermissions", typeof (Int32));
|
createCol(items, "basePermissions", typeof (UInt32));
|
||||||
createCol(items, "everyonePermissions", typeof (Int32));
|
createCol(items, "everyonePermissions", typeof (UInt32));
|
||||||
createCol(items, "groupPermissions", typeof (Int32));
|
createCol(items, "groupPermissions", typeof (UInt32));
|
||||||
|
|
||||||
items.PrimaryKey = new DataColumn[] {items.Columns["itemID"]};
|
items.PrimaryKey = new DataColumn[] {items.Columns["itemID"]};
|
||||||
|
|
||||||
|
@ -877,6 +885,40 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
|
|
||||||
return prim;
|
return prim;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build a prim inventory item from the persisted data.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="row"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private SceneObjectPart.TaskInventoryItem buildItem(DataRow row)
|
||||||
|
{
|
||||||
|
SceneObjectPart.TaskInventoryItem taskItem = new SceneObjectPart.TaskInventoryItem();
|
||||||
|
|
||||||
|
taskItem.item_id = new LLUUID((String)row["itemID"]);
|
||||||
|
taskItem.ParentPartID = new LLUUID((String)row["primID"]);
|
||||||
|
taskItem.asset_id = new LLUUID((String)row["assetID"]);
|
||||||
|
taskItem.parent_id = new LLUUID((String)row["parentFolderID"]);
|
||||||
|
|
||||||
|
taskItem.inv_type = (String)row["invType"];
|
||||||
|
taskItem.type = (String)row["assetType"];
|
||||||
|
|
||||||
|
taskItem.name = (String)row["name"];
|
||||||
|
taskItem.desc = (String)row["description"];
|
||||||
|
taskItem.creation_date = Convert.ToUInt32(row["creationDate"]);
|
||||||
|
taskItem.creator_id = new LLUUID((String)row["creatorID"]);
|
||||||
|
taskItem.owner_id = new LLUUID((String)row["ownerID"]);
|
||||||
|
taskItem.last_owner_id = new LLUUID((String)row["lastOwnerID"]);
|
||||||
|
taskItem.group_id = new LLUUID((String)row["groupID"]);
|
||||||
|
|
||||||
|
taskItem.next_owner_mask = Convert.ToUInt32(row["nextPermissions"]);
|
||||||
|
taskItem.owner_mask = Convert.ToUInt32(row["currentPermissions"]);
|
||||||
|
taskItem.base_mask = Convert.ToUInt32(row["basePermissions"]);
|
||||||
|
taskItem.everyone_mask = Convert.ToUInt32(row["everyonePermissions"]);
|
||||||
|
taskItem.group_mask = Convert.ToUInt32(row["groupPermissions"]);
|
||||||
|
|
||||||
|
return taskItem;
|
||||||
|
}
|
||||||
|
|
||||||
private LandData buildLandData(DataRow row)
|
private LandData buildLandData(DataRow row)
|
||||||
{
|
{
|
||||||
|
@ -1223,7 +1265,7 @@ namespace OpenSim.DataStore.MonoSqlite
|
||||||
/// <param name="primID"></param>
|
/// <param name="primID"></param>
|
||||||
/// <param name="items"></param>
|
/// <param name="items"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private void addPrimInventory(LLUUID primID, Dictionary<LLUUID, SceneObjectPart.TaskInventoryItem> items)
|
private void addPrimInventory(LLUUID primID, IDictionary<LLUUID, SceneObjectPart.TaskInventoryItem> items)
|
||||||
{
|
{
|
||||||
MainLog.Instance.Verbose("DATASTORE", "Entered addPrimInventory with prim ID {0}", primID);
|
MainLog.Instance.Verbose("DATASTORE", "Entered addPrimInventory with prim ID {0}", primID);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue