Esempio n. 1
0
 private static XKCDComic _download_serialized_json_data <T>(string url)
 {
     using (var w = new WebClient())
     {
         var json_data = string.Empty;
         // attempt to download JSON data as a string
         try
         {
             json_data = w.DownloadString(url);
         }
         catch (Exception)
         {
         }
         var comic = new XKCDComic();
         if (string.IsNullOrEmpty(json_data))
         {
             comic.img = "https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Bundesstra%C3%9Fe_404_number.svg/2000px-Bundesstra%C3%9Fe_404_number.svg.png";
             comic.alt = "Sorry, I couldn't find that comic number.";
             return(comic);
         }
         else
         {
             return(JsonConvert.DeserializeObject <XKCDComic>(json_data));
         }
     }
 }
Esempio n. 2
0
        public override void Install(ModuleManager manager)
        {
            _manager = manager;
            _client  = manager.Client;



            _manager.CreateCommands("", cgb =>
            {
                cgb.MinPermissions((int)PermissionLevel.User);

                cgb.CreateCommand("xkcd")
                .Description("Post either the latest comic from XKCD, or the specified comic number. rnd will provide a random comic.")
                .Parameter("comic", ParameterType.Optional)
                .Do(async e =>
                {
                    if (Beta.CheckModuleState(e, "comic", e.Channel.IsPrivate))
                    {
                        if (e.GetArg("comic") == "")
                        {
                            XKCDComic comic = _download_serialized_json_data <XKCDComic>("http://xkcd.com/info.0.json");
                            await e.Channel.SendMessage(comic.img);
                            await e.Channel.SendMessage(comic.alt);
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else if (e.GetArg("comic") == "rnd")
                        {
                            XKCDComic comic = _download_serialized_json_data <XKCDComic>("http://xkcd.com/info.0.json");
                            int latestComic = comic.num;
                            int random      = new Random().Next(1, latestComic + 1);
                            string url      = String.Format("http://xkcd.com/{0}/info.0.json", random);
                            comic           = _download_serialized_json_data <XKCDComic>(url);
                            await e.Channel.SendMessage(comic.img);
                            await e.Channel.SendMessage(comic.alt);
                            Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                        }
                        else
                        {
                            int comicnum;
                            if (Int32.TryParse(e.GetArg("comic"), out comicnum))
                            {
                                string url      = String.Format("http://xkcd.com/{0}/info.0.json", e.GetArg("comic").Trim());
                                XKCDComic comic = _download_serialized_json_data <XKCDComic>(url);
                                await e.Channel.SendMessage(comic.img);
                                await e.Channel.SendMessage(comic.alt);
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, 1);
                            }
                            else
                            {
                                await e.Channel.SendMessage("uh... sorry, but that doesn't look like a number " + Nicknames.GetNickname(Beta.UserStateRepository.GetUserState(e.User.Id).Favorability) + ".");
                                Beta.UserStateRepository.ModifyUserFavorability(e.User.Id, -1);
                            }
                        }
                    }
                });
            });
        }
Esempio n. 3
0
        public void AddComic_Normal_SelectsAddedComic()
        {
            var result = new XKCDComic(500);

            var viewModel = new MainWindowViewModel(new MockInteractionService(), new MockComicService(result), new MockPropertiesService());
            viewModel.AddComicCommand.Execute(null);

            Assert.AreEqual(viewModel.SelectedComic, result);
        }
Esempio n. 4
0
        public void AddComic_Normal_AddsComic()
        {
            var result = new XKCDComic(500);

            var viewModel = new MainWindowViewModel(new MockInteractionService(), new MockComicService(result), new MockPropertiesService());
            viewModel.AddComicCommand.Execute(null);

            Assert.AreEqual(viewModel.Comics.Count, 1);
            Assert.IsTrue(viewModel.Comics.Contains(result));
        }
