private List <string> GetAddedOrUpdatedItems(User user, IEnumerable <Guid> ids) { var items = ids .Select(id => _libraryManager.GetItemById(id)) .Where(item => item != null) .ToList(); var result = items.SelectMany(i => ApiUserCheck.TranslatePhysicalItemToUserLibrary(i, user, _libraryManager)).Select(i => i.Id.ToString("N")).Distinct().ToList(); return(result); }
private List <string> GetAddedOrUpdatedItems(User user, IEnumerable <Guid> ids) { List <BaseItem> items = new List <BaseItem>(); foreach (Guid id in ids) { var item = _libraryManager.GetItemById(id); if (item != null) { items.Add(item); } } var result = items.SelectMany(i => ApiUserCheck.TranslatePhysicalItemToUserLibrary(i, user, _libraryManager)).Select(i => i.Id.ToString("N")).Distinct().ToList(); return(result); }
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); }