private void OpenLoginWindow() { var originalUsername = LoginViewModel.Username; var originalPassword = LoginViewModel.Password; do { var result = loginViewSpawner.SpawnBlocking(LoginViewModel); if (result == true) { var authenticationResult = dataApiClient.Login(LoginViewModel.Username, LoginViewModel.Password); if (authenticationResult.IsAuthenticated) { loginSuccessfulCallback(); break; } StaticMessageBoxSpawner.Show("Login failed. Try again..."); } else if (originalUsername != null) { LoginViewModel.Username = originalUsername; LoginViewModel.Password = originalPassword; break; } else { break; } } while (true); if (!dataApiClient.IsLoggedIn) { loginFailedCallback(); } }
public UserManagementViewModel( IDataApiClient dataApiClient, IReadonlyObjectDatabase <UserProfile> userDatabase) { this.dataApiClient = dataApiClient; try { var userProfileLoader = new UserProfileLoader(dataApiClient, userDatabase); var userProfiles = Task.Run(() => userProfileLoader.LoadAsync()).Result .OrderBy(x => x.Username); UserProfiles = new ObservableCollection <UserProfileViewModel>(userProfiles); } catch (Exception e) { StaticMessageBoxSpawner.Show($"Failed to load user profiles: {e.InnermostException().Message}"); UserProfiles = new ObservableCollection <UserProfileViewModel>(); } CreateUserViewModel = new CreateUserViewModel(userDatabase, dataApiClient); CreateUserViewModel.UserCreated += (sender, userProfile) => UserProfiles.Add(userProfile); SaveUserDetailsCommand = new RelayCommand(SaveUserDetails, () => SelectedUserProfile != null); AddRoleCommand = new RelayCommand(AddRole, CanEditUser); RemoveRoleCommand = new RelayCommand(RemoveRole, CanEditUser); DeleteUserCommand = new RelayCommand(DeleteUser, CanEditUser); }
private async void App_OnStartup(object sender, StartupEventArgs e) { StaticUiUpdateNotifier.Notifier = new WpfUiUpdateNotifier(); StaticMessageBoxSpawner.Spawner = new WpfMessageBoxSpawner(); var dataApiClient = new DataApiClient(new ApiConfiguration(Settings.Default.ApiServerAddress, Settings.Default.ApiServerPort)); dataApiClient.Login(); if (!dataApiClient.IsLoggedIn) { StaticMessageBoxSpawner.Show("Could not log into DataAPI. Shutting down..."); Shutdown(-1); return; } var permissionCheckerResult = await DataPermissionChecker.Check(dataApiClient, new Dictionary <string, IList <Role> > { { nameof(DataServiceDefinition), new List <Role> { Role.Viewer, Role.DataProducer } }, { nameof(IDataServiceTarget), new List <Role> { Role.Viewer, Role.DataProducer } } }); if (!permissionCheckerResult.HasSufficientPermissions) { StaticMessageBoxSpawner.Show("You don't have enough permissions on the DataAPI to run this application. Please contact Inno-IT."); Shutdown(-1); return; } var dataServiceDefinitionDatabase = new GenericDatabase <DataServiceDefinition>(dataApiClient); var dataTypeList = new DataApiDataTypeList(dataApiClient); var usernameProxy = new DataApiUsernameProxy(dataApiClient); var sqlExpressionValidator = new SqlExpressionValidator(dataApiClient); var mainWindow = new MainWindow(); var mainViewModel = new MainViewModel( dataApiClient, dataServiceDefinitionDatabase, mainWindow, dataTypeList, usernameProxy, sqlExpressionValidator); mainWindow.ViewModel = mainViewModel; mainWindow.ShowDialog(); }
private void PerformMeasurement(object sender, Annotation annotation) { if (annotation.Points.Count != 2) { return; } var imagePoint1 = annotation.Points[0]; var imagePoint2 = annotation.Points[1]; var realWorldPoint1 = pinholeToPlaneProjection.Transform(imagePoint1); var realWorldPoint2 = pinholeToPlaneProjection.Transform(imagePoint2); var distance = realWorldPoint1.DistanceTo(realWorldPoint2); StaticMessageBoxSpawner.Show( $"Distance: {distance:F2} mm{Environment.NewLine}" + $"{Environment.NewLine}" + $"Point 1: ({imagePoint1.X:F1} px, {imagePoint1.Y:F1} px) => ({realWorldPoint1.X:F2} mm, {realWorldPoint1.Y:F2} mm){Environment.NewLine}" + $"Point 2: ({imagePoint2.X:F1} px, {imagePoint2.Y:F1} px) => ({realWorldPoint2.X:F2} mm, {realWorldPoint2.Y:F2} mm)"); }
private async void ShowDerivedData() { try { var dataObjectLoader = new DataObjectLoader(dataApiClient, clipboard, new DummyCollectionSwitcher()); var dataObjects = await dataObjectLoader.Load(Model.DerivedData, dataObject => { }); var windowTitle = $"Derived data for upload '{Model.Filename ?? Model.Id}'"; var dataWindowViewModel = new DataWindowViewModel(windowTitle, dataObjects); var dataWindow = new DataWindow { ViewModel = dataWindowViewModel }; dataWindow.ShowDialog(); } catch (Exception e) { StaticMessageBoxSpawner.Show($"Could not show derived data: {e.InnermostException().Message}"); } }
private async Task Delete() { if (StaticMessageBoxSpawner.Show( $"Are you sure you want to delete '{Id}'", "Delete?", MessageBoxButtons.YesNo) != MessageBoxResult.Yes) { return; } try { await dataApiClient.DeleteAsync(DataType, Id); deletionCallback(this); } catch (Exception e) { StaticMessageBoxSpawner.Show($"Could not delete '{Id}': {e.InnermostException().Message}"); } }
private void ShortIdClicked(object sender, MouseButtonEventArgs e) { if (DataApiConfiguration == null) { MessageBox.Show($"BUG: {nameof(DataApiConfiguration)} isn't set for {nameof(ShortIdView)}"); return; } var border = sender as Border; if (border == null) { return; } var stackPanel = border.Child as StackPanel; if (stackPanel == null) { return; } var textBlock = stackPanel.Children.OfType <TextBlock>().SingleOrDefault(); if (textBlock == null) { return; } var id = textBlock.Text; var query = $"dataType={Uri.EscapeDataString(ShortId.CollectionName)}&id={Uri.EscapeDataString(ShortId.OriginalId)}"; var serverAddress = DataApiConfiguration.ServerAddress; if (DataApiConfiguration.ServerPort != 443) { serverAddress += $":{DataApiConfiguration.ServerPort}"; } Clipboard.SetText($"https://{serverAddress}/download/getfile?{query}"); StaticMessageBoxSpawner.Show($"Short ID '{id}' copied to clipboard"); }
private void CopyDataLink(object sender, RoutedEventArgs e) { if (DataApiConfiguration == null) { MessageBox.Show($"BUG: {nameof(DataApiConfiguration)} isn't set for {nameof(DataLinkButton)}"); return; } if (DataType == null || Id == null) { MessageBox.Show("Invalid data. This is probably a bug. Contact the application owner."); return; } var query = $"dataType={Uri.EscapeDataString(DataType)}&id={Uri.EscapeDataString(Id)}"; var serverAddress = DataApiConfiguration.ServerAddress; if (DataApiConfiguration.ServerPort != 443) { serverAddress += $":{DataApiConfiguration.ServerPort}"; } var link = $"https://{serverAddress}/download/getfile?{query}"; Clipboard.SetText(link); StaticMessageBoxSpawner.Show("Link copied to clipboard"); }
public static async Task Download(DataReference dataReference, IDataApiClient dataApiClient) { try { var json = await dataApiClient.GetAsync(dataReference.DataType, dataReference.Id); if (dataReference.DataType == nameof(DataBlob)) { var dataBlob = JsonConvert.DeserializeObject <DataBlob>(json); var extension = dataBlob.Filename != null ? Path.GetExtension(dataBlob.Filename) : ".bin"; var fileDialog = new VistaSaveFileDialog { AddExtension = true, DefaultExt = extension, OverwritePrompt = true, CheckPathExists = true, Filter = @"All files (*.*)|*.*", FileName = dataBlob.Filename }; if (fileDialog.ShowDialog() != true) { return; } var outputFilePath = fileDialog.FileName; File.WriteAllBytes(outputFilePath, dataBlob.Data); } else if (dataReference.DataType == nameof(Image)) { var image = JsonConvert.DeserializeObject <Image>(json); var extension = image.Extension; var fileDialog = new VistaSaveFileDialog { AddExtension = true, DefaultExt = extension, OverwritePrompt = true, CheckPathExists = true, Filter = @"All files (*.*)|*.*", FileName = image.Filename ?? $"{image.Id}{extension}" }; if (fileDialog.ShowDialog() != true) { return; } var outputFilePath = fileDialog.FileName; File.WriteAllBytes(outputFilePath, image.Data); } else { var fileDialog = new VistaSaveFileDialog { AddExtension = true, DefaultExt = ".json", OverwritePrompt = true, CheckPathExists = true, Filter = @"JSON (*.json)|*.json|All files (*.*)|*.*", FileName = $"{dataReference.DataType}_{dataReference.Id}.json" }; if (fileDialog.ShowDialog() != true) { return; } var outputFilePath = fileDialog.FileName; File.WriteAllText(outputFilePath, json); } } catch (Exception e) { var errorText = e.InnermostException().Message; if (string.IsNullOrEmpty(errorText) && e is ApiException apiException) { errorText = apiException.StatusCode.ToString(); } StaticMessageBoxSpawner.Show($"Could not download data: {errorText}"); } }
private void LoginFailed() { StaticMessageBoxSpawner.Show("No valid login. Shutting down..."); mainWindow.Close(false); }