public void LinkAllImages(EnhancedFileInfo file)
 {
     for (int imageSearchesPos = 0; imageSearchesPos < this.imageSearches.Count; imageSearchesPos++)
     {
         this.LinkImages(file, this.ImageSearches[imageSearchesPos]);
     }
 }
        /// <summary>
        /// Adds an EnhancedFileInfo object to the FilesQueue
        /// </summary>
        /// <param name="file">The EnhancedFileInfo object to be added</param>
        public void Enqueue(EnhancedFileInfo file)
        {
            lock (((ICollection)_files).SyncRoot)
            {
                _files.Enqueue(file);
            }

            _totalFiles++;

            if ((_import.Importer.ChainingOption
                != ChainOption.ChainByTags) || (file == null))
            {
                _waitHandle.Set();
            }
        }
        /// <summary>
        /// Adds an array of EnhancedFileInfo objects to the FilesQueue
        /// </summary>
        /// <param name="files">The array of EnhancedFileInfo objects to be added</param>
        public void Enqueue(EnhancedFileInfo[] files)
        {
            if (files.Length <= 0) return;

            lock (((ICollection)_files).SyncRoot)
            {
                foreach (EnhancedFileInfo t in files)
                {
                    _files.Enqueue(t);
                }

                _totalFiles += files.Length;
            }
        }
        public void LinkImages(EnhancedFileInfo file, ImageSearchOptions searchOptions)
        {
            this.LogMessages.Enqueue(new LogMessage("Info", "  Searching images"));
            if (searchOptions.ImageTagName.Length > 0)
            {
                file.Item.Tags[searchOptions.ImageTagName] = string.Empty;
            }
            if (searchOptions.ImageTagName.Length == 0 || searchOptions.SaveInImageBaseTag)
            {
                file.Item.ImageFile = string.Empty;
            }

            List<string> imagePaths = new List<string>();
            EnhancedFileInfo tmpFile = file;
            string[] parameter =
                searchOptions.ImageFolderSearchPattern.Split(';').Select(mask => MLItem.EvaluateTagValues(mask, tmpFile.Item)).
                    ToArray();
            string evaluatedImageFileMasks = string.Join(":", parameter);
            this.LogMessages.Enqueue(new LogMessage("Info", "    in the image folder"));
            imagePaths.AddRange(this.CachedImages.Query(searchOptions.ImageFolder, evaluatedImageFileMasks));
            bool shouldSearchInFileFolder = (searchOptions.SearchFileFolderOptions == "Always".Translate()) ||
                                            ((searchOptions.SearchFileFolderOptions ==
                                             "When no linked files in links rootfolder".Translate()) && (imagePaths.Count == 0));
            if (shouldSearchInFileFolder)
            {
                string[] parameter2 =
                    searchOptions.FileFolderSearchPattern.Split(';').Select(
                        mask => MLItem.EvaluateTagValues(mask, tmpFile.Item)).ToArray();
                evaluatedImageFileMasks = string.Join(":", parameter2);
                this.LogMessages.Enqueue(new LogMessage("Info", "    in the files folder"));
                imagePaths.AddRange(
                    this.CachedImages.Query(file.FileInformation.DirectoryName, evaluatedImageFileMasks));
            }

            if ((searchOptions.MaxImages > 0) && (imagePaths.Count > searchOptions.MaxImages))
            {
                imagePaths.RemoveRange(searchOptions.MaxImages, imagePaths.Count - searchOptions.MaxImages);
            }

            if (imagePaths.Count > 0)
            {
                this.LogMessages.Enqueue(new LogMessage("Info", "    Writing image tag(s)"));
                MLTag imageFile = new MLTag("ImageFile", string.Empty);
                foreach (string image in imagePaths)
                {
                    imageFile.Values.Add(image);
                }

                if (searchOptions.ImageTagName.Equals(string.Empty))
                {
                    file.Item.ImageFile = imageFile.Value;
                }
                else
                {
                    file.Item.Tags[searchOptions.ImageTagName] = imageFile.Value;
                    if (searchOptions.SaveInImageBaseTag)
                    {
                        file.Item.Tags["imagefile"] = imageFile.Values[0];
                        file.Item.ImageFile = imageFile.Values[0];
                    }
                }

                this.LogMessages.Enqueue(new LogMessage("Info", "    ..Done writing image tag(s)"));
            }
        }