public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jObject = JObject.Load(reader); TaggedImage result = new TaggedImage(); serializer.Populate(jObject.CreateReader(), result); JToken mediaJson = jObject["media"]; switch (result.MediaType) { case MediaType.Movie: result.Media = mediaJson.ToObject <SearchMovie>(); break; case MediaType.Tv: result.Media = mediaJson.ToObject <SearchTv>(); break; default: throw new ArgumentOutOfRangeException(); } return(result); }
public void TaggedImageConverter_Tv() { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new TaggedImageConverter()); SearchTv originalMedia = new SearchTv { OriginalName = "Hello world" }; TaggedImage original = new TaggedImage(); original.MediaType = MediaType.Tv; original.Media = originalMedia; string json = JsonConvert.SerializeObject(original, settings); TaggedImage result = JsonConvert.DeserializeObject <TaggedImage>(json, settings); Assert.NotNull(result); Assert.NotNull(result.Media); Assert.IsType <SearchTv>(result.Media); Assert.Equal(original.MediaType, result.MediaType); Assert.Equal(original.MediaType, result.Media.MediaType); SearchTv resultMedia = (SearchTv)result.Media; Assert.Equal(originalMedia.OriginalName, resultMedia.OriginalName); }
public void TaggedImageConverter_Movie() { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new TaggedImageConverter()); SearchMovie originalMedia = new SearchMovie { OriginalTitle = "Hello world" }; TaggedImage original = new TaggedImage { MediaType = originalMedia.MediaType, Media = originalMedia }; string json = JsonConvert.SerializeObject(original, settings); TaggedImage result = JsonConvert.DeserializeObject <TaggedImage>(json, settings); Assert.NotNull(result); Assert.NotNull(result.Media); Assert.IsType <SearchMovie>(result.Media); Assert.Equal(original.MediaType, result.MediaType); Assert.Equal(original.MediaType, result.Media.MediaType); SearchMovie resultMedia = (SearchMovie)result.Media; Assert.Equal(originalMedia.OriginalTitle, resultMedia.OriginalTitle); }
public void TestPersonsTaggedImages() { // Get config Config.Client.GetConfigAsync().Sync(); // Get images TestHelpers.SearchPages(i => Config.Client.GetPersonTaggedImagesAsync(IdHelper.BruceWillis, i).Result); SearchContainer <TaggedImage> images = Config.Client.GetPersonTaggedImagesAsync(IdHelper.BruceWillis, 1).Result; Assert.NotNull(images); Assert.NotNull(images.Results); TaggedImage image = images.Results.SingleOrDefault(s => s.FilePath == "/my81Hjt7NpZhaMX9bHi4wVhFy0v.jpg"); Assert.NotNull(image); Assert.True(Math.Abs(1.77777777777778 - image.AspectRatio) < double.Epsilon); Assert.True(TestImagesHelpers.TestImagePath(image.FilePath), "image.FilePath was not a valid image path, was: " + image.FilePath); Assert.Equal(1080, image.Height); Assert.Equal("4ea5d0792c058837cb000431", image.Id); Assert.Null(image.Iso_639_1); Assert.True(image.VoteAverage > 0); Assert.True(image.VoteCount > 0); Assert.Equal(1920, image.Width); Assert.Equal("backdrop", image.ImageType); Assert.Equal(MediaType.Movie, image.MediaType); Assert.NotNull(image.Media); Assert.IsType <SearchMovie>(image.Media); SearchMovie mediaBase = (SearchMovie)image.Media; Assert.Equal(false, mediaBase.Adult); Assert.True(TestImagesHelpers.TestImagePath(mediaBase.BackdropPath), "image.Media.BackdropPath was not a valid image path, was: " + mediaBase.BackdropPath); Assert.Equal(187, mediaBase.Id); Assert.Equal("en", mediaBase.OriginalLanguage); Assert.Equal("Sin City", mediaBase.OriginalTitle); Assert.Equal("Welcome to Sin City. This town beckons to the tough, the corrupt, the brokenhearted. Some call it dark… Hard-boiled. Then there are those who call it home — Crooked cops, sexy dames, desperate vigilantes. Some are seeking revenge, others lust after redemption, and then there are those hoping for a little of both. A universe of unlikely and reluctant heroes still trying to do the right thing in a city that refuses to care.", mediaBase.Overview); Assert.Equal(new DateTime(2005, 3, 31), mediaBase.ReleaseDate); Assert.True(TestImagesHelpers.TestImagePath(mediaBase.PosterPath), "image.Media.PosterPath was not a valid image path, was: " + mediaBase.PosterPath); Assert.True(mediaBase.Popularity > 0); Assert.Equal("Sin City", mediaBase.Title); Assert.Equal(false, mediaBase.Video); Assert.True(mediaBase.VoteAverage > 0); Assert.True(mediaBase.VoteCount > 0); Assert.NotNull(mediaBase.GenreIds); Assert.Equal(3, mediaBase.GenreIds.Count); Assert.True(mediaBase.GenreIds.Contains(28)); Assert.True(mediaBase.GenreIds.Contains(53)); Assert.True(mediaBase.GenreIds.Contains(80)); }
private static void SetupDomainImages(string prefix) { List <IImage> imageList = new List <IImage>(); #region Movie image objects TaggedImage m1 = new TaggedImage("Alien", prefix + "Alien.jpg"); m1.AddTag("Movie"); m1.AddTag("Alien"); TaggedImage m2 = new TaggedImage("Terminator", prefix + "Terminator.jpg"); m2.AddTag("Movie"); m2.AddTag("Terminator"); TaggedImage m3 = new TaggedImage("Inception", prefix + "Inception.jpg"); m3.AddTag("Movie"); m3.AddTag("Inception"); TaggedImage m4 = new TaggedImage("Seven", prefix + "Seven.jpg"); m4.AddTag("Movie"); m4.AddTag("Seven"); TaggedImage m5 = new TaggedImage("Arrival", prefix + "Arrival.jpg"); m5.AddTag("Movie"); m5.AddTag("Arrival"); imageList.Add(m1); imageList.Add(m2); imageList.Add(m3); imageList.Add(m4); imageList.Add(m5); #endregion #region Studio image objects TaggedImage s1 = new TaggedImage("Paramount", prefix + "Paramount.jpg"); s1.AddTag("Studio"); s1.AddTag("Paramount"); TaggedImage s2 = new TaggedImage("Fox", prefix + "Fox.jpg"); s2.AddTag("Studio"); s2.AddTag("Fox"); TaggedImage s3 = new TaggedImage("New Line Cinema", prefix + "NewLineCinema.jpg"); s3.AddTag("Studio"); s3.AddTag("New Line Cinema"); imageList.Add(s1); imageList.Add(s2); imageList.Add(s3); #endregion ServiceProvider.Images.SetImages(imageList); }
public async Task TestPersonsTaggedImagesAsync() { SearchContainer <TaggedImage> images = await TMDbClient.GetPersonTaggedImagesAsync(IdHelper.BruceWillis, 1); Assert.NotEmpty(images.Results); TestImagesHelpers.TestImagePaths(images.Results); TaggedImage image = images.Results.Single(s => s.FilePath == "/svIDTNUoajS8dLEo7EosxvyAsgJ.jpg"); Assert.IsType <SearchMovie>(image.Media); await Verify(image); }
public void TestPersonsTaggedImages() { // Get config _config.Client.GetConfig(); // Get images TestHelpers.SearchPages(i => _config.Client.GetPersonTaggedImages(BruceWillis, i)); SearchContainer <TaggedImage> images = _config.Client.GetPersonTaggedImages(BruceWillis, 1); Assert.IsNotNull(images); Assert.IsNotNull(images.Results); TaggedImage image = images.Results.SingleOrDefault(s => s.FilePath == "/my81Hjt7NpZhaMX9bHi4wVhFy0v.jpg"); Assert.IsNotNull(image); Assert.IsTrue(Math.Abs(1.77777777777778 - image.AspectRatio) < double.Epsilon); Assert.AreEqual("/my81Hjt7NpZhaMX9bHi4wVhFy0v.jpg", image.FilePath); Assert.AreEqual(1080, image.Height); Assert.AreEqual("4ea5d0792c058837cb000431", image.Id); Assert.IsNull(image.Iso_639_1); Assert.IsTrue(image.VoteAverage > 0); Assert.IsTrue(image.VoteCount > 0); Assert.AreEqual(1920, image.Width); Assert.AreEqual("backdrop", image.ImageType); Assert.AreEqual(MediaType.Movie, image.MediaType); Assert.IsNotNull(image.Media); Assert.AreEqual(false, image.Media.Adult); Assert.AreEqual("/my81Hjt7NpZhaMX9bHi4wVhFy0v.jpg", image.Media.BackdropPath); Assert.AreEqual(187, image.Media.Id); Assert.AreEqual("en", image.Media.OriginalLanguage); Assert.AreEqual("Sin City", image.Media.OriginalTitle); Assert.AreEqual("Sin City is a neo-noir crime thriller based on Frank Miller's graphic novel series of the same name.The film is primarily based on three of Miller's works: The Hard Goodbye, about a man who embarks on a brutal rampage in search of his one-time sweetheart's killer; The Big Fat Kill, which focuses on a street war between a group of prostitutes and a group of mercenaries; and That Yellow Bastard, which follows an aging police officer who protects a young woman from a grotesquely disfigured serial killer.", image.Media.Overview); Assert.AreEqual(new DateTime(2005, 3, 31), image.Media.ReleaseDate); Assert.AreEqual("/eCJkepVJslq1nEtqURLaC1zLPAL.jpg", image.Media.PosterPath); Assert.IsTrue(image.Media.Popularity > 0); Assert.AreEqual("Sin City", image.Media.Title); Assert.AreEqual(false, image.Media.Video); Assert.IsTrue(image.Media.VoteAverage > 0); Assert.IsTrue(image.Media.VoteCount > 0); Assert.IsNotNull(image.Media.GenreIds); Assert.AreEqual(3, image.Media.GenreIds.Count); Assert.IsTrue(image.Media.GenreIds.Contains(28)); Assert.IsTrue(image.Media.GenreIds.Contains(53)); Assert.IsTrue(image.Media.GenreIds.Contains(80)); }
private async Task <TaggedImage> GetTaggedImage(S3Object s3Object) { using (var scope = _logger.BeginScope($"{nameof(GetTaggedImage)}({JsonConvert.SerializeObject(s3Object)})")) { var tags = await GetFileTags(s3Object.Key); var result = new TaggedImage { FileName = s3Object.Key, Path = Path.GetDirectoryName(s3Object.Key), Tags = tags, SizeInKb = s3Object.Size / 1024, PresignedUrl = GeneratePresignedUrl(s3Object.Key) }; return(result); } }
public async Task TaggedImageConverter_Tv() { SearchTv originalMedia = new SearchTv { OriginalName = "Hello world" }; TaggedImage original = new TaggedImage(); original.MediaType = MediaType.Tv; original.Media = originalMedia; string json = Serializer.SerializeToString(original); TaggedImage result = Serializer.DeserializeFromString <TaggedImage>(json); Assert.IsType <SearchTv>(result.Media); await Verify(new { json, result }); }
public async Task TaggedImageConverter_Movie() { SearchMovie originalMedia = new SearchMovie { OriginalTitle = "Hello world" }; TaggedImage original = new TaggedImage { MediaType = originalMedia.MediaType, Media = originalMedia }; string json = Serializer.SerializeToString(original); TaggedImage result = Serializer.DeserializeFromString <TaggedImage>(json); Assert.IsType <SearchMovie>(result.Media); await Verify(new { json, result }); }
private static void SetupDomainImages(string prefix) { List <IImage> imageList = new List <IImage>(); #region Car image objects TaggedImage c1 = new TaggedImage("Red Sedan", prefix + "CarRedSedan.jpg"); c1.AddTag("Car"); c1.AddTag("Red"); c1.AddTag("Sedan"); c1.AddTag("Individual"); TaggedImage c2 = new TaggedImage("Blue Combi", prefix + "CarBlueCombi.jpg"); c2.AddTag("Car"); c2.AddTag("Blue"); c2.AddTag("Combi"); c2.AddTag("Family"); TaggedImage c3 = new TaggedImage("White Mini", prefix + "CarWhiteMini.jpg"); c3.AddTag("Car"); c3.AddTag("White"); c3.AddTag("Mini"); c3.AddTag("Family"); TaggedImage c4 = new TaggedImage("Green Combi", prefix + "CarGreenCombi.jpg"); c4.AddTag("Car"); c4.AddTag("Green"); c4.AddTag("Combi"); c4.AddTag("Family"); TaggedImage c5 = new TaggedImage("Purple Sport", prefix + "CarPurpleSport.jpg"); c5.AddTag("Car"); c5.AddTag("Purple"); c5.AddTag("Sport"); c5.AddTag("Family"); TaggedImage c6 = new TaggedImage("Yellow Sport", prefix + "CarYellowSport.jpg"); c6.AddTag("Car"); c6.AddTag("Yellow"); c6.AddTag("Sport"); c6.AddTag("Individual"); TaggedImage c7 = new TaggedImage("Black Sedan", prefix + "CarBlackSedan.jpg"); c7.AddTag("Car"); c7.AddTag("Black"); c7.AddTag("Sedan"); c7.AddTag("Family"); TaggedImage c8 = new TaggedImage("Light Blue Combi", prefix + "CarLightBlueCombi.jpg"); c8.AddTag("Car"); c8.AddTag("Light Blue"); c8.AddTag("Combi"); c8.AddTag("Family"); TaggedImage c9 = new TaggedImage("Magenta Pickup", prefix + "CarMagentaPickup.jpg"); c9.AddTag("Car"); c9.AddTag("Magenta"); c9.AddTag("Pickup"); c9.AddTag("Individual"); imageList.Add(c1); imageList.Add(c2); imageList.Add(c3); imageList.Add(c4); imageList.Add(c5); imageList.Add(c6); imageList.Add(c7); imageList.Add(c8); imageList.Add(c9); #endregion #region Employee image objects TaggedImage s1 = new TaggedImage("Ann", prefix + "Ann.jpg"); s1.AddTag("Employee"); s1.AddTag("Female"); TaggedImage s2 = new TaggedImage("Benny", prefix + "Benny.jpg"); s2.AddTag("Employee"); s2.AddTag("Male"); TaggedImage s3 = new TaggedImage("Carol", prefix + "Carol.jpg"); s3.AddTag("Employee"); s3.AddTag("Female"); TaggedImage s4 = new TaggedImage("Dan", prefix + "Dan.jpg"); s4.AddTag("Employee"); s4.AddTag("Male"); TaggedImage s5 = new TaggedImage("Eliza", prefix + "Eliza.jpg"); s5.AddTag("Employee"); s5.AddTag("Female"); imageList.Add(s1); imageList.Add(s2); imageList.Add(s3); imageList.Add(s4); imageList.Add(s5); #endregion #region Customer image objects TaggedImage cu1 = new TaggedImage("Allan", prefix + "Allan.png"); cu1.AddTag("Customer"); cu1.AddTag("Male"); TaggedImage cu2 = new TaggedImage("Betty", prefix + "Betty.png"); cu2.AddTag("Customer"); cu2.AddTag("Female"); TaggedImage cu3 = new TaggedImage("Carl", prefix + "Carl.png"); cu3.AddTag("Customer"); cu3.AddTag("Male"); TaggedImage cu4 = new TaggedImage("Denice", prefix + "Denice.png"); cu4.AddTag("Customer"); cu4.AddTag("Female"); TaggedImage cu5 = new TaggedImage("Eric", prefix + "Eric.png"); cu5.AddTag("Customer"); cu5.AddTag("Male"); TaggedImage cu6 = new TaggedImage("Fiona", prefix + "Fiona.png"); cu6.AddTag("Customer"); cu6.AddTag("Female"); imageList.Add(cu1); imageList.Add(cu2); imageList.Add(cu3); imageList.Add(cu4); imageList.Add(cu5); imageList.Add(cu6); #endregion ServiceProvider.Images.SetImages(imageList); }
IProcessingResult AddTextFileLinks(IBot bot, IProcessingResult pr, IChatMessage msg, string arg, string tag) { pr.ResponseOrigin = Helper.GetExecutingMethodName(this); pr.Respond = true; pr.Solved = true; string link = arg; if (!Helper.IsURLValid(link)) { link = Helper.TextBetween(link, @"/… <", @">"); if (!Helper.IsURLValid(link)) { pr.ResponseText = "Error: The link you provided didn't pass `Uri.TryCreate` test. Or I wasn't able to parse it correctly for some reason."; return(pr); } } // get the txt file string text = ""; try { using (var client = new WebClientHeadOnly()) { client.HeadOnly = true; string uri = link; byte[] body = client.DownloadData(uri); // note: should be 0-length string type = client.ResponseHeaders["content-type"]; if (type.StartsWith(@"text/")) // check for text/html or something... { client.HeadOnly = false; text = client.DownloadString(uri); Log("[↓] Downloaded text file with links successfully."); } else { pr.ResponseText = "Error: linked file was not in plan text format. MIME type: \"" + type + "\"."; return(pr); } } var dir = Path.Combine(ModuleDir, "Added links"); Helper.CreateDirectoryIfItDoesntExist(dir); var username = msg.UserName; string invalidPathChars = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); foreach (char c in invalidPathChars) { username = username.Replace(c.ToString(), ""); } var path = Path.Combine(dir, msg.MessageID + " " + msg.UserID + " " + username + ".txt"); var mj = JsonConvert.SerializeObject(msg, Formatting.Indented); var contents = mj + Environment.NewLine + text; File.WriteAllText(path, contents); } catch (Exception ex) { Log("[X] Exception while downloading the file:\n" + ex); pr.ResponseText = "Exception occured while downloading the text file."; return(pr); } // split text into separate links var lines = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); var allPostedImages = new List <string>(); foreach (var ti in postedImages) { allPostedImages.Add(ti.url); } var allUnpostedImages = new List <string>(); foreach (var ti in unpostedImages) { allUnpostedImages.Add(ti.url); } int postedLinksFound = 0; int unpostedLinksFound = 0; var valid = new List <TaggedImage>(); var invalid = new List <TaggedImage>(); var pstd = new List <string>(); // these are just for data lust var unpstd = new List <string>(); foreach (var line in lines) { var words = line.Split(' '); var url = words[0]; var tagsonly = line.Replace(url, "").Trim().Split(' '); var tags = new List <string>(tagsonly); // check if it has been posted before or is in unposted links collection if (allPostedImages.Contains(url)) { postedLinksFound++; pstd.Add(url); continue; } if (allUnpostedImages.Contains(url)) { unpostedLinksFound++; unpstd.Add(url); continue; } var ti = new TaggedImage(); ti.url = url; ti.uploaderUserID = msg.UserID; ti.uploaderUserName = msg.UserName; ti.uploadDateUTC = DateTime.UtcNow; if (tag != null) { ti.tag = tag; } if (Helper.IsURLValid(url)) { valid.Add(ti); } else { invalid.Add(ti); } } unpostedImages.AddRange(valid); Log("[…] Processed " + lines.Length + " lines, found " + invalid.Count + " invalid, " + postedLinksFound + " posted, " + unpostedLinksFound + " unposted and " + valid.Count + " new links."); Save(); // report result string reply = "Links processed: " + lines.Length + ", valid: " + valid.Count + ", invalid: " + invalid.Count + ". Posted: " + pstd.Count + ", unposted: " + unpstd.Count + ". New links added: " + valid.Count + "."; if (tag != null) { reply += " Images have been assigned tag \"" + tag + "\"."; } pr.ResponseText = reply; return(pr); }