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; }
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(); }; }
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" ); } }