/// <summary> /// Invoked when the camera icon is clicked. /// </summary> /// <param name="obj">The object</param> private async void CameraClicked(object obj) { try { int userid = Preferences.Get("UserID", 0); if (!await JobMePermissions.CameraPermission()) { return; } var mediaOptions = new StoreCameraMediaOptions() { SaveToAlbum = false, Directory = "Sample", PhotoSize = Device.RuntimePlatform == Device.Android?PhotoSize.Full: PhotoSize.Medium, DefaultCamera = Plugin.Media.Abstractions.CameraDevice.Front, RotateImage = false, CompressionQuality = 80, AllowCropping = true, SaveMetaData = false, }; //options.CompressionQuality = 50; var photo = await CrossMedia.Current.TakePhotoAsync(mediaOptions); if (photo != null) { var ext = photo.Path.Split('.').Last(); var stream = photo.GetStreamWithImageRotatedForExternalStorage(); var bytes = ImageHelper.ReadFully(stream); var base64Photo = Convert.ToBase64String(bytes); string myfoto = base64Photo; string fname = Path.GetFileName(photo.Path); string To = string.Empty; //mensaje para enviar var message = new PhotoMessage(ProfileName) { Base64Photo = base64Photo, FileEnding = fname, Recipient = ChatDetail.ContactID.ToString(), Avatar = userid.ToString(), Color = ChatDetail.IDPosition.ToString(), }; //mensaje para mostrar JobMe.Models.Chat.ChatMessage msg = new JobMe.Models.Chat.ChatMessage() { Time = DateTime.Now, ContactID = ChatDetail.ContactID, UserID = ChatDetail.UserID, IDPosition = ChatDetail.IDPosition, IsReceived = false, Base64Photo = photo.Path, ImageUrl = EndPoint.BLOB_ENDPOINT + fname, IsImage = true }; //Este mensaje es el que se agrega a la lista ChatMessageInfo.Add(msg); //Verifica que este conectado al hub if (!App.ChatService1.IsConnected) { App.ChatService1 = new TheChat.Core.Services.ChatService(); if (Preferences.Get("UserID", 0) > 0) { await App.ChatService1.InitAsync(Preferences.Get("UserID", 0).ToString()); } } //Este es el mensaje que se envia al hub await App.ChatService1.SendMessageAsync(message); if (Preferences.Get("UserType", 0) == 1) //Employee { Task.Run(() => Services.PushNotifications.PushServices.SendPushAsync(ChatDetail.ContactID, Preferences.Get("Name", string.Empty), "📷 Imagen", "chat")); } else { Task.Run(() => Services.PushNotifications.PushServices.SendPushAsync(ChatDetail.ContactID, Preferences.Get("Company", string.Empty), "📷 Imagen", "chat")); } //Esto es para agregarlo a la base de datos await Services.Chat.ChatService.AddMessageAsync(msg); //Ocultar el teclado en ios MessagingCenter.Send <ChatMessageViewModel, string>(this, "FocusKeyboardStatus", "nada"); } // UserDialogs.Instance.HideLoading(); } catch (Exception ex) { await App.Current.MainPage.DisplayAlert("JobMe", ex.Message, "ok"); //throw; } }
private async void VideoClicked(object obj) { int userid = Preferences.Get("UserID", 0); try { if (!await JobMePermissions.CameraPermission()) { return; } await CrossMedia.Current.Initialize(); //var photo = await CrossMedia.Current.PickVideoAsync(); var photo = await CrossMedia.Current.TakeVideoAsync(new StoreVideoOptions { SaveToAlbum = false, Quality = Device.RuntimePlatform == Device.Android?VideoQuality.High:VideoQuality.Medium, CompressionQuality = 90, DefaultCamera = CameraDevice.Front, Directory = "Media", Name = "video.mp4", }); // var photo = await CrossMedia.Current.TakeVideoAsync(mediaOptions); string fname = string.Empty; string myfilename = string.Empty; if (photo != null) { //var stream = photo.GetStream(); FileInfo fi; UserDialogs.Instance.ShowLoading("Uploading video"); switch (Device.RuntimePlatform) { case Device.iOS: fi = new FileInfo(photo.Path); string extn = fi.Extension; var newname = photo.Path.Replace(extn, ".mp4"); fname = DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Year.ToString() + DateTime.Now.Millisecond.ToString() + "video.mp4"; await UserService.UploadVideo(photo, Preferences.Get("UserID", 0).ToString() + "_" + fname); //fname = Path.GetFileName(photo.Path); myfilename = Preferences.Get("UserID", 0).ToString() + "_" + fname.Split('.').First(); break; case Device.Android: //Stream stream = null; fname = DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Year.ToString() + DateTime.Now.Millisecond.ToString() + "video.mp4"; try { UserDialogs.Instance.ShowLoading("Compressing video"); string compressedfile = await DependencyService.Get <IVideoCompress>().CompressVideo(photo.Path); Stream stream = File.Open(compressedfile, FileMode.Open, System.IO.FileAccess.ReadWrite); await UserService.UploadVideo(stream, Preferences.Get("UserID", 0).ToString() + "_" + fname); } catch (Exception) { await UserService.UploadVideo(photo, Preferences.Get("UserID", 0).ToString() + "_" + fname); //throw; } break; default: break; } myfilename = Preferences.Get("UserID", 0).ToString() + "_" + fname.Split('.').First(); MemoryStream imagen = DependencyService.Get <IVideoBitMap>().GenerateThumbImage(photo.Path, 2); //var bytes = ImageHelper.ReadFully(imagen); var base64Photo = Convert.ToBase64String(imagen.ToArray()); string To = string.Empty; //mensaje para enviar var message = new VideoMessage(ProfileName) { Base64Photo = base64Photo, FileEnding = myfilename + ".jpg", Recipient = ChatDetail.ContactID.ToString(), //VideoUrl = EndPoint.BACKEND_ENDPOINT + "/uploads/" +fname, VideoUrl = EndPoint.BACKEND_ENDPOINT + "/uploads/" + myfilename + ".mp4", VideoImage = EndPoint.BLOB_ENDPOINT + myfilename + ".jpg", IsVideo = true, Avatar = userid.ToString(), Color = ChatDetail.IDPosition.ToString(), }; //Verificar que esta conectado al HUb if (!App.ChatService1.IsConnected) { App.ChatService1 = new TheChat.Core.Services.ChatService(); if (Preferences.Get("UserID", 0) > 0) { await App.ChatService1.InitAsync(Preferences.Get("UserID", 0).ToString()); } } //Este es el mensaje que se envia al hub await App.ChatService1.SendMessageAsync(message); UserDialogs.Instance.HideLoading(); //mensaje para mostrar JobMe.Models.Chat.ChatMessage msg = new JobMe.Models.Chat.ChatMessage() { Time = DateTime.Now, ContactID = ChatDetail.ContactID, UserID = ChatDetail.UserID, IDPosition = ChatDetail.IDPosition, IsReceived = false, Base64Photo = base64Photo, ImageUrl = EndPoint.BLOB_ENDPOINT + myfilename + ".jpg", VideoUrl = EndPoint.BACKEND_ENDPOINT + "/uploads/" + myfilename + ".mp4", IsVideo = true }; if (Preferences.Get("UserType", 0) == 1) //Employee { Task.Run(() => Services.PushNotifications.PushServices.SendPushAsync(ChatDetail.ContactID, Preferences.Get("Name", string.Empty), "📹 Video", "chat")); } else { Task.Run(() => Services.PushNotifications.PushServices.SendPushAsync(ChatDetail.ContactID, Preferences.Get("Company", string.Empty), "📹 Video", "chat")); } //Esto es para agregarlo a la base de datos await Services.Chat.ChatService.AddMessageAsync(msg); //Este mensaje es el que se agrega a la lista ChatMessageInfo.Add(msg); //Ocultar el teclado en ios //MessagingCenter.Send<ChatMessageViewModel, string>(this, "FocusKeyboardStatus", "nada"); } // UserDialogs.Instance.HideLoading(); } catch (Exception ex) { string errmsg; if (ex.HResult == -2146233029) { errmsg = "La operación tardo demasiado, verifica tu conexión a internet"; } else { errmsg = "No se pudo enviar el video, intenta nuevamente"; } await App.Current.MainPage.DisplayAlert("JobMe", errmsg, "ok"); UserDialogs.Instance.HideLoading(); //throw; } }