Exemplo n.º 1
0
        public void OpenFloat()
        {
            ReloadData   = false;
            Animate      = true;
            Instructions = "Adding Photo";
            bool HasError = false;

            string eMessage    = string.Empty;
            string eStackTrace = string.Empty;

            string cid = Guid.NewGuid().ToString(); //Temp Client Id

            //Open Dialogue, which allows the user to choose between a photo or video
            if (dialogue != null)
            {
                try
                {
                    CrossMedia.Current.Initialize();
                    var id = Guid.NewGuid().ToString();

                    dialogue.ShowAlert_WithCameraOption("Take or Pick a Photo", "Would you like to take a photo or pick a photo?", async() =>
                    {
                        if (CrossMedia.Current.IsCameraAvailable)
                        {
                            var Photo = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions()
                            {
                                Directory     = "avatar",
                                SaveToAlbum   = false,
                                Name          = "AvatarPhoto.jpg",
                                DefaultCamera = CameraDevice.Rear
                            });

                            if (Photo != null)
                            {
                                var curr = _accountManager.GetSiteUser_ByID <Cross.DataVault.Data.Account>(Constants.InMemory_ContactID);
                                var obj  = new PhotosVideoCellViewModel(navigation, dialogue);

                                obj.Author_DisplayName = String.Format("{0} {1}", curr.FirstName, curr.LastName);
                                obj.ID        = id;
                                obj.Author_ID = curr.Contact_ID_Ref;

                                //Subscriptions
                                obj._DeleteContent += RemovePhoto_FromCollection;

                                obj.Date = $"{DateTime.Now.ToString("m")}, {DateTime.Now.ToString("hh:mm tt")}";
                                obj.Time = DateTime.Now.ToString("hh:mm tt");

                                using (BinaryReader reader = new BinaryReader(Photo.GetStream()))
                                    obj.Photo = reader.ReadBytes((int)Photo.GetStream().Length);

                                //Photo Access Object
                                PhotoVideo item = new PhotoVideo();
                                item.User_ID    = curr.Contact_ID_Ref;
                                item.Photo      = obj.Photo;
                                item.Content_ID = id;

                                item.Author_FirstName   = curr.FirstName;
                                item.Author_LastName    = curr.LastName;
                                item.Author_DisplayName = String.Format("{0} {1}", curr.FirstName, curr.LastName);

                                item.Sys_Creation = DateTime.Now;

                                //Add Photo To Server
                                await Task.Run(() =>
                                {
                                    try
                                    {
                                        Device.BeginInvokeOnMainThread(() => { this.Photos.Add(obj); });
                                        _photoManager.AddPhoto(item);
                                        Constants.Photos_ID = null;

                                        DataVaultWebServiceClient dataService = new DataVaultWebServiceClient(ConfigurationManager.InSecurePublicBinding(), new System.ServiceModel.EndpointAddress(Constants.Data_InSecureUrl));

                                        var response = dataService._AddPhoto(LocalMapper.MapPhoto_ToServer(item)); // Add Photo to Server
                                        if (response.Errors.Count != 0)
                                        {
                                            throw new Exception("Message: " + response.Errors[0]);
                                        }
                                        else
                                        {
                                            Device.BeginInvokeOnMainThread(() =>
                                            {
                                                var photo  = this.Photos.SingleOrDefault(w => w.ID.Equals(cid));
                                                photo.ID   = response.Content_ID;
                                                ReloadData = true;
                                            });
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        HasError = true;

                                        if (ex.InnerException != null)
                                        {
                                            eMessage    = ex.InnerException.Message;
                                            eStackTrace = ex.InnerException.StackTrace;
                                        }
                                        else
                                        {
                                            eMessage    = ex.Message;
                                            eStackTrace = ex.StackTrace;
                                        }

                                        var mEx = new Exceptions(logging, eMessage, eStackTrace);
                                        if (mEx != null)
                                        {
                                            mEx.HandleException(mEx, logging);
                                        }
                                    }
                                }).ContinueWith((e) =>
                                {
                                    Device.BeginInvokeOnMainThread(() =>
                                    {
                                        Animate = false;

                                        //Output a dialogue here
                                        //if (dialogue != null && HasError)
                                        //    dialogue.ShowAlert("mmm...Something went wrong", eMessage);
                                    });
                                });
                            }
                            else
                            {
                                Device.BeginInvokeOnMainThread(() => { Animate = false; });
                            }
                        }
                        else
                        {
                            var PickPhoto = await CrossMedia.Current.PickPhotoAsync(new PickMediaOptions()
                            {
                            });
                            if (PickPhoto != null)
                            {
                                var curr = _accountManager.GetSiteUser_ByID <Cross.DataVault.Data.Account>(Constants.InMemory_ContactID);
                                var obj  = new PhotosVideoCellViewModel(navigation, dialogue);
                                obj.Author_DisplayName = String.Format("{0} {1}", curr.FirstName, curr.LastName);
                                obj.ID        = id;
                                obj.Author_ID = curr.Contact_ID_Ref;

                                if (string.IsNullOrWhiteSpace(obj.Author_DisplayName))
                                {
                                    obj.Author_DisplayName = curr.SiteUser_DisplayName;
                                }

                                obj.Date = $"{DateTime.Now.ToString("m")}, {DateTime.Now.ToString("hh:mm tt")}";
                                obj.Time = DateTime.Now.ToString("hh:mm tt");

                                //Subscriptions
                                obj._DeleteContent += RemovePhoto_FromCollection;

                                //Photo
                                using (BinaryReader reader = new BinaryReader(PickPhoto.GetStream()))
                                    obj.Photo = reader.ReadBytes((int)PickPhoto.GetStream().Length);

                                //Photo Access Object
                                PhotoVideo item = new PhotoVideo();
                                item.User_ID    = curr.Contact_ID_Ref;
                                item.Content_ID = id;

                                item.Author_FirstName   = curr.FirstName;
                                item.Author_LastName    = curr.LastName;
                                item.Author_DisplayName = String.Format("{0} {1}", curr.FirstName, curr.LastName);

                                item.Photo        = obj.Photo;
                                item.Sys_Creation = DateTime.Now;

                                //Add Photo To Server
                                await Task.Run(() =>
                                {
                                    try
                                    {
                                        Device.BeginInvokeOnMainThread(() => { this.Photos.Add(obj); });
                                        _photoManager.AddPhoto(item);
                                        Constants.Photos_ID = null;

                                        DataVaultWebServiceClient dataService = new DataVaultWebServiceClient(ConfigurationManager.InSecurePublicBinding(), new System.ServiceModel.EndpointAddress(Constants.Data_InSecureUrl));

                                        var response = dataService._AddPhoto(LocalMapper.MapPhoto_ToServer(item)); // Add Photo to Server
                                        if (response.Errors.Count != 0)
                                        {
                                            throw new Exception("Message: " + response.Errors[0]);
                                        }
                                        else
                                        {
                                            Device.BeginInvokeOnMainThread(() =>
                                            {
                                                var photo  = this.Photos.SingleOrDefault(w => w.ID.Equals(cid));
                                                photo.ID   = response.Content_ID;
                                                ReloadData = true;
                                            });
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        HasError = true;
                                        if (ex.InnerException != null)
                                        {
                                            eMessage    = ex.InnerException.Message;
                                            eStackTrace = ex.InnerException.StackTrace;
                                        }
                                        else
                                        {
                                            eMessage    = ex.Message;
                                            eStackTrace = ex.StackTrace;
                                        }
                                        var mEx = new Exceptions(logging, eMessage, eStackTrace);
                                        if (mEx != null)
                                        {
                                            mEx.HandleException(mEx, logging);
                                        }

                                        //Output a dialogue here
                                    }
                                }).ContinueWith((e) =>
                                {
                                    Device.BeginInvokeOnMainThread(() =>
                                    {
                                        Animate = false;

                                        //if (dialogue != null && HasError)
                                        //    dialogue.ShowAlert("mmm...Something went wrong", eMessage);
                                    });
                                });
                            }
                            else
                            {
                                Device.BeginInvokeOnMainThread(() => { Animate = false; });
                            }
                        }
                    }, async() =>
                    {
                        var PickPhoto = await CrossMedia.Current.PickPhotoAsync(new PickMediaOptions()
                        {
                        });

                        if (PickPhoto != null)
                        {
                            var curr = _accountManager.GetSiteUser_ByID <Cross.DataVault.Data.Account>(Constants.InMemory_ContactID);
                            var obj  = new PhotosVideoCellViewModel(navigation, dialogue);
                            obj.Author_DisplayName = String.Format("{0} {1}", curr.FirstName, curr.LastName);
                            obj.ID        = id;
                            obj.Author_ID = curr.Contact_ID_Ref;

                            if (string.IsNullOrWhiteSpace(obj.Author_DisplayName))
                            {
                                obj.Author_DisplayName = curr.SiteUser_DisplayName;
                            }

                            //Subscriptions
                            obj._DeleteContent += RemovePhoto_FromCollection;

                            obj.Date = $"{DateTime.Now.ToString("m")}, {DateTime.Now.ToString("hh:mm tt")}";
                            obj.Time = DateTime.Now.ToString("hh:mm tt");

                            //Photo
                            using (BinaryReader reader = new BinaryReader(PickPhoto.GetStream()))
                                obj.Photo = reader.ReadBytes((int)PickPhoto.GetStream().Length);

                            //Photo Access Object
                            PhotoVideo item = new PhotoVideo();
                            item.User_ID    = curr.Contact_ID_Ref;
                            item.Content_ID = id;

                            item.Author_FirstName   = curr.FirstName;
                            item.Author_LastName    = curr.LastName;
                            item.Author_DisplayName = String.Format("{0} {1}", curr.FirstName, curr.LastName);

                            item.Photo        = obj.Photo;
                            item.Sys_Creation = DateTime.Now;

                            //Add Photo To Server
                            await Task.Run(() =>
                            {
                                try
                                {
                                    Device.BeginInvokeOnMainThread(() => { this.Photos.Add(obj); });
                                    _photoManager.AddPhoto(item);
                                    Constants.Photos_ID = null;

                                    DataVaultWebServiceClient dataService = new DataVaultWebServiceClient(ConfigurationManager.InSecurePublicBinding(), new System.ServiceModel.EndpointAddress(Constants.Data_InSecureUrl));

                                    var response = dataService._AddPhoto(LocalMapper.MapPhoto_ToServer(item)); // Add Photo to Server
                                    if (response.Errors.Count != 0)
                                    {
                                        throw new Exception("Message: " + response.Errors[0]);
                                    }
                                    else
                                    {
                                        Device.BeginInvokeOnMainThread(() =>
                                        {
                                            var photo  = this.Photos.SingleOrDefault(w => w.ID.Equals(cid));
                                            photo.ID   = response.Content_ID;
                                            ReloadData = true;
                                        });
                                    }
                                }
                                catch (Exception ex)
                                {
                                    HasError = true;
                                    if (ex.InnerException != null)
                                    {
                                        eMessage    = ex.InnerException.Message;
                                        eStackTrace = ex.InnerException.StackTrace;
                                    }
                                    else
                                    {
                                        eMessage    = ex.Message;
                                        eStackTrace = ex.StackTrace;
                                    }
                                    var mEx = new Exceptions(logging, eMessage, eStackTrace);
                                    if (mEx != null)
                                    {
                                        mEx.HandleException(mEx, logging);
                                    }
                                }
                            }).ContinueWith((e) =>
                            {
                                Device.BeginInvokeOnMainThread(() =>
                                {
                                    Animate = false;
                                    //if (dialogue != null && HasError)
                                    //    dialogue.ShowAlert("mmm...Something went wrong", eMessage);
                                });
                            });
                        }
                        else
                        {
                            Device.BeginInvokeOnMainThread(() => { Animate = false; });
                        }
                    });
                }
                catch (Exception ex)
                {
                    HasError = true;
                    string pMessage    = string.Empty;
                    string pStackTrace = string.Empty;

                    if (ex.InnerException != null)
                    {
                        pMessage    = ex.InnerException.Message;
                        pStackTrace = ex.InnerException.StackTrace;
                    }
                    else
                    {
                        pMessage    = ex.Message;
                        pStackTrace = ex.StackTrace;
                    }

                    var mEx = new Exceptions(logging, pMessage, pStackTrace);
                    if (mEx != null)
                    {
                        mEx.HandleException(mEx, logging);
                    }

                    //Output a dialogue here
                    //if (dialogue != null && HasError)
                    //    dialogue.ShowAlert("mmm...Something went wrong", mEx.Message);
                }
            }
        }