using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tango.Core.Helpers;
using Tango.Integration.Observables;
using Tango.Logging;
using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common.Navigation;
using Tango.MachineStudio.Common.Notifications;
using Tango.SharedUI;
namespace Tango.MachineStudio.UI.ViewModels
{
///
/// Represents the Machine Studio loading view, view model.
///
///
public class LoadingViewVM : ViewModel
{
private INotificationProvider _notificationProvider;
private INavigationManager _navigationManager;
private IStudioModuleLoader _studioModuleLoader;
///
/// Initializes a new instance of the class.
///
/// The navigation manager.
/// The studio module loader.
/// The notification provider.
public LoadingViewVM(INavigationManager navigationManager, IStudioModuleLoader studioModuleLoader, INotificationProvider notificationProvider)
{
_navigationManager = navigationManager;
_studioModuleLoader = studioModuleLoader;
_notificationProvider = notificationProvider;
Load();
}
///
/// Load application modules.
///
private void Load()
{
ThreadsHelper.StartStaThread(() =>
{
try
{
ObservablesEntitiesAdapter.Instance.Initialize();
InvokeUI(() =>
{
_studioModuleLoader.LoadModules();
_navigationManager.NavigateTo(NavigationView.LoginView);
});
}
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
{
Environment.Exit(0);
}
});
}
});
}
}
}