예제 #1
0
        /// <Docs>To be added.</Docs>
        /// <returns>To be added.</returns>
        /// <summary>
        /// Dos the in background.
        /// </summary>
        /// <param name="parameters">Parameters.</param>
        protected override List <ISerialNumber> DoInBackground(List <ISerialNumber> parameters)
        {
            var ret = new List <ISerialNumber>();

            try {
                var task = new RequestCalibrationCertificates(ion, parameters.ToArray()).Request();
                task.Wait();

                foreach (var cr in task.Result)
                {
                    Log.D(this, "Resolving result: " + cr.serialNumber);
                    if (cr.success)
                    {
                        var file = ion.calibrationCertificateFolder.GetFile(cr.serialNumber + " Certification.pdf", EFileAccessResponse.ReplaceIfExists);
                        UpdateLastNistDate(cr.certificate).Wait();
                        try {
                            using (var s = file.OpenForWriting()) {
                                GaugeDeviceCertificatePdfExporter.Export(ion, cr.certificate, s);
                            }
                        } catch (Exception e) {
                            Log.E(this, "Failed to export calibration pdf for " + cr.serialNumber, e);
                            file.Delete();
                            ret.Add(cr.serialNumber);
                        }
                    }
                    else
                    {
                        ret.Add(cr.serialNumber);
                    }
                }

                return(ret);
            } catch (Exception e) {
                Log.E(this, "Failed to request calibration certificates.", e);
                return(parameters);
            }
        }
        /// <summary>
        /// Starts the task that will download the calibration certificates.
        /// </summary>
        /// <returns>The the things.</returns>
        private Task DoTheThings(CancellationTokenSource source, List <ISerialNumber> failures, Action onLoad)
        {
            return(Task.Factory.StartNew(() => {
                var ion = AppState.context;
                var serials = new List <ISerialNumber>();

                foreach (var device in ion.deviceManager.devices)
                {
                    serials.Add(device.serialNumber);
                }
                /////////testing for specific nist certificate data////////////
                //  var iserial = SerialNumberExtensions.ParseSerialNumber("S816H502");
                //  serials.Add(iserial);
                //iserial = SerialNumberExtensions.ParseSerialNumber("S516H214");
                //serials.Add(iserial);
                ////////////////

                Log.D(this, Arrays.AsString <ISerialNumber>(serials.ToArray()));
                var task = new ION.Core.Net.RequestCalibrationCertificates(ion, serials.ToArray());
                //var task = new RequestCalibrationCertificatesTask(ion, serials.ToArray());
                task.tokenSource = source;

                foreach (var result in task.Request().Result)
                {
                    if (!result.success)
                    {
                        failures.Add(result.serialNumber);
                        continue;
                    }

                    var file = ion.calibrationCertificateFolder.GetFile(result.serialNumber + " Certification.pdf", EFileAccessResponse.ReplaceIfExists);
                    var stream = file.OpenForWriting();

                    try {
                        GaugeDeviceCertificatePdfExporter.Export(ion, result.certificate, stream);
                        Log.D(this, "Device nist date is " + result.certificate.lastTestCalibrationDate.ToShortDateString());
                        var existing = ion.database.Query <ION.Core.Database.LoggingDeviceRow>("SELECT * FROM LoggingDeviceRow WHERE serialNumber = ?", result.serialNumber.rawSerial);

                        if (existing.Count.Equals(0))
                        {
                            Log.D(this, "Creating new entry for device: " + result.serialNumber.rawSerial + " with a calibration date of: " + result.certificate.lastTestCalibrationDate.ToShortDateString());
                            var addDevice = new ION.Core.Database.LoggingDeviceRow()
                            {
                                serialNumber = result.serialNumber.rawSerial, nistDate = result.certificate.lastTestCalibrationDate.ToShortDateString()
                            };
                            ion.database.Insert(addDevice);
                        }
                        else
                        {
                            Log.D(this, "Updated entry for device: " + result.serialNumber.rawSerial + " with a calibration date of: " + result.certificate.lastTestCalibrationDate.ToShortDateString());
                            ion.database.Query <ION.Core.Database.LoggingDeviceRow>("UPDATE LoggingDeviceRow SET nistDate = ? WHERE serialNumber = ?", result.certificate.lastTestCalibrationDate.ToShortDateString(), result.serialNumber.rawSerial);
                        }
                    } catch (Exception e) {
                        Log.E(this, "Failed to export certificate.", e);
                        file.Delete();
                        failures.Add(result.serialNumber);
                    } finally {
                        stream?.Close();
                    }

                    ion.PostToMain(() => {
                        Log.D(this, "Resolved a certification for: " + result.serialNumber);
                        onLoad();
                    });
                }
            }));
        }