Exemple #1
0
        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);
            }
        }
Exemple #2
0
        public async Task WpLzhFetchRevisionsTest()
        {
            var site       = await WpLzhSiteAsync;
            var revIds     = new[] { 248199, 248197, 255289 };
            var pageTitles = new[] { "清", "清", "香草" };
            var rev        = await Revision.FetchRevisionsAsync(site, revIds).ToList();

            ShallowTrace(rev);
            Assert.True(rev.Select(r => r.Id).SequenceEqual(revIds));
            Assert.True(rev.Select(r => r.Page.Title).SequenceEqual(pageTitles));
            // Asserts that pages with the same title shares the same reference
            // Or an Exception will raise.
            var pageDict = rev.Select(r => r.Page).Distinct().ToDictionary(p => p.Title);
        }
        /// <summary>
        /// Sets the revision ids to diff. Note that even the pages can be different from each other.
        /// </summary>
        public async Task SetRevisionsAsync(int revisionId1, int revisionId2)
        {
            RevisionId1 = revisionId1;
            RevisionId2 = revisionId2;
            Revision1   = Revision2 = null;
            Title       = Tx.T("page diff.general title", "name1", revisionId1.ToString(), "name2", revisionId2.ToString());
            IsBusy      = true;
            Status      = Tx.T("page diff.fetching", "revs", Tx.EnumAnd(revisionId1.ToString(), revisionId2.ToString()));
            try
            {
                Revision r1, r2;
                var      site = await SiteContext.GetSiteAsync();

                if (revisionId1 == revisionId2)
                {
                    // O' Rly?
                    r1 = r2 = await Revision.FetchRevisionAsync(site, revisionId1);
                }
                else
                {
                    var rs = await Revision.FetchRevisionsAsync(site, revisionId1, revisionId2).ToArray();

                    r1 = rs[0];
                    r2 = rs[1];
                }
                SetRevisions(r1, r2);
                Status = null;
            }
            catch (Exception ex)
            {
                Status = ex.Message;
            }
            finally
            {
                IsBusy = false;
            }
        }