Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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);
                }
            }
        }