Commit fcdb5d79 authored by Francesco Carraro's avatar Francesco Carraro
Browse files

when saving sample and measurement info and RAW spectrum has not yet been...

when saving sample and measurement info and RAW spectrum has not yet been saved, it is saved for retrieving spectrum id.

Refactor spectrum saving methods and improve organization

Moved spectrum saving methods to BaseViewModel for better reuse.
Added new methods for cloud saving operations in BaseViewModel.
Updated ChartBaseViewModel with new method for retrieving raw spectrum ID.
Replaced inline code with method call in ChartViewModelInfo.
Enhanced error handling and logging in ChartViewModelInfo.
Cleaned up unused and added necessary using directives.
parent af005004
Loading
Loading
Loading
Loading
+70 −7
Original line number Diff line number Diff line
@@ -3,16 +3,17 @@ using CommunityToolkit.Mvvm.Input;
using INAF.Apps.Uwp.SLabDataManager.Extensions;
using INAF.Apps.Uwp.SLabDataManager.Helpers;
using INAF.Apps.Uwp.SLabDataManager.Helpers.RemoteOperations;
using INAF.Apps.Uwp.SLabDataManager.Helpers.UI;
using INAF.Apps.Uwp.SLabDataManager.Models;
using INAF.Apps.Uwp.SLabDataManager.Models.Chart;
using INAF.Apps.Uwp.SLabDataManager.Models.Containers;
using INAF.Apps.Uwp.SLabDataManager.ViewModels.ContentDialogsViewModel;
using INAF.Apps.Uwp.SLabDataManager.ViewModels.UserControlViewModels;
using INAF.Apps.Uwp.SLabDataManager.Views;
using INAF.Apps.Uwp.SLabDataManager.Views.UserControls;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Extensions;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.WebApp.Requests;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.WebApp.Requests.SaveSpectrum;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.WebApp.Responses;
using INAF.Libraries.Uwp.Logging;
using INAF.Libraries.Uwp.Settings;
using INAF.Libraries.Uwp.Settings.RecentStorageItems;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.UI.Xaml.Controls;
using System;
@@ -24,9 +25,6 @@ using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using static INAF.Apps.Uwp.SLabDataManager.Constants.Enums;
using static INAF.Libraries.NetStandard.HyperLabCommonModels.Values.Enums;
using INAF.Libraries.NetStandard.Extensions;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.Spectrum;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.WebApp.Requests;

namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
{
@@ -284,6 +282,71 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
        }
        #endregion

        #region SAVING SPECTRUM ON CLOUD
        protected async Task<bool> trySaveSpectrumOfTypeRawOrRefOnCloudAsync(IChartSpectrumModel spectrum,
                                                                             bool showSavedFileMessage = true)
        {
            bool isOk = true;

            IsLoading = true;

            logger.Write<MainViewModel>($"Saving spectrum: {spectrum.Filename}", Serilog.Events.LogEventLevel.Information);
            var remoteOperationsManager = serviceProvider.GetRequiredService<RemoteOperationsManager>();

            SaveSpectrumOfTypeRawRequestModel saveSpectrumRequest = new SaveSpectrumOfTypeRawRequestModel()
            {
                SpectrumFile = spectrum.ToSpectrumFile(),
            };
            GenericValueStringResponseModel responseobj = await remoteOperationsManager.saveSpectrumOfTypeRawAsync(saveSpectrumRequest);
            if (responseobj != null && responseobj.IsOk)
            {
                GenericValueStringResponseModel genericIdResponseModel = await remoteOperationsManager.isSpectrumTypeSavedOnCloudAsync(new IsSpectrumTypeSavedOnCloudRequestModel() { Filename = spectrum.Filename, SpectrumType = spectrum.Type });
                spectrum.setIsSavedOnCloud(genericIdResponseModel.IsOk);
                spectrum.setId(responseobj.Id);
                logger.Write<MainViewModel>("SaveSpectrumOfTypeSuccessMessage".GetText().Replace("r_v", spectrum.Filename), Serilog.Events.LogEventLevel.Information);
                //showSuccessMessage("SaveSpectrumOfTypeSuccessMessage".GetText().Replace("r_v", spectrum.Filename));
            }
            else
            {
                isOk = false;
                logger.Write<MainViewModel>("SaveSpectrumOfTypeErrorMessage".GetText().Replace("r_v", spectrum.Filename), Serilog.Events.LogEventLevel.Error);
                if (showSavedFileMessage)
                    showDialogMessage("SaveSpectrumOfTypeErrorMessage".GetText().Replace("r_v", spectrum.Filename));
            }

            IsLoading = false;

            return isOk;
        }

        protected async Task<bool> trySaveSpectrumOfTypeRawOrRefOnCloudProcedure(SpectrumType spectrumType,
                                                                                 bool showSavedFileMessage = true)
        {
            bool isOk = true;

            if (!WorkingItems.SpectraContainer.isAnySpectrumOfType(spectrumType))
            {
                // messaggio di errore
                return false;
            }

            /* retrieve spectrum */
            var spectrum = WorkingItems.SpectraContainer.tryGetSpectrumOfType(spectrumType);

            /* if spectrum is already saved, then retrieve id, otherwise save it on cloud */
            var remoteOperationsManager = serviceProvider.GetRequiredService<RemoteOperationsManager>();
            GenericValueStringResponseModel genericIdResponseModel = await remoteOperationsManager.isSpectrumTypeSavedOnCloudAsync(new IsSpectrumTypeSavedOnCloudRequestModel() { Filename = spectrum.Filename, SpectrumType = spectrumType });
            if (genericIdResponseModel != null && genericIdResponseModel.IsOk)
            {
                spectrum.setIsSavedOnCloud(genericIdResponseModel.IsOk);
                spectrum.setId(genericIdResponseModel.Id);
                return isOk;
            }
            else
                return await trySaveSpectrumOfTypeRawOrRefOnCloudAsync(WorkingItems.SpectraContainer.tryGetSpectrumOfType(spectrumType), showSavedFileMessage);
        }
        #endregion

        #region ACTION QUESTION
        protected void initActionQuestionViewModel(string question,
                                                   string optionalQuestion,
+26 −0
Original line number Diff line number Diff line
@@ -15,6 +15,9 @@ using System.Threading.Tasks;
using Windows.Storage;
using static INAF.Apps.Uwp.SLabDataManager.Constants.Enums;
using static INAF.Libraries.NetStandard.HyperLabCommonModels.Values.Enums;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.Spectrum;
using INAF.Libraries.NetStandard.HyperLabCommonModels.Models.WebApp.Requests;
using INAF.Apps.Uwp.SLabDataManager.Models.Chart;

namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
{
@@ -83,6 +86,29 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
        #endregion

        #region methods
        protected async Task<int> retrieveRawSpectrumIdAsync()
        {
            int rawFileId = 0;

            var remoteOperationsManager = serviceProvider.GetRequiredService<RemoteOperationsManager>();
            SpectrumModel spectrumModel = await remoteOperationsManager.getSpectrumIdByNameAndSpectrumType(new GenericRequestByParametersModel()
            {
                Text = WorkingItems.SpectraContainer.tryGetSpectrumOfType(SpectrumType.Raw).Filename,
                Type = SpectrumType.Raw.ToString()
            });

            if (spectrumModel == null)
            {
                IChartSpectrumModel spectrum = WorkingItems.SpectraContainer.tryGetSpectrumOfType(SpectrumType.Raw);
                if (await trySaveSpectrumOfTypeRawOrRefOnCloudAsync(spectrum, showSavedFileMessage: false))
                    rawFileId = spectrum.Id;
            }
            else
                rawFileId = spectrumModel.Id;

            return rawFileId;
        }

        protected new void init()
        {
            base.init();
+8 −9
Original line number Diff line number Diff line
@@ -200,16 +200,15 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
            int rawFileId = WorkingItems.SpectraContainer.tryGetSpectrumOfType(SpectrumType.Raw).Id;

            if (rawFileId == 0)
            {
                rawFileId = await retrieveRawSpectrumIdAsync();

                SpectrumModel spectrumModel = await remoteOperationsManager.getSpectrumIdByNameAndSpectrumType(new GenericRequestByParametersModel()
            if (rawFileId == 0)
            {
                    Text = WorkingItems.SpectraContainer.tryGetSpectrumOfType(SpectrumType.Raw).Filename,
                    Type = SpectrumType.Raw.ToString()
                });

                if (spectrumModel != null)
                    rawFileId = spectrumModel.Id;
                IsLoading = false;
                showDialogMessage("SaveSpectrumOnCloudErrorMessage".GetText());
                logger.Write<ChartViewModel>($"{nameof(saveInfoAsync)} - Error retrieving raw spectrum Id", Serilog.Events.LogEventLevel.Error);
                showDialogMessage("GenericErrorMessage".GetText());
                return;
            }

            /* create info to be saved */
+0 −65
Original line number Diff line number Diff line
@@ -822,71 +822,6 @@ namespace INAF.Apps.Uwp.SLabDataManager.ViewModels
        }
        #endregion

        #region SAVING SPECTRUM ON CLOUD
        public async Task<bool> trySaveSpectrumOfTypeRawOrRefOnCloudAsync(IChartSpectrumModel spectrum,
                                                                          bool showSavedFileMessage = true)
        {
            bool isOk = true;

            IsLoading = true;

            logger.Write<MainViewModel>($"Saving spectrum: {spectrum.Filename}", Serilog.Events.LogEventLevel.Information);
            var remoteOperationsManager = serviceProvider.GetRequiredService<RemoteOperationsManager>();

            SaveSpectrumOfTypeRawRequestModel saveSpectrumRequest = new SaveSpectrumOfTypeRawRequestModel()
            {
                SpectrumFile = spectrum.ToSpectrumFile(),
            };
            GenericValueStringResponseModel responseobj = await remoteOperationsManager.saveSpectrumOfTypeRawAsync(saveSpectrumRequest);
            if (responseobj != null && responseobj.IsOk)
            {
                GenericValueStringResponseModel genericIdResponseModel = await remoteOperationsManager.isSpectrumTypeSavedOnCloudAsync(new IsSpectrumTypeSavedOnCloudRequestModel() { Filename = spectrum.Filename, SpectrumType = spectrum.Type });
                spectrum.setIsSavedOnCloud(genericIdResponseModel.IsOk);
                spectrum.setId(responseobj.Id);
                logger.Write<MainViewModel>("SaveSpectrumOfTypeSuccessMessage".GetText().Replace("r_v", spectrum.Filename), Serilog.Events.LogEventLevel.Information);
                //showSuccessMessage("SaveSpectrumOfTypeSuccessMessage".GetText().Replace("r_v", spectrum.Filename));
            }
            else
            {
                isOk = false;
                logger.Write<MainViewModel>("SaveSpectrumOfTypeErrorMessage".GetText().Replace("r_v", spectrum.Filename), Serilog.Events.LogEventLevel.Error);
                if (showSavedFileMessage)
                    showDialogMessage("SaveSpectrumOfTypeErrorMessage".GetText().Replace("r_v", spectrum.Filename));
            }

            IsLoading = false;

            return isOk;
        }

        private async Task<bool> trySaveSpectrumOfTypeRawOrRefOnCloudProcedure(SpectrumType spectrumType,
                                                                               bool showSavedFileMessage = true)
        {
            bool isOk = true;

            if (!WorkingItems.SpectraContainer.isAnySpectrumOfType(spectrumType))
            {
                // messaggio di errore
                return false;
            }

            /* retrieve spectrum */
            var spectrum = WorkingItems.SpectraContainer.tryGetSpectrumOfType(spectrumType);

            /* if spectrum is already saved, then retrieve id, otherwise save it on cloud */
            var remoteOperationsManager = serviceProvider.GetRequiredService<RemoteOperationsManager>();
            GenericValueStringResponseModel genericIdResponseModel = await remoteOperationsManager.isSpectrumTypeSavedOnCloudAsync(new IsSpectrumTypeSavedOnCloudRequestModel() { Filename = spectrum.Filename, SpectrumType = spectrumType });
            if (genericIdResponseModel != null && genericIdResponseModel.IsOk)
            {
                spectrum.setIsSavedOnCloud(genericIdResponseModel.IsOk);
                spectrum.setId(genericIdResponseModel.Id);
                return isOk;
            }
            else
                return await trySaveSpectrumOfTypeRawOrRefOnCloudAsync(WorkingItems.SpectraContainer.tryGetSpectrumOfType(spectrumType), showSavedFileMessage);
        }
        #endregion

        #region LOGBOOK
        private void hideLogBook()
        {