// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Web.Mvc; using Tools.CrashReporter.CrashReportWebSite.Models; namespace Tools.CrashReporter.CrashReportWebSite.Controllers { /// /// A controller to handle the Bugg data. /// public class BuggsController : Controller { /// private BuggRepository LocalBuggRepository = new BuggRepository(); /// private CrashRepository LocalCrashRepository = new CrashRepository(); /// /// An empty constructor. /// public BuggsController() { } /// /// The Index action. /// /// The form of user data passed up from the client. /// The view to display a list of Buggs on the client. public ActionResult Index( FormCollection BuggsForm ) { FormHelper FormData = new FormHelper( Request, BuggsForm, "CrashesInTimeFrame" ); BuggsViewModel Results = LocalBuggRepository.GetResults( FormData ); return View( "Index", Results ); } /// /// The Show action. /// /// The form of user data passed up from the client. /// The unique id of the Bugg. /// The view to display a Bugg on the client. public ActionResult Show( FormCollection BuggsForm, int id ) { // Set the display properties based on the radio buttons bool DisplayModuleNames = false; if( BuggsForm["DisplayModuleNames"] == "true" ) { DisplayModuleNames = true; } bool DisplayFunctionNames = false; if( BuggsForm["DisplayFunctionNames"] == "true" ) { DisplayFunctionNames = true; } bool DisplayFileNames = false; if( BuggsForm["DisplayFileNames"] == "true" ) { DisplayFileNames = true; } bool DisplayFilePathNames = false; if( BuggsForm["DisplayFilePathNames"] == "true" ) { DisplayFilePathNames = true; DisplayFileNames = false; } bool DisplayUnformattedCallStack = false; if( BuggsForm["DisplayUnformattedCallStack"] == "true" ) { DisplayUnformattedCallStack = true; } // Create a new view and populate with crashes List Crashes = null; Bugg Bugg = new Bugg(); BuggViewModel Model = new BuggViewModel(); Bugg = LocalBuggRepository.GetBugg( id ); if( Bugg == null ) { return RedirectToAction( "" ); } Crashes = Bugg.GetCrashes().ToList(); // Apply any user settings if( BuggsForm.Count > 0 ) { if( !string.IsNullOrEmpty( BuggsForm["SetStatus"] ) ) { Bugg.Status = BuggsForm["SetStatus"]; LocalCrashRepository.SetBuggStatus( Bugg.Status, id ); } if( !string.IsNullOrEmpty( BuggsForm["SetFixedIn"] ) ) { Bugg.FixedChangeList = BuggsForm["SetFixedIn"]; LocalCrashRepository.SetBuggFixedChangeList( Bugg.FixedChangeList, id ); } if( !string.IsNullOrEmpty( BuggsForm["SetTTP"] ) ) { Bugg.TTPID = BuggsForm["SetTTP"]; LocalCrashRepository.SetBuggTTPID( Bugg.TTPID, id ); } if( !string.IsNullOrEmpty( BuggsForm["Description"] ) ) { Bugg.Description = BuggsForm["Description"]; } // } // Set up the view model with the crash data Model.Bugg = Bugg; Model.Crashes = Crashes; Crash NewCrash = Model.Crashes.FirstOrDefault(); if( NewCrash != null ) { CallStackContainer CallStack = new CallStackContainer( NewCrash ); // Set callstack properties CallStack.bDisplayModuleNames = DisplayModuleNames; CallStack.bDisplayFunctionNames = DisplayFunctionNames; CallStack.bDisplayFileNames = DisplayFileNames; CallStack.bDisplayFilePathNames = DisplayFilePathNames; CallStack.bDisplayUnformattedCallStack = DisplayUnformattedCallStack; Model.CallStack = CallStack; NewCrash.CallStackContainer = NewCrash.GetCallStack(); } // Add in the users for each crash in the Bugg foreach( Crash CrashInstance in Model.Crashes ) { LocalCrashRepository.PopulateUserInfo( CrashInstance ); } return View( "Show", Model ); } } }