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); }
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")); }
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."); }