/// <summary>
        /// Test non-serializable filter behavior.
        /// </summary>
        /// <param name="loc"></param>
        protected void CheckFilterNonSerializable(bool loc)
        {
            AbstractFilter <BinarizableEntry> .unmarshErr = true;

            ICacheEntryEventListener <int, BinarizableEntry> lsnr   = new Listener <BinarizableEntry>();
            ICacheEntryEventFilter <int, BinarizableEntry>   filter = new LocalFilter();

            ContinuousQuery <int, BinarizableEntry> qry = loc
                ? new ContinuousQuery <int, BinarizableEntry>(lsnr, filter, true)
                : new ContinuousQuery <int, BinarizableEntry>(lsnr, filter);

            if (loc)
            {
                using (cache1.QueryContinuous(qry))
                {
                    // Local put must be fine.
                    int key1 = PrimaryKey(cache1);
                    cache1.GetAndPut(key1, Entry(key1));
                    CheckFilterSingle(key1, null, Entry(key1));
                }
            }
            else
            {
                Assert.Throws <BinaryObjectException>(() =>
                {
                    using (cache1.QueryContinuous(qry))
                    {
                        // No-op.
                    }
                });
            }
        }
예제 #2
0
        public static LocalFilter ToLocalFilter(this FilterItemViewModel filterItemViewModel)
        {
            var localFilter = new LocalFilter();

            localFilter.Id               = filterItemViewModel.FilterId;
            localFilter.Type             = filterItemViewModel.SettingsItemName;
            localFilter.IsActive         = filterItemViewModel.IsChecked;
            localFilter.FilterItems      = new List <LocalFilterItem>();
            localFilter.ItemsToDeleteIds = filterItemViewModel.itemsToDelete;
            //var selectedItems = new List<LocalFilterItem>();
            foreach (var selectedItemTileViewModel in filterItemViewModel.SelectedItemTileViewModels)
            {
                var fI = new LocalFilterItem()
                {
                    Id   = selectedItemTileViewModel.Id,
                    Name = selectedItemTileViewModel.Name
//                        filterItemViewModel.SettingsItems.FirstOrDefault(item => item.Id == selectedItemTileViewModel.Id)
//                            .Name
                };
                localFilter.FilterItems.Add(fI);
            }
//            foreach (var settingsItem in filterItemViewModel.SettingsItems)
//            {
//                localFilter.FilterItems.Add(new LocalFilterItem()
//                {
//                    Name = settingsItem.Name
//                });
//            }
            return(localFilter);
        }
예제 #3
0
 public void SetFIlterItem(LocalFilter localFilter)
 {
     foreach (var localFilterItem in localFilter.FilterItems)
     {
         var settingItem = SettingsItems.FirstOrDefault(item => item.Name == localFilterItem.Name);
         if (settingItem != null)
         {
             AddSelected(settingItem.Name, localFilterItem.Id);
         }
     }
     IsChecked = localFilter.IsActive;
     FilterId  = localFilter.Id;
     Parent.HasChanged(false);
 }
예제 #4
0
        public static LocalFilter ToLocalFilter(this Filter from)
        {
            var localFilter = new LocalFilter
            {
                Id       = from.Id,
                IsActive = from.IsActive,
                Type     = from.FilterType.Name
            };

            localFilter.FilterItems = new List <LocalFilterItem>();
            foreach (var filterItem in from.FilterItems)
            {
                localFilter.FilterItems.Add(filterItem.ToLocalFilterItem());
            }
            return(localFilter);
        }
