Esempio n. 1
0
        static int DoShowSingle(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);
            }

            River river = null;

            if (args["noload"].Flag)
            {
                // Make sure to follow redirects...
                for (int i = 0; i < 30; i++)
                {
                    var cleanRiver = new River(metadata: new RiverFeedMeta(originUrl: feedUrl));
                    river = new RiverLoader().UpdateAsync(cleanRiver).Result;
                    if (river.Metadata.LastStatus != HttpStatusCode.Moved)
                    {
                        break;
                    }
                    feedUrl = river.Metadata.OriginUrl;
                    Console.WriteLine("(Following redirect to {0})", feedUrl);
                }
            }
            else
            {
                var feedStore = new RiverFeedStore();
                river = feedStore.LoadRiverForFeed(feedUrl).Result;
            }

            if (river.UpdatedFeeds.Feeds.Count > 0)
            {
                foreach (FeedSegment feed in river.UpdatedFeeds.Feeds)
                {
                    DumpFeed(feed);
                }
            }
            else
            {
                Console.WriteLine("No data for {0}", feedUrl);
            }

            return(0);
        }
Esempio n. 2
0
        static int DoUpdateForUser(ParsedOpts args)
        {
            string user = args["user"].Value;

            var subscriptionStore = new UserProfileStore();
            var parser            = new RiverLoader();

            Console.WriteLine("Refreshing for {0}...", user);
            Stopwatch loadTimer = Stopwatch.StartNew();

            UserProfile profile = subscriptionStore.GetProfileFor(user).Result;
            var         tasks   = from rd in profile.Rivers select parser.RefreshAggregateRiverWithFeeds(rd.Id, rd.Feeds);

            Task.WhenAll(tasks).Wait();

            Console.WriteLine("Refreshed {0} rivers in {1}", profile.Rivers.Count, loadTimer.Elapsed);
            return(0);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
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);
        }