public static IEnumerable<TraktLike> GetLikedListsFromTrakt(bool ignoreLastSyncTime = false)
{
// get from cache regardless of last sync time
if (ignoreLastSyncTime)
return LikedLists;
TraktLogger.Info("Getting current user liked lists from trakt.tv");
// get the last time we did anything to our library online
var lastSyncActivities = LastSyncActivities;
// something bad happened e.g. site not available
if (lastSyncActivities == null || lastSyncActivities.Lists == null)
return null;
// check the last time we have against the online time
// if the times are the same try to load from cache
if (lastSyncActivities.Lists.LikedAt == TraktSettings.LastSyncActivities.Lists.LikedAt)
{
var cachedItems = LikedLists;
if (cachedItems != null)
return cachedItems;
}
TraktLogger.Info("Liked lists cache is out of date, requesting updated data. Local Date = '{0}', Online Date = '{1}'", TraktSettings.LastSyncActivities.Lists.LikedAt ?? "<empty>", lastSyncActivities.Lists.LikedAt ?? "<empty>");
// we get from online, local cache is not up to date
var onlineItems = TraktAPI.TraktAPI.GetLikedItems("lists");
if (onlineItems != null)
{
bool listExists = false;
var pagedItems = onlineItems.Likes;
// check if we need to request more pages
if (LikedLists != null && pagedItems.IsAny())
{
// if the list id exists then we already have all liked lists
listExists = LikedLists.Any(l => l.List.Ids.Trakt == pagedItems.Last().List.Ids.Trakt);
// add the latest page to our previous cached comments
pagedItems = pagedItems.Union(LikedLists);
}
// get more pages
if (!listExists && pagedItems.IsAny() && onlineItems.Likes.Count() == onlineItems.TotalItemsPerPage)
{
for (int i = 2; i <= onlineItems.TotalPages; i++)
{
var nextPage = TraktAPI.TraktAPI.GetLikedItems("lists", "min", i);
if (nextPage == null || !nextPage.Likes.IsAny()) break;
// if the list id exists then we already have all liked lists
if (pagedItems.Any(c => c.List.Ids.Trakt == nextPage.Likes.Last().List.Ids.Trakt))
listExists = true;
// add the latest page to our previous requested liked lists
pagedItems = pagedItems.Union(nextPage.Likes);
if (listExists || nextPage.Likes.Count() < nextPage.TotalItemsPerPage)
break;
}
}
// evaluate any union additions
if (pagedItems != null)
pagedItems = pagedItems.ToList();
_LikedLists = pagedItems;
// save to local file cache
SaveFileCache(CustomListLikedFile, _LikedLists.ToJSON());
// save new activity time for next time
TraktSettings.LastSyncActivities.Lists.LikedAt = lastSyncActivities.Lists.LikedAt;
return pagedItems == null ? null : pagedItems.OrderByDescending(l => l.LikedAt);
}
else
{
return null;
}
}