public virtual async Task HandleNotificationAsync(SessionNotification notification)
 {
     await New <IProgressBackground>().WorkAsync($"{nameof(HandleNotificationAsync)} {notification.NotificationType}",
                                                 async(IProgressContext progress) =>
     {
         progress.NotifyLevelStart();
         try
         {
             await HandleNotificationInternalAsync(notification, progress).Free();
         }
         catch (AxCryptException acex)
         {
             return(new FileOperationContext(acex.DisplayContext, acex.Messages(), ErrorStatus.Exception));
         }
         catch (Exception ex)
         {
             return(new FileOperationContext(string.Empty, ex.Messages(), ErrorStatus.Exception));
         }
         finally
         {
             progress.NotifyLevelFinished();
         }
         return(new FileOperationContext(String.Empty, ErrorStatus.Success));
     },
                                                 async(FileOperationContext status) =>
     {
         if (status.ErrorStatus == ErrorStatus.Success)
         {
             return;
         }
         _statusChecker.CheckStatusAndShowMessage(status.ErrorStatus, status.FullName, $"{status.InternalMessage} ({notification.NotificationType})");
     },
                                                 new ProgressContext()).Free();
 }
 public virtual async Task DecryptFilesInsideFolderUniqueWithWipeOfOriginalAsync(IDataContainer sourceContainer, LogOnIdentity logOnIdentity, IStatusChecker statusChecker, IProgressContext progress)
 {
     IEnumerable <IDataStore> files = sourceContainer.ListEncrypted(Resolve.FileSystemState.WatchedFolders.Select(cn => New <IDataContainer>(cn.Path)), New <UserSettings>().FolderOperationMode.Policy());
     await Resolve.ParallelFileOperation.DoFilesAsync(files, (file, context) =>
     {
         return(DecryptFileUniqueWithWipeOfOriginalAsync(file, logOnIdentity, context));
     },
                                                      async (status) =>
     {
         await Resolve.SessionNotify.NotifyAsync(new SessionNotification(SessionNotificationType.UpdateActiveFiles));
         statusChecker.CheckStatusAndShowMessage(status.ErrorStatus, status.FullName, status.InternalMessage);
     }).Free();
 }