Пример #1
0
        private void revisionButton_Click(object sender, EventArgs e)
        {
            WikiAPI api = new WikiAPI();
            int     revId;

            if (Int32.TryParse(revisionText.Text, out revId))
            {
                revisionList.DataSource = api.GetRevisions(titleText.Text, revId);
            }
            else
            {
                revisionList.DataSource = api.GetRevisions(titleText.Text);
            }
            revisionList.DisplayMember = "RevId";
        }
        private void checkAndUpdateWikiPage(PageReadData data)
        {
            // First check revID
            WikiAPI api    = new WikiAPI();
            var     revIDs = api.GetRevisions(data.WikiPage, data.LastRevision).OrderBy(x => x.RevId).ToList();

            if (revIDs.Count <= 1)
            {
                // No newer revID
                return;
            }

            var currentRevID = revIDs.Last().RevId;

            if (data.LastRevision == -1)
            {
                // First check send email
                sendEmail(data);
                refreshDatabase(data, true, currentRevID);
                return;
            }

            string currentPageContent = api.GetContent(data.WikiPage, currentRevID);
            string prevPageContent    = api.GetContent(data.WikiPage, data.LastRevision);

            MatchCollection words1 = Regex.Matches(currentPageContent, @"\b(\w+)\b");
            MatchCollection words2 = Regex.Matches(prevPageContent, @"\b(\w+)\b");

            var hs1 = new HashSet <string>(words1.Cast <Match>().Select(m => m.Value));
            var hs2 = new HashSet <string>(words2.Cast <Match>().Select(m => m.Value));

            var hs1_mod = new HashSet <string>(hs1);
            var hs2_mod = new HashSet <string>(hs2);

            hs2_mod.ExceptWith(hs1);
            int prevVersionExtraWordCounter = hs2_mod.Count;

            hs1_mod.ExceptWith(hs2);
            int newVersionExtraWordCounter = hs1_mod.Count;

            // Calculate diff, if bigger then sensititvity, then send email
            if (newVersionExtraWordCounter + prevVersionExtraWordCounter > data.Sensitivity)
            {
                sendEmail(data);
                refreshDatabase(data, true, currentRevID);
            }
            else
            {
                refreshDatabase(data);
            }
        }