コード例 #1
0
        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";
            }
        }
コード例 #2
0
        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.");
                });
            }
        }