aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs')
-rw-r--r--OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs394
1 files changed, 197 insertions, 197 deletions
diff --git a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs
index 072de5e..cdd4f4e 100644
--- a/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs
+++ b/OpenSim/Region/Environment/Modules/ContentManagementSystem/CMController.cs
@@ -82,7 +82,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
82 CMModel m_model = null; 82 CMModel m_model = null;
83 83
84 /// <value> 84 /// <value>
85 /// A list of all the scenes that should be revisioned. Controller is the only class that keeps track of all scenes in the region. 85 /// A list of all the scenes that should be revisioned. Controller is the only class that keeps track of all scenes in the region.
86 /// </value> 86 /// </value>
87 Hashtable m_sceneList = Hashtable.Synchronized(new Hashtable()); 87 Hashtable m_sceneList = Hashtable.Synchronized(new Hashtable());
88 State m_state = State.NONE; 88 State m_state = State.NONE;
@@ -129,31 +129,31 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
129 /// </summary> 129 /// </summary>
130 private SceneObjectGroup GetGroupByPrim(uint localID) 130 private SceneObjectGroup GetGroupByPrim(uint localID)
131 { 131 {
132 foreach(Object currScene in m_sceneList.Values) 132 foreach (Object currScene in m_sceneList.Values)
133 { 133 {
134 foreach (EntityBase ent in ((Scene)currScene).GetEntities()) 134 foreach (EntityBase ent in ((Scene)currScene).GetEntities())
135 { 135 {
136 if (ent is SceneObjectGroup) 136 if (ent is SceneObjectGroup)
137 { 137 {
138 if (((SceneObjectGroup)ent).HasChildPrim(localID)) 138 if (((SceneObjectGroup)ent).HasChildPrim(localID))
139 return (SceneObjectGroup)ent; 139 return (SceneObjectGroup)ent;
140 } 140 }
141 } 141 }
142 } 142 }
143 return null; 143 return null;
144 } 144 }
145 145
146 private void Initialize(CMModel model, CMView view, Scene scene, int channel) 146 private void Initialize(CMModel model, CMView view, Scene scene, int channel)
147 { 147 {
148 lock(this) 148 lock (this)
149 { 149 {
150 m_estateModule = scene.RequestModuleInterface<IEstateModule>(); 150 m_estateModule = scene.RequestModuleInterface<IEstateModule>();
151 m_thread = new Thread( MainLoop ); 151 m_thread = new Thread(MainLoop);
152 m_thread.Name = "Content Management"; 152 m_thread.Name = "Content Management";
153 m_thread.IsBackground = true; 153 m_thread.IsBackground = true;
154 m_thread.Start(); 154 m_thread.Start();
155 ThreadTracker.Add(m_thread); 155 ThreadTracker.Add(m_thread);
156 m_state = State.NONE; 156 m_state = State.NONE;
157 } 157 }
158 } 158 }
159 159
@@ -164,41 +164,41 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
164 { 164 {
165 CMModel model = m_model; CMView view = m_view; int channel = m_channel; 165 CMModel model = m_model; CMView view = m_view; int channel = m_channel;
166 Work currentJob = new Work(); 166 Work currentJob = new Work();
167 while(true) 167 while (true)
168 { 168 {
169 currentJob = m_WorkQueue.Dequeue(); 169 currentJob = m_WorkQueue.Dequeue();
170 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- DeQueued a request"); 170 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- DeQueued a request");
171 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- Work type: " + currentJob.Type); 171 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- Work type: " + currentJob.Type);
172 switch(currentJob.Type) 172 switch (currentJob.Type)
173 { 173 {
174 case WorkType.NONE: 174 case WorkType.NONE:
175 break; 175 break;
176 case WorkType.OBJECTATTRIBUTECHANGE: 176 case WorkType.OBJECTATTRIBUTECHANGE:
177 ObjectAttributeChanged(model, view, currentJob.LocalId); 177 ObjectAttributeChanged(model, view, currentJob.LocalId);
178 break; 178 break;
179 case WorkType.PRIMITIVEADDED: 179 case WorkType.PRIMITIVEADDED:
180 PrimitiveAdded(model, view, currentJob); 180 PrimitiveAdded(model, view, currentJob);
181 break; 181 break;
182 case WorkType.OBJECTDUPLICATED: 182 case WorkType.OBJECTDUPLICATED:
183 ObjectDuplicated(model, view, currentJob.LocalId); 183 ObjectDuplicated(model, view, currentJob.LocalId);
184 break; 184 break;
185 case WorkType.OBJECTKILLED: 185 case WorkType.OBJECTKILLED:
186 ObjectKilled(model, view, (SceneObjectGroup) currentJob.Data1); 186 ObjectKilled(model, view, (SceneObjectGroup) currentJob.Data1);
187 break; 187 break;
188 case WorkType.UNDODID: 188 case WorkType.UNDODID:
189 UndoDid(model, view, currentJob.UUID); 189 UndoDid(model, view, currentJob.UUID);
190 break; 190 break;
191 case WorkType.NEWCLIENT: 191 case WorkType.NEWCLIENT:
192 NewClient(view, (IClientAPI) currentJob.Data1); 192 NewClient(view, (IClientAPI) currentJob.Data1);
193 break; 193 break;
194 case WorkType.SIMCHAT: 194 case WorkType.SIMCHAT:
195 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- Message received: " + ((OSChatMessage) currentJob.Data1).Message); 195 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- Message received: " + ((OSChatMessage) currentJob.Data1).Message);
196 SimChat(model, view, (OSChatMessage) currentJob.Data1, channel); 196 SimChat(model, view, (OSChatMessage) currentJob.Data1, channel);
197 break; 197 break;
198 default: 198 default:
199 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- uuuuuuuuuh, what?"); 199 m_log.Debug("[CONTENT MANAGEMENT] MAIN LOOP -- uuuuuuuuuh, what?");
200 break; 200 break;
201 } 201 }
202 } 202 }
203 } 203 }
204 204
@@ -207,24 +207,24 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
207 /// </summary> 207 /// </summary>
208 private void NewClient(CMView view, IClientAPI client) 208 private void NewClient(CMView view, IClientAPI client)
209 { 209 {
210 if ((m_state & State.SHOWING_CHANGES) > 0) 210 if ((m_state & State.SHOWING_CHANGES) > 0)
211 view.SendMetaEntitiesToNewClient(client); 211 view.SendMetaEntitiesToNewClient(client);
212 } 212 }
213 213
214 /// <summary> 214 /// <summary>
215 /// Only called by the MainLoop. 215 /// Only called by the MainLoop.
216 /// </summary> 216 /// </summary>
217 private void ObjectAttributeChanged(CMModel model, CMView view, uint LocalId) 217 private void ObjectAttributeChanged(CMModel model, CMView view, uint LocalId)
218 { 218 {
219 SceneObjectGroup group = null; 219 SceneObjectGroup group = null;
220 if ((m_state & State.SHOWING_CHANGES) > 0) 220 if ((m_state & State.SHOWING_CHANGES) > 0)
221 { 221 {
222 group = GetGroupByPrim(LocalId); 222 group = GetGroupByPrim(LocalId);
223 if (group != null) 223 if (group != null)
224 { 224 {
225 view.DisplayAuras( model.UpdateNormalEntityEffects(group) ); //Might be a normal entity (green aura) 225 view.DisplayAuras(model.UpdateNormalEntityEffects(group)); //Might be a normal entity (green aura)
226 m_view.DisplayMetaEntity(group.UUID); //Might be a meta entity (blue aura) 226 m_view.DisplayMetaEntity(group.UUID); //Might be a meta entity (blue aura)
227 } 227 }
228 } 228 }
229 } 229 }
230 230
@@ -234,43 +234,43 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
234 private void ObjectDuplicated(CMModel model, CMView view, uint localId) 234 private void ObjectDuplicated(CMModel model, CMView view, uint localId)
235 { 235 {
236 if ((m_state & State.SHOWING_CHANGES) > 0) 236 if ((m_state & State.SHOWING_CHANGES) > 0)
237 view.DisplayAuras(model.CheckForNewEntitiesMissingAuras( GetGroupByPrim(localId).Scene )); 237 view.DisplayAuras(model.CheckForNewEntitiesMissingAuras(GetGroupByPrim(localId).Scene));
238 } 238 }
239 239
240 /// <summary> 240 /// <summary>
241 /// Only called by the MainLoop. 241 /// Only called by the MainLoop.
242 /// </summary> 242 /// </summary>
243 private void ObjectKilled(CMModel model, CMView view, SceneObjectGroup group) 243 private void ObjectKilled(CMModel model, CMView view, SceneObjectGroup group)
244 { 244 {
245 if ((m_state & State.SHOWING_CHANGES) > 0) 245 if ((m_state & State.SHOWING_CHANGES) > 0)
246 { 246 {
247 view.RemoveOrUpdateDeletedEntity(group); 247 view.RemoveOrUpdateDeletedEntity(group);
248 model.RemoveOrUpdateDeletedEntity(group); 248 model.RemoveOrUpdateDeletedEntity(group);
249 } 249 }
250 } 250 }
251 251
252 /// <summary> 252 /// <summary>
253 /// Only called by the MainLoop. 253 /// Only called by the MainLoop.
254 /// </summary> 254 /// </summary>
255 private void PrimitiveAdded(CMModel model, CMView view, Work currentJob) 255 private void PrimitiveAdded(CMModel model, CMView view, Work currentJob)
256 { 256 {
257 if ((m_state & State.SHOWING_CHANGES) > 0) 257 if ((m_state & State.SHOWING_CHANGES) > 0)
258 { 258 {
259 foreach(Object scene in m_sceneList.Values) 259 foreach (Object scene in m_sceneList.Values)
260 m_view.DisplayAuras(model.CheckForNewEntitiesMissingAuras((Scene) scene)); 260 m_view.DisplayAuras(model.CheckForNewEntitiesMissingAuras((Scene) scene));
261 } 261 }
262 } 262 }
263 263
264 /// <summary> 264 /// <summary>
265 /// Only called by the MainLoop. 265 /// Only called by the MainLoop.
266 /// </summary> 266 /// </summary>
267 private void UndoDid(CMModel model, CMView view, UUID uuid) 267 private void UndoDid(CMModel model, CMView view, UUID uuid)
268 { 268 {
269 if ((m_state & State.SHOWING_CHANGES) > 0) 269 if ((m_state & State.SHOWING_CHANGES) > 0)
270 { 270 {
271 ContentManagementEntity ent = model.FindMetaEntityAffectedByUndo(uuid); 271 ContentManagementEntity ent = model.FindMetaEntityAffectedByUndo(uuid);
272 if (ent != null) 272 if (ent != null)
273 view.DisplayEntity(ent); 273 view.DisplayEntity(ent);
274 } 274 }
275 } 275 }
276 276
@@ -328,38 +328,38 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
328 /// <summary> 328 /// <summary>
329 /// Takes a list of scenes and forms a new orderd list according to the proximity of scenes to the second argument. 329 /// Takes a list of scenes and forms a new orderd list according to the proximity of scenes to the second argument.
330 /// </summary> 330 /// </summary>
331 protected static System.Collections.Generic.List<Scene> ScenesInOrderOfProximity( Hashtable sceneList, Scene scene) 331 protected static System.Collections.Generic.List<Scene> ScenesInOrderOfProximity(Hashtable sceneList, Scene scene)
332 { 332 {
333 int somethingAddedToList = 1; 333 int somethingAddedToList = 1;
334 System.Collections.Generic.List<Scene> newList = new List<Scene>(); 334 System.Collections.Generic.List<Scene> newList = new List<Scene>();
335 newList.Add(scene); 335 newList.Add(scene);
336 336
337 if (! sceneList.ContainsValue(scene)) 337 if (!sceneList.ContainsValue(scene))
338 { 338 {
339 foreach(Object sceneObj in sceneList) 339 foreach (Object sceneObj in sceneList)
340 newList.Add((Scene) sceneObj); 340 newList.Add((Scene) sceneObj);
341 return newList; 341 return newList;
342 } 342 }
343 343
344 while(somethingAddedToList > 0) 344 while (somethingAddedToList > 0)
345 { 345 {
346 somethingAddedToList = 0; 346 somethingAddedToList = 0;
347 for(int i = 0; i < newList.Count; i++) 347 for (int i = 0; i < newList.Count; i++)
348 { 348 {
349 foreach(Object sceneObj in sceneList.Values) 349 foreach (Object sceneObj in sceneList.Values)
350 { 350 {
351 if (newList[i].CheckNeighborRegion(((Scene)sceneObj).RegionInfo) && (! newList.Contains((Scene)sceneObj)) ) 351 if (newList[i].CheckNeighborRegion(((Scene)sceneObj).RegionInfo) && (!newList.Contains((Scene)sceneObj)))
352 { 352 {
353 newList.Add((Scene)sceneObj); 353 newList.Add((Scene)sceneObj);
354 somethingAddedToList++; 354 somethingAddedToList++;
355 } 355 }
356 } 356 }
357 } 357 }
358 } 358 }
359 359
360 foreach(Object sceneObj in sceneList.Values) 360 foreach (Object sceneObj in sceneList.Values)
361 if (! newList.Contains((Scene)sceneObj)) 361 if (!newList.Contains((Scene)sceneObj))
362 newList.Add((Scene)sceneObj); 362 newList.Add((Scene)sceneObj);
363 363
364 return newList; 364 return newList;
365 } 365 }
@@ -381,7 +381,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
381 protected void StartManaging(IClientAPI client) 381 protected void StartManaging(IClientAPI client)
382 { 382 {
383 m_log.Debug("[CONTENT MANAGEMENT] Registering channel with chat services."); 383 m_log.Debug("[CONTENT MANAGEMENT] Registering channel with chat services.");
384 client.OnChatFromViewer += SimChatSent; 384 client.OnChatFromViewer += SimChatSent;
385 //init = true; 385 //init = true;
386 386
387 OnNewClient(client); 387 OnNewClient(client);
@@ -401,19 +401,19 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
401 } 401 }
402 402
403 /// <summary> 403 /// <summary>
404 /// 404 ///
405 /// </summary> 405 /// </summary>
406 protected void StopManaging(UUID clientUUID) 406 protected void StopManaging(UUID clientUUID)
407 { 407 {
408 foreach(Object sceneobj in m_sceneList.Values) 408 foreach (Object sceneobj in m_sceneList.Values)
409 { 409 {
410 ScenePresence presence = ((Scene)sceneobj).GetScenePresence(clientUUID); 410 ScenePresence presence = ((Scene)sceneobj).GetScenePresence(clientUUID);
411 if (presence != null) 411 if (presence != null)
412 { 412 {
413 IClientAPI client = presence.ControllingClient; 413 IClientAPI client = presence.ControllingClient;
414 m_log.Debug("[CONTENT MANAGEMENT] Unregistering channel with chat services."); 414 m_log.Debug("[CONTENT MANAGEMENT] Unregistering channel with chat services.");
415 client.OnChatFromViewer -= SimChatSent; 415 client.OnChatFromViewer -= SimChatSent;
416 416
417 m_log.Debug("[CONTENT MANAGEMENT] Removing handlers to client"); 417 m_log.Debug("[CONTENT MANAGEMENT] Removing handlers to client");
418 client.OnUpdatePrimScale -= UpdateSingleScale; 418 client.OnUpdatePrimScale -= UpdateSingleScale;
419 client.OnUpdatePrimGroupScale -= UpdateMultipleScale; 419 client.OnUpdatePrimGroupScale -= UpdateMultipleScale;
@@ -427,10 +427,10 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
427 client.OnUndo -= OnUnDid; 427 client.OnUndo -= OnUnDid;
428 //client.OnUpdatePrimGroupMouseRotation += m_innerScene.UpdatePrimRotation; 428 //client.OnUpdatePrimGroupMouseRotation += m_innerScene.UpdatePrimRotation;
429 return; 429 return;
430 } 430 }
431 } 431 }
432 } 432 }
433 433
434 protected void UpdateMultiplePosition(uint localID, Vector3 pos, IClientAPI remoteClient) 434 protected void UpdateMultiplePosition(uint localID, Vector3 pos, IClientAPI remoteClient)
435 { 435 {
436 Work moreWork = new Work(); 436 Work moreWork = new Work();
@@ -479,7 +479,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
479 } 479 }
480 480
481 /// <summary> 481 /// <summary>
482 /// 482 ///
483 /// </summary> 483 /// </summary>
484 protected void UpdateSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient) 484 protected void UpdateSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient)
485 { 485 {
@@ -504,47 +504,47 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
504 /// </summary> 504 /// </summary>
505 protected void commit(string message, Scene scene, CMModel model, CMView view) 505 protected void commit(string message, Scene scene, CMModel model, CMView view)
506 { 506 {
507 System.Collections.Generic.List<Scene> proximitySceneList = ScenesInOrderOfProximity( m_sceneList, scene); 507 System.Collections.Generic.List<Scene> proximitySceneList = ScenesInOrderOfProximity(m_sceneList, scene);
508 508
509 string[] args = message.Split(new char[] {' '}); 509 string[] args = message.Split(new char[] {' '});
510 510
511 char[] logMessage = {' '}; 511 char[] logMessage = {' '};
512 if (args.Length > 1) 512 if (args.Length > 1)
513 { 513 {
514 logMessage = new char[message.Length - (args[0].Length)]; 514 logMessage = new char[message.Length - (args[0].Length)];
515 message.CopyTo(args[0].Length, logMessage, 0, message.Length - (args[0].Length)); 515 message.CopyTo(args[0].Length, logMessage, 0, message.Length - (args[0].Length));
516 } 516 }
517 517
518 m_log.Debug("[CONTENT MANAGEMENT] Saving terrain and objects of region."); 518 m_log.Debug("[CONTENT MANAGEMENT] Saving terrain and objects of region.");
519 foreach(Scene currScene in proximitySceneList) 519 foreach (Scene currScene in proximitySceneList)
520 { 520 {
521 model.CommitRegion(currScene, new String(logMessage)); 521 model.CommitRegion(currScene, new String(logMessage));
522 view.SendSimChatMessage(scene, "Region Saved Successfully: " + currScene.RegionInfo.RegionName); 522 view.SendSimChatMessage(scene, "Region Saved Successfully: " + currScene.RegionInfo.RegionName);
523 } 523 }
524 524
525 view.SendSimChatMessage(scene, "Successfully saved all regions."); 525 view.SendSimChatMessage(scene, "Successfully saved all regions.");
526 m_state |= State.DIRTY; 526 m_state |= State.DIRTY;
527 527
528 if ((m_state & State.SHOWING_CHANGES) > 0) //DISPLAY NEW CHANGES INSTEAD OF OLD CHANGES 528 if ((m_state & State.SHOWING_CHANGES) > 0) //DISPLAY NEW CHANGES INSTEAD OF OLD CHANGES
529 { 529 {
530 view.SendSimChatMessage(scene, "Updating differences between new revision and current environment."); 530 view.SendSimChatMessage(scene, "Updating differences between new revision and current environment.");
531 //Hide objects from users and Forget about them 531 //Hide objects from users and Forget about them
532 view.HideAllMetaEntities(); 532 view.HideAllMetaEntities();
533 view.HideAllAuras(); 533 view.HideAllAuras();
534 model.DeleteAllMetaObjects(); 534 model.DeleteAllMetaObjects();
535 535
536 //Recreate them from backend files 536 //Recreate them from backend files
537 foreach(Scene currScene in proximitySceneList) 537 foreach (Scene currScene in proximitySceneList)
538 { 538 {
539 model.UpdateCMEntities(currScene); 539 model.UpdateCMEntities(currScene);
540 view.SendSimChatMessage(scene, "Finished updating differences between current scene and last revision: " + currScene.RegionInfo.RegionName); 540 view.SendSimChatMessage(scene, "Finished updating differences between current scene and last revision: " + currScene.RegionInfo.RegionName);
541 } 541 }
542 542
543 //Display new objects to users1 543 //Display new objects to users1
544 view.DisplayRecentChanges(); 544 view.DisplayRecentChanges();
545 view.SendSimChatMessage(scene, "Finished updating for DIFF-MODE."); 545 view.SendSimChatMessage(scene, "Finished updating for DIFF-MODE.");
546 m_state &= ~(State.DIRTY); 546 m_state &= ~(State.DIRTY);
547 m_state |= State.SHOWING_CHANGES; 547 m_state |= State.SHOWING_CHANGES;
548 } 548 }
549 } 549 }
550 550
@@ -553,74 +553,74 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
553 /// </summary> 553 /// </summary>
554 protected void diffmode(Scene scene, CMModel model, CMView view) 554 protected void diffmode(Scene scene, CMModel model, CMView view)
555 { 555 {
556 System.Collections.Generic.List<Scene> proximitySceneList = ScenesInOrderOfProximity( m_sceneList, scene); 556 System.Collections.Generic.List<Scene> proximitySceneList = ScenesInOrderOfProximity(m_sceneList, scene);
557 557
558 if ((m_state & State.SHOWING_CHANGES) > 0) // TURN OFF 558 if ((m_state & State.SHOWING_CHANGES) > 0) // TURN OFF
559 { 559 {
560 view.SendSimChatMessage(scene, "Hiding all meta objects."); 560 view.SendSimChatMessage(scene, "Hiding all meta objects.");
561 view.HideAllMetaEntities(); 561 view.HideAllMetaEntities();
562 view.HideAllAuras(); 562 view.HideAllAuras();
563 view.SendSimChatMessage(scene, "Diff-mode = OFF"); 563 view.SendSimChatMessage(scene, "Diff-mode = OFF");
564 564
565 m_state &= ~State.SHOWING_CHANGES; 565 m_state &= ~State.SHOWING_CHANGES;
566 return; 566 return;
567 } 567 }
568 else // TURN ON 568 else // TURN ON
569 { 569 {
570 if ((m_state & State.DIRTY) != 0 || m_state == State.NONE) 570 if ((m_state & State.DIRTY) != 0 || m_state == State.NONE)
571 { 571 {
572 view.SendSimChatMessage(scene, "Hiding meta objects and replacing with latest revision"); 572 view.SendSimChatMessage(scene, "Hiding meta objects and replacing with latest revision");
573 //Hide objects from users and Forget about them 573 //Hide objects from users and Forget about them
574 view.HideAllMetaEntities(); 574 view.HideAllMetaEntities();
575 view.HideAllAuras(); 575 view.HideAllAuras();
576 model.DeleteAllMetaObjects(); 576 model.DeleteAllMetaObjects();
577 //Recreate them from backend files 577 //Recreate them from backend files
578 foreach(Object currScene in m_sceneList.Values) 578 foreach (Object currScene in m_sceneList.Values)
579 model.UpdateCMEntities((Scene) currScene); 579 model.UpdateCMEntities((Scene) currScene);
580 } 580 }
581 else if ((m_state & State.DIRTY) != 0) { 581 else if ((m_state & State.DIRTY) != 0) {
582 view.SendSimChatMessage(scene, "Forming list of meta entities with latest revision"); 582 view.SendSimChatMessage(scene, "Forming list of meta entities with latest revision");
583 foreach(Scene currScene in proximitySceneList) 583 foreach (Scene currScene in proximitySceneList)
584 model.UpdateCMEntities(currScene); 584 model.UpdateCMEntities(currScene);
585 } 585 }
586 586
587 view.SendSimChatMessage(scene, "Displaying differences between last revision and current environment"); 587 view.SendSimChatMessage(scene, "Displaying differences between last revision and current environment");
588 foreach(Scene currScene in proximitySceneList) 588 foreach (Scene currScene in proximitySceneList)
589 model.CheckForNewEntitiesMissingAuras(currScene); 589 model.CheckForNewEntitiesMissingAuras(currScene);
590 view.DisplayRecentChanges(); 590 view.DisplayRecentChanges();
591 591
592 view.SendSimChatMessage(scene, "Diff-mode = ON"); 592 view.SendSimChatMessage(scene, "Diff-mode = ON");
593 m_state |= State.SHOWING_CHANGES; 593 m_state |= State.SHOWING_CHANGES;
594 m_state &= ~State.DIRTY; 594 m_state &= ~State.DIRTY;
595 } 595 }
596 } 596 }
597 597
598 /// <summary> 598 /// <summary>
599 /// Only called from within the SimChat method. Hides all auras and meta entities, 599 /// Only called from within the SimChat method. Hides all auras and meta entities,
600 /// retrieves the current scene object list with the most recent revision retrieved from the model for each scene, 600 /// retrieves the current scene object list with the most recent revision retrieved from the model for each scene,
601 /// then lets the view update the clients of the new objects. 601 /// then lets the view update the clients of the new objects.
602 /// </summary> 602 /// </summary>
603 protected void rollback(Scene scene, CMModel model, CMView view) 603 protected void rollback(Scene scene, CMModel model, CMView view)
604 { 604 {
605 if ((m_state & State.SHOWING_CHANGES) > 0) 605 if ((m_state & State.SHOWING_CHANGES) > 0)
606 { 606 {
607 view.HideAllAuras(); 607 view.HideAllAuras();
608 view.HideAllMetaEntities(); 608 view.HideAllMetaEntities();
609 } 609 }
610 610
611 System.Collections.Generic.List<Scene> proximitySceneList = ScenesInOrderOfProximity( m_sceneList, scene); 611 System.Collections.Generic.List<Scene> proximitySceneList = ScenesInOrderOfProximity(m_sceneList, scene);
612 foreach(Scene currScene in proximitySceneList) 612 foreach (Scene currScene in proximitySceneList)
613 model.RollbackRegion(currScene); 613 model.RollbackRegion(currScene);
614 614
615 if ((m_state & State.DIRTY) != 0 ) 615 if ((m_state & State.DIRTY) != 0)
616 { 616 {
617 model.DeleteAllMetaObjects(); 617 model.DeleteAllMetaObjects();
618 foreach(Scene currScene in proximitySceneList) 618 foreach (Scene currScene in proximitySceneList)
619 model.UpdateCMEntities(currScene); 619 model.UpdateCMEntities(currScene);
620 } 620 }
621 621
622 if ((m_state & State.SHOWING_CHANGES) > 0) 622 if ((m_state & State.SHOWING_CHANGES) > 0)
623 view.DisplayRecentChanges(); 623 view.DisplayRecentChanges();
624 } 624 }
625 625
626 #endregion Protected Methods 626 #endregion Protected Methods
@@ -642,7 +642,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
642 642
643 scene.EventManager.OnNewClient += StartManaging; 643 scene.EventManager.OnNewClient += StartManaging;
644 scene.EventManager.OnRemovePresence += StopManaging; 644 scene.EventManager.OnRemovePresence += StopManaging;
645 // scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel; 645 // scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
646 scene.EventManager.OnObjectBeingRemovedFromScene += GroupBeingDeleted; 646 scene.EventManager.OnObjectBeingRemovedFromScene += GroupBeingDeleted;
647 } 647 }
648 648
@@ -652,9 +652,9 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
652 public void SimChat(CMModel model, CMView view, OSChatMessage e, int channel) 652 public void SimChat(CMModel model, CMView view, OSChatMessage e, int channel)
653 { 653 {
654 if (e.Channel != channel) 654 if (e.Channel != channel)
655 return; 655 return;
656 if (e.Sender == null) 656 if (e.Sender == null)
657 return; 657 return;
658 658
659 m_log.Debug("[CONTENT MANAGEMENT] Message received: " + e.Message); 659 m_log.Debug("[CONTENT MANAGEMENT] Message received: " + e.Message);
660 660
@@ -667,31 +667,31 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
667 667
668 if (!(m_estateModule.IsManager(avatar.UUID))) 668 if (!(m_estateModule.IsManager(avatar.UUID)))
669 { 669 {
670 m_log.Debug("[CONTENT MANAGEMENT] Message sent from non Estate Manager ... ignoring."); 670 m_log.Debug("[CONTENT MANAGEMENT] Message sent from non Estate Manager ... ignoring.");
671 view.SendSimChatMessage(scene, "You must be an estate manager to perform that action."); 671 view.SendSimChatMessage(scene, "You must be an estate manager to perform that action.");
672 return; 672 return;
673 } 673 }
674 674
675 switch(args[0]) 675 switch (args[0])
676 { 676 {
677 case "ci": 677 case "ci":
678 case "commit": 678 case "commit":
679 commit(message, scene, model, view); 679 commit(message, scene, model, view);
680 break; 680 break;
681 case "dm": 681 case "dm":
682 case "diff-mode": 682 case "diff-mode":
683 diffmode(scene, model, view); 683 diffmode(scene, model, view);
684 break; 684 break;
685 case "rb": 685 case "rb":
686 case "rollback": 686 case "rollback":
687 rollback(scene, model, view); 687 rollback(scene, model, view);
688 break; 688 break;
689 case "help": 689 case "help":
690 m_view.DisplayHelpMenu(scene); 690 m_view.DisplayHelpMenu(scene);
691 break; 691 break;
692 default: 692 default:
693 view.SendSimChatMessage(scene, "Command not found: " + args[0]); 693 view.SendSimChatMessage(scene, "Command not found: " + args[0]);
694 break; 694 break;
695 } 695 }
696 } 696 }
697 697
@@ -705,7 +705,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
705 [Flags] 705 [Flags]
706 private enum State 706 private enum State
707 { 707 {
708 NONE = 0, 708 NONE = 0,
709 DIRTY = 1, // The meta entities may not correctly represent the last revision. 709 DIRTY = 1, // The meta entities may not correctly represent the last revision.
710 SHOWING_CHANGES = 1<<1 // The meta entities are being shown to user. 710 SHOWING_CHANGES = 1<<1 // The meta entities are being shown to user.
711 } 711 }