private void SwitchSelection(PhotoFile currentItem, PhotoFile previousItem)
        {
            if (currentItem != null)
            {
                currentItem.IsSelected = true;
            }

            if (previousItem != null)
            {
                previousItem.IsSelected = false;
            }
        }
        public void CloseEditor()
        {
            if (View != null && View.IsExtendedImageEditorOpened)
            {
                View.CloseExtendedImageEditor();
                return;
            }

            _isOpen = false;
            NotifyOfPropertyChange(() => IsOpen);

            _currentItem = null;
        }
        public static void ImageOpened(PhotoFile photoFile)
        {
            var tuple = _imagesCache.LastOrDefault(x => x.Item1 == photoFile);

            _imagesCache.Remove(tuple);
            if (tuple != null)
            {
                var image = tuple.Item2;
                image.Opacity = 0.0;
                var storyboard = new Storyboard();

                var opacityImageAniamtion = new DoubleAnimationUsingKeyFrames();
                opacityImageAniamtion.KeyFrames.Add(new EasingDoubleKeyFrame {
                    KeyTime = TimeSpan.FromSeconds(0.5), Value = 1.0
                });
                Storyboard.SetTarget(opacityImageAniamtion, image);
                Storyboard.SetTargetProperty(opacityImageAniamtion, new PropertyPath("Opacity"));
                storyboard.Children.Add(opacityImageAniamtion);

                storyboard.Begin();
            }
        }
        public void Delete(PhotoFile file)
        {
            var index = Items.IndexOf(file);

            if (index == -1)
            {
                return;
            }
            Items.RemoveAt(index);
            if (CurrentItem == file)
            {
                if (Items.Count > 1)
                {
                    if (Items.Count > index + 1)
                    {
                        CurrentItem = Items[index];
                    }
                    else
                    {
                        CurrentItem = Items[index - 1];
                    }
                }
                else
                {
                    CurrentItem = null;
                }
            }

            IsDoneEnabled = Items.FirstOrDefault(x => !x.IsButton) != null;
            NotifyOfPropertyChange(() => IsDeleteEnabled);

            if (Items.Count == 1)
            {
                _isOpen = false;
                NotifyOfPropertyChange(() => IsOpen);
            }
        }
 public void SelectMessage(PhotoFile file)
 {
     CurrentItem = file;
 }
        public async Task AddFiles(IList <StorageFile> files)
        {
            IsDoneEnabled = false;

            for (var i = 0; i < files.Count; i++)
            {
                var photoFile = new PhotoFile {
                    File = files[i]
                };
                Items.Insert(Items.Count - 1, photoFile);
            }

            if (CurrentItem == null)
            {
                CurrentItem = Items.FirstOrDefault();
            }
            NotifyOfPropertyChange(() => IsDeleteEnabled);

            var maxCount    = 9;
            var counter     = 0;
            var firstSlice  = new List <PhotoFile>();
            var secondSlice = new List <PhotoFile>();

            foreach (var item in Items)
            {
                if (item.IsButton)
                {
                    continue;
                }

                if (counter > maxCount)
                {
                    secondSlice.Add(item);
                }
                else
                {
                    firstSlice.Add(item);
                }
                counter++;
            }

            //await UpdateThumbnails(firstSlice);

            var count = Items.Count;

            if (count > 2)
            {
                var tasks = new List <Task>();
                for (var i = 0; i < count; i++)
                {
                    var localItem = Items[i];
                    if (localItem.Object != null)
                    {
                        continue;
                    }
                    if (localItem.IsButton)
                    {
                        continue;
                    }

                    var task = Task.Run(() =>
                    {
                        try
                        {
                            var file = localItem.File;
                            if (GetPhotoMessage != null)
                            {
                                var message       = GetPhotoMessage(file);
                                localItem.Message = message;
                            }
                            else
                            {
                                var message = GetDecryptedPhotoMessage(file);
                                localItem.DecryptedTuple = message;
                            }

                            Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
                            {
                                localItem.NotifyOfPropertyChange(() => localItem.Self);
                            });
                        }
                        catch (Exception ex)
                        {
                            Log.Write(ex.ToString());
                        }
                    });
                    tasks.Add(task);
                }

                await Task.WhenAll(tasks);

                if (!IsOpen)
                {
                    return;
                }

                NotifyOfPropertyChange(() => CurrentItem);

                var date = CurrentItem.Date;
                foreach (var item in Items)
                {
                    if (item != null && item.Message != null)
                    {
                        item.Date = date;
                    }
                }

                IsDoneEnabled = true;

                //await UpdateThumbnails(secondSlice);
            }
            else
            {
                IsDoneEnabled = CurrentItem != null && CurrentItem.Object != null;
            }
        }