private async Task <List <Mail> > GetRemotelyPostedMailForCurrentFarmerAsync()
        {
            if (_farmerService.CurrentFarmer == null)
            {
                return(new List <Mail>());
            }
            var currentFarmerId = _farmerService.CurrentFarmer.Id;

            _mod.Monitor.Log($"{logPrefix}..downloading cloud mail...", LogLevel.Debug);

            var urlSegments = new Dictionary <string, string> {
                { "farmerId", currentFarmerId }
            };
            var request  = ModHelper.FormStandardRequest("mail/to/{farmerId}", urlSegments, Method.GET);
            var response = await _restClient.ExecuteTaskAsync <List <Mail> >(request);

            var mail = new List <Mail>();

            if (!string.IsNullOrEmpty(response.ErrorMessage))
            {
                _mod.Monitor.Log($"{logPrefix}{response.ErrorMessage}", LogLevel.Warn);
                return(mail);
            }

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                if (response.Data != null && response.Data.GetType() == typeof(List <Mail>))
                {
                    mail.AddRange(response.Data);
                }
            }

            _mod.Monitor.Log($"{logPrefix}...done.", LogLevel.Debug);
            return(mail);
        }
        private async Task <List <Mail> > GetRemotelyPostedMailForCurrentFarmerAsync()
        {
            if (_farmerService.CurrentFarmer == null)
            {
                return(new List <Mail>());
            }
            var currentFarmerId = _farmerService.CurrentFarmer.Id;

            var urlSegments = new Dictionary <string, string> {
                { "farmerId", currentFarmerId }
            };
            var request  = ModHelper.FormStandardRequest("mail/to/{farmerId}", urlSegments, Method.GET);
            var response = await _restClient.ExecuteTaskAsync <List <Mail> >(request);

            var mail = new List <Mail>();

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                if (response.Data != null && response.Data.GetType() == typeof(List <Mail>))
                {
                    mail.AddRange(response.Data);
                }
            }

            return(mail);
        }
        private async Task DeliverLocalMailToCloud()
        {
            _mod.Monitor.Log($"{logPrefix}.delivering local mail to cloud...", LogLevel.Debug);
            var localMail        = GetLocallyComposedMail();
            var localFarmers     = _farmerService.GetFarmers();
            var updatedLocalMail = new List <Mail>();

            // Consider: Add an api method that takes a list of MailCreateModels
            if (localMail.Any())
            {
                _mod.Monitor.Log($"{logPrefix}..uploading {localMail.Count} mail to cloud...", LogLevel.Debug);
                foreach (var mail in localMail)
                {
                    if (!localFarmers.Any(x => x.Id == mail.ToFarmerId))
                    {
                        var createMailModel = new CreateMailModel
                        {
                            ToFarmerId   = mail.ToFarmerId,
                            FromFarmerId = mail.FromFarmerId,
                            Text         = mail.Text,
                            CreatedDate  = mail.CreatedDate
                        };

                        var urlSegments = new Dictionary <string, string> {
                            { "mailId", mail.Id.ToString() }
                        };
                        var request = ModHelper.FormStandardRequest("mail/{mailId}", urlSegments, Method.PUT);
                        request.AddJsonBody(createMailModel);
                        var response = await _restClient.ExecuteTaskAsync <bool>(request);

                        if (!string.IsNullOrEmpty(response.ErrorMessage))
                        {
                            _mod.Monitor.Log($"{logPrefix}{response.ErrorMessage}", LogLevel.Warn);
                            continue;
                        }

                        if (response.Data)
                        {
                            mail.Status = MailStatus.Posted;
                            updatedLocalMail.Add(mail);
                            _mod.Monitor.Log($"{logPrefix}...done", LogLevel.Debug);
                        }
                    }
                }

                Repository.Instance.Upsert(updatedLocalMail.AsEnumerable());
            }
            else
            {
                _mod.Monitor.Log($"{logPrefix}..no local mail to deliver to cloud", LogLevel.Debug);
            }
            _mod.Monitor.Log($"{logPrefix}..done", LogLevel.Debug);
        }
Example #4
0
        private async Task DeleteRemoteMail(Mail mail)
        {
            var urlSegments = new Dictionary <string, string> {
                { "mailId", mail.Id.ToString() }
            };
            var request  = ModHelper.FormStandardRequest("mail/{mailId}", urlSegments, Method.DELETE);
            var response = await _restClient.ExecuteTaskAsync <bool>(request);

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                // all good :)
            }
        }
        private async Task <bool> DeleteRemoteMail(Mail mail, string logPrefix)
        {
            var urlSegments = new Dictionary <string, string> {
                { "mailId", mail.Id.ToString() }
            };
            var request  = ModHelper.FormStandardRequest("mail/{mailId}", urlSegments, Method.DELETE);
            var response = await _restClient.ExecuteTaskAsync <bool>(request);

            if (!string.IsNullOrEmpty(response.ErrorMessage))
            {
                _mod.Monitor.Log($"{logPrefix}{response.ErrorMessage}", LogLevel.Warn);
                return(false);
            }

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                _mod.Monitor.Log($"{logPrefix}..done", LogLevel.Debug);
                return(true);
            }

            return(false);
        }
        private async Task DeliverLocalMailToCloud()
        {
            var localMail        = GetLocallyComposedMail();
            var localFarmers     = _farmerService.GetFarmers();
            var updatedLocalMail = new List <Mail>();

            // Consider: Add an api method that takes a list of MailCreateModels
            foreach (var mail in localMail)
            {
                if (!localFarmers.Any(x => x.Id == mail.ToFarmerId))
                {
                    var createMailModel = new CreateMailModel
                    {
                        ToFarmerId   = mail.ToFarmerId,
                        FromFarmerId = mail.FromFarmerId,
                        Text         = mail.Text,
                        CreatedDate  = mail.CreatedDate
                    };

                    var urlSegments = new Dictionary <string, string> {
                        { "mailId", mail.Id.ToString() }
                    };
                    var request = ModHelper.FormStandardRequest("mail/{mailId}", urlSegments, Method.PUT);
                    request.AddJsonBody(createMailModel);
                    var response = await _restClient.ExecuteTaskAsync <bool>(request);

                    if (response.Data)
                    {
                        mail.Status = MailStatus.Posted;
                        updatedLocalMail.Add(mail);
                    }
                }
            }

            Repository.Instance.Upsert(updatedLocalMail.AsEnumerable());
        }