public override Result DoWork() { if (IsRunning) { return(Result.InvokeSuccess()); } try { IsRunning = true; var settings = _settingsService.GetSettings(); if (!settings.IsEmailSendingEnabled) { return(Result.InvokeSuccess()); } if (!settings.UploadOnMobileNetwork && !CustomNetworkCallback.IsConnected) // TODO { return(Result.InvokeSuccess()); } var locations = _locationService.QueryNotUploadedLocations(); var networkLogs = _networkLogService.QueryNotUploaded(); if (!locations.Any() && !networkLogs.Any()) { return(Result.InvokeSuccess()); } var exporter = new Exporter(); var json = exporter.CreateJson(locations, networkLogs); var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); var attachment = new Attachment(stream, "data.json", MediaTypeNames.Application.Json); // TODO: using? var emailClient = new EmailClient(); emailClient.SendMail( settings.SmtpPort, settings.SmtpHost, settings.SmtpUsername, settings.SmtpPassword, settings.SmtpUsername, settings.EmailRecipient, settings.EmailSubject, string.Empty, attachment ); foreach (var location in locations) { location.IsUploaded = true; location.UploadDateTime = DateTime.UtcNow; } _locationService.UpdateLocations(locations); foreach (var networkLog in networkLogs) { networkLog.IsUploaded = true; networkLog.UploadDateTime = DateTime.UtcNow; } _networkLogService.Update(networkLogs); var intent = new Intent("testAction"); intent.PutExtra("x", $"{DateTime.Now.ToString("HH:mm:ss")} - email sent: {locations.Count} location(s)"); _localBroadcastManager.SendBroadcast(intent); _locationService.RemoveLocations(settings.KeepLocationsForDays); _networkLogService.Remove(settings.KeepLocationsForDays); return(Result.InvokeSuccess()); } catch (Exception ex) { var intent = new Intent("testAction"); intent.PutExtra("x", $"{DateTime.Now.ToString("HH:mm:ss")} - email sending failed"); _localBroadcastManager.SendBroadcast(intent); return(Result.InvokeSuccess()); // TODO? } finally { IsRunning = false; } }
private void exportButton_Click(object sender, EventArgs e) { var sendIntent = new Intent(); sendIntent.SetAction(Intent.ActionSend); var dateFromValid = DateTime.TryParse(_textDateFrom.Text, out var fromDate); var dateToValid = DateTime.TryParse(_textDateTo.Text, out var toDate); if (!dateFromValid || !dateToValid) { return; } // Write file to external folder (Android/data/.../) if (Android.OS.Environment.ExternalStorageState == Android.OS.Environment.MediaMounted) { try { _exportButton.Clickable = false; var format = _spinnerFormat.SelectedItem.ToString(); var path = Path.Combine(GetExternalFilesDir(null).Path, $"file-{DateTime.Now.Ticks}.{format}"); var content = CreateContent(format); File.WriteAllText(path, content); Toast.MakeText(this, $@"File exported to: {path}", ToastLength.Short).Show(); } catch (Exception ex) { Toast.MakeText(this, "Failed to export file", ToastLength.Short).Show(); } finally { _exportButton.Clickable = true; } } else { Toast.MakeText(this, "External storage is not available", ToastLength.Short).Show(); } string CreateContent(string format) { var exporter = new Exporter(); switch (format) { case "gpx": return(exporter.CreateGpx(fromDate, toDate)); case "json": return(exporter.CreateJson(fromDate, toDate)); default: return(string.Empty); } } }