Пример #1
0
        private static void DoLoad()
        {
            using (var db = MainDb.GetDb)
            {
                var startCollection = db.GetCollection <DbImage>();

                var toRemove = startCollection.FindAll().Where(item => item.AccesDate.AddDays(7) < DateTime.Now).ToList();
                foreach (var dbImage in toRemove)
                {
                    startCollection.Delete(dbImage.Id);
                }

                startCollection = null;
                toRemove        = null;
            }

            while (_inited)
            {
                if (_itemsToLoad.Count == 0)
                {
                    while (!_dataAdded)
                    {
                        Thread.Sleep(1000);
                    }

                    _dataAdded = false;
                }
                else
                {
                    var item = _itemsToLoad[0];
                    _itemsToLoad.RemoveAt(0);

                    using (var db = MainDb.GetDb)
                    {
                        var collection = db.GetCollection <DbImage>();

                        if (collection.Exists(o => o.PeerId == item))
                        {
                            continue;
                        }

                        var link = Peers.GetImageLink(item);
                        if (link == null)
                        {
                            continue;
                        }

                        if (collection.FindOne(o => o.Link == link) != null)
                        {
                            continue;
                        }

                        var dbImage = new DbImage
                        {
                            AccesDate = DateTime.Now,
                            Link      = link,
                            PeerId    = item,
                            Name      = link.Split('?')[0].Split('/').Last()
                        };

                        using (var client = new HttpClient())
                        {
                            var resp   = client.GetAsync(link).Result;
                            var bitmap = (Bitmap)Image.FromStream(resp.Content.ReadAsStreamAsync().Result);
                            bitmap.Save($"{VkDisk.ImageCacheDir}{dbImage.Name}");
                        }

                        collection.Insert(dbImage);
                    }

                    ImageLoaded?.Invoke(item);
                }

                Thread.Sleep(100);
            }
        }