public CollabHistoryItem(RevisionData data) { this.m_RevisionId = data.id; this.m_TimeStamp = data.timeStamp; base.name = "HistoryItem"; this.m_ActionsTray = new VisualContainer { name = "HistoryItemActionsTray" }; this.m_ProgressSpinner = new HistoryProgressSpinner(); this.m_Details = new VisualElement { name = "HistoryDetail" }; Label child = new Label(data.authorName) { name = "Author" }; this.m_TimeAgo = new Label(TimeAgo.GetString(this.m_TimeStamp)); this.m_FullDescription = data.comment; bool flag = this.ShouldTruncateDescription(this.m_FullDescription); if (flag) { this.m_Description = new Label(this.GetTruncatedDescription(this.m_FullDescription)); } else { this.m_Description = new Label(this.m_FullDescription); } this.m_Description.name = "RevisionDescription"; CollabHistoryDropDown child2 = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated); if (data.current) { this.m_Button = new Button(new Action(this.Restore)) { name = "ActionButton", text = "Restore" }; } else if (data.obtained) { this.m_Button = new Button(new Action(this.GoBackTo)) { name = "ActionButton", text = "Go back to..." }; } else { this.m_Button = new Button(new Action(this.UpdateTo)) { name = "ActionButton", text = "Update" }; } this.m_Button.SetEnabled(data.enabled); this.m_ProgressSpinner.ProgressEnabled = data.inProgress; this.m_ActionsTray.Add(this.m_ProgressSpinner); this.m_ActionsTray.Add(this.m_Button); this.m_Details.Add(child); this.m_Details.Add(this.m_TimeAgo); this.m_Details.Add(this.m_Description); if (flag) { this.m_ExpandCollapseButton = new Button(new Action(this.ToggleDescription)) { name = "ToggleDescription", text = "Show More" }; this.m_Details.Add(this.m_ExpandCollapseButton); } if (data.buildState != BuildState.None) { BuildStatusButton child3; if (data.buildState == BuildState.Configure) { child3 = new BuildStatusButton(new Action(this.ShowServicePage)); } else { child3 = new BuildStatusButton(new Action(this.ShowBuildForCommit), data.buildState, data.buildFailures); } this.m_Details.Add(child3); } this.m_Details.Add(this.m_ActionsTray); this.m_Details.Add(child2); base.Add(this.m_Details); base.schedule.Execute(new Action(this.UpdateTimeAgo)).Every(20000L); }
public CollabHistoryItem(RevisionData data) { m_RevisionId = data.id; m_TimeStamp = data.timeStamp; name = "HistoryItem"; m_ActionsTray = new VisualElement { name = "HistoryItemActionsTray" }; m_ProgressSpinner = new HistoryProgressSpinner(); m_Details = new VisualElement { name = "HistoryDetail" }; var author = new Label(data.authorName) { name = "Author" }; m_TimeAgo = new Label(TimeAgo.GetString(m_TimeStamp)); m_FullDescription = data.comment; var shouldTruncate = ShouldTruncateDescription(m_FullDescription); if (shouldTruncate) { m_Description = new Label(GetTruncatedDescription(m_FullDescription)); } else { m_Description = new Label(m_FullDescription); } m_Description.name = "RevisionDescription"; var dropdown = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated, data.id); if (data.current) { m_Button = new Button(Restore) { name = "ActionButton", text = "Restore" }; } else if (data.obtained) { m_Button = new Button(GoBackTo) { name = "ActionButton", text = "Go back to..." }; } else { m_Button = new Button(UpdateTo) { name = "ActionButton", text = "Update" }; } m_Button.SetEnabled(data.enabled); m_ProgressSpinner.ProgressEnabled = data.inProgress; m_ActionsTray.Add(m_ProgressSpinner); m_ActionsTray.Add(m_Button); m_Details.Add(author); m_Details.Add(m_TimeAgo); m_Details.Add(m_Description); if (shouldTruncate) { m_ExpandCollapseButton = new Button(ToggleDescription) { name = "ToggleDescription", text = "Show More" }; m_Details.Add(m_ExpandCollapseButton); } if (data.buildState != BuildState.None) { BuildStatusButton buildButton; if (data.buildState == BuildState.Configure) { buildButton = new BuildStatusButton(ShowServicePage); } else { buildButton = new BuildStatusButton(ShowBuildForCommit, data.buildState, data.buildFailures); } m_Details.Add(buildButton); } m_Details.Add(m_ActionsTray); m_Details.Add(dropdown); Add(m_Details); this.schedule.Execute(UpdateTimeAgo).Every(1000 * 20); }
public IEnumerable <RevisionData> GenerateElements(IEnumerable <Revision> revisions, int totalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser) { int index = startIndex; foreach (var rev in revisions) { index++; var current = rev.revisionID == tipRev; // Calculate build status BuildState buildState = BuildState.None; int buildFailures = 0; if (rev.buildStatuses != null && rev.buildStatuses.Length > 0) { bool inProgress = false; foreach (CloudBuildStatus buildStatus in rev.buildStatuses) { if (buildStatus.complete) { if (!buildStatus.success) { buildFailures++; } } else { inProgress = true; break; } } if (inProgress) { buildState = BuildState.InProgress; } else if (buildFailures > 0) { buildState = BuildState.Failed; } else { buildState = BuildState.Success; } } else if (current && !buildServiceEnabled) { buildState = BuildState.Configure; } // Calculate the number of changes performed on files and folders (not meta files) var paths = new Dictionary <string, ChangeData>(); foreach (ChangeAction change in rev.entries) { if (change.path.EndsWith(".meta")) { var path = change.path.Substring(0, change.path.Length - 5); // Actions taken on meta files are secondary to any actions taken on the main file if (!paths.ContainsKey(path)) { paths[path] = new ChangeData() { path = path, action = change.action } } ; } else { paths[change.path] = new ChangeData() { path = change.path, action = change.action }; } } var displayName = (rev.author != currentUser) ? rev.authorName : "You"; var item = new RevisionData { id = rev.revisionID, index = totalRevisions - index + 1, timeStamp = TimeStampToDateTime(rev.timeStamp), authorName = displayName, comment = rev.comment, obtained = rev.isObtained, current = current, inProgress = (rev.revisionID == inProgressRevision), enabled = revisionActionsEnabled, buildState = buildState, buildFailures = buildFailures, changes = paths.Values.Take(k_MaxChangesPerRevision).ToList(), changesTotal = paths.Values.Count, changesTruncated = paths.Values.Count > k_MaxChangesPerRevision, }; yield return(item); } }