private void RaiseWorkflow(SVNServerRecord hostRecord, SvnLogEventArgs log) { var contentManager = this.orchardServices.ContentManager; var svnLogContentItem = contentManager.New(SVNLogPart.ContentItemTypeName); var svnLogPart = svnLogContentItem.As <SVNLogPart>(); svnLogPart.LogMessage = log.LogMessage; svnLogPart.Author = log.Author; svnLogPart.Revision = log.Revision; svnLogPart.Time = log.Time; svnLogPart.LogOrigin = log.LogOrigin.AbsolutePath; contentManager.Create(svnLogContentItem); contentManager.Publish(svnLogContentItem); workflowManager.TriggerEvent( SVNLogReceivedActivity.ActivityName, svnLogContentItem, () => new Dictionary <string, object> { { "Content", svnLogContentItem } }); hostRecord.LastRevision = log.Revision; this.svnServerRepository.Flush(); }
protected override DriverResult Editor(SVNSettingsPart part, IUpdateModel updater, dynamic shapeHelper) { var previousPassword = part.Password; updater.TryUpdateModel(part, Prefix, null, null); // check whether the form is posted or not IsRenderedModel temp = new IsRenderedModel(); updater.TryUpdateModel(temp, Prefix, null, null); if (!temp.IsRendered) { return(null); } if (!part.IsValid()) { return(null); } part.Server = part.Server.Trim(); var record = this.svnServerRepository.Table.FirstOrDefault(c => c.Server == part.Server); if (record == null) { record = new SVNServerRecord { Server = part.Server, LastRevision = part.LastRevision, FromDate = DateTime.UtcNow }; this.svnServerRepository.Create(record); } else { record.LastRevision = part.LastRevision; } part.LastSuccessfullConnectionTime = null; part.LatestError = string.Empty; part.LatestErrorTime = null; return(ContentShape("Parts_SVNSettings_Edit", () => { // restore password if the input is empty, meaning it has not been reseted if (string.IsNullOrEmpty(part.Password)) { part.Password = previousPassword; } return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: part, Prefix: Prefix); }) .OnGroup("SVN Client")); }
public void Process(ScheduledTaskContext context) { if (context.Task.TaskType == TaskType) { var settings = this.orchardServices.WorkContext.CurrentSite.As <SVNSettingsPart>(); this.transactionManager.Demand(); try { if (!string.IsNullOrEmpty(settings.Server)) { var client = new SvnClient(); client.Authentication.DefaultCredentials = new NetworkCredential(settings.Username, settings.Password); var serverRecord = this.svnServerRepository.Table.FirstOrDefault(c => c.Server == settings.Server); if (serverRecord == null) { serverRecord = new SVNServerRecord { Server = settings.Server, LastRevision = settings.LastRevision, FromDate = DateTime.UtcNow }; this.svnServerRepository.Create(serverRecord); this.svnServerRepository.Flush(); } Uri svnrepo = new Uri(settings.Server); SvnInfoEventArgs info; client.GetInfo(svnrepo, out info); long lastRev = info.LastChangeRevision; long rangeStart = serverRecord.LastRevision; Collection <SvnLogEventArgs> logs = new Collection <SvnLogEventArgs>(); client.GetLog(svnrepo, new SvnLogArgs(new SvnRevisionRange(rangeStart, lastRev)), out logs); foreach (var svnLog in logs) { RaiseWorkflow(serverRecord, svnLog); } var settingContentItem = this.orchardServices.ContentManager.Get(settings.Id); var svnSettingPart = settingContentItem.As <SVNSettingsPart>(); svnSettingPart.LastSuccessfullConnectionTime = DateTime.UtcNow; svnSettingPart.LatestError = null; svnSettingPart.LatestErrorTime = null; this.transactionManager.Demand(); } } catch (Exception e) { this.transactionManager.Cancel(); this.Logger.Error(e, e.Message); // We need a new transaction for storing the data this.transactionManager.RequireNew(); settings.LatestError = e.Message; settings.LatestErrorTime = DateTime.UtcNow; var settingContentItem = this.orchardServices.ContentManager.Get(settings.Id); var svnSettingPart = settingContentItem.As <SVNSettingsPart>(); svnSettingPart.LatestError = e.Message; svnSettingPart.LatestErrorTime = settings.LatestErrorTime; this.transactionManager.Demand(); } finally { DateTime nextTaskDate = DateTime.UtcNow.AddMinutes(PeriodInMinutes); this.ScheduleNextTask(nextTaskDate); } } }