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)); } } }
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); } } } }); }); }
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); }
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)); }
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)); }
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); }
public MockComicService(XKCDComic result) { ReturnResult = result; }
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)); }
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)); }
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)); }
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); }