/// <summary> /// Sets the revisions to diff. /// </summary> public void SetRevisions(Revision revision1, Revision revision2) { if (revision1 == null) { throw new ArgumentNullException(nameof(revision1)); } if (revision2 == null) { throw new ArgumentNullException(nameof(revision2)); } Debug.Assert(revision1.Page.Site == SiteContext.GetSiteAsync().Result); Debug.Assert(revision1.Page.Site == revision2.Page.Site); RevisionId1 = revision1.Id; RevisionId2 = revision2.Id; DeltaContentLength = revision2.ContentLength - revision1.ContentLength; if (revision1.Page.Title == revision2.Page.Title) { Title = Tx.T("page diff.title", "name", revision1.Page.Title); } else { Title = Tx.T("page diff.general title", "name1", revision1.Page.Title, "name2", revision2.Page.Title); } Revision1 = revision1; Revision2 = revision2; // Just throw the rest of the job to TextDiffViewer… }
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; } }
private async Task RefreshSiteInfoAsync() { IsBusy = true; Status = Tx.T("please wait"); try { await SiteContext.GetSiteAsync(); Title = ToolTip = SiteContext.DisplayName; } catch (Exception ex) { Status = Utility.GetExceptionMessage(ex); } finally { IsBusy = false; } InvalidateRecentActivities(true); }
/// <summary> /// Sets the wiki page to edit. /// </summary> public async Task SetWikiPageAsync(string title) { if (title == null) { throw new ArgumentNullException(nameof(title)); } IsBusy = true; try { Title = title; var site = await SiteContext.GetSiteAsync(); WikiPage = new Page(site, title); Title = WikiPage.Title; ToolTip = WikiPage.Title + " - " + SiteContext.DisplayName; await RefetchPageAsync(true, true); } catch (Exception ex) { Status = Utility.GetExceptionMessage(ex); } IsBusy = false; }
/// <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; } }