// 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 );
}
}
}