aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs')
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs103
1 files changed, 95 insertions, 8 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs
index 27b257e61..79572eb71 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/TFS/TeamFoundationServiceExtendedClient.cs
@@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using Tango.BL.Entities;
@@ -21,6 +23,13 @@ namespace Tango.MachineStudio.UI.TFS
{
public Project Project { get; private set; }
+ private ObservableCollection<WorkItem> _resolvedWorkItems;
+ public ObservableCollection<WorkItem> ResolvedWorkItems
+ {
+ get { return _resolvedWorkItems; }
+ set { _resolvedWorkItems = value; RaisePropertyChangedAuto(); }
+ }
+
private bool _isInitialized;
public bool IsInitialized
{
@@ -30,7 +39,20 @@ namespace Tango.MachineStudio.UI.TFS
public TeamFoundationServiceExtendedClient(string collectionURL, string userName, string personalToken) : base(collectionURL, userName, personalToken)
{
+ ResolvedWorkItems = new ObservableCollection<WorkItem>();
+ TangoIOC.Default.GetInstance<IAuthenticationProvider>().CurrentUserChanged += TeamFoundationServiceExtendedClient_CurrentUserChanged;
+ }
+ private void TeamFoundationServiceExtendedClient_CurrentUserChanged(object sender, User user)
+ {
+ if (user != null)
+ {
+ Task.Factory.StartNew(async () =>
+ {
+ Thread.Sleep(5000);
+ await UpdateCurrentUserResolvedWorkItems();
+ });
+ }
}
public Task<WorkItem> UploadWorkItem(WorkItem workItem)
@@ -38,14 +60,53 @@ namespace Tango.MachineStudio.UI.TFS
return UploadWorkItem(Project, workItem);
}
+ public async Task UpdateCurrentUserResolvedWorkItems()
+ {
+ try
+ {
+ IStudioApplicationManager app = TangoIOC.Default.GetInstance<IStudioApplicationManager>();
+ var items = await GetWorkItemsCreatedBy(Project, GetUserTeamMember());
+ items.Where(x => x.StepsToReproduce != null).ToList().ForEach(x => x.StepsToReproduce = x.StepsToReproduce.Replace("<div style=\"white-space:pre;\">", "").Replace("</div>", ""));
+ ResolvedWorkItems = items.Where(x => x.State == State.Resolved && x.ResolvedReason == ResolvedReason.Fixed && x.IsBuildVersionValid && x.FoundInBuildVersion < Version.Parse(app.Version)).ToObservableCollection();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error getting the current user resolved work items.");
+ }
+ }
+
+ public async Task<WorkItem> CloseWorkItem(WorkItem workItem)
+ {
+ await SetWorkItemState(Project, workItem, State.Closed);
+ var updated = await AddWorkItemComment(Project, workItem, GetUserTeamMember(), "Bug has been verified and closed by " + GetUserTeamMember().DisplayName + " (via Tango Software).");
+ ResolvedWorkItems.Remove(workItem);
+ return updated;
+ }
+
+ public async Task<WorkItem> ReactivateWorkItem(WorkItem workItem)
+ {
+ await SetWorkItemState(Project, workItem, State.New);
+ var updated = await AddWorkItemComment(Project, workItem, GetUserTeamMember(), "Bug has been reactivated by " + GetUserTeamMember().DisplayName + " (via Tango Software).");
+ updated = await SetWorkItemAssignment(Project, updated, workItem.ResolvedBy);
+ ResolvedWorkItems.Remove(workItem);
+ return updated;
+ }
+
public void Initialize()
{
Task.Factory.StartNew(() =>
{
if (!IsInitialized)
{
- Project = GetProject("Tango").Result;
- IsInitialized = true;
+ try
+ {
+ Project = GetProject("Tango").Result;
+ IsInitialized = true;
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error initializing the Team Foundation Service client.");
+ }
}
});
}
@@ -60,7 +121,7 @@ namespace Tango.MachineStudio.UI.TFS
item.Area = Project.Areas.FirstOrDefault();
item.Iteration = Project.Iterations.FirstOrDefault();
- TeamMember currentUser = Project.Members.SingleOrDefault(x => x.UniqueName.ToLower().Contains(auth.CurrentUser.Email.ToLower()));
+ TeamMember currentUser = GetUserTeamMember();
item.CreatedBy = currentUser;
item.ChangedBy = currentUser;
item.AuthorizedAs = currentUser;
@@ -82,6 +143,14 @@ namespace Tango.MachineStudio.UI.TFS
Name = "Screen Capture.jpg",
});
+ return item;
+ }
+
+ public void FinalizeBug(WorkItem item)
+ {
+ IAuthenticationProvider auth = TangoIOC.Default.GetInstance<IAuthenticationProvider>();
+ IStudioApplicationManager app = TangoIOC.Default.GetInstance<IStudioApplicationManager>();
+
FileLogger appFileLogger = LogManager.Default.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger;
FileLogger embeddedFileLogger = MachineOperator.EmbeddedLogManager.RegisteredLoggers.FirstOrDefault(x => x.GetType() == typeof(FileLogger)) as FileLogger;
@@ -113,7 +182,7 @@ namespace Tango.MachineStudio.UI.TFS
SystemInformationModel sysModel = new SystemInformationModel();
sysModel.ApplicationVersion = app.Version;
- sysModel.EmbeddedVersion = "Fake Version";
+ sysModel.EmbeddedVersion = "N/A";
sysModel.HostName = Environment.MachineName;
sysModel.UserName = auth.CurrentUser.Contact.FullName;
@@ -122,17 +191,18 @@ namespace Tango.MachineStudio.UI.TFS
Machine machine = app.ConnectedMachine.Machine;
sysModel.Machine = machine;
+ sysModel.EmbeddedVersion = app.ConnectedMachine.DeviceInformation.Version;
MachineDesigner.Views.MainView machineView = new MachineDesigner.Views.MainView();
machineView.Width = 1280;
machineView.Height = 1100;
- machineView.PanelColumnDefinition.Width = new System.Windows.GridLength(0);
+ machineView.PanelColumnDefinition.Width = new GridLength(0);
machineView.stackHeader.Visibility = Visibility.Collapsed;
machineView.Background = System.Windows.Media.Brushes.White;
machineView.DataContext = new MachineDesigner.ViewModels.MainViewVM() { SelectedMachine = machine, Configuration = machine.Configuration };
String configImageFile = PathHelper.GetTempFilePath();
- machineView.RenderToFile(configImageFile, System.Drawing.Imaging.ImageFormat.Jpeg, new System.Windows.Size(machineView.Width, machineView.Height), 100);
+ machineView.RenderToFile(configImageFile, System.Drawing.Imaging.ImageFormat.Jpeg, new Size(machineView.Width, machineView.Height), 100);
item.Attachments.Add(new Attachment()
{
@@ -141,7 +211,17 @@ namespace Tango.MachineStudio.UI.TFS
Name = "Machine Configuration.jpg"
});
- sysModel.ConfigurationString = machine.Configuration.CloneConfiguration().ToJsonString();
+ sysModel.ConfigurationString = machine.Configuration.CloneConfiguration().ToJsonString(nameof(Configuration.MachinesConfigurations), nameof(Configuration.MachineVersions));
+
+ if (app.ConnectedMachine.CurrentProcessParameters != null)
+ {
+ sysModel.LoadedProcessParametersString = app.ConnectedMachine.CurrentProcessParameters.ToJsonString(nameof(ProcessParametersTable.ProcessParametersTablesGroup));
+ }
+
+ if (app.ConnectedMachine.CurrentHardwareConfiguration != null)
+ {
+ sysModel.LoadedHardwareConfigurationString = app.ConnectedMachine.CurrentHardwareConfiguration.ToJsonString();
+ }
}
String html = String.Empty;
@@ -154,7 +234,14 @@ namespace Tango.MachineStudio.UI.TFS
item.SystemInformation = CodeGeneration.Helper.Parse(html, sysModel);
- return item;
+ item.StepsToReproduce = String.Format("<div style=\"white-space:pre\">{0}</div>", item.StepsToReproduce);
+ }
+
+ private TeamMember GetUserTeamMember()
+ {
+ IAuthenticationProvider auth = TangoIOC.Default.GetInstance<IAuthenticationProvider>();
+ TeamMember currentUser = Project.Members.SingleOrDefault(x => x.UniqueName.ToLower().Contains(auth.CurrentUser.Email.ToLower()));
+ return currentUser;
}
}
}