示例#1
0
        public void Initialize()
        {
            var loading = MainWindow.Instance.ShowCancelableLoadingPanel();

            loading.TooLongTitle = loading.Title = loading.TooLongTitle = Localization.LoadingPanelStrings.ConnectDevice;
            loading.OnCancel    += loading_OnCancel;

            m_device = KmsUsbDevice.FindDeviceAsync(
                Settings.Default.KmsUsbVid,
                Settings.Default.KmsUsbPids
                );
            m_device.DeviceFound += m_device_DeviceFound;
        }
示例#2
0
        void questionPanel_YesClicked(object sender, EventArgs e)
        {
            var loading = MainWindow.Instance.ShowCancelableLoadingPanel();

            loading.Title = Localization.LoadingPanelStrings.ConnectDevice;
            loading.TooLongDescription = Localization.LoadingPanelStrings.ConnectDevice;

            loading.OnCancel += (Object s1, EventArgs e1) => m_device.CancelDeviceFindAsync();

            m_device              = KmsUsbDevice.FindDeviceAsync(Settings.Default.KmsUsbVid, Settings.Default.KmsUsbPids);
            m_device.DeviceFound +=
                (Object s2, KmsUsbDeviceFoundEventArgs e2) => {
                loading.Title        = Localization.LoadingPanelStrings.DoNotDisconnectDevice;
                loading.TooLongTitle = Localization.LoadingPanelStrings.DoNotDisconnectDevice;

                MainWindow.Instance.BackButtonVisible = false;
                KmsUsbDeviceResetWorker.RunWorkerAsync();
            };
        }
示例#3
0
        private void DataSyncWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            if (DataSyncWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            // TODO: Make this request actually just do a If Modified Since last sync
            var lastDateResponse = Program.KmsCloudApi.RequestJson(
                requestMethod: HttpRequestMethod.GET,
                resource: "data/total",
                requestHeaders: new Dictionary <HttpRequestHeader, String> {
                {
                    HttpRequestHeader.IfModifiedSince,
                    DateTime.UtcNow.ToString(
                        (new DateTimeFormatInfo()).RFC1123Pattern
                        )
                }
            }
                ).Response;

            var dataAggregated = new List <Data>();
            var lastDate       = DateTime.Parse((String)lastDateResponse["LastModified"]).ToUniversalTime();

            if (lastDate < DateTime.UtcNow.AddDays(-6))
            {
                lastDate = DateTime.UtcNow.AddDays(-6);
            }

            var totalDeviceRequests = (Int32)Math.Ceiling((DateTime.UtcNow - lastDate).TotalHours / 3);
            var deviceRequests      = 0;

            DataSyncWorker.ReportProgress(10, Localization.DeviceInteractionStrings.Device_ReadingData);

            lock ( m_device ) {
                using ( m_device ) {
                    for ( ; lastDate - m_device.DeviceDateTimeUtcOffset < DateTime.UtcNow; lastDate = lastDate.AddHours(3), deviceRequests++)
                    {
                        var tempData = m_device.Request <IEnumerable <Data> >(
                            RequestCommands.GetData(lastDate - m_device.DeviceDateTimeUtcOffset, 3)
                            );

                        dataAggregated.AddRange(
                            tempData.Select(d => new Data {
                            Activity  = d.Activity,
                            Steps     = d.Steps,
                            Timestamp = d.Timestamp - m_device.DeviceDateTimeUtcOffset
                        })
                            );

                        DataSyncWorker.ReportProgress(
                            10 + (deviceRequests / totalDeviceRequests * 60)
                            );

                        if (DataSyncWorker.CancellationPending)
                        {
                            e.Cancel = true;
                            break;
                        }
                    }
                }

                m_device = null;

                if (e.Cancel)
                {
                    return;
                }
            }

            DataSyncWorker.ReportProgress(60, Localization.DeviceInteractionStrings.Cloud_Uploading);

            var data    = dataAggregated.Where(w => w.Steps > 0).ToList();
            var payload = new NameValueCollection();

            OAuthResponse <String> dataBulkResponse;

            for (int i = 0, s = 0, nextChunk = 1; i < data.Count; i++, s++)
            {
                if (DataSyncWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }

                payload.Add(
                    "[" + s.ToString() + "][TimeStamp]",
                    data[i].Timestamp.ToString(
                        (new DateTimeFormatInfo()).RFC1123Pattern
                        )
                    );
                payload.Add(
                    "[" + s.ToString() + "][Activity]",
                    data[i].Activity.ToString()
                    );
                payload.Add(
                    "[" + s.ToString() + "][Steps]",
                    data[i].Steps.ToString()
                    );

                if (Math.Floor((double)(i / 128d)) == nextChunk)
                {
                    DataSyncWorker.ReportProgress(
                        60 + ((i / data.Count) * 40)
                        );

                    dataBulkResponse = Program.KmsCloudApi.RequestString(
                        HttpRequestMethod.POST,
                        "data/bulk",
                        payload
                        );

                    Trace.WriteLine(
                        String.Format(
                            "[{0}/{1}] Bulkupload: {2}",
                            i,
                            data.Count,
                            dataBulkResponse.StatusCode.ToString()
                            ),
                        "KmsCloudUpload"
                        );

                    payload.Clear();
                    nextChunk++;
                    s = 0;
                }
                else
                {
                    DataSyncWorker.ReportProgress(
                        60 + (i / data.Count) * 40
                        );
                }
            }

            if (DataSyncWorker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            if (payload.Count > 0)
            {
                DataSyncWorker.ReportProgress(100);

                dataBulkResponse = Program.KmsCloudApi.RequestString(
                    HttpRequestMethod.POST,
                    "data/bulk",
                    payload
                    );

                Trace.WriteLine(
                    String.Format(
                        "[{0}/{1}] Bulkupload: {2}",
                        data.Count,
                        data.Count,
                        dataBulkResponse.StatusCode.ToString()
                        ),
                    "KmsCloudUpload"
                    );
            }
        }