aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.UI/ThreadLoading/DefaultThreadLoadingService.cs
blob: a6479da63cca9b82ad86fbd311c7ec42c86bf6ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Integration.Operation;
using Tango.PPC.Common.Connection;
using Tango.PPC.Common.Notifications;
using Tango.PPC.Common.Threading;
using Tango.PPC.Common.ThreadLoading;
using Tango.PPC.UI.Dialogs;

namespace Tango.PPC.UI.ThreadLoading
{
    public class DefaultThreadLoadingService : IThreadLoadingService
    {
        private INotificationProvider _notificationsProvider;
        private IMachineProvider _machineProvider;
        private IDispatcherProvider _dispatcher;
        private bool _dialogShown;

        public DefaultThreadLoadingService(INotificationProvider notificationsProvider, IMachineProvider machineProvider, IDispatcherProvider dispatcher)
        {
            _notificationsProvider = notificationsProvider;
            _machineProvider = machineProvider;
            _dispatcher = dispatcher;
            _machineProvider.MachineOperator.ThreadLoadingStatusChanged += MachineOperator_ThreadLoadingStatusChanged;
        }

        private void MachineOperator_ThreadLoadingStatusChanged(object sender, PMR.ThreadLoading.StartThreadLoadingResponse e)
        {
            if (!_dialogShown && e.State != PMR.ThreadLoading.ThreadLoadingState.None)
            {
                _dialogShown = true;
                _dispatcher.Invoke(async () =>
                {
                    await _notificationsProvider.ShowDialog<ThreadLoadingViewVM>(new ThreadLoadingViewVM());
                    _dialogShown = false;
                });
            }
        }

        public async void StartThreadLoadingWizard()
        {
            _dialogShown = true;
            await _notificationsProvider.ShowDialog<ThreadLoadingViewVM>(new ThreadLoadingViewVM(true));
            _dialogShown = false;
        }

        public async void StartThreadBreakWizard()
        {
            if (!_dialogShown)
            {
                _dialogShown = true;
                var vm = await _notificationsProvider.ShowDialog<ThreadBreakViewVM>();
                _dialogShown = false;

                if (vm.Result == ThreadBreakViewVM.ThreadBreakWizardResult.StartThreadLoading)
                {
                    StartThreadLoadingWizard();
                }
            }
        }
    }
}
t; /// <param name="studioModuleLoader">The studio module loader.</param> /// <param name="notificationProvider">The notification provider.</param> public LoadingViewVM(IStudioApplicationManager applicationManager, INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider, IEventLogger eventLogger, TeamFoundationServiceExtendedClient teamFoundationClient) { Status = "Loading, please wait..."; _tfs = teamFoundationClient; _eventLogger = eventLogger; ApplicationManager = applicationManager; _navigationManager = navigationManager; _studioModuleLoader = studioModuleLoader; _notificationProvider = notificationProvider; } /// <summary> /// Called when the application has been started /// </summary> public override void OnApplicationStarted() { base.OnApplicationStarted(); Load(); } /// <summary> /// Load application modules. /// </summary> private void Load() { IsLoading = true; ThreadsHelper.StartStaThread(() => { try { try { Status = "Connecting to Team Foundation Services..."; _tfs.Initialize(); Thread.Sleep(500); } catch (Exception ex) { LogManager.Log(ex, "Could not initialize Team Foundation Service client."); } Status = "Loading, please wait..."; //ObservablesStaticCollections.Instance.Initialize(); //_eventLogger.Log(EventTypes.ApplicationStarted, "Application Started!"); Status = "Starting application..."; InvokeUI(() => { //_studioModuleLoader.LoadModules(); _navigationManager.NavigateTo(NavigationView.LoginView); IsLoading = false; }); } catch (Exception ex) { logManager.Log(ex); InvokeUINow(() => { if (_notificationProvider.ShowQuestion("An error occurred while trying to connect to Twine database." + Environment.NewLine + "Would you like to try again?")) { Load(); } else { ApplicationManager.ShutDown(); } }); } }); } public override void OnApplicationReady() { } } }