private static void Run(Options obj) { Console.WriteLine("Start"); string[] scopes = { GmailService.Scope.GmailReadonly }; Console.WriteLine("Init gmail service"); var init = new BaseClientService.Initializer { HttpClientInitializer = CreateAuthorizeAsync(obj.ClientIdFilePath, scopes).Result }; var clientService = new GmailService(init); Console.WriteLine("Start message fetcher and list fetcher"); var cache = new GmailCache(); if (obj.EraseCache) { cache.Erase(); } var fetcher = new MessageDetailFetcher(clientService, cache); fetcher.Run(); var listTask = Task.Run(() => { var query = obj.Query; var requestMaxResults = 1000; string pageToken = null; var request = ListRequest(clientService, pageToken, requestMaxResults, query); executeRequest: var response = request.Execute(); foreach (var responseMessage in response.Messages) { fetcher.AddTodo(responseMessage); } if (response.NextPageToken != null) { var nextPageToken = response.NextPageToken; request = ListRequest(clientService, nextPageToken, requestMaxResults, query); goto executeRequest; } }); listTask.Wait(); Console.WriteLine("List task done"); fetcher.Stop(); var messages = fetcher.GetResult(); Console.WriteLine("Fetcher done"); var counts = new Dictionary <string, int>(); Console.WriteLine("Result"); foreach (var message in messages) { var from = message.From; string email; if (from.Contains("<") && from.Contains(">")) { var lastClose = from.LastIndexOf('>'); var lastOpen = from.LastIndexOf('<'); email = from.Substring(lastOpen + 1, lastClose - lastOpen - 1).ToLower(); } else { email = from.ToLower(); } if (obj.DomainGrouping) { email = email.Substring(email.IndexOf("@", StringComparison.Ordinal) + 1); } if (!counts.ContainsKey(email)) { counts[email] = 0; } counts[email]++; } foreach (var pair in counts.OrderByDescending(x => x.Value).Take(30)) { Console.WriteLine(pair.Key + " = " + pair.Value); } }
public MessageDetailFetcher(IClientService clientService, GmailCache gmailCache) { this.clientService = clientService; _gmailCache = gmailCache; }