コード例 #1
0
ファイル: Program.cs プロジェクト: Umqra/WikiClientLibrary
        static async Task HelloRecentChanges()
        {
            // Create a MediaWiki API client.
            var wikiClient = new WikiClient();
            // Create a MediaWiki Site instance.
            var site = new WikiSite(wikiClient, "https://en.wikipedia.org/w/api.php");
            await site.Initialization;
            var rcg = new RecentChangesGenerator(site)
            {
                TypeFilters    = RecentChangesFilterTypes.Create,
                PaginationSize = 50, // We already know we're not going to fetch results as many as 500 or 5000
                // so this will help.
            };
            // List the 10 latest new pages
            var pages = await rcg.EnumPagesAsync().Take(10).ToList();

            Console.WriteLine("New pages");
            foreach (var p in pages)
            {
                Console.WriteLine("{0, -30} {1, 8}B {2}", p, p.ContentLength, p.LastTouched);
            }
            // List the 10 latest recent changes
            rcg.TypeFilters = RecentChangesFilterTypes.All;
            var rcs = await rcg.EnumItemsAsync().Take(10).ToList();

            Console.WriteLine();
            Console.WriteLine("Recent changes");
            foreach (var rc in rcs)
            {
                Console.WriteLine(rc);
            }
        }
コード例 #2
0
        public async Task WikiaRecentChangesListTest()
        {
            var site      = await WikiaTestSiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
            };
            var rc = generator.EnumRecentChanges().Take(2000).ToList();

            ShallowTrace(rc, 1);
        }
コード例 #3
0
        public async Task WpTest2RecentChangesGeneratorTest1()
        {
            var site      = await WpTest2SiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true, PagingSize = 20
            };
            var pages = generator.EnumPages().Take(1000).ToList();

            TracePages(pages);
            AssertTitlesDistinct(pages);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: Umqra/WikiClientLibrary
        static async Task InteractivePatrol()
        {
            // Patrol the last unpatrolled change.
            // Usually a user should have the patrol right to perform such operation.

            // Create a MediaWiki API client.
            var wikiClient = new WikiClient();
            // Create a MediaWiki Site instance.
            var site = new WikiSite(wikiClient, Input("Wiki site API URL"));
            await site.Initialization;
            await site.LoginAsync(Input("User name"), Input("Password"));

            var rcg = new RecentChangesGenerator(site)
            {
                TypeFilters     = RecentChangesFilterTypes.Create,
                PaginationSize  = 5,
                PatrolledFilter = PropertyFilterOption.WithoutProperty
            };
            // List the first unpatrolled result.
            var rc = await rcg.EnumItemsAsync().FirstOrDefault();

            if (rc == null)
            {
                Console.WriteLine("Nothing to patrol.");
                return;
            }
            Console.WriteLine("Unpatrolled:");
            Console.WriteLine(rc);
            // Show the involved revisions.
            if (rc.OldRevisionId > 0 && rc.RevisionId > 0)
            {
                var rev = await Revision.FetchRevisionsAsync(site, rc.OldRevisionId, rc.RevisionId).ToList();

                // Maybe we'll use some 3rd party diff lib
                Console.WriteLine("Before, RevId={0}, {1}", rev[0].Id, rev[0].TimeStamp);
                Console.WriteLine(rev[0].Content);
                Console.WriteLine("After, RevId={0}, {1}", rev[1].Id, rev[1].TimeStamp);
                Console.WriteLine(rev[1].Content);
            }
            else if (rc.RevisionId > 0)
            {
                var rev = await Revision.FetchRevisionAsync(site, rc.RevisionId);

                Console.WriteLine("RevId={0}, {1}", rev.Id, rev.TimeStamp);
                Console.WriteLine(rev.Content);
            }
            if (Confirm("Mark as patrolled?"))
            {
                await rc.PatrolAsync();

                Console.WriteLine("The change {0} has been marked as patrolled.", (object)rc.Title ?? rc.Id);
            }
        }
コード例 #5
0
        public async Task WikiaRecentChangesListTest()
        {
            var site      = await WikiaTestSiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
                PaginationSize    = 500
            };
            var rc = await generator.EnumItemsAsync().Take(2000).ToListAsync();

            ShallowTrace(rc, 1);
        }
