public void TestInitialise() { _Snapshot = Factory.TakeSnapshot(); _ProgramConfiguration = new global::VirtualRadar.Interface.Settings.Configuration(); _SharedConfiguration = TestUtilities.CreateMockSingleton <ISharedConfiguration>(); _SharedConfiguration.Setup(r => r.Get()).Returns(_ProgramConfiguration); _FileSystem = new MockFileSystemProvider(); Factory.Singleton.RegisterInstance <IFileSystemProvider>(_FileSystem); _FileSystemServerConfiguration = TestUtilities.CreateMockSingleton <IFileSystemServerConfiguration>(); _FileSystemServerConfiguration.Setup(r => r.GetSiteRootFolders()).Returns(() => new List <string>() { @"c:\web\", }); _FileSystemServerConfiguration.Setup(r => r.IsFileUnmodified(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <byte[]>())).Returns(true); _ImageFileManager = TestUtilities.CreateMockImplementation <IImageFileManager>(); _AircraftPictureManager = TestUtilities.CreateMockSingleton <IAircraftPictureManager>(); _AircraftPictureManager.Setup(r => r.FindPicture(It.IsAny <IDirectoryCache>(), It.IsAny <string>(), It.IsAny <string>())).Returns((PictureDetail)null); _AircraftPictureManager.Setup(r => r.LoadPicture(It.IsAny <IDirectoryCache>(), It.IsAny <string>(), It.IsAny <string>())).Returns((Image)null); _AircraftPictureCache = TestUtilities.CreateMockImplementation <IDirectoryCache>(); _AutoConfigurePictureCache = TestUtilities.CreateMockSingleton <IAutoConfigPictureFolderCache>(); _AutoConfigurePictureCache.SetupGet(r => r.DirectoryCache).Returns(_AircraftPictureCache.Object); _ServerConfiguration = TestUtilities.CreateMockSingleton <IImageServerConfiguration>(); _ServerConfiguration.SetupGet(r => r.ImageFileManager).Returns(_ImageFileManager.Object); _Server = Factory.Singleton.Resolve <IImageServer>(); _Environment = new MockOwinEnvironment(); _Environment.Request.RemoteIpAddress = "127.0.0.1"; _Pipeline = new MockOwinPipeline(); }
public bool UploadImage(byte[] data, string fmt, ImageItemViewModel item) { try { if (string.IsNullOrEmpty(DefaultServer)) { DefaultServer = "SMMS"; GlobalConfig.Instance.SaveSettings(); } string AssemblyName = "ImageHosting.Module.ImageServer." + DefaultServer; IImageServer server = (IImageServer)Assembly.Load(AssemblyName).CreateInstance(AssemblyName + ".ImageServer"); var config = GlobalConfig.Instance.GetImageServerConfig(DefaultServer); bool bRes = server.SetConfig(config); if (!bRes) { var result = MessageBox.Show("确定?", "此图床服务需要必要的设置,是否跳转到设置界面?", MessageBoxButton.YesNo); if (result == MessageBoxResult.Yes) { IRegionManager regionManager = ServiceLocator.Current.GetInstance <IRegionManager>(); regionManager.RequestNavigate(RegionToken.NavigationBarRegionName, AssemblyName + ".Views." + DefaultServer); } return(false); } item.Info.DisplayName = "Clipboard_" + Guid.NewGuid().ToString() + fmt; item.Info.Extname = fmt; string ImageURL = string.Empty; bRes = server.UploadImage(data, item.Info.DisplayName, out ImageURL); if (bRes && !string.IsNullOrEmpty(ImageURL)) { item.Info.GUID = Guid.NewGuid().ToString(); item.Info.UploadTime = DateTime.Now.ToFileTimeUtc(); item.Info.ImageServer = server.ServerName(); item.Info.ImageUrl = ImageURL; item.Info.Filename = item.Info.GUID + item.Info.Extname; string dst = GlobalUtil.GetCacheDirectory() + "\\" + item.Info.Filename; // File.Copy(path, dst, true); using (var file = new FileStream(dst, FileMode.Create, FileAccess.Write)) { file.Write(data, 0, data.Length); file.Flush(); } return(true); } else { return(false); } } catch (Exception ex) { Debug.WriteLine(ex.Message); return(false); } }
public static string GetAndApplyColormap(IImageServer imageServer) { //Get the color map. IImageServiceInfo3 isInfo = imageServer.ServiceInfo as IImageServiceInfo3; IRasterColormap colormap = isInfo.Colormap; //Create the color map function using the color map. IRenderingRule rule = new RenderingRuleClass(); ColormapFunction colormapfunction = new ColormapFunctionClass(); IColormapFunctionArguments colormapargs = new ColormapFunctionArgumentsClass(); colormapargs.Colormap = colormap; rule.Function = colormapfunction; rule.Arguments = (IRasterFunctionArguments)colormapargs; rule.VariableName = "Raster"; //Define export image request. IGeoImageDescription2 geoImageDesc = new GeoImageDescriptionClass(); geoImageDesc.Width = 800; geoImageDesc.Height = 600; geoImageDesc.Extent = isInfo.Extent; geoImageDesc.RenderingRule = rule; //Export an image using service's color map. IImageType imageType = new ImageTypeClass(); imageType.Format = esriImageFormat.esriImageJPGPNG; imageType.ReturnType = esriImageReturnType.esriImageReturnURL; IMapImage mapImage = ((IImageServer2)imageServer).ExportMapImage(geoImageDesc, imageType); return mapImage.URL; }
public void ImageServer_Can_Dynamically_Add_Text() { var textLines = new List <string>(); var webSiteGraphics = ReplaceWebSiteGraphics(); webSiteGraphics.Setup(r => r.AddTextLines(It.IsAny <Image>(), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>(), It.IsAny <bool>())) .Returns((Image image, IEnumerable <string> lines, bool unused2, bool unused3) => { textLines.AddRange(lines); return((Image)image.Clone()); }); _Server = Factory.Singleton.Resolve <IImageServer>(); _Environment.RequestPath = "/Images/PL1-Hello/PL2-There/TestSquare.png"; _Pipeline.CallMiddleware(_Server.HandleRequest, _Environment.Environment); webSiteGraphics.Verify(r => r.AddTextLines(It.IsAny <Image>(), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>(), It.IsAny <bool>()), Times.Once()); Assert.AreEqual(2, textLines.Count); Assert.AreEqual("Hello", textLines[0]); Assert.AreEqual("There", textLines[1]); using (var stream = new MemoryStream(_Environment.ResponseBodyBytes)) { using (var siteImage = (Bitmap)Bitmap.FromStream(stream)) { // Note that in real life IWebSiteGraphics would have done something with the image, but here all // we can reasonably do is make sure that something that looks like an image was returned... } } }
public static string ApplyMLClassifyFunction(IImageServer imageServer, IRaster pRaster, string signaturfile) { //Define a function. IRasterFunction hillshadeFunction = new MLClassifyFunctionClass(); IRasterFunctionArguments functionArgument = new MLClassifyFunctionArgumentsClass(); functionArgument.PutValue("Raster", pRaster); functionArgument.PutValue("SignatureFile", signaturfile); //Attach the function to a rendering rule. IRenderingRule renderRule = new RenderingRuleClass(); renderRule.Function = hillshadeFunction; renderRule.Arguments = functionArgument; renderRule.VariableName = "DEM"; //Define the image description. IGeoImageDescription geoImageDesc = new GeoImageDescriptionClass(); geoImageDesc.Compression = "LZ77"; geoImageDesc.Extent = imageServer.ServiceInfo.Extent; geoImageDesc.Width = 800; geoImageDesc.Height = 600; geoImageDesc.Interpolation = rstResamplingTypes.RSP_BilinearInterpolation; IGeoImageDescription2 geoImageDesc2 = (IGeoImageDescription2)geoImageDesc; geoImageDesc2.RenderingRule = renderRule; //Define the return image type. IImageType imgType = new ImageTypeClass(); imgType.Format = esriImageFormat.esriImagePNG; imgType.ReturnType = esriImageReturnType.esriImageReturnURL; //Export the image. IImageResult imgResult = imageServer.ExportImage(geoImageDesc2, imgType); return imgResult.URL; }
public virtual void SendToServer(IImageServer server) { _log.DebugFormat("Transmitting image: {0}", FullPath); var req = _requestProvider.ProvideNewAddImageRequest(server, FileName, LoadImageBytes()); UploadSuccessful = req.Post(); }
public IAddImageRequest ProvideNewAddImageRequest(IImageServer server, string fileName, byte[] imageBytes) { return(new AddImageRequest(_webRequestFactory, _logProvider, _credentialRepository) { RequestUrl = server.ServerUrl, FileBytes = imageBytes, FileName = fileName }); }
/// <summary> /// Initializes a new instance of the <see cref="ImageController"/> class. /// </summary> /// <param name="modal">The modal.</param> public ImageController(IImageServiceModal modal, AppConfig appConfig, IImageServer imageServer) { m_imageServer = imageServer; m_appConfig = appConfig; m_modal = modal; // Storing the Modal Of The System commands = new Dictionary <int, ICommand>() { // For Now will contain NEW_FILE_COMMAND { (int)CommandEnum.NewFileCommand, new NewFileCommand(m_modal) }, { (int)CommandEnum.GetConfigCommand, new GetConfigCommand(m_appConfig) }, { (int)CommandEnum.LogCommand, new LogCommand() }, { (int)CommandEnum.RemoveHandler, new RemoveHandlerCommand(m_appConfig, m_imageServer) }, }; }
//Here You will use app config /// <summary> /// When implemented in a derived class, /// executes when a Start command is sent /// to the service by the Service Control Manager (SCM) /// or when the operating system starts /// (for a service that starts automatically). /// Specifies actions to take when the service starts. /// </summary> /// <param name="args">Data passed by the start command.</param> protected override void OnStart(string[] args) { try { Console.WriteLine("OnStart"); // Update the service state to Start Pending. ServiceStatus serviceStatus = new ServiceStatus(); serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING; serviceStatus.dwWaitHint = 100000; SetServiceStatus(this.ServiceHandle, ref serviceStatus); eventLog1.WriteEntry("In OnStart"); // Set up a timer to trigger every minute. System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 60000; // 60 seconds // timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer); timer.Start(); // Update the service state to Running. serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING; SetServiceStatus(this.ServiceHandle, ref serviceStatus); //read from app config AppConfig appConfig = new AppConfig(); //create the LoggingService logging = new LoggingService(); logging.MessageReceivedEvent += onMsg; logging.MessageReceivedEvent += LogCommand.onReceiveCommandLog; modal = new ImageServiceModal(appConfig.OutPutDir, appConfig.ThumbnailSize, logging); //controller = new ImageController(modal, appConfig); m_imageServer = new ImageServer(logging, appConfig.ArrHandlers); controller = new ImageController(modal, appConfig, m_imageServer); m_imageServer.initImageServer(controller); ClientHandler clientHandler = new ClientHandler(controller, logging); server = new TCPServerChannel(8000, clientHandler); logging.MessageReceivedEvent += server.SendLog; server.Start(); } catch (Exception ex) { eventLog1.WriteEntry(ex.Message); } }
public ImageService() { InitializeComponent(); string eventSourceName = ConfigurationManager.AppSettings["SourceName"]; string logName = ConfigurationManager.AppSettings["LogName"]; eventLogger = new EventLog { Source = eventSourceName, Log = logName }; ILoggingService imageLogger = new LoggingService(); imageLogger.MessageRecieved += OnMsg; IImageController imageController = new ImageController(new ImageServiceModel(imageLogger)); imageServer = new ImageServer(imageController); }
private void loadLayers() { chbLayers.Items.Clear(); Dictionary <string, bool> lyrDic = msUtil.getLayerDic(cmbCon.Text, cmbSrv.Text); if (lyrDic.Count < 1) { this.UseWaitCursor = true; IAGSServerConnection2 sConn = msUtil.getServiceConnection(cmbCon.Text); Dictionary <string, int> lyrIdDic = new Dictionary <string, int>(); string sType = msUtil.getServiceType(cmbCon.Text, cmbSrv.Text); IAGSServerObjectName3 sObj = msUtil.getServiceObject(sConn, cmbSrv.Text, sType); if (sType.ToLower() == "mapserver") { IMapServer2 ms2 = msUtil.getMapService(sObj); lyrIdDic = msUtil.getLayers(ms2); } else if (sType.ToLower() == "imageserver") { IImageServer ims = msUtil.getIMageService(sObj); lyrIdDic = msUtil.getImages(ims); } msUtil.updateLayerTable(lyrIdDic, cmbCon.Text, cmbSrv.Text); lyrDic = msUtil.getLayerDic(cmbCon.Text, cmbSrv.Text); this.UseWaitCursor = false; } if (lyrDic.Count < 1) { MessageBox.Show("Can't find any layers that will allow users to download information. Setting server name to blank."); cmbSrv.Text = ""; } else { foreach (KeyValuePair <string, bool> kvp in lyrDic) { chbLayers.Items.Add(kvp.Key, kvp.Value); } } }
public static void AddRastersToImageService(IImageServer imageServer, List<string> fileNames, List<string> fileUrls, IPropertySet attributes) { //Construct an item description. IRasterItemDescription itemDescription = new RasterItemDescriptionClass(); //Define source raster names, locations, and type. IStringArray dataFileNames = new StrArrayClass(); //File names example: Image32.tif, Image32.tfw, Image32.aux. foreach (string fileName in fileNames) dataFileNames.Add(fileName); itemDescription.DataFileNames = dataFileNames; IStringArray dataFileURLs = new StrArrayClass(); //File URL examples: c:\temp\Image32.tif, c:\temp\Image32.tfw, http:\\host\Image32.aux. foreach (string fileurl in fileUrls) dataFileURLs.Add(fileurl); itemDescription.DataFileURLs = dataFileURLs; itemDescription.Type = "Raster Dataset"; //Raster pyramids,statistics,thumbnail. itemDescription.BuildPyramids = false; itemDescription.BuildThumbnail = false; itemDescription.ComputeStatistics = false; //If you need to overwrite default raster properties/metadata, provide here. itemDescription.Properties = attributes; //Construct item descriptions. IRasterItemDescriptions itemDescriptions = new RasterItemDescriptionsClass(); itemDescriptions.Add(itemDescription); //Add. IImageServerEditResults isEditResults = ((IImageServer4)imageServer).Add(itemDescriptions); }
public void ProcessAvailableImages(IWatchedFileRepository watchedFileRepository, IImageServer server) { if (_mode.Equals(OperationMode.UploadAndClear)) throw new NotImplementedException(); var images = _directoryScanner.GetAvailableImages(watchedFileRepository, _watchPath, _acceptableExtensions, _includeSubDirectories, _sortStrategy); foreach (var image in images.Where(image => image != null)) { try { if (!image.UploadSuccessful && (_mode.Equals(OperationMode.UploadAndClear) || _mode.Equals(OperationMode.UploadOnly) || _mode.Equals(OperationMode.UploadAndSort))) { image.SendToServer(server); watchedFileRepository.Save(image); } if (image.IsInBaseDirectory(_watchPath) && (_mode.Equals(OperationMode.SortOnly) || _mode.Equals(OperationMode.UploadAndSort))) { _log.Debug(string.Format("Beginning sort of file: {0}", image.FullPath)); image.SortFile(); } } catch (IOException ex) { image.UploadSuccessful = false; watchedFileRepository.Save(image); _log.Error("Failed: " + image, ex); } } }
/// <summary> /// returns the images from an IImageServer server /// </summary> /// <param name="ims">IImageServer object</param> /// <returns>the a dictionary of service name and its corresponding id</returns> public Dictionary<string, int> getImages(IImageServer ims) { Dictionary<string, int> imsDic = new Dictionary<string, int>(); IImageServiceInfo imsInfo = ims.ServiceInfo; string iNm = imsInfo.Name; int bCnt = imsInfo.BandCount; imsDic.Add(iNm, bCnt); return imsDic; }
/// <summary> /// return the number of bands for a given image server /// </summary> /// <param name="is2">image server</param> /// <returns></returns> public int getBandCount(IImageServer is2) { IImageServiceInfo pSet = is2.ServiceInfo; return pSet.BandCount; }
public RemoveHandlerCommand(AppConfig appConfig, IImageServer imageServer) { m_imageServer = imageServer; m_appConfig = appConfig; }
public void Execute() { try { // Create new spatial reference ISpatialReference spatialReference = null; if (this.SRef.ToLowerInvariant().Contains("projcs")) { spatialReference = new ProjectedCoordinateSystemClass(); } else { spatialReference = new GeographicCoordinateSystemClass(); } // Import SpatialReference Definition int bytes2; IESRISpatialReferenceGEN2 gen = (IESRISpatialReferenceGEN2)spatialReference; gen.ImportFromESRISpatialReference(this.SRef, out bytes2); // Create Search Extent IEnvelope extent = new EnvelopeClass(); extent.PutCoords(this.XMin, this.YMin, this.XMax, this.YMax); extent.SpatialReference = spatialReference; // Open Saved Layer File ILayerFile layerFile = new LayerFileClass(); layerFile.Open(this.Path); ILayer layer = layerFile.Layer; layerFile.Close(); // Where clause and list of selected OIDs string where = string.Empty; List <int> ids = new List <int>(); IImageServerLayer imageLayer = null; if (layer is IImageServerLayer) { imageLayer = (IImageServerLayer)layer; // Get Selection Set IFeatureLayerDefinition definition = layer as IFeatureLayerDefinition; if (definition != null) { // Find Selected OIDs if (definition.DefinitionSelectionSet != null) { if (definition.DefinitionSelectionSet.Count > 0) { IEnumIDs emumids = definition.DefinitionSelectionSet.IDs; int id = emumids.Next(); while (id != -1) { ids.Add(id); id = emumids.Next(); } } } // Update Where Clause if (!string.IsNullOrEmpty(definition.DefinitionExpression)) { where = definition.DefinitionExpression; } } } else if (layer is IMosaicLayer) { IMosaicLayer mosaicLayer = (IMosaicLayer)layer; imageLayer = mosaicLayer.PreviewLayer; ITableDefinition tableDefinition = mosaicLayer as ITableDefinition; if (tableDefinition != null) { // Find Selected OIDs if (tableDefinition.DefinitionSelectionSet != null) { if (tableDefinition.DefinitionSelectionSet.Count > 0) { IEnumIDs emumids = tableDefinition.DefinitionSelectionSet.IDs; int id = emumids.Next(); while (id != -1) { ids.Add(id); id = emumids.Next(); } } } // Update Where Clause if (!string.IsNullOrEmpty(tableDefinition.DefinitionExpression)) { where = tableDefinition.DefinitionExpression; } } } // Use FeatureSelected (if any) IFeatureSelection featureSelection = imageLayer as IFeatureSelection; if (featureSelection != null) { if (featureSelection.SelectionSet != null) { if (featureSelection.SelectionSet.Count > 0) { IEnumIDs emumids = featureSelection.SelectionSet.IDs; int id = emumids.Next(); while (id != -1) { ids.Add(id); id = emumids.Next(); } } } } // Get Bands ILongArray bands = new LongArrayClass(); IRasterRenderer rasterRenderer = imageLayer.Renderer; if (rasterRenderer != null) { IRasterRGBRenderer2 rasterRGBRenderer = rasterRenderer as IRasterRGBRenderer2; if (rasterRGBRenderer != null) { bands.Add(rasterRGBRenderer.UseRedBand ? rasterRGBRenderer.RedBandIndex : -1); bands.Add(rasterRGBRenderer.UseGreenBand ? rasterRGBRenderer.GreenBandIndex : -1); bands.Add(rasterRGBRenderer.UseBlueBand ? rasterRGBRenderer.BlueBandIndex : -1); bands.Add(rasterRGBRenderer.UseAlphaBand ? rasterRGBRenderer.AlphaBandIndex : -1); } } // Create Spatial Filter ISpatialFilter spatialFilter = new SpatialFilterClass() { Geometry = extent, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = where }; IImageServer imageServer = imageLayer.DataSource as IImageServer; if (imageServer == null) { return; } IImageServer3 imageServer3 = imageServer as IImageServer3; if (imageServer3 == null) { return; } IRecordSet recordSet = imageServer3.GetCatalogItems(spatialFilter); ICursor cursor = recordSet.get_Cursor(false); IFeatureCursor featureCursor = (IFeatureCursor)cursor; IFeature feature = featureCursor.NextFeature(); List <IFeature> list = new List <IFeature>(); int indexCategory = featureCursor.FindField("Category"); while (feature != null) { // Exclude non-primary images (no overviews) if (indexCategory != -1) { int cat = (int)feature.get_Value(indexCategory); if (cat != 1) { feature = featureCursor.NextFeature(); continue; } } // Exclude unselected features if (ids.Count > 0) { int oid = feature.OID; if (!ids.Contains(oid)) { feature = featureCursor.NextFeature(); continue; } } list.Add(feature); feature = featureCursor.NextFeature(); } // If nothing, fire event then exit if (list.Count == 0) { this.OnThumbnailSummary(new SummaryEventArgs()); return; } // Get Full Extent of Features SummaryEventArgs summary = new SummaryEventArgs() { XMin = list.Min(f => f.Shape.Envelope.CloneProject(spatialReference).XMin), YMin = list.Min(f => f.Shape.Envelope.CloneProject(spatialReference).YMin), XMax = list.Max(f => f.Shape.Envelope.CloneProject(spatialReference).XMax), YMax = list.Max(f => f.Shape.Envelope.CloneProject(spatialReference).YMax), Count = list.Count }; // Add Fields IFields fields = featureCursor.Fields; for (int i = 0; i < fields.FieldCount; i++) { IField field = fields.get_Field(i); switch (field.Type) { case esriFieldType.esriFieldTypeBlob: case esriFieldType.esriFieldTypeGeometry: case esriFieldType.esriFieldTypeGlobalID: case esriFieldType.esriFieldTypeGUID: case esriFieldType.esriFieldTypeRaster: case esriFieldType.esriFieldTypeXML: break; case esriFieldType.esriFieldTypeOID: case esriFieldType.esriFieldTypeDate: case esriFieldType.esriFieldTypeDouble: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeSingle: case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeString: summary.Fields.Add( new Field() { Name = field.Name, Alias = field.AliasName, Type = field.Type } ); break; default: break; } } // Raise Summary Event this.OnThumbnailSummary(summary); // Loop for each feature foreach (IFeature feat in list) { // Project Extent to Current Map Spatial Reference IEnvelope extentMap = feat.Shape.Envelope.CloneProject(spatialReference); int width; int height; if (extentMap.Width > extentMap.Height) { width = this.MaxImageSize; height = Convert.ToInt32((double)this.MaxImageSize * (double)extentMap.Height / (double)extentMap.Width); } else { width = Convert.ToInt32((double)this.MaxImageSize * (double)extentMap.Width / (double)extentMap.Height); height = this.MaxImageSize; } IMosaicRule mosaicRule = new MosaicRuleClass() { MosaicMethod = esriMosaicMethod.esriMosaicLockRaster, LockRasterID = feat.OID.ToString() }; IGeoImageDescription geoImageDescription = new GeoImageDescriptionClass() { BandSelection = bands.Count > 0 ? bands : null, MosaicRule = mosaicRule, Compression = "PNG", Width = width, Height = height, SpatialReference = spatialReference, Extent = extentMap, Interpolation = rstResamplingTypes.RSP_BilinearInterpolation, }; // Assembly MosaicRequest (will be executed in background thread) MosaicRequest mosaicRequest = new MosaicRequest() { MosaicExtractor = this, ImageServer = imageServer3, GeoImageDescription = geoImageDescription, XMin = extentMap.XMin, YMin = extentMap.YMin, XMax = extentMap.XMax, YMax = extentMap.YMax, }; // Add Attributes Names and Values foreach (Field field in summary.Fields) { int index = feat.Fields.FindField(field.Name); if (index < 0) { continue; } mosaicRequest.Attributes.Add(field.Name, feat.get_Value(index)); } // Start Mosaic Request in Background Thread Thread thread = new Thread(new ThreadStart(mosaicRequest.Execute)); MosaicEnvironment.Default.Threads.Add(thread); thread.Start(); } } catch { } }
public void ProcessAvailableImages(IWatchedFileRepository watchedFileRepository, IImageServer server) { if (_mode.Equals(OperationMode.UploadAndClear)) { throw new NotImplementedException(); } var images = _directoryScanner.GetAvailableImages(watchedFileRepository, _watchPath, _acceptableExtensions, _includeSubDirectories, _sortStrategy); foreach (var image in images.Where(image => image != null)) { try { if (!image.UploadSuccessful && (_mode.Equals(OperationMode.UploadAndClear) || _mode.Equals(OperationMode.UploadOnly) || _mode.Equals(OperationMode.UploadAndSort))) { image.SendToServer(server); watchedFileRepository.Save(image); } if (image.IsInBaseDirectory(_watchPath) && (_mode.Equals(OperationMode.SortOnly) || _mode.Equals(OperationMode.UploadAndSort))) { _log.Debug(string.Format("Beginning sort of file: {0}", image.FullPath)); image.SortFile(); } } catch (IOException ex) { image.UploadSuccessful = false; watchedFileRepository.Save(image); _log.Error("Failed: " + image, ex); } } }