/// <summary> /// Event handler for the "Find Images" button. Fetches image URL's based on the field values in /// the first tab, and uses that information to set field values in the second tab. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FindImagesButton_Click(object sender, RoutedEventArgs e) { MainTabControl.SelectedItem = DownloadImagesTabItem; // TODO: Refactor, and make this asynchronous so it doesn't block the main UI thread // Get user input from XAML fields string entity = EntityTextBox.Text; RedditEntity type = (UserEntityType.IsChecked == true) ? RedditEntity.User : RedditEntity.Subreddit; int maxPages; if (!int.TryParse(MaxPagesTextBox.Text, out maxPages)) { maxPages = 1; } // Parse Imgur image and album URL's for the given Reddit user or subuser, stopping when we // either run out of pages or else hit the maximum page count HashSet <string> imageUrls = new HashSet <string>(); HashSet <string> albumUrls = new HashSet <string>(); string nextPageCursor = ""; int pageCount = 1; for ( ; pageCount <= maxPages && nextPageCursor != null; pageCount++) { Console.WriteLine("Processing page {0} for {1} {2}", pageCount, type.ToString().ToLower(), entity); Uri redditUrl = RedditUtils.BuildUrl(entity, type, "".Equals(nextPageCursor) ? null : nextPageCursor); RedditUtils.ParsePage(redditUrl, ref imageUrls, ref albumUrls, out nextPageCursor); if (nextPageCursor != null) { Console.WriteLine("nextPageCursor == {0}", nextPageCursor); } } Console.WriteLine("Parsed {0} image URL's and {1} album URL's from {2} pages", imageUrls.Count, albumUrls.Count, pageCount); // Parse out image URL's from the albums var imagesFromAlbums = albumUrls.SelectMany(albumUrl => ImgurUtils.ParseAlbum(new Uri(albumUrl))); imageUrls.UnionWith(imagesFromAlbums); Console.WriteLine("There are {0} total images after extracting {1} from albums", imageUrls.Count, imagesFromAlbums.ToList().Count); PageCountLabel.Content = pageCount; ImagesCountLabel.Content = imageUrls.Count; ImagesDataGrid.ItemsSource = imageUrls.Select(imageUrl => new ImgurUrl { URL = imageUrl }); }
public void TestBuildUrl() { Uri shouldBeNull = RedditUtils.BuildUrl(null, RedditEntity.Subreddit); Assert.IsNull(shouldBeNull); Uri subreddit = RedditUtils.BuildUrl("downloaddit", RedditEntity.Subreddit); Assert.AreEqual(new Uri("https://www.reddit.com/r/downloaddit.json"), subreddit); Uri user = RedditUtils.BuildUrl("downloaddit", RedditEntity.User); Assert.AreEqual(new Uri("https://www.reddit.com/user/downloaddit/submitted.json"), user); Uri cursor = RedditUtils.BuildUrl("downloaddit", RedditEntity.User, "testCursor"); Assert.AreEqual(new Uri("https://www.reddit.com/user/downloaddit/submitted.json?after=testCursor"), cursor); }
public void TestRedditParsePage() { HashSet <string> imageUrls = new HashSet <string>(); HashSet <string> albumUrls = new HashSet <string>(); string nextPageCursor; Uri redditUrl = RedditUtils.BuildUrl("downloaddit", RedditEntity.User); RedditUtils.ParsePage(redditUrl, ref imageUrls, ref albumUrls, out nextPageCursor); Assert.AreEqual(7, imageUrls.Count); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/S4C7aXQ.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/ZpfAWXh.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/7uhgGPV.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/p9rEApr.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/vK86CfT.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/QxzTjP1.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/0DIjbFw.jpg")); Assert.AreEqual(2, albumUrls.Count); Assert.IsTrue(albumUrls.Contains("http://imgur.com/gallery/iC1HR")); Assert.IsTrue(albumUrls.Contains("http://imgur.com/gallery/qLp4E")); Assert.IsNotNull(nextPageCursor); redditUrl = RedditUtils.BuildUrl("downloaddit", RedditEntity.User, nextPageCursor); RedditUtils.ParsePage(redditUrl, ref imageUrls, ref albumUrls, out nextPageCursor); Assert.AreEqual(10, imageUrls.Count); // 3 were added to the initial 7 Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/zpCdbSo.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/NAjPBsa.jpg")); Assert.IsTrue(imageUrls.Contains("https://i.imgur.com/7gnUdfU.jpg")); Assert.AreEqual(4, albumUrls.Count); // 2 were added to the initial 2 Assert.IsTrue(albumUrls.Contains("http://imgur.com/a/Rjjn2")); Assert.IsTrue(albumUrls.Contains("http://imgur.com/gallery/w32RT/new")); Assert.IsNull(nextPageCursor); }