private SyncUpdateInfo PopulateLibraryInfo(string userId, string lastRequestedDt, IReadOnlyCollection <MediaType> filters) { var startTime = DateTime.UtcNow; _logger.LogDebug("Starting PopulateLibraryInfo..."); var info = new SyncUpdateInfo(); var userDt = DateTime.Parse(lastRequestedDt, CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal); var dtl = (long)userDt.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds; var user = _userManager.GetUserById(Guid.Parse(userId)); var itemsAdded = Plugin.Instance.DbRepo.GetItems(dtl, ItemStatus.Added, filters); var itemsRemoved = Plugin.Instance.DbRepo.GetItems(dtl, ItemStatus.Removed, filters); var itemsUpdated = Plugin.Instance.DbRepo.GetItems(dtl, ItemStatus.Updated, filters); var userDataChanged = Plugin.Instance.DbRepo.GetUserInfos(dtl, userId, filters); info.ItemsAdded = GetAddedOrUpdatedItems(user, itemsAdded); info.ItemsRemoved = itemsRemoved.Select(id => id.ToString("N")).ToList(); info.ItemsUpdated = GetAddedOrUpdatedItems(user, itemsUpdated); info.UserDataChanged = userDataChanged.Select(i => _jsonSerializer.DeserializeFromString <UserItemDataDto>(i.JsonData)).ToList(); _logger.LogInformation("Added: {AddedCount}, Removed: {RemovedCount}, Updated: {UpdatedCount}, Changed User Data: {ChangedUserDataCount}", info.ItemsAdded.Count, info.ItemsRemoved.Count, info.ItemsUpdated.Count, info.UserDataChanged.Count); TimeSpan diffDate = DateTime.UtcNow - startTime; _logger.LogInformation("Request Finished Taking {TimeTaken}", diffDate.ToString("c")); return(info); }
public SyncUpdateInfo PopulateLibraryInfo(DateTimeOffset userDT) { var info = new SyncUpdateInfo(); var dtl = (long)(userDT.ToUniversalTime().Subtract(new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero)).TotalSeconds); info.ItemsRemoved = DbRepo.Instance.GetItems(dtl); return(info); }
public async Task <SyncUpdateInfo> PopulateLibraryInfo(string userId, string lastDT, bool movies, bool tvshows, bool music, bool musicvideos, bool boxsets) { var startTime = DateTime.UtcNow; _logger.LogDebug("Starting PopulateLibraryInfo..."); var userDataChangedJson = new List <string>(); var info = new SyncUpdateInfo(); var userDT = DateTime.Parse(lastDT, CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal); var dtl = (long)userDT.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds; Task <List <string> > t1 = Task.Run(() => { _logger.LogDebug("PopulateLibraryInfo: Getting Items Added Info..."); var data = DbRepo.Instance.GetItems(dtl, 0, movies, tvshows, music, musicvideos, boxsets); var user = _userManager.GetUserById(Guid.Parse(userId)); List <BaseItem> items = new List <BaseItem>(); data.ForEach(i => { var item = _libraryManager.GetItemById(i); if (item != null) { items.Add(item); } }); var result = items.SelectMany(i => ApiUserCheck.TranslatePhysicalItemToUserLibrary(i, user, _libraryManager)).Select(i => i.Id.ToString("N")).Distinct().ToList(); if (result.Count > 0) { _logger.LogInformation("Added Items Found: {AddedItems}", string.Join(",", result.ToArray())); } else { _logger.LogInformation("No Added Items Found!"); } return(result); }); Task <List <string> > t2 = Task.Run(() => { _logger.LogDebug("PopulateLibraryInfo: Getting Items Removed Info..."); List <string> result = new List <string>(); var data = DbRepo.Instance.GetItems(dtl, 2, movies, tvshows, music, musicvideos, boxsets); if (data != null && data.Any()) { data.ForEach(i => result.Add(i.ToString("N"))); } if (result.Count > 0) { _logger.LogInformation("Removed Items Found: {RemovedItems}", string.Join(",", result.ToArray())); } else { _logger.LogInformation("No Removed Items Found!"); } return(result); }); Task <List <string> > t3 = Task.Run(() => { _logger.LogDebug("PopulateLibraryInfo: Getting Items Updated Info..."); var data = DbRepo.Instance.GetItems(dtl, 1, movies, tvshows, music, musicvideos, boxsets); var user = _userManager.GetUserById(Guid.Parse(userId)); List <BaseItem> items = new List <BaseItem>(); data.ForEach(i => { var item = _libraryManager.GetItemById(i); if (item != null) { items.Add(item); } }); var result = items.SelectMany(i => ApiUserCheck.TranslatePhysicalItemToUserLibrary(i, user, _libraryManager)).Select(i => i.Id.ToString("N")).Distinct().ToList(); if (result.Count > 0) { _logger.LogInformation("Updated Items Found: {UpdatedItems}", string.Join(",", result)); } else { _logger.LogInformation("No Updated Items Found!"); } return(result); }); Task <List <string> > t4 = Task.Run(() => { _logger.LogDebug("PopulateLibraryInfo: Getting User Data Changed Info..."); var data = DbRepo.Instance.GetUserInfos(dtl, userId, movies, tvshows, music, musicvideos, boxsets); var result = data.Select(i => i.JsonData).ToList(); if (result.Count > 0) { _logger.LogInformation("User Data Changed Info Found: {ChangedData}", string.Join(",", data.Select(i => i.Id).ToArray())); } else { _logger.LogInformation("No User Data Changed Info Found!"); } return(result); }); await Task.WhenAll(t1, t2, t3, t4); info.ItemsAdded = t1.Result; info.ItemsRemoved = t2.Result; info.ItemsUpdated = t3.Result; userDataChangedJson = t4.Result; info.UserDataChanged = userDataChangedJson.Select(i => _jsonSerializer.DeserializeFromString <UserItemDataDto>(i)).ToList(); TimeSpan diffDate = DateTime.UtcNow - startTime; _logger.LogInformation("Request Finished Taking {TimeTaken}", diffDate.ToString("c")); return(info); }