private void OnPhotoInfoReturned(object sender, GetPhotoInfoEventArgs e)
        {
            JObject json = JObject.Parse(e.Response);
            Photo photo = PhotoFactory.PhotoWithPhotoInfoJObject((JObject)json["photo"]);

            // Should add this photo to stream?
            if (e.IsUploadedPhoto)
            {
                // Dispatch event
                UploadedPhotoInfoReturnedEventArgs evt = new UploadedPhotoInfoReturnedEventArgs();
                evt.PhotoId = e.PhotoId;
                UploadedPhotoInfoReturned.DispatchEvent(this, evt);
            }

            var updateEvt = new PhotoInfoUpdatedEventArgs();
            updateEvt.PhotoId = photo.ResourceId;
            PhotoInfoUpdated.DispatchEvent(this, updateEvt);
        }
        // Photo uploaded
        private void OnPhotoUploaded(object sender, UploadedPhotoInfoReturnedEventArgs e)
        {
            Dispatcher.BeginInvoke(() => {
                if (PolicyKit.VioletPageSubscription != PolicyKit.MyStream)
                    return;

                Photo newPhoto = Cinderella.CinderellaCore.PhotoCache[e.PhotoId];
                List<Photo> newPhotos = new List<Photo> { newPhoto };

                List<PhotoGroup> newGroups = rendererFactory.GeneratePhotoGroups(newPhotos);
                PhotoCollection.Insert(0, newGroups[0]);
            });
        }