diff options
author | Justin Clark-Casey (justincc) | 2012-11-09 00:59:18 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-11-09 01:13:19 +0000 |
commit | 75c880a6f3631a527b532773a8a493309a96028e (patch) | |
tree | d07023ef4a277420b66f3b144df3be1287c26d92 /OpenSim/Data/MySQL | |
parent | ODECharacter overrides TargetVelocity. No change to existing behavior (diff) | |
download | opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.zip opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.tar.gz opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.tar.bz2 opensim-SC_OLD-75c880a6f3631a527b532773a8a493309a96028e.tar.xz |
Update parent inventory folder version numbers when folders are moved/created/deleted to match version numbers cached by viewers.
This is done in the way that one would expect (e.g. moving a folder increments version number on both source and destination parent folders).
This should hopefully improve viewer reuse of its cached inventory information.
Currently MySQL only but will be implement for SQLite/MSSQL if there are no issues.
Diffstat (limited to 'OpenSim/Data/MySQL')
-rw-r--r-- | OpenSim/Data/MySQL/MySQLXInventoryData.cs | 94 |
1 files changed, 92 insertions, 2 deletions
diff --git a/OpenSim/Data/MySQL/MySQLXInventoryData.cs b/OpenSim/Data/MySQL/MySQLXInventoryData.cs index cccc500..7a3b5b4 100644 --- a/OpenSim/Data/MySQL/MySQLXInventoryData.cs +++ b/OpenSim/Data/MySQL/MySQLXInventoryData.cs | |||
@@ -42,12 +42,12 @@ namespace OpenSim.Data.MySQL | |||
42 | /// </summary> | 42 | /// </summary> |
43 | public class MySQLXInventoryData : IXInventoryData | 43 | public class MySQLXInventoryData : IXInventoryData |
44 | { | 44 | { |
45 | private MySQLGenericTableHandler<XInventoryFolder> m_Folders; | 45 | private MySqlFolderHandler m_Folders; |
46 | private MySqlItemHandler m_Items; | 46 | private MySqlItemHandler m_Items; |
47 | 47 | ||
48 | public MySQLXInventoryData(string conn, string realm) | 48 | public MySQLXInventoryData(string conn, string realm) |
49 | { | 49 | { |
50 | m_Folders = new MySQLGenericTableHandler<XInventoryFolder>( | 50 | m_Folders = new MySqlFolderHandler( |
51 | conn, "inventoryfolders", "InventoryStore"); | 51 | conn, "inventoryfolders", "InventoryStore"); |
52 | m_Items = new MySqlItemHandler( | 52 | m_Items = new MySqlItemHandler( |
53 | conn, "inventoryitems", String.Empty); | 53 | conn, "inventoryitems", String.Empty); |
@@ -106,6 +106,11 @@ namespace OpenSim.Data.MySQL | |||
106 | return m_Items.MoveItem(id, newParent); | 106 | return m_Items.MoveItem(id, newParent); |
107 | } | 107 | } |
108 | 108 | ||
109 | public bool MoveFolder(string id, string newParent) | ||
110 | { | ||
111 | return m_Folders.MoveFolder(id, newParent); | ||
112 | } | ||
113 | |||
109 | public XInventoryItem[] GetActiveGestures(UUID principalID) | 114 | public XInventoryItem[] GetActiveGestures(UUID principalID) |
110 | { | 115 | { |
111 | return m_Items.GetActiveGestures(principalID); | 116 | return m_Items.GetActiveGestures(principalID); |
@@ -275,4 +280,89 @@ namespace OpenSim.Data.MySQL | |||
275 | return true; | 280 | return true; |
276 | } | 281 | } |
277 | } | 282 | } |
283 | |||
284 | public class MySqlFolderHandler : MySQLGenericTableHandler<XInventoryFolder> | ||
285 | { | ||
286 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
287 | |||
288 | public MySqlFolderHandler(string c, string t, string m) : | ||
289 | base(c, t, m) | ||
290 | { | ||
291 | } | ||
292 | |||
293 | public bool MoveFolder(string id, string newParentFolderID) | ||
294 | { | ||
295 | XInventoryFolder[] folders = Get(new string[] { "folderID" }, new string[] { id }); | ||
296 | |||
297 | if (folders.Length == 0) | ||
298 | return false; | ||
299 | |||
300 | UUID oldParentFolderUUID = folders[0].parentFolderID; | ||
301 | |||
302 | using (MySqlCommand cmd = new MySqlCommand()) | ||
303 | { | ||
304 | cmd.CommandText | ||
305 | = String.Format( | ||
306 | "update {0} set parentFolderID = ?ParentFolderID where folderID = ?folderID", m_Realm); | ||
307 | cmd.Parameters.AddWithValue("?ParentFolderID", newParentFolderID); | ||
308 | cmd.Parameters.AddWithValue("?folderID", id); | ||
309 | |||
310 | if (ExecuteNonQuery(cmd) == 0) | ||
311 | return false; | ||
312 | } | ||
313 | |||
314 | IncrementFolderVersion(oldParentFolderUUID); | ||
315 | IncrementFolderVersion(newParentFolderID); | ||
316 | |||
317 | return true; | ||
318 | } | ||
319 | |||
320 | public override bool Store(XInventoryFolder folder) | ||
321 | { | ||
322 | if (!base.Store(folder)) | ||
323 | return false; | ||
324 | |||
325 | IncrementFolderVersion(folder.parentFolderID); | ||
326 | |||
327 | return true; | ||
328 | } | ||
329 | |||
330 | private bool IncrementFolderVersion(UUID folderID) | ||
331 | { | ||
332 | return IncrementFolderVersion(folderID.ToString()); | ||
333 | } | ||
334 | |||
335 | private bool IncrementFolderVersion(string folderID) | ||
336 | { | ||
337 | // m_log.DebugFormat("[MYSQL FOLDER HANDLER]: Incrementing version on folder {0}", folderID); | ||
338 | // Util.PrintCallStack(); | ||
339 | |||
340 | using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) | ||
341 | { | ||
342 | dbcon.Open(); | ||
343 | |||
344 | using (MySqlCommand cmd = new MySqlCommand()) | ||
345 | { | ||
346 | cmd.Connection = dbcon; | ||
347 | |||
348 | cmd.CommandText = String.Format("update inventoryfolders set version=version+1 where folderID = ?folderID"); | ||
349 | cmd.Parameters.AddWithValue("?folderID", folderID); | ||
350 | |||
351 | try | ||
352 | { | ||
353 | cmd.ExecuteNonQuery(); | ||
354 | } | ||
355 | catch (Exception) | ||
356 | { | ||
357 | return false; | ||
358 | } | ||
359 | cmd.Dispose(); | ||
360 | } | ||
361 | |||
362 | dbcon.Close(); | ||
363 | } | ||
364 | |||
365 | return true; | ||
366 | } | ||
367 | } | ||
278 | } \ No newline at end of file | 368 | } \ No newline at end of file |