private async Task <Listing> GetUserMultis(Listing listing) { var targetUri = string.Format("http://www.reddit.com/api/multi/mine.json"); await ThrottleRequests(); await EnsureRedditCookie(); var subreddits = await _httpClient.GetStringAsync(targetUri); if (subreddits == "[]") { return(listing); } else { var userMultis = JsonConvert.DeserializeObject <Thing[]>(subreddits); foreach (var thing in userMultis) { var labeledMulti = new TypedThing <LabeledMulti>(thing); var multiPath = labeledMulti.Data.Path; multiPath = multiPath.Replace("/user/" + _userState.Username, "/me"); listing.Data.Children.Insert(0, (new Thing { Kind = "t5", Data = new Subreddit { DisplayName = labeledMulti.Data.Name, HeaderImage = "/Assets/multireddit.png", Title = labeledMulti.Data.Name, Url = multiPath, Headertitle = labeledMulti.Data.Name, Over18 = false } })); } } return(listing); }
private async Task <string> GetSubredditImpl(string name, string where, CancellationToken token, IProgress <float> progress) { name = name.ToLower(); //no info for the front page if (name == "/") { return(JsonConvert.SerializeObject(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { Headertitle = name } }))); } else if (name == "all" || name == "/r/all") { return(JsonConvert.SerializeObject(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { Headertitle = "all", Url = "/r/all", Name = "all", DisplayName = "all", Title = "all", Id = "t5_fakeid" } }))); } if (!name.Contains("/m/")) { //this is passed in empty so we can get back the redirect url for things like /r/random var body = new Dictionary <string, string>(); var subreddit = await GetAuthedString(string.Format("/r/{0}/about{1}.json", MakePlainSubredditName(name), where != null ? "/" + where : ""), token, progress, body); if (body.ContainsKey("redirected-url")) { } //error page if (subreddit.ToLower().StartsWith("<!doctype html>")) { throw new RedditNotFoundException(name); } else { return(subreddit); } } else { if (name.StartsWith("/")) { name = name.TrimStart('/'); } if (name.StartsWith("me/")) { name = name.Replace("me/", "user/" + _userState.Username + "/"); } var description = await GetAuthedString(string.Format("/api/multi/{0}/description", name), token, progress); var labeledMulti = await GetAuthedString(string.Format("/api/multi/{0}/", name), token, progress); //error page if (description.ToLower().Contains("\"reason\": \"MULTI_NOT_FOUND\"") || labeledMulti.ToLower().Contains("\"reason\": \"MULTI_NOT_FOUND\"")) { throw new RedditNotFoundException(name); } else { var typedMulti = new TypedThing <LabeledMulti>(JsonConvert.DeserializeObject <Thing>(labeledMulti)); var typedMultiDescription = new TypedThing <LabeledMultiDescription>(JsonConvert.DeserializeObject <Thing>(labeledMulti)); var multiPath = typedMulti.Data.Path; if (!string.IsNullOrWhiteSpace(_userState.Username)) { multiPath = multiPath.Replace("/user/" + _userState.Username, "/me"); } return(JsonConvert.SerializeObject(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { Description = typedMultiDescription.TypedData.BodyMD, DisplayName = typedMulti.Data.Name, Title = typedMulti.Data.Name, Url = multiPath, Headertitle = typedMulti.Data.Name, Over18 = false } }))); } } }
public async Task <TypedThing <Subreddit> > GetSubreddit(string name) { //no info for the front page if (name == "/") { return(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { Headertitle = name } })); } else if (name == "all") { return(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { Headertitle = "all", Url = "/r/all", Name = "all", DisplayName = "all", Title = "all", Id = "t5_fakeid" } })); } string targetUri; if (!name.Contains("/m/")) { targetUri = string.Format("http://www.reddit.com/r/{0}/about.json", name); await ThrottleRequests(); await EnsureRedditCookie(); var subreddit = await _httpClient.GetStringAsync(targetUri); //error page if (subreddit.ToLower().StartsWith("<!doctype html>")) { return(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { Headertitle = name, Title = name, Url = string.Format("r/{0}", name), Created = DateTime.Now, CreatedUTC = DateTime.UtcNow, DisplayName = name, Description = "there doesnt seem to be anything here", Name = name, Over18 = false, PublicDescription = "there doesnt seem to be anything here", Subscribers = 0 } })); } else { return(new TypedThing <Subreddit>(JsonConvert.DeserializeObject <Thing>(subreddit))); } } else { if (name.StartsWith("/")) { name = name.TrimStart('/'); } if (name.StartsWith("me/")) { name = name.Replace("me/", "user/" + _userState.Username + "/"); } targetUri = string.Format("http://www.reddit.com/api/multi/{0}.json", name); await ThrottleRequests(); await EnsureRedditCookie(); var subreddit = await _httpClient.GetStringAsync(targetUri); //error page if (subreddit.ToLower().StartsWith("<!doctype html>")) { throw new RedditNotFoundException(name); } else { var labeledMulti = new TypedThing <LabeledMulti>(JsonConvert.DeserializeObject <Thing>(subreddit)); var multiPath = labeledMulti.Data.Path; if (!string.IsNullOrWhiteSpace(_userState.Username)) { multiPath = multiPath.Replace("/user/" + _userState.Username, "/me"); } return(new TypedThing <Subreddit>(new Thing { Kind = "t5", Data = new Subreddit { DisplayName = labeledMulti.Data.Name, Title = labeledMulti.Data.Name, Url = multiPath, Headertitle = labeledMulti.Data.Name, Over18 = false } })); } } }