Пример #1
0
        private async void Page_LoadedAsync(object sender, RoutedEventArgs e)
        {
            PageBusy("Loading events from dataset " + _viewModel.Dataset.Name + " ...");
            await _viewModel.LoadDataAsync();

            PopulateSensors();
            DrawSensors();
            PopulateAnnotateFlyout();
            // Check Application Settings for last saved states. If the state exists and is valid, load the state
            ApplicationDataCompositeValue datasetLastSavedStates =
                AppSettingsService.RetrieveFromSettings <ApplicationDataCompositeValue>(
                    "DatasetLastSavedStates", new ApplicationDataCompositeValue()
                    );

            if (datasetLastSavedStates.TryGetValue(_viewModel.Dataset.Name, out object jsonDatasetSavedState))
            {
                DatasetViewSavedState datasetState = JsonConvert.DeserializeObject <DatasetViewSavedState>((string)jsonDatasetSavedState);
                if (datasetState.Day <= _viewModel.LastEventDate && datasetState.Day >= _viewModel.FirstEventDate)
                {
                    await _viewModel.LoadEventsAsync(datasetState.Day);
                }
                _viewModel.EventViewFilter = datasetState.Filter;
                _viewModel.RefreshEventsInView();
                if (datasetState.EventTimeTag != null)
                {
                    int i = 0;
                    for (i = 0; i < _viewModel.EventsInView.Count; i++)
                    {
                        SensorEventViewModel sensorEvent = (SensorEventViewModel)_viewModel.EventsInView[i];
                        if (sensorEvent.TimeTag >= datasetState.EventTimeTag)
                        {
                            _viewModel.SelectedSensorEvent = sensorEvent;
                            break;
                        }
                    }
                    if (i == _viewModel.EventsInView.Count && i != 0)
                    {
                        _viewModel.SelectedSensorEvent = (SensorEventViewModel)_viewModel.EventsInView.Last();
                    }
                }
                else
                {
                    if (datasetState.EventInView >= 0 && datasetState.EventInView < _viewModel.EventsInView.Count)
                    {
                        _viewModel.SelectedSensorEvent = (SensorEventViewModel)dataListView.Items[datasetState.EventInView];
                    }
                }
                if (_viewModel.SelectedSensorEvent != null)
                {
                    dataListView.ScrollIntoView(_viewModel.SelectedSensorEvent);
                }
            }
            PageReady();
        }
Пример #2
0
        private void btnExpandDown_Click(object sender, RoutedEventArgs e)
        {
            SensorEventViewModel sensorEvent = (SensorEventViewModel)((Button)sender).Tag;

            _viewModel.FilterExpand(sensorEvent);
        }
