diff options
-rw-r--r-- | OpenSim/Data/IXInventoryData.cs | 4 | ||||
-rw-r--r-- | OpenSim/Data/MySQL/MySQLXInventoryData.cs | 55 | ||||
-rw-r--r-- | OpenSim/Services/InventoryService/XInventoryService.cs | 58 |
3 files changed, 98 insertions, 19 deletions
diff --git a/OpenSim/Data/IXInventoryData.cs b/OpenSim/Data/IXInventoryData.cs index 88174d9..cd9273e 100644 --- a/OpenSim/Data/IXInventoryData.cs +++ b/OpenSim/Data/IXInventoryData.cs | |||
@@ -77,6 +77,8 @@ namespace OpenSim.Data | |||
77 | bool DeleteFolders(string field, string val); | 77 | bool DeleteFolders(string field, string val); |
78 | bool DeleteItems(string field, string val); | 78 | bool DeleteItems(string field, string val); |
79 | 79 | ||
80 | bool MoveItem(string principalID, string id, string newParent); | 80 | bool MoveItem(string id, string newParent); |
81 | XInventoryItem[] GetActiveGestures(UUID principalID); | ||
82 | int GetAssetPermissions(UUID principalID, UUID assetID); | ||
81 | } | 83 | } |
82 | } | 84 | } |
diff --git a/OpenSim/Data/MySQL/MySQLXInventoryData.cs b/OpenSim/Data/MySQL/MySQLXInventoryData.cs index dd3e6ea..0eebc9c 100644 --- a/OpenSim/Data/MySQL/MySQLXInventoryData.cs +++ b/OpenSim/Data/MySQL/MySQLXInventoryData.cs | |||
@@ -85,9 +85,19 @@ namespace OpenSim.Data.MySQL | |||
85 | return m_Items.Delete(field, val); | 85 | return m_Items.Delete(field, val); |
86 | } | 86 | } |
87 | 87 | ||
88 | public bool MoveItem(string principalID, string id, string newParent) | 88 | public bool MoveItem(string id, string newParent) |
89 | { | 89 | { |
90 | return m_Items.MoveItem(principalID, id, newParent); | 90 | return m_Items.MoveItem(id, newParent); |
91 | } | ||
92 | |||
93 | public XInventoryItem[] GetActiveGestures(UUID principalID) | ||
94 | { | ||
95 | return m_Items.GetActiveGestures(principalID); | ||
96 | } | ||
97 | |||
98 | public int GetAssetPermissions(UUID principalID, UUID assetID) | ||
99 | { | ||
100 | return m_Items.GetAssetPermissions(principalID, assetID); | ||
91 | } | 101 | } |
92 | } | 102 | } |
93 | 103 | ||
@@ -98,16 +108,49 @@ namespace OpenSim.Data.MySQL | |||
98 | { | 108 | { |
99 | } | 109 | } |
100 | 110 | ||
101 | public bool MoveItem(string principalID, string id, string newParent) | 111 | public bool MoveItem(string id, string newParent) |
102 | { | 112 | { |
103 | MySqlCommand cmd = new MySqlCommand(); | 113 | MySqlCommand cmd = new MySqlCommand(); |
104 | 114 | ||
105 | cmd.CommandText = String.Format("update {0} set parentFolderID = ?ParentFolderID where agentID = ?AgentID and folderID = ?FolderID"); | 115 | cmd.CommandText = String.Format("update {0} set parentFolderID = ?ParentFolderID where inventoryID = ?InventoryID", m_Realm); |
106 | cmd.Parameters.AddWithValue("?ParentFolderID", newParent); | 116 | cmd.Parameters.AddWithValue("?ParentFolderID", newParent); |
107 | cmd.Parameters.AddWithValue("?FolderID", id); | 117 | cmd.Parameters.AddWithValue("?InventoryID", id); |
108 | cmd.Parameters.AddWithValue("?AgentID", principalID); | ||
109 | 118 | ||
110 | return ExecuteNonQuery(cmd) == 0 ? false : true; | 119 | return ExecuteNonQuery(cmd) == 0 ? false : true; |
111 | } | 120 | } |
121 | |||
122 | public XInventoryItem[] GetActiveGestures(UUID principalID) | ||
123 | { | ||
124 | MySqlCommand cmd = new MySqlCommand(); | ||
125 | cmd.CommandText = String.Format("select * from inventoryitems where avatarId = ?uuid and assetType = ?type and flags = 1", m_Realm); | ||
126 | |||
127 | cmd.Parameters.AddWithValue("?uuid", principalID.ToString()); | ||
128 | cmd.Parameters.AddWithValue("?type", (int)AssetType.Gesture); | ||
129 | |||
130 | return DoQuery(cmd); | ||
131 | } | ||
132 | |||
133 | public int GetAssetPermissions(UUID principalID, UUID assetID) | ||
134 | { | ||
135 | MySqlCommand cmd = new MySqlCommand(); | ||
136 | |||
137 | cmd.CommandText = String.Format("select bit_or(inventoryCurrentPermissions) as inventoryCurrentPermissions from inventoryitems where avatarID = ?PrincipalID and assetID = ?AssetID group by assetID", m_Realm); | ||
138 | cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString()); | ||
139 | cmd.Parameters.AddWithValue("?AssetID", assetID.ToString()); | ||
140 | |||
141 | IDataReader reader = ExecuteReader(cmd); | ||
142 | |||
143 | int perms = 0; | ||
144 | |||
145 | if (reader.Read()) | ||
146 | { | ||
147 | perms = Convert.ToInt32(reader["inventoryCurrentPermissions"]); | ||
148 | } | ||
149 | |||
150 | reader.Close(); | ||
151 | CloseReaderCommand(cmd); | ||
152 | |||
153 | return perms; | ||
154 | } | ||
112 | } | 155 | } |
113 | } | 156 | } |
diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index 1e7f206..2c79c77 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs | |||
@@ -183,7 +183,10 @@ namespace OpenSim.Services.InventoryService | |||
183 | List<InventoryFolderBase> folders = new List<InventoryFolderBase>(); | 183 | List<InventoryFolderBase> folders = new List<InventoryFolderBase>(); |
184 | 184 | ||
185 | foreach (XInventoryFolder x in allFolders) | 185 | foreach (XInventoryFolder x in allFolders) |
186 | { | ||
187 | m_log.DebugFormat("[INVENTORY]: Adding folder {0} to skeleton", x.folderName); | ||
186 | folders.Add(ConvertToOpenSim(x)); | 188 | folders.Add(ConvertToOpenSim(x)); |
189 | } | ||
187 | 190 | ||
188 | return folders; | 191 | return folders; |
189 | } | 192 | } |
@@ -214,35 +217,48 @@ namespace OpenSim.Services.InventoryService | |||
214 | 217 | ||
215 | public InventoryCollection GetFolderContent(UUID principalID, UUID folderID) | 218 | public InventoryCollection GetFolderContent(UUID principalID, UUID folderID) |
216 | { | 219 | { |
220 | // This method doesn't receive a valud principal id from the | ||
221 | // connector. So we disregard the principal and look | ||
222 | // by ID. | ||
223 | // | ||
224 | m_log.DebugFormat("[INVENTORY]: Fetch contents for folder {0}", folderID.ToString()); | ||
217 | InventoryCollection inventory = new InventoryCollection(); | 225 | InventoryCollection inventory = new InventoryCollection(); |
218 | inventory.UserID = principalID; | 226 | inventory.UserID = principalID; |
219 | inventory.Folders = new List<InventoryFolderBase>(); | 227 | inventory.Folders = new List<InventoryFolderBase>(); |
220 | inventory.Items = new List<InventoryItemBase>(); | 228 | inventory.Items = new List<InventoryItemBase>(); |
221 | 229 | ||
222 | XInventoryFolder[] folders = m_Database.GetFolders( | 230 | XInventoryFolder[] folders = m_Database.GetFolders( |
223 | new string[] { "agentID", "parentFolderID"}, | 231 | new string[] { "parentFolderID"}, |
224 | new string[] { principalID.ToString(), UUID.Zero.ToString() }); | 232 | new string[] { folderID.ToString() }); |
225 | 233 | ||
226 | foreach (XInventoryFolder x in folders) | 234 | foreach (XInventoryFolder x in folders) |
235 | { | ||
236 | m_log.DebugFormat("[INVENTORY]: Adding folder {0} to response", x.folderName); | ||
227 | inventory.Folders.Add(ConvertToOpenSim(x)); | 237 | inventory.Folders.Add(ConvertToOpenSim(x)); |
238 | } | ||
228 | 239 | ||
229 | XInventoryItem[] items = m_Database.GetItems( | 240 | XInventoryItem[] items = m_Database.GetItems( |
230 | new string[] { "avatarID", "parentFolderID"}, | 241 | new string[] { "parentFolderID"}, |
231 | new string[] { principalID.ToString(), UUID.Zero.ToString() }); | 242 | new string[] { folderID.ToString() }); |
232 | 243 | ||
233 | foreach (XInventoryItem i in items) | 244 | foreach (XInventoryItem i in items) |
245 | { | ||
246 | m_log.DebugFormat("[INVENTORY]: Adding item {0} to response", i.inventoryName); | ||
234 | inventory.Items.Add(ConvertToOpenSim(i)); | 247 | inventory.Items.Add(ConvertToOpenSim(i)); |
248 | } | ||
235 | 249 | ||
236 | return inventory; | 250 | return inventory; |
237 | } | 251 | } |
238 | 252 | ||
239 | public List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID) | 253 | public List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID) |
240 | { | 254 | { |
255 | // Since we probably don't get a valid principal here, either ... | ||
256 | // | ||
241 | List<InventoryItemBase> invItems = new List<InventoryItemBase>(); | 257 | List<InventoryItemBase> invItems = new List<InventoryItemBase>(); |
242 | 258 | ||
243 | XInventoryItem[] items = m_Database.GetItems( | 259 | XInventoryItem[] items = m_Database.GetItems( |
244 | new string[] { "avatarID", "parentFolderID"}, | 260 | new string[] { "parentFolderID"}, |
245 | new string[] { principalID.ToString(), UUID.Zero.ToString() }); | 261 | new string[] { UUID.Zero.ToString() }); |
246 | 262 | ||
247 | foreach (XInventoryItem i in items) | 263 | foreach (XInventoryItem i in items) |
248 | invItems.Add(ConvertToOpenSim(i)); | 264 | invItems.Add(ConvertToOpenSim(i)); |
@@ -279,6 +295,8 @@ namespace OpenSim.Services.InventoryService | |||
279 | // | 295 | // |
280 | public bool DeleteFolders(UUID principalID, List<UUID> folderIDs) | 296 | public bool DeleteFolders(UUID principalID, List<UUID> folderIDs) |
281 | { | 297 | { |
298 | // Ignore principal ID, it's bogus at connector level | ||
299 | // | ||
282 | foreach (UUID id in folderIDs) | 300 | foreach (UUID id in folderIDs) |
283 | { | 301 | { |
284 | InventoryFolderBase f = new InventoryFolderBase(); | 302 | InventoryFolderBase f = new InventoryFolderBase(); |
@@ -297,7 +315,10 @@ namespace OpenSim.Services.InventoryService | |||
297 | new string[] { folder.ID.ToString() }); | 315 | new string[] { folder.ID.ToString() }); |
298 | 316 | ||
299 | foreach (XInventoryFolder x in subFolders) | 317 | foreach (XInventoryFolder x in subFolders) |
318 | { | ||
300 | PurgeFolder(ConvertToOpenSim(x)); | 319 | PurgeFolder(ConvertToOpenSim(x)); |
320 | m_Database.DeleteFolders("folderID", x.folderID.ToString()); | ||
321 | } | ||
301 | 322 | ||
302 | m_Database.DeleteItems("parentFolderID", folder.ID.ToString()); | 323 | m_Database.DeleteItems("parentFolderID", folder.ID.ToString()); |
303 | 324 | ||
@@ -316,10 +337,11 @@ namespace OpenSim.Services.InventoryService | |||
316 | 337 | ||
317 | public bool MoveItems(UUID principalID, List<InventoryItemBase> items) | 338 | public bool MoveItems(UUID principalID, List<InventoryItemBase> items) |
318 | { | 339 | { |
340 | // Principal is b0rked. *sigh* | ||
341 | // | ||
319 | foreach (InventoryItemBase i in items) | 342 | foreach (InventoryItemBase i in items) |
320 | { | 343 | { |
321 | m_Database.MoveItem(principalID.ToString(), i.ID.ToString(), | 344 | m_Database.MoveItem(i.ID.ToString(), i.Folder.ToString()); |
322 | i.Folder.ToString()); | ||
323 | } | 345 | } |
324 | 346 | ||
325 | return true; | 347 | return true; |
@@ -327,6 +349,8 @@ namespace OpenSim.Services.InventoryService | |||
327 | 349 | ||
328 | public bool DeleteItems(UUID principalID, List<UUID> itemIDs) | 350 | public bool DeleteItems(UUID principalID, List<UUID> itemIDs) |
329 | { | 351 | { |
352 | // Just use the ID... *facepalms* | ||
353 | // | ||
330 | foreach (UUID id in itemIDs) | 354 | foreach (UUID id in itemIDs) |
331 | m_Database.DeleteItems("inventoryID", id.ToString()); | 355 | m_Database.DeleteItems("inventoryID", id.ToString()); |
332 | 356 | ||
@@ -357,14 +381,24 @@ namespace OpenSim.Services.InventoryService | |||
357 | return ConvertToOpenSim(folders[0]); | 381 | return ConvertToOpenSim(folders[0]); |
358 | } | 382 | } |
359 | 383 | ||
360 | public List<InventoryItemBase> GetActiveGestures(UUID userId) | 384 | public List<InventoryItemBase> GetActiveGestures(UUID principalID) |
361 | { | 385 | { |
362 | return null; | 386 | XInventoryItem[] items = m_Database.GetActiveGestures(principalID); |
387 | |||
388 | if (items.Length == 0) | ||
389 | return null; | ||
390 | |||
391 | List<InventoryItemBase> ret = new List<InventoryItemBase>(); | ||
392 | |||
393 | foreach (XInventoryItem x in items) | ||
394 | ret.Add(ConvertToOpenSim(x)); | ||
395 | |||
396 | return ret; | ||
363 | } | 397 | } |
364 | 398 | ||
365 | public int GetAssetPermissions(UUID userID, UUID assetID) | 399 | public int GetAssetPermissions(UUID principalID, UUID assetID) |
366 | { | 400 | { |
367 | return 0; | 401 | return m_Database.GetAssetPermissions(principalID, assetID); |
368 | } | 402 | } |
369 | 403 | ||
370 | // CM never needed those. Left unimplemented. | 404 | // CM never needed those. Left unimplemented. |