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); } }
/// <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; } }