Пример #3
0
        private async void MenuExport_ClickAsync(object sender, RoutedEventArgs e)
        {
            // Check and see if there are unsaved changes
            if (_viewModel.IsEventsModified)
            {
                await ClosePageAsync();
            }
            DatasetExportDialog dialog = new DatasetExportDialog(_viewModel);
            var result = await dialog.ShowAsync();

            if (result == ContentDialogResult.Primary)
            {
                StorageFolder          folder = dialog.ExportFolder;
                DatasetExportViewModel datasetExportConfig = dialog.DatasetExportConfiguration;
                if (datasetExportConfig.ExportInCSV)
                {
                    // Dataset exported in csv events, where metadata about the dataset is stored in json file.
                    StorageFolder targetDatasetFolder;
                    try
                    {
                        targetDatasetFolder = await folder.GetFolderAsync(datasetExportConfig.DatasetName);

                        string    message   = "A folder named " + datasetExportConfig.DatasetName + " already existed at " + folder.Path + ". Do you want to overwrite?";
                        var       dlg       = new MessageDialog(message, "Overwrite Folder?");
                        UICommand yesCmd    = new UICommand("Yes");
                        UICommand cancelCmd = new UICommand("Cancel");
                        dlg.Commands.Add(yesCmd);
                        dlg.Commands.Add(cancelCmd);
                        dlg.DefaultCommandIndex = 1;
                        dlg.CancelCommandIndex  = 1;
                        var cmd = await dlg.ShowAsync();

                        if (cmd == cancelCmd)
                        {
                            return;
                        }
                    }
                    catch (Exception)
                    { }
                    targetDatasetFolder = await folder.CreateFolderAsync(datasetExportConfig.DatasetName, CreationCollisionOption.ReplaceExisting);

                    PageBusy(string.Format("Exporting dataset {0} to folder {1}", datasetExportConfig.DatasetName, targetDatasetFolder.Path));
                    if (datasetExportConfig.ExportDateSelectionEnabled)
                    {
                        // Copy all files
                        foreach (var datasetFile in await _viewModel.Dataset.Folder.GetFilesAsync())
                        {
                            if (datasetFile.FileType == ".csv")
                            {
                                List <string> eventStringList = new List <string>();
                                // Open file, read each line, parse the time. If the time is inbetween the start date and stop date, write the line back to file.
                                using (var inputStream = await datasetFile.OpenReadAsync())
                                    using (var classicStream = inputStream.AsStreamForRead())
                                        using (var streamReader = new StreamReader(classicStream))
                                        {
                                            int lineNo = 0;
                                            while (streamReader.Peek() >= 0)
                                            {
                                                string curEventString = streamReader.ReadLine();
                                                if (string.IsNullOrWhiteSpace(curEventString))
                                                {
                                                    continue;
                                                }
                                                try
                                                {
                                                    string [] tokenList = curEventString.Split(new char[] { ',' });
                                                    // Get the Date of the String and add to dictionary
                                                    DateTimeOffset curEventTimeTag = DateTimeOffset.Parse(tokenList[0]);
                                                    if (curEventTimeTag.Date >= datasetExportConfig.ExportStartDate && curEventTimeTag.Date <= datasetExportConfig.ExportStopDate)
                                                    {
                                                        eventStringList.Add(curEventString);
                                                    }
                                                    if (curEventTimeTag.Date > datasetExportConfig.ExportStopDate)
                                                    {
                                                        break;
                                                    }
                                                    lineNo++;
                                                }
                                                catch (Exception except)
                                                {
                                                    Logger.Instance.Error(this.GetType().Name, string.Format("Failed at line {0} with error message {1}", lineNo, except.Message));
                                                }
                                            }
                                        }
                                StorageFile newDatasetFile = await targetDatasetFolder.CreateFileAsync(datasetFile.Name, CreationCollisionOption.ReplaceExisting);

                                using (var outputStream = await newDatasetFile.OpenAsync(FileAccessMode.ReadWrite))
                                    using (var classicStream = outputStream.AsStreamForWrite())
                                        using (var streamWriter = new StreamWriter(classicStream))
                                        {
                                            foreach (string eventString in eventStringList)
                                            {
                                                streamWriter.WriteLine(eventString);
                                            }
                                        }
                            }
                            else if (datasetFile.FileType == ".json")
                            {
                                await datasetFile.CopyAsync(targetDatasetFolder, datasetFile.Name, NameCollisionOption.ReplaceExisting);
                            }
                        }
                    }
                    else
                    {
                        // Copy all files
                        foreach (var datasetFile in await _viewModel.Dataset.Folder.GetFilesAsync())
                        {
                            await datasetFile.CopyAsync(targetDatasetFolder, datasetFile.Name, NameCollisionOption.ReplaceExisting);
                        }
                    }
                    // Change name of the copied metadata file
                    if (datasetExportConfig.DatasetRenameEnabled)
                    {
                        Dataset dataset = await Dataset.LoadMetadataFromFolderAsync(targetDatasetFolder);

                        dataset.Name = datasetExportConfig.DatasetName;
                        await dataset.WriteMetadataToFolderAsync();
                    }
                    PageReady();
                    return;
                }
                if (datasetExportConfig.ExportInTxt)
                {
                    // For backward compatibility, one can export the dataset in old-style txt format.
                    string      txtFileName    = datasetExportConfig.DatasetName + "_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
                    StorageFile newDatasetFile = await folder.CreateFileAsync(txtFileName, CreationCollisionOption.ReplaceExisting);

                    PageBusy(string.Format("Exporting dataset {0} to {1}", datasetExportConfig.DatasetName, newDatasetFile.Path));
                    List <string>        eventStringList = new List <string>();
                    SensorEventViewModel sensorEvent     = _viewModel.ParseSensorEventFromString(_viewModel.AllEventsStringList[0]);
                    SensorEventViewModel nextSensorEvent;
                    string previousActivity = "";
                    for (int idEvent = 0; idEvent < _viewModel.AllEventsStringList.Count; idEvent++)
                    {
                        nextSensorEvent = (idEvent == _viewModel.AllEventsStringList.Count - 1) ? null :
                                          _viewModel.ParseSensorEventFromString(_viewModel.AllEventsStringList[idEvent + 1]);
                        if (sensorEvent.TimeTag.Date >= datasetExportConfig.ExportStartDate &&
                            sensorEvent.TimeTag.Date <= datasetExportConfig.ExportStopDate)
                        {
                            string annotationString = "";
                            if (sensorEvent.Activity.Name != "Other_Activity")
                            {
                                if (sensorEvent.Activity.Name != previousActivity)
                                {
                                    annotationString = sensorEvent.Activity.Name + "=\"begin\"";
                                }
                                else if (nextSensorEvent == null)
                                {
                                    annotationString = sensorEvent.Activity.Name + "=\"end\"";
                                }
                                else if (nextSensorEvent.Activity.Name != sensorEvent.Activity.Name)
                                {
                                    annotationString = sensorEvent.Activity.Name + "=\"end\"";
                                }
                            }
                            eventStringList.Add(
                                sensorEvent.TimeTag.ToString("yyyy-MM-dd") + "\t" +
                                sensorEvent.TimeTag.ToString("HH:mm:ss.ffffff") + "\t" +
                                sensorEvent.Sensor.Name + "\t" +
                                sensorEvent.SensorState + "\t" +
                                annotationString
                                );
                            previousActivity = sensorEvent.Activity.Name;
                        }
                        if (sensorEvent.TimeTag.Date > datasetExportConfig.ExportStopDate)
                        {
                            break;
                        }
                        sensorEvent = nextSensorEvent;
                    }
                    using (var outputStream = await newDatasetFile.OpenAsync(FileAccessMode.ReadWrite))
                        using (var classicStream = outputStream.AsStreamForWrite())
                            using (var streamWriter = new StreamWriter(classicStream))
                            {
                                foreach (string eventString in eventStringList)
                                {
                                    streamWriter.WriteLine(eventString);
                                }
                            }
                    PageReady();
                    return;
                }
            }
        }