public OpenFilesResult OpenFiles(OpenFilesRequest request)
 {
     // Done for reasons of speed, as well as the fact that a call to the service from the same thread
     // that the service is hosted on (the main UI thread) will cause a deadlock.
     if (SynchronizationContext.Current == ViewerAutomationServiceHostTool.HostSynchronizationContext)
     {
         return new ViewerAutomation().OpenFiles(request);
     }
     else
     {
         using (ViewerAutomationServiceClient client = new ViewerAutomationServiceClient())
         {
             return client.OpenFiles(request);
         }
     }
 }
Example #2
0
        public OpenFilesResult OpenFiles(OpenFilesRequest request)
        {
            if (request == null)
            {
                const string message = "The open files request cannot be null.";
                Platform.Log(LogLevel.Debug, message);
                throw new FaultException(message);
            }
            
            if (request.Files == null || request.Files.Count == 0)
            {
                const string message = "At least one file or directory must be specified.";
                Platform.Log(LogLevel.Debug, message);
                throw new FaultException(message);
            }

            var helper = new OpenFilesHelper();
            try
            {
                foreach (var file in request.Files)
                    FileProcessor.Process(file, null, helper.AddFile, true);
            }
            catch (Exception e)
            {
                Platform.Log(LogLevel.Error, e);
                const string message = "There was a problem with the files/directories specified.";
                throw new FaultException<OpenFilesFault>(new OpenFilesFault { FailureDescription = message }, message);
            }

            if (request.WaitForFilesToOpen.HasValue && !request.WaitForFilesToOpen.Value)
            {
                SynchronizationContext.Current.Post(ignore => helper.OpenFiles(), null);
                return new OpenFilesResult();
            }

            try
            {
                helper.HandleErrors = false;
                var viewer = helper.OpenFiles();
                var viewerId = ViewerAutomationTool.GetViewerId(viewer);
                return new OpenFilesResult { Viewer = new Viewer(viewerId.Value, GetPrimaryStudyIdentifier(viewer)) };

            }
            catch (Exception e)
            {
                if (!request.ReportFaultToUser.HasValue || request.ReportFaultToUser.Value)
                {
                    SynchronizationContext.Current.Post(
                        ignore => ExceptionHandler.Report(e, ImageViewer.StudyManagement.SR.MessageFailedToOpenImages, Application.ActiveDesktopWindow), null);
                }

                const string message = "There was a problem opening the files/directories specified in the viewer.";
                throw new FaultException<OpenFilesFault>(new OpenFilesFault { FailureDescription = message }, message);
            }
        }
 public OpenFilesResult OpenFiles(OpenFilesRequest request)
 {
     return(base.Channel.OpenFiles(request));
 }