private void button3_Click(object sender, RibbonControlEventArgs e) { Word.Range toCrowdproof = Globals.Soylent.Application.Selection.Range; int jobNumber = Globals.Soylent.jobManager.generateJobNumber(); //CrowdproofData newHIT = new CrowdproofData(toCrowdproof, jobNumber); //CrowdproofJob c = new CrowdproofJob(newHIT, jobNumber); CrowdproofJob c = new CrowdproofJob(jobNumber, toCrowdproof); Globals.Soylent.HITView.Visible = true; }
void Application_DocumentOpen(Word.Document doc) { SoylentPanel soylent = soylentMap[doc]; List<string> rawHITs = new List<string>(); //One problem: loads jobs in reverse order. This is easy to fix. But is either correct? foreach (Microsoft.Office.Core.CustomXMLPart xmlPart in Globals.Soylent.Application.ActiveDocument.CustomXMLParts) { string xml = xmlPart.XML; Regex typeRegex = new Regex("<job>(.*?)</job>"); //To filter out Soylent jobs from the xml parts Word automatically saves Match regexResult = typeRegex.Match(xml); string jobString = regexResult.ToString(); if (jobString.Length < 6) { continue; } int job = Int32.Parse(jobString.Substring(5, jobString.Length - 11)); jobToDoc[job] = doc; rawHITs.Add(xml); } rawHITs.Reverse(); foreach(string xml in rawHITs) { StringReader sr = new StringReader(xml); XmlReader xr = XmlReader.Create(sr); if (new Regex("</ShortnData>").Match(xml).Length > 0) { XmlSerializer serializer = new XmlSerializer(typeof(ShortnData)); object raw = serializer.Deserialize(xr); ShortnData hit = raw as ShortnData; // HACK: have to do this after deserialization because numParagraphs is 0 when the object is deserialized foreach(StageData stage in hit.stages) { stage.FixParagraphNumber(hit.numParagraphs); } Word.Bookmark a = Globals.Soylent.Application.ActiveDocument.Bookmarks["Soylent" + hit.job]; hit.range = a.Range; if (hit.jobDone){ ShortnJob s = new ShortnJob(hit, hit.job, false); //Use saved TurKit messages to recreate the results. foreach (TurKitSocKit.TurKitStageComplete message in hit.stageCompletes) { hit.terminateStage(message); } foreach (TurKitSocKit.TurKitFindFixVerify message in hit.findFixVerifies){ hit.postProcessSocKitMessage(message); } } else{ // This will work if you are restarting it on the same machine, where the // TurKit javascript file still sits. Otherwise, it will restart the job. ShortnJob s = new ShortnJob(hit, hit.job, true); } } else if (new Regex("</CrowdproofData>").Match(xml).Length > 0) { XmlSerializer serializer = new XmlSerializer(typeof(CrowdproofData)); object raw = serializer.Deserialize(xr); CrowdproofData hit = raw as CrowdproofData; foreach (StageData stage in hit.stages) { stage.FixParagraphNumber(hit.numParagraphs); } Word.Bookmark a = Globals.Soylent.Application.ActiveDocument.Bookmarks["Soylent" + hit.job]; hit.range = a.Range; //SoylentRibbon.setLastJob(hit.job); if (hit.jobDone) { CrowdproofJob s = new CrowdproofJob(hit, hit.job, false); //Use saved TurKit messages to recreate the results. foreach (TurKitSocKit.TurKitStageComplete message in hit.stageCompletes) { hit.terminateStage(message); } foreach (TurKitSocKit.TurKitFindFixVerify message in hit.findFixVerifies) { hit.postProcessSocKitMessage(message); } } else { CrowdproofJob s = new CrowdproofJob(hit, hit.job, true); } } else if (new Regex("</HumanMacroData>").Match(xml).Length > 0) { XmlSerializer serializer = new XmlSerializer(typeof(HumanMacroData)); object raw = serializer.Deserialize(xr); HumanMacroData hit = raw as HumanMacroData; foreach (StageData stage in hit.stages) { stage.FixParagraphNumber(hit.numParagraphs); } Word.Bookmark a = Globals.Soylent.Application.ActiveDocument.Bookmarks["Soylent" + hit.job]; hit.range = a.Range; //SoylentRibbon.setLastJob(hit.job); if (hit.jobDone) { HumanMacroJob s = new HumanMacroJob(hit, hit.job, false); //Use saved TurKit messages to recreate the results. foreach (TurKitSocKit.TurKitHumanMacroResult message in hit.messages) { hit.postProcessSocKitMessage(message); } hit.finishStageData(); } else { HumanMacroJob s = new HumanMacroJob(hit, hit.job, true); } } } }