Beispiel #1
0
 /// <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…
 }
Beispiel #2
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;
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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;
        }
Beispiel #5
0
        /// <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;
            }
        }