private void CreateAppFolder() { Google.Apis.Drive.v3.DriveService service = GoogleDriveFiles.GetDriveService(); bool isRootFolderExists = GoogleDriveFiles.CheckFolder(OAuthConstants.AppName, service); if (isRootFolderExists == false) { GoogleDriveFiles.CreateAppFolder(OAuthConstants.AppName, service); } FilesResource.ListRequest listRequest = service.Files.List(); IList <Google.Apis.Drive.v3.Data.File> mfiles = listRequest.Execute().Files; foreach (var file in mfiles) { if (file.Name == OAuthConstants.AppName) { LFLens.Helpers.Settings.RootFolderID = file.Id; } if (file.Name == OAuthConstants.PhotosFolderName) { LFLens.Helpers.Settings.PhotosFolderID = file.Id; } } }
private async void GalleryBtn_Clicked(object sender, EventArgs e) { try { if (!CrossMedia.Current.IsPickPhotoSupported) { await DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK"); return; } var photo = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions { PhotoSize = Plugin.Media.Abstractions.PhotoSize.Small, SaveMetaData = true, RotateImage = true }); if (photo == null) { return; } var imgSource = ImageSource.FromStream(() => { return(photo.GetStream()); }); imgChoosen.Source = imgSource; string filepath = photo.Path; this.IsBusy = true; string FileName = Path.GetFileName(filepath); byte[] getByte = GetImageAsByteArray(photo.GetStream()); ByteArrayContent content = new ByteArrayContent(getByte); if (LFLens.Helpers.Settings.StoreHistory == true) { Google.Apis.Drive.v3.DriveService service = GoogleDriveFiles.GetDriveService(); if (string.IsNullOrEmpty(LFLens.Helpers.Settings.RootFolderID) && string.IsNullOrEmpty(LFLens.Helpers.Settings.PhotosFolderID)) { CreateAppFolder(); } string PhotosFolderID = LFLens.Helpers.Settings.PhotosFolderID; var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = string.Format("LFLens_{0}.jpg", DateTime.Now.ToString("yyyyMMdd_HHmmss")), Parents = new List <string>() { PhotosFolderID } }; FilesResource.CreateMediaUpload request; request = service.Files.Create( fileMetadata, photo.GetStream(), "image/jpeg"); request.Fields = "id"; request.Upload(); var driveFile = request.ResponseBody; strDriveFileID = driveFile.Id; } await MakeAnalysisRequest(content, FileName, filepath, strDriveFileID); } catch (Exception ex) { string test = ex.Message; await DisplayAlert(null, ex.Message, "OK"); } }
public async Task MakeAnalysisRequest(ByteArrayContent content, string FileName, string filepath, string DriveFileID) { try { HttpClient client = new HttpClient(); // Request headers. client.DefaultRequestHeaders.Add( "Ocp-Apim-Subscription-Key", OAuthConstants.subscriptionKey); string requestParameters = "visualFeatures=Categories,Color,Description,Faces,Tags&language=en"; // Assemble the URI for the REST API method. string uri = OAuthConstants.uriBase + "?" + requestParameters; content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); // Asynchronously call the REST API method. HttpResponseMessage response = await client.PostAsync(uri, content); // Asynchronously get the JSON response. string contentString = await response.Content.ReadAsStringAsync(); // string lpath = var analysesResult = JsonConvert.DeserializeObject <Item>(contentString); var device = DeviceInfo.Model; var iplatform = DeviceInfo.Platform; lblResult.Text = analysesResult.description.captions[0].text.ToString(); ImageDetails ImgItemDetails = new ImageDetails(); ImgItemDetails.Name = LFLens.Helpers.Settings.Username; ImgItemDetails.EmailID = LFLens.Helpers.Settings.EmailID; ImgItemDetails.MobileModel = device; ImgItemDetails.MobilePlatform = iplatform.ToString(); ImgItemDetails.ImageName = FileName; ImgItemDetails.ImageURL = filepath; ImgItemDetails.ImageCategory = analysesResult.tags.FirstOrDefault().name.ToString(); ImgItemDetails.ImageDescription = analysesResult.description.captions[0].text.ToString(); ImgItemDetails.IsStoreGooglePhotos = true; ImgItemDetails.DriveFileID = DriveFileID; ImgItemDetails.PartitionKey = OAuthConstants.AppName; ImgItemDetails.RowKey = Guid.NewGuid().ToString(); ImgItemDetails.Timestamp = DateTime.Now; ImgItemDetails.CreatedTime = DateTime.Now.ToLongDateString(); if (LFLens.Helpers.Settings.ShareWithLFLens == true) { AzureTableManager TableManagerObj = new AzureTableManager(OAuthConstants.AppName); TableManagerObj.InsertEntity <ImageDetails>(ImgItemDetails, true); } if (LFLens.Helpers.Settings.StoreHistory == true) { string JSONFileName = string.Format("{0}.txt", DateTime.Now.ToString("yyyyMMdd")); string JSONFilepath = Path.Combine(OAuthConstants.LogFilePath, JSONFileName); string RootFolderID = LFLens.Helpers.Settings.RootFolderID; string json = JsonConvert.SerializeObject(ImgItemDetails, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented, CheckAdditionalContent = true }); var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = JSONFileName, Parents = new List <string>() { RootFolderID }, MimeType = "text/plain", }; string LogFileID = string.Empty; if (!(File.Exists(JSONFilepath))) { File.CreateText(JSONFilepath).Dispose(); File.AppendAllText(JSONFilepath, json); } else { json = string.Format(",{0}", json); File.AppendAllText(JSONFilepath, json); Google.Apis.Drive.v3.DriveService service = GoogleDriveFiles.GetDriveService(); FilesResource.ListRequest listRequest = service.Files.List(); IList <Google.Apis.Drive.v3.Data.File> mfiles = listRequest.Execute().Files; foreach (var logfile in mfiles) { if (logfile.Name == JSONFileName) { service.Files.Delete(logfile.Id).Execute(); } } } Google.Apis.Drive.v3.DriveService service1 = GoogleDriveFiles.GetDriveService(); FilesResource.CreateMediaUpload request; using (var stream = new FileStream(JSONFilepath, System.IO.FileMode.Open)) { request = service1.Files.Create(fileMetadata, stream, fileMetadata.MimeType); request.Fields = "id"; request.Upload(); } var file = request.ResponseBody; btnShare.Clicked += async(sender, args) => { await Xamarin.Essentials.Share.RequestAsync(new ShareTextRequest { Title = "Share from LFLens", Text = ImgItemDetails.ImageDescription, Subject = "LFLens", Uri = string.Format("{0} File Sharing URL: https://drive.google.com/file/d/{1}/", Environment.NewLine, DriveFileID) }); }; } btnShare.Clicked += async(sender, args) => { await Xamarin.Essentials.Share.RequestAsync(new ShareTextRequest { Title = "Share from LFLens", Text = ImgItemDetails.ImageDescription, Subject = "LFLens", }); }; sldefault.IsVisible = false; slResult.IsVisible = true; } catch (Exception e) { Console.WriteLine("\n" + e.Message); } }
private async void CaptureBtn_Clicked(object sender, EventArgs e) { await CrossMedia.Current.Initialize(); try { if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported) { await DisplayAlert("No Camera", ":( No camera available.", "OK"); return; } if (LFLens.Helpers.Settings.StoreHistory == true) { photo = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions { CustomPhotoSize = 50, PhotoSize = PhotoSize.Small, AllowCropping = true, Directory = OAuthConstants.AppName, Name = "LFLens_" + DateTime.Now.ToString("yyyyMMdd_HHmmss"), SaveToAlbum = true }); } else { photo = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions { CustomPhotoSize = 50, PhotoSize = PhotoSize.Small, AllowCropping = true, Name = "LFLens_" + DateTime.Now.ToString("yyyyMMdd_HHmmss"), }); } if (photo != null) { var imgSource = ImageSource.FromStream(() => { return(photo.GetStream()); }); imgChoosen.Source = imgSource; string filepath = photo.Path; this.IsBusy = true; string FileName = Path.GetFileName(filepath); byte[] getByte = GetImageAsByteArray(photo.GetStream()); ByteArrayContent content = new ByteArrayContent(getByte); if (LFLens.Helpers.Settings.StoreHistory == true) { if (string.IsNullOrEmpty(LFLens.Helpers.Settings.RootFolderID) && string.IsNullOrEmpty(LFLens.Helpers.Settings.PhotosFolderID)) { CreateAppFolder(); } string PhotosFolderID = LFLens.Helpers.Settings.PhotosFolderID; var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = FileName, Parents = new List <string>() { PhotosFolderID } }; FilesResource.CreateMediaUpload request; Google.Apis.Drive.v3.DriveService service = GoogleDriveFiles.GetDriveService(); request = service.Files.Create( fileMetadata, photo.GetStream(), "image/jpeg"); request.Fields = "id"; request.Upload(); var driveFile = request.ResponseBody; strDriveFileID = driveFile.Id; } await MakeAnalysisRequest(content, FileName, filepath, strDriveFileID); } } catch (Exception ex) { } }