private async Task <(int, List <string>)> DownloadBatchAsync(string region, CancellationToken cancellationToken) { loggerService.StartMethod(); var downloadedFiles = new List <string>(); var batchNumber = 0; var tmpDir = Path.Combine(FileSystem.CacheDirectory, region); try { if (!Directory.Exists(tmpDir)) { Directory.CreateDirectory(tmpDir); } } catch (Exception ex) { loggerService.Exception("Failed to create directory", ex); loggerService.EndMethod(); // catch error return batchnumber 0 / fileList 0 return(batchNumber, downloadedFiles); } //long sinceEpochSeconds = new DateTimeOffset(DateTime.UtcNow.AddDays(-14)).ToUnixTimeSeconds(); List <TemporaryExposureKeyExportFileModel> tekList = await httpDataService.GetTemporaryExposureKeyList(region, cancellationToken); if (tekList.Count == 0) { loggerService.EndMethod(); return(batchNumber, downloadedFiles); } Debug.WriteLine("C19R Fetch Exposure Key"); Dictionary <string, long> lastTekTimestamp = userData.LastProcessTekTimestamp; foreach (var tekItem in tekList) { long lastCreated = 0; if (lastTekTimestamp.ContainsKey(region)) { lastCreated = lastTekTimestamp[region]; } else { lastTekTimestamp.Add(region, 0); } loggerService.Info($"tekItem.Created: {tekItem.Created}"); if (tekItem.Created > lastCreated || lastCreated == 0) { var tmpFile = Path.Combine(tmpDir, Guid.NewGuid().ToString() + ".zip"); Debug.WriteLine(Utils.SerializeToJson(tekItem)); Debug.WriteLine(tmpFile); loggerService.Info($"Download TEK file. url: {tekItem.Url}"); using (Stream responseStream = await httpDataService.GetTemporaryExposureKey(tekItem.Url, cancellationToken)) using (var fileStream = File.Create(tmpFile)) { try { await responseStream.CopyToAsync(fileStream, cancellationToken); fileStream.Flush(); } catch (Exception ex) { loggerService.Exception("Fail to copy", ex); } } lastTekTimestamp[region] = tekItem.Created; downloadedFiles.Add(tmpFile); Debug.WriteLine($"C19R FETCH DIAGKEY {tmpFile}"); batchNumber++; } } loggerService.Info($"Batch number: {batchNumber}, Downloaded files: {downloadedFiles.Count()}"); userData.LastProcessTekTimestamp = lastTekTimestamp; await userDataService.SetAsync(userData); loggerService.Info($"region: {region}, userData.LastProcessTekTimestamp[{region}]: {userData.LastProcessTekTimestamp[region]}"); loggerService.EndMethod(); return(batchNumber, downloadedFiles); }
private async Task <(int, List <string>)> DownloadBatchAsync(string region, CancellationToken cancellationToken) { var downloadedFiles = new List <string>(); var batchNumber = 0; var tmpDir = Path.Combine(FileSystem.CacheDirectory, region); try { if (!Directory.Exists(tmpDir)) { Directory.CreateDirectory(tmpDir); } } catch { // catch error return batchnumber 0 / fileList 0 return(batchNumber, downloadedFiles); } long sinceEpochSeconds = new DateTimeOffset(DateTime.UtcNow.AddDays(-14)).ToUnixTimeSeconds(); List <TemporaryExposureKeyExportFileModel> tekList = await httpDataService.GetTemporaryExposureKeyList(region, cancellationToken); if (tekList.Count == 0) { return(batchNumber, downloadedFiles); } Console.WriteLine("Fetch Exposure Key"); Dictionary <string, long> lastTekTimestamp = userData.LastProcessTekTimestamp; foreach (var tekItem in tekList) { long lastCreated = 0; if (lastTekTimestamp.ContainsKey(region)) { lastCreated = lastTekTimestamp[region]; } else { lastTekTimestamp.Add(region, 0); } if (tekItem.Created > lastCreated || lastCreated == 0) { var tmpFile = Path.Combine(tmpDir, Guid.NewGuid().ToString() + ".zip"); Console.WriteLine(Utils.SerializeToJson(tekItem)); Console.WriteLine(tmpFile); using (Stream responseStream = await httpDataService.GetTemporaryExposureKey(tekItem.Url, cancellationToken)) using (var fileStream = File.Create(tmpFile)) { try { await responseStream.CopyToAsync(fileStream, cancellationToken); fileStream.Flush(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } lastTekTimestamp[region] = tekItem.Created; downloadedFiles.Add(tmpFile); batchNumber++; } } Console.WriteLine(batchNumber.ToString()); Console.WriteLine(downloadedFiles.Count()); userData.LastProcessTekTimestamp = lastTekTimestamp; await userDataService.SetAsync(userData); return(batchNumber, downloadedFiles); }