Esempio n. 5
0
        public void AddCurrentComic_Normal_AddsComic()
        {
            var current = new XKCDComic(500);

            var viewModel = new MainWindowViewModel(new MockInteractionService(), new MockComicService(current), new MockPropertiesService());
            viewModel.LoadedCommand.ExecuteAsync(null).Wait();
            viewModel.AddCurrentComicCommand.ExecuteAsync(null).Wait();

            Assert.AreEqual(viewModel.Comics.Count, 1);
            Assert.IsTrue(viewModel.Comics.Contains(current));
        }
Esempio n. 6
0
        public void AddRandomComic_Type0WhenEmpty_AddsComic()
        {
            var current = new XKCDComic(500);

            var viewModel = new MainWindowViewModel(new MockInteractionService(), new MockComicService(current), new MockPropertiesService());
            viewModel.LoadedCommand.ExecuteAsync(null).Wait();
            viewModel.AddRandomComicCommand.ExecuteAsync("0").Wait();

            Assert.AreEqual(viewModel.Comics.Count, 1);

            var comicNumber = viewModel.Comics[0].Number;

            Assert.IsTrue(comicNumber > 1);
            Assert.IsTrue(comicNumber <= current.Number);
        }
Esempio n. 7
0
		public MockComicService(XKCDComic result)
		{
			ReturnResult = result;
		}
Esempio n. 8
0
        public void AddRandomComic_Type0WhenFull_SelectsComic()
        {
            int totalComics = 10;
            var allComics = new List<XKCDComic>();

            var comicService = new MockComicService(new XKCDComic(totalComics));
            var viewModel = new MainWindowViewModel(new MockInteractionService(), comicService, new MockPropertiesService());
            viewModel.LoadedCommand.ExecuteAsync(null).Wait();

            for (int i = 1; i <= totalComics; i++)
            {
                var comic = new XKCDComic(i);
                allComics.Add(comic);
                viewModel.Comics.Add(comic);
            }

            viewModel.AddRandomComicCommand.ExecuteAsync("0").Wait();

            Assert.AreEqual(viewModel.Comics.Count, totalComics);
            Assert.IsTrue(allComics.Contains(viewModel.SelectedComic));
        }
Esempio n. 9
0
        public void OpenLink_Normal_OpensLink()
        {
            var linkTemplate = "http://www.xkcd.com/{0}/";
            var comic = new XKCDComic(500);
            var interationService = new MockInteractionService();

            var viewModel = new MainWindowViewModel(interationService, new MockComicService(comic), new MockPropertiesService());
            viewModel.Comics.Add(comic);
            viewModel.SelectedComic = comic;

            viewModel.OpenLinkCommand.Execute(linkTemplate);

            Assert.AreEqual(interationService.LastStartedProcess, string.Format(linkTemplate, comic.Number));
        }
Esempio n. 10
0
        public void Loaded_WhenLoadCurrentIsTrue_LoadsCurrent()
        {
            var current = new XKCDComic(500);
            var properties = new MockPropertiesService
            {
                LoadCurrent = true
            };

            var viewModel = new MainWindowViewModel(new MockInteractionService(), new MockComicService(current), properties);
            viewModel.LoadedCommand.ExecuteAsync(null).Wait();

            Assert.AreEqual(viewModel.Comics.Count, 1);
            Assert.IsTrue(viewModel.Comics.Contains(current));
        }
Esempio n. 11
0
        public void AddRandomComic_Type2WhenEmpty_DoesNothing()
        {
            var current = new XKCDComic(10);

            var viewModel = new MainWindowViewModel(new MockInteractionService(), new MockComicService(current), new MockPropertiesService());
            viewModel.LoadedCommand.ExecuteAsync(null).Wait();
            viewModel.AddRandomComicCommand.ExecuteAsync("2").Wait();

            Assert.AreEqual(viewModel.Comics.Count, 0);
            Assert.IsNull(viewModel.SelectedComic);
        }