private async void ScanQrCodeButton_Clicked(System.Object sender, System.EventArgs e) { try { var current = Connectivity.NetworkAccess; if (current != NetworkAccess.Internet) { await DisplayAlert("Error", "You need an active internet connection for this app to work. Please connect to the internet.", "Ok"); return; } viewModel.NotProcessing = false; ScanQrCodeButton.Text = "Scanning"; var scanner = new ZXing.Mobile.MobileBarcodeScanner(); scanner.TopText = "Scan a QR code"; scanner.FlashButtonText = "Enable flashlight"; scanner.CancelButtonText = "Cancel"; var result = await scanner.Scan(); ScanQrCodeButton.Text = "Processing"; if (result != null) { var parsedResult = _qrCodeResultParser.ParseResult(result.Text); switch (parsedResult.QrCodeType) { case QrCodeType.RegisterPoint: await HandleRegisterPoint(parsedResult); break; case QrCodeType.RegisterStageEnd: await HandleRegisterStageEnd(parsedResult); break; case QrCodeType.RegisterRaceEnd: await HandleRegisterRaceEnd(parsedResult); break; case QrCodeType.RegisterToRace: await DisplayAlert("Error", "This is a race registration QR code. If you want to register to a race use the add race button in the main screen.", "Ok"); break; default: await DisplayAlert("Error", "Unknown QR code type.", "Ok"); break; } } } catch { Device.BeginInvokeOnMainThread(() => { DisplayAlert("Error", "Something went wrong while scanning the QR code.", "Ok"); }); } finally { viewModel.NotProcessing = true; ScanQrCodeButton.Text = "Scan QR code"; } }
private async void ZXingScannerView_OnScanResult(ZXing.Result result) { try { Device.BeginInvokeOnMainThread(() => QrScanner.IsScanning = false); var qrCodeResult = _qrCodeResultParser.ParseResult(result.Text); if (qrCodeResult.QrCodeType != QrCodeType.RegisterToRace) { Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "This is not a team registration QR code."); }); return; } if (await _dataStore.GetItemAsync(qrCodeResult.RaceId) != null) { Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "You are already registered to this race."); }); return; } var current = Connectivity.NetworkAccess; if (current != NetworkAccess.Internet) { Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "You need an active internet connection for this app to work. Please connect to the internet."); }); return; } var uniqueId = Guid.NewGuid(); var apiResponse = await _raceVenturaApiClient.RegisterToRace(qrCodeResult.RaceId, qrCodeResult.TeamId, uniqueId); var race = new Race { RaceId = apiResponse.RaceId, Name = apiResponse.Name, UniqueId = apiResponse.UniqueId, RaceActive = true }; MessagingCenter.Send(this, "AddItem", race); Device.BeginInvokeOnMainThread(() => Navigation.PopModalAsync()); } catch (RaceVenturaApiException ex) { switch (ex.ErrorCode) { case ErrorCodes.MaxIdsReached: Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "You cannot register more devices to this team."); }); break; case ErrorCodes.RaceEnded: Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "The team you are trying to register to has finished the race, you cannot register to this team anymore."); }); break; default: Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "Something went wrong please try again."); }); break; } } catch (Exception) { Device.BeginInvokeOnMainThread(() => { ShowPopupAndLeavePage("Error", "Something went wrong please try again."); }); } }