コード例 #6
0
        private async Task RefreshRecentActivitiesAsync(int msDelay, int token)
        {
            if (msDelay > 0)
            {
                await Task.Delay(msDelay);
            }
            if (token != RefreshRecentActivitiesToken)
            {
                return;
            }
            while (IsBusy)
            {
                // Wait until the previous RefreshRecentActivitiesAsync has finished/cancelled.
                if (token != RefreshRecentActivitiesToken)
                {
                    return;
                }
                await Task.Delay(2000);
            }
            IsBusy = true;
            Status = Tx.T("please wait");
            try
            {
                var rcg = new RecentChangesGenerator(await SiteContext.GetSiteAsync())
                {
                    PagingSize = RecentChangesPagingSize + 10,
                };
                if (token != RefreshRecentActivitiesToken)
                {
                    return;
                }
                RecentChangesFilter.ConfigureGenerator(rcg);
                var rcs = await rcg.EnumRecentChangesAsync()
                          .Take(RecentChangesPagingSize).ToArray();

                if (token != RefreshRecentActivitiesToken)
                {
                    return;
                }
                RecentChangesList.Clear();
                foreach (var rc in rcs)
                {
                    var vm   = _ViewModelFactory.CreateRecentChange(rc, SiteContext);
                    var date = rc.TimeStamp.Date;
                    RecentChangesList.Add(vm);
                }
            }
            finally
            {
                IsBusy = false;
                Status = null;
            }
        }
コード例 #7
0
        public async Task WpTest2PatrolTest1()
        {
            var site      = await WpTest2SiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
            };
            var rc = await generator.EnumItemsAsync().Take(2).ToList();

            Skip.If(rc.Count < 1);
            // We haven't logged in.
            await Assert.ThrowsAsync <UnauthorizedOperationException>(() => rc[0].PatrolAsync());
        }
コード例 #8
0
        public async Task WikiaRecentChangesGeneratorTest1()
        {
            var site      = await WikiaTestSiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
                TypeFilters       = RecentChangesFilterTypes.Edit
            };
            var pages = generator.EnumPages().Take(2000).ToList();

            TracePages(pages);
            // Sometimes the assertion fails for wikia.
            AssertTitlesDistinct(pages);
        }
コード例 #9
0
        public async Task WpTest2PatrolTest1()
        {
            var site      = await WpTest2SiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
            };
            var rc = generator.EnumRecentChanges().Take(2).ToList();

            if (rc.Count < 1)
            {
                Utility.Inconclusive();
            }
            await Assert.ThrowsAsync <UnauthorizedOperationException>(() => rc[0].PatrolAsync());
        }
コード例 #10
0
        public async Task WpLzhRecentChangesListTest()
        {
            var site      = await WpLzhSiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
                BotFilter         = PropertyFilterOption.WithProperty,
                MinorFilter       = PropertyFilterOption.WithProperty,
            };
            var rc = generator.EnumRecentChanges().Take(2000).ToList();

            ShallowTrace(rc, 1);
            foreach (var p in rc)
            {
                var flags = p.Flags;
                Assert.True(flags != RevisionFlags.None);
                Assert.True(flags.HasFlag(RevisionFlags.Bot));
                Assert.True(flags.HasFlag(RevisionFlags.Minor));
            }
        }
コード例 #11
0
 public void ConfigureGenerator(RecentChangesGenerator generator)
 {
     if (generator == null)
     {
         throw new ArgumentNullException(nameof(generator));
     }
     generator.MinorFilter      = ToFilterOption(ShowMinor);
     generator.BotFilter        = ToFilterOption(ShowBots);
     generator.AnonymousFilter  = ToFilterOption(ShowAnonymous);
     generator.PatrolledFilter  = ToFilterOption(ShowPatrolled);
     generator.ExcludedUserName = null;
     generator.UserName         = null;
     if (ShowMyEdits == true)
     {
         generator.UserName = generator.Site.UserInfo.Name;
     }
     else if (ShowMyEdits == false)
     {
         generator.ExcludedUserName = generator.Site.UserInfo.Name;
     }
 }
コード例 #12
0
        public async Task WpLzhRecentChangesGeneratorTest1()
        {
            var site      = await WpLzhSiteAsync;
            var generator = new RecentChangesGenerator(site)
            {
                LastRevisionsOnly = true,
                // BotFilter = PropertyFilterOption.WithProperty,
                MinorFilter     = PropertyFilterOption.WithProperty,
                AnonymousFilter = PropertyFilterOption.WithoutProperty,
                TypeFilters     = RecentChangesFilterTypes.Create | RecentChangesFilterTypes.Edit,
            };
            var pages = generator.EnumPages(PageQueryOptions.FetchContent).Take(100).ToList();

            TracePages(pages);
            AssertTitlesDistinct(pages);
            foreach (var p in pages)
            {
                var flags = p.LastRevision.Flags;
                Assert.True(flags != RevisionFlags.None);
                Assert.False(flags.HasFlag(RevisionFlags.Anonymous));
                Assert.True(flags.HasFlag(RevisionFlags.Minor));
            }
        }