예제 #5
0
        /// <summary>
        /// <see cref="IHandler{T,K}.FetchContent(x,string,x,ICollection{string})"/>
        /// </summary>
        public override async Task FetchContent(LocalDirectory parsedSource, string targetFolder, LocalFilter filter, ICollection <string> outputLog)
        {
            await Task.Run(async() =>
            {
                if (parsedSource.GetImages() != null)
                {
                    outputLog.Add($"Starting filtering of {parsedSource.GetImages().Count()} images.");

                    var sync = new object();

                    foreach (var image in parsedSource.GetImages().Where(image => image != null).AsParallel())
                    {
                        var imageName = Filenamer.Clean(await image.GetImageName());

                        try
                        {
                            if (filter(await image.GetHeight(), await image.GetWidth(), await image.GetAspectRatio()))
                            {
                                var path = Filenamer.DetermineUniqueFilename(Path.Combine(targetFolder, imageName));

                                File.WriteAllBytes(path, await image.GetImage());

                                lock (sync)
                                {
                                    outputLog.Add($"Image copied: {imageName}");
                                    image.Dispose();
                                }
                            }
                            else
                            {
                                lock (sync)
                                {
                                    outputLog.Add($"Image skipped: {imageName}");
                                    image.Dispose();
                                }
                            }
                        }
                        catch (IOException)
                        {
                            lock (sync)
                            {
                                outputLog.Add($"IO Failure - Error occured while saving or loading image: {imageName}");
                                image.Dispose();
                            }
                        }
                    }
                }

                outputLog.Add("Filtering finished.");
            });
        }
예제 #6
0
        /// <summary>
        /// <see cref="IHandler{T,K}.FetchContent(x,string,x,ICollection{string})"/>
        /// </summary>
        public override async Task FetchContent(LocalDirectory parsedSource, string targetFolder, LocalFilter filter, ICollection <string> outputLog, bool saveNestedCollectionsInNestedFolders = false)
        {
            await Task.Run(() =>
            {
                if (parsedSource.GetImages() != null)
                {
                    outputLog.Add($"Starting filtering of {parsedSource.GetImages().Count()} images.");

                    var sync = new object();
                    //Limit degree of parallelism to avoid sending too many http-requests at the same time.
                    //  8 seems like a reasonable amount of requests to have in-flight at a time.
                    var parallelOptions = new ParallelOptions {
                        MaxDegreeOfParallelism = 8
                    };

                    Parallel.ForEach(parsedSource.GetImages().Where(image => image != null), parallelOptions, image =>
                    {
                        var localTargetFolder = targetFolder;
                        if (saveNestedCollectionsInNestedFolders)
                        {
                            var path = Path.GetDirectoryName(image.ImagePath);
                            if (!string.IsNullOrWhiteSpace(path))
                            {
                                Debug.Assert(parsedSource.Directory.Length <= path.Length, $"Directory length longer than path.\nDirectory: {parsedSource.Directory}\nPath: {path}");
                                Debug.Assert(path.Substring(0, parsedSource.Directory.Length) == parsedSource.Directory, $"Directory doesn't exist in image path.\nDirectory: {parsedSource.Directory}\nPath: {path}");

                                var sourceDir    = new DirectoryInfo(parsedSource.Directory);
                                var innerFolders = new List <string>();
                                var innerFolder  = new DirectoryInfo(path);
                                while (sourceDir.FullName != innerFolder?.FullName)
                                {
                                    innerFolders.Add(innerFolder.Name);
                                    innerFolder = innerFolder.Parent;
                                }

                                innerFolders.Add(targetFolder);
                                innerFolders.Reverse();
                                localTargetFolder = Path.Combine(innerFolders.ToArray());
                            }
                        }

                        using (image)
                        {
                            var imageName = Filenamer.Clean(image.GetImageName().Result);

                            try
                            {
                                if (filter(image.GetHeight().Result, image.GetWidth().Result, image.GetAspectRatio().Result))
                                {
                                    //Dont create the folder unless we actually have something to save in it.
                                    if (!Directory.Exists(localTargetFolder))
                                    {
                                        Directory.CreateDirectory(localTargetFolder);
                                    }

                                    var path = Filenamer.DetermineUniqueFilename(Path.Combine(localTargetFolder, imageName));
                                    File.WriteAllBytes(path, image.GetImage().Result);
                                    WriteToLog(sync, outputLog, $"Image copied: {imageName}");
                                }
                                else
                                {
                                    WriteToLog(sync, outputLog, $"Image skipped: {imageName}");
                                }
                            }
                            catch (IOException)
                            {
                                WriteToLog(sync, outputLog, $"IO Failure - Error occured while saving or loading image: {imageName}");
                            }
                        }
                    });
                }

                outputLog.Add("Filtering finished.");
            });
        }