Beispiel #1
0
        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);
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        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));
        }
Beispiel #8
0
        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);
            }
        }
Beispiel #9
0
        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
            });
        }
Beispiel #10
0
        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
            });
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
    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);
    }