/// <summary> /// This is manual approach for creating Fr8 trigger for some document, mainly used as backup plan for automatic apps script run /// </summary> /// <param name="authDTO"></param> /// <param name="formId"></param> /// <param name="desription"></param> /// <returns></returns> public async Task <string> CreateManualFr8TriggerForDocument(GoogleAuthDTO authDTO, string formId, string desription = "Script uploaded from Fr8 application") { string response = ""; try { var driveService = await _googleDrive.CreateDriveService(authDTO); var formFilename = FormFilename(driveService, formId); Google.Apis.Drive.v3.Data.File scriptFile = new Google.Apis.Drive.v3.Data.File(); scriptFile.Name = "Script for: " + formFilename; scriptFile.Description = desription; scriptFile.MimeType = "application/vnd.google-apps.script+json"; // Create a memory stream using (MemoryStream memoryStream = new MemoryStream()) { //load template file and replace specific formID var assembly = Assembly.GetExecutingAssembly(); var resourceName = "terminalGoogle.Template.googleAppScriptFormResponse.json"; string content; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) using (StreamReader reader = new StreamReader(stream)) { content = reader.ReadToEnd(); } content = content.Replace("@ID", formId); content = content.Replace("@ENDPOINT", CloudConfigurationManager.GetSetting("GoogleFormEventWebServerUrl")); byte[] contentAsBytes = Encoding.UTF8.GetBytes(content); memoryStream.Write(contentAsBytes, 0, contentAsBytes.Length); // Set the position to the beginning of the stream. memoryStream.Seek(0, SeekOrigin.Begin); //upload file to google drive string existingFileLink = ""; if (!_googleDrive.FileExist(driveService, scriptFile.Name, out existingFileLink)) { FilesResource.CreateMediaUpload request = driveService.Files.Create(scriptFile, memoryStream, "application/vnd.google-apps.script+json"); request.Upload(); response = request.ResponseBody.WebViewLink; } else { response = existingFileLink; } } } catch (Exception e) { throw new Exception(e.Message); } return(await Task.FromResult(response)); }
public async Task <PollingDataDTO> Poll(PollingDataDTO pollingData, GDrivePollingType pollingType) { var googleAuthToken = JsonConvert.DeserializeObject <GoogleAuthDTO>(pollingData.AuthToken); var driveService = await _googleDrive.CreateDriveService(googleAuthToken); string startPageToken; if (string.IsNullOrEmpty(pollingData.Payload)) { var response = driveService.Changes.GetStartPageToken().Execute(); startPageToken = response.StartPageTokenValue; } else { startPageToken = pollingData.Payload; } var changedFiles = new Dictionary <string, string>(); var pageToken = startPageToken; while (pageToken != null) { var request = driveService.Changes.List(pageToken); request.Fields = "changes,kind,newStartPageToken,nextPageToken"; request.Spaces = "drive"; var changes = request.Execute(); foreach (var change in changes.Changes) { if (!string.IsNullOrEmpty(change.File.MimeType) && change.File.MimeType.ToUpper() == _fileTypes[pollingType]) { if (!changedFiles.ContainsKey(change.FileId)) { changedFiles.Add(change.FileId, change.File.Name); } } } if (!string.IsNullOrEmpty(changes.NewStartPageToken)) { startPageToken = changes.NewStartPageToken; } pageToken = changes.NextPageToken; } if (changedFiles.Count > 0) { var changedFilesCM = new KeyValueListCM(); foreach (var pair in changedFiles) { changedFilesCM.Values.Add(new KeyValueDTO(pair.Key, pair.Value)); } var eventReportContent = new EventReportCM { EventNames = _eventNames[pollingType], EventPayload = new CrateStorage(Crate.FromContent("ChangedFiles", changedFilesCM)), Manufacturer = "Google", ExternalAccountId = pollingData.ExternalAccountId }; Logger.Info("Polling for Google Drive: changed files of type \"" + pollingType.ToString() + "\""); await _reporter.Broadcast(Crate.FromContent("Standard Event Report", eventReportContent)); } pollingData.Payload = startPageToken; return(pollingData); }