static int DoSubscribe(ParsedOpts args) { string user = args["user"].Value; string feed = args["feed"].Value; string riverName = args["river"].Value; // Check feed. var parser = new RiverLoader(); var feedStore = new RiverFeedStore(); River feedRiver = parser.FetchAndUpdateRiver(new Uri(feed)).Result; if (feedRiver.Metadata.LastStatus < (HttpStatusCode)200 || feedRiver.Metadata.LastStatus >= (HttpStatusCode)400) { Console.Error.WriteLine("Could not fetch feed {0}", feed); return(-1); } var subscriptionStore = new UserProfileStore(); UserProfile profile = subscriptionStore.GetProfileFor(user).Result; RiverDefinition river = profile.Rivers.FirstOrDefault(r => r.Name == riverName); UserProfile newProfile; if (river == null) { newProfile = profile.With( rivers: profile.Rivers.Add( new RiverDefinition( name: riverName, id: SyndicationUtil.MakeID(), feeds: new Uri[] { feedRiver.Metadata.OriginUrl }))); } else { var newRiver = river.With(feeds: river.Feeds.Add(feedRiver.Metadata.OriginUrl)); newProfile = profile.With(rivers: profile.Rivers.Replace(river, newRiver)); } subscriptionStore.SaveProfileFor(user, newProfile).Wait(); Console.WriteLine("OK"); return(0); }
static int DoUpdateSingleFeed(ParsedOpts args) { Uri feedUrl; if (!Uri.TryCreate(args["feed"].Value, UriKind.Absolute, out feedUrl)) { Console.Error.WriteLine("Feed not a valid url: {0}", args["feed"].Value); return(100); } var parser = new RiverLoader(); Console.WriteLine("Refreshing {0}...", feedUrl); Stopwatch loadTimer = Stopwatch.StartNew(); parser.FetchAndUpdateRiver(feedUrl).Wait(); Console.WriteLine("Refreshed {0} in {1}", feedUrl, loadTimer.Elapsed); return(0); }