Catrobat.IDE.Core.ViewModels.Main.ProgramSettingsViewModel.SaveAction C# (CSharp) Method

SaveAction() private method

private SaveAction ( ) : void
return void
        private async void SaveAction()
        {
            string validName = await ServiceLocator.ContextService.ConvertToValidFileName(ProgramName);
            if (CurrentProgram.Name != ProgramName)
            {
                ProgramName = await ServiceLocator.ContextService.FindUniqueProgramName(validName);
                if (CurrentProgram.LocalProgramHeader == CurrentProgramHeader)
                {
                    CurrentProgram.LocalProgramHeader.ProjectName = ProgramName;
                    await CurrentProgram.SetProgramNameAndRenameDirectory(ProgramName);
                    CurrentProgram.Description = ProgramDescription;
                }
                else
                {
                    var oldProgramPath = CurrentProgram.BasePath;
                    CurrentProgramHeader.ProjectName = ProgramName;
                    CurrentProgram.Name = ProgramName;
                    CurrentProgram.Description = ProgramDescription;
                    
                    var programChangedMessage1 = new GenericMessage<Program>(CurrentProgram);
                        Messenger.Default.Send(programChangedMessage1, 
                            ViewModelMessagingToken.CurrentProgramChangedListener);

                    using (var storage = StorageSystem.GetStorage())
                    {
                        await storage.RenameDirectoryAsync(oldProgramPath, ProgramName);
                    }
                    
                    var programChangedMessage2 = new GenericMessage<Program>(CurrentProgram);
                    Messenger.Default.Send(programChangedMessage2,
                        ViewModelMessagingToken.CurrentProgramChangedListener);

                    await App.SaveContext(CurrentProgram);

                    var localProgramsChangedMessage = new MessageBase();
                    Messenger.Default.Send(localProgramsChangedMessage,
                            ViewModelMessagingToken.LocalProgramsChangedListener);

                    base.GoBackAction();
                }
            }

        }