private async Task <int> SynchronizeBack()
        {
            var count = 0;

            try
            {
                var deviceId   = DependencyService.Get <IDeviceId>().GetDeviceId();
                var deviceHash = (await Database.GetRegister()).DeviceHash;
                var auth       = new AuthorizationJson(deviceId, deviceHash);

                var content = await _mobileApi.GetChangesByDevice(auth);

                var unescapedContent = JsonConvert.DeserializeObject(content) as string;
                var changesList      = JsonConvert.DeserializeObject <List <AdviceJsonItem> >(unescapedContent);
                var allRecords       = await Database.GetRecordsAsync();

                foreach (var changedAdvice in changesList)
                {
                    var record = allRecords.Find(i => i.Identifier == changedAdvice.Identifier);
                    if (record != null)
                    {
                        record.TaxonId    = changedAdvice.TaxonId;
                        record.RecordDate = changedAdvice.AdviceDate ?? DateTime.MinValue;
                        record.Latitude   = (double)changedAdvice.Lat;
                        record.Longitude  = (double)changedAdvice.Lon;
                        await Database.UpdateRecord(record);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            return(count);
        }
Example #2
0
        public string SyncAdvices(AuthorizationJson auth)
        {
            AspNetUserDevices devInfo = new AspNetUserDevices();
            var userId = _idoContext.AspNetUserDevices.Where(dev => dev.DeviceId == auth.DeviceId && dev.DeviceHash == auth.DeviceHash).Select(dev => dev.UserId).FirstOrDefault();

            if (userId != null)
            {
                try
                {
                    //var membershipUser = Membership.GetUser(userData.UserId);
                    string st     = $@"{userId}-{auth.DeviceId}";
                    var    result = _obsContext.LastSyncVersion.Where(lsv => lsv.SyncTypeName == st).ToList();

                    List <Observation> returnObs = new List <Observation>();

                    if (result.Count() < 1)
                    {
                        returnObs = _obsContext.Observation.Where(o => o.UserId == userId).ToList();
                        LastSyncVersion newLsv = new LastSyncVersion {
                            SyncTypeName = st, VersionDate = DateTime.Now, DeviceId = auth.DeviceId, UserId = userId
                        };
                        _obsContext.Add(newLsv);
                    }
                    else
                    {
                        foreach (LastSyncVersion lsvItem in result)
                        {
                            List <Observation> temp = _obsContext.Observation.Where(o => o.UserId == userId && o.LastEditDate >= lsvItem.VersionDate).ToList();
                            returnObs.AddRange(temp);
                            lsvItem.VersionDate = DateTime.Now;
                        }
                        _obsContext.UpdateRange(result);
                    }
                    _obsContext.SaveChanges();
                    //var resultIds = _obsContext.Observation.Where(o => o.UserId == userId && o.Version > ).Select(lsv => lsv.U).ToList();
                    return(JsonConvert.SerializeObject(returnObs));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            return(JsonConvert.SerializeObject("invalid user"));
        }
Example #3
0
        public async Task <string> GetChangesByDevice(AuthorizationJson auth)
        {
            var handler = new HttpClientHandler()
            {
                ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
                MaxRequestContentBufferSize = 256000,
            };
            var httpClient    = new HttpClient(handler);
            var stringContent = new StringContent(JsonConvert.SerializeObject(auth), Encoding.UTF8, "application/json");
            var response      = await httpClient.PostAsync(_changesServiceUrl, stringContent);

            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();

                return(content);
            }
            throw new Exception("Übermittlung fehlgeschlagen.");
        }