コード例 #1
0
ファイル: MainFrmLogic.cs プロジェクト: HeshamMeneisi/Freefy
        private async Task Scrap(int index)
        {
            SetStatus("Scraping Images...");

            Size minSize = new Size(Settings.Default.MinWidth, Settings.Default.MinHeight);

            ImageScraper.GetImageURLs(urls[index].URL, async(imgUrl, size) =>
            {
                if (imgUrl == null)
                {
                    SetStatus("Idle");
                    return;
                }
                if ((size.Width > 0 && size.Width < minSize.Width) || (size.Height > 0 && size.Height < minSize.Height))
                {
                    return;
                }
                ImageWrapper iw;
                if (!Cache.Lookup(imgUrl, out iw))
                {
                    iw = new ImageWrapper(imgUrl);
                    iw.RecommendationMade += recMade;
                    Cache.Stash(imgUrl, iw);
                }
                await iw.RetrieveLabels();
                await iw.RetrieveMatches();
                urls[index].AddChild(iw);
            });
        }
コード例 #2
0
ファイル: Wrappers.cs プロジェクト: HeshamMeneisi/Freefy
 public void AddChild(ImageWrapper w)
 {
     if (children == null)
     {
         children = new BindingList <ImageWrapper>();
     }
     children.Add(w);
     ChildrenUpdated?.Invoke(this);
 }
コード例 #3
0
ファイル: MainFrmLogic.cs プロジェクト: HeshamMeneisi/Freefy
        private async Task SetSelectedURL(int index)
        {
            if (index < urls.Count)
            {
                selectedUrlIndex = index;
                urlGrid.Enabled  = imgList.Enabled = false;
                string url = urls[index].URL;
                if (urls[index].GetChildren() == null && HttpHelper.IsImage(url))
                {
                    ImageWrapper iw;
                    if (!Cache.Lookup(url, out iw))
                    {
                        SetStatus("Scraping Image...");
                        iw = new ImageWrapper(url);
                        Cache.Stash(url, iw);
                        SetStatus("Idle");
                    }
                    else
                    {
                        SetStatus("Cache hit!");
                    }

                    urls[index].AddChild(iw);
                    iw.RecommendationMade += recMade;
                    await iw.RetrieveLabels();
                }
                else
                {
                    if (urls[index].GetChildren() == null)
                    {
                        await Scrap(index);
                    }
                    else
                    {
                        imgList.DataSource = urls[index].GetChildren();
                        await SetSelectedImg(0);
                    }
                }
                imgList.DataSource = urls[index].GetChildren();
                urlGrid.Enabled    = imgList.Enabled = true;
            }
        }
コード例 #4
0
ファイル: MainFrmLogic.cs プロジェクト: HeshamMeneisi/Freefy
        private string GetFileName(string path, List <IWMatch> matches, ImageWrapper original)
        {
            string[]      files = Directory.GetFiles(path);
            List <string> taken = new List <string>();

            taken.AddRange(matches.Select(iw => iw.FilePrefix));

            string name = string.Join("_", original.GetLabels().Take(2).Select(x => x.Label));

            if (!taken.Contains(name))
            {
                return(name);
            }

            int i = 1;

            while (taken.Contains(name + "(" + i + ")"))
            {
                i++;
            }

            return(name + "(" + i + ")");
        }
コード例 #5
0
ファイル: Wrappers.cs プロジェクト: HeshamMeneisi/Freefy
        public async Task RetrieveMatches()
        {
            while (retrievingLabels)
            {
                ;
            }
            if (retrievingSimilar || labels == null)
            {
                return;
            }
            retrievingSimilar = true;
            var list = new List <string>();

            list.AddRange(labels.Select(l => l.Label));
            bool skip  = false;
            var  flist = new List <string>();

            foreach (string fl in FileLabels.Split(' ').Take(Settings.Default.FileNameLabels))
            {
                foreach (string label in list)
                {
                    if (label.Contains(fl))
                    {
                        skip = true;
                        break;
                    }
                }
                if (skip)
                {
                    break;
                }
                flist.Add(fl);
            }
            if (!skip)
            {
                list.AddRange(flist);
            }

            await ImageLookup.GetSimilar(list.ToArray(), async (imgUrl, size) =>
            {
                if (imgUrl == null)
                {
                    similarRetrieved = true;

                    if (Labeler.CurrentLabeler.CanRecommend)
                    {
                        var thread = new Thread(() =>
                        {
                            var r = Labeler.GetRecommended(img, matches.Take(Settings.Default.RecCap).Select(i => i.GetFullImage()).ToArray()).Result;
                            SetSelectedMatch(r);
                            RecommendationMade?.Invoke(this);
                        });
                        thread.Start();
                    }

                    retrievingSimilar = false;
                    return;
                }
                //if (size.Width < Settings.Default.MinWidth && size.Height < Settings.Default.MinHeight) return;
                ImageWrapper iw;
                if (!Cache.Lookup(imgUrl, out iw))
                {
                    iw = new ImageWrapper(imgUrl);
                    Cache.Stash(imgUrl, iw);
                }
                matches.Add(iw);
                SimilarFound?.Invoke(this);
            });
        }