static private GetImages ( List |
||
itemsWithThumbs | List |
List of images to get |
return | void |
internal static void GetImages(List<GUITraktImage> itemsWithThumbs)
{
StopDownload = false;
// split the downloads in 5+ groups and do multithreaded downloading
int groupSize = (int)Math.Max(1, Math.Floor((double)itemsWithThumbs.Count / 5));
int groups = (int)Math.Ceiling((double)itemsWithThumbs.Count() / groupSize);
for (int i = 0; i < groups; i++)
{
var groupList = new List<GUITraktImage>();
for (int j = groupSize * i; j < groupSize * i + (groupSize * (i + 1) > itemsWithThumbs.Count ? itemsWithThumbs.Count - groupSize * i : groupSize); j++)
{
groupList.Add(itemsWithThumbs[j]);
}
new Thread(delegate(object o)
{
var items = (List<GUITraktImage>)o;
foreach (var item in items)
{
#region Avatar
if (item.UserImages != null && item.UserImages.Avatar != null)
{
// stop download if we have exited window
if (StopDownload) break;
string remoteThumb = item.UserImages.Avatar.FullSize;
string localThumb = item.UserImages.Avatar.LocalImageFilename(ArtworkType.Avatar);
if (!string.IsNullOrEmpty(remoteThumb) && !string.IsNullOrEmpty(localThumb))
{
if (GUIImageHandler.DownloadImage(remoteThumb, localThumb))
{
if (StopDownload) break;
// notify that image has been downloaded
item.NotifyPropertyChanged("Avatar");
}
}
}
#endregion
}
})
{
IsBackground = true,
Name = "ImageDownloader" + i.ToString()
}.Start(groupList);
}
}
private void SendSearchResultsToFacade(IEnumerable <TraktUser> users) { // clear facade GUIControl.ClearControl(GetID, Facade.GetID); if (users == null || users.Count() == 0) { GUIUtils.ShowNotifyDialog(GUIUtils.PluginName(), Translation.NoSearchResultsFound); GUIWindowManager.ShowPreviousWindow(); Users = null; return; } int itemId = 0; var userImages = new List <TraktImage>(); // Add each user foreach (var user in users) { // add image to download var images = new TraktImage { Avatar = user.Avatar }; userImages.Add(images); var item = new GUIUserListItem(user.Username, (int)TraktGUIWindows.SearchUsers); item.Images = images; item.TVTag = user; item.ItemId = Int32.MaxValue - itemId; item.IconImage = "defaultTraktUser.png"; item.IconImageBig = "defaultTraktUserBig.png"; item.ThumbnailImage = "defaultTraktUserBig.png"; item.OnItemSelected += OnUserSelected; Utils.SetDefaultIcons(item); Facade.Add(item); itemId++; } // Set Facade Layout Facade.SetCurrentLayout(Enum.GetName(typeof(Layout), CurrentLayout)); GUIControl.FocusControl(GetID, Facade.GetID); if (SearchTermChanged) { PreviousSelectedIndex = 0; } Facade.SelectIndex(PreviousSelectedIndex); // set facade properties GUIUtils.SetProperty("#itemcount", users.Count().ToString()); GUIUtils.SetProperty("#Trakt.Items", string.Format("{0} {1}", users.Count().ToString(), users.Count() > 1 ? Translation.Users : Translation.User)); // Download images Async and set to facade GUIUserListItem.GetImages(userImages); }