public string GetHTMLLog(List <ChangeSet> change_sets) { if (change_sets == null || change_sets.Count == 0) { return(SparkleShare.Controller.EventLogHTML.Replace("<!-- $event-log-content -->", "<div class='day-entry'><div class='day-entry-header'>This project does not keep a history.</div></div>")); } List <ActivityDay> activity_days = new List <ActivityDay> (); change_sets.Sort((x, y) => (x.Timestamp.CompareTo(y.Timestamp))); change_sets.Reverse(); foreach (ChangeSet change_set in change_sets) { bool change_set_inserted = false; foreach (ActivityDay stored_activity_day in activity_days) { if (stored_activity_day.Date.Year == change_set.Timestamp.Year && stored_activity_day.Date.Month == change_set.Timestamp.Month && stored_activity_day.Date.Day == change_set.Timestamp.Day) { stored_activity_day.Add(change_set); change_set_inserted = true; break; } } if (!change_set_inserted) { ActivityDay activity_day = new ActivityDay(change_set.Timestamp); activity_day.Add(change_set); activity_days.Add(activity_day); } } string event_log_html = SparkleShare.Controller.EventLogHTML; string day_entry_html = SparkleShare.Controller.DayEntryHTML; string event_entry_html = SparkleShare.Controller.EventEntryHTML; string event_log = ""; foreach (ActivityDay activity_day in activity_days) { string event_entries = ""; foreach (ChangeSet change_set in activity_day) { string event_entry = "<dl>"; foreach (Change change in change_set.Changes) { if (change.Type != ChangeType.Moved) { event_entry += "<dd class='" + change.Type.ToString().ToLower() + "'>"; if (!change.IsFolder) { event_entry += "<small><a href=\"history://" + change_set.Folder.Name + "/" + change.Path + "\" title=\"View revisions\">" + change.Timestamp.ToString("HH:mm") + " ▾</a></small> "; } else { event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; } event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.Path); event_entry += "</dd>"; } else { event_entry += "<dd class='moved'>"; event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.Path); event_entry += "<br>"; event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.MovedToPath); event_entry += "</dd>"; } } event_entry += "</dl>"; string timestamp = change_set.Timestamp.ToString("H:mm"); if (!change_set.FirstTimestamp.Equals(new DateTime()) && !change_set.Timestamp.ToString("H:mm").Equals(change_set.FirstTimestamp.ToString("H:mm"))) { timestamp = change_set.FirstTimestamp.ToString("H:mm") + " – " + timestamp; } // TODO: List commit messages if there are any event_entries += event_entry_html.Replace("<!-- $event-entry-content -->", event_entry) .Replace("<!-- $event-user-name -->", change_set.User.Name) .Replace("<!-- $event-user-email -->", change_set.User.Email) .Replace("<!-- $event-avatar-url -->", GetAvatarFilePath(change_set.User)) .Replace("<!-- $event-url -->", change_set.RemoteUrl.ToString()) .Replace("<!-- $event-revision -->", change_set.Revision); if (this.selected_folder == null) { event_entries = event_entries.Replace("<!-- $event-folder -->", " @ " + change_set.Folder.Name); event_entries = event_entries.Replace("<!-- $event-folder-url -->", change_set.Folder.FullPath); } } string day_entry = ""; DateTime today = DateTime.Now; DateTime yesterday = DateTime.Now.AddDays(-1); if (today.Day == activity_day.Date.Day && today.Month == activity_day.Date.Month && today.Year == activity_day.Date.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<span id='today' name='" + activity_day.Date.ToString("dddd, MMMM d", CultureInfo.InvariantCulture) + "'>" + "Today" + "</span>"); } else if (yesterday.Day == activity_day.Date.Day && yesterday.Month == activity_day.Date.Month && yesterday.Year == activity_day.Date.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<span id='yesterday' name='" + activity_day.Date.ToString("dddd, MMMM d", CultureInfo.InvariantCulture) + "'>" + "Yesterday" + "</span>"); } else { if (activity_day.Date.Year != DateTime.Now.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.Date.ToString("dddd, MMMM d, yyyy", CultureInfo.InvariantCulture)); } else { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.Date.ToString("dddd, MMMM d", CultureInfo.InvariantCulture)); } } event_log += day_entry.Replace("<!-- $day-entry-content -->", event_entries); } int midnight = (int)(DateTime.Today.AddDays(1) - new DateTime(1970, 1, 1)).TotalSeconds; string html = event_log_html.Replace("<!-- $event-log-content -->", event_log); html = html.Replace("<!-- $midnight -->", midnight.ToString()); return(html); }
public string GetHTMLLog(string name) { List <SparkleCommit> commits = GetLog(name); List <ActivityDay> activity_days = new List <ActivityDay> (); if (commits.Count == 0) { return(null); } foreach (SparkleCommit commit in commits) { GetAvatar(commit.UserEmail, 36); bool commit_inserted = false; foreach (ActivityDay stored_activity_day in activity_days) { if (stored_activity_day.DateTime.Year == commit.DateTime.Year && stored_activity_day.DateTime.Month == commit.DateTime.Month && stored_activity_day.DateTime.Day == commit.DateTime.Day) { stored_activity_day.Add(commit); commit_inserted = true; break; } } if (!commit_inserted) { ActivityDay activity_day = new ActivityDay(commit.DateTime); activity_day.Add(commit); activity_days.Add(activity_day); } } string event_log_html = EventLogHTML; string day_entry_html = DayEntryHTML; string event_entry_html = EventEntryHTML; string event_log = ""; foreach (ActivityDay activity_day in activity_days) { string event_entries = ""; foreach (SparkleCommit change_set in activity_day) { string event_entry = "<dl>"; if (change_set.IsMerge) { event_entry += "<dt>Merged a branch</dt>"; } else { if (change_set.Edited.Count > 0) { event_entry += "<dt>Edited</dt>"; foreach (string file_path in change_set.Edited) { string absolute_file_path = SparkleHelpers.CombineMore(SparklePaths.SparklePath, name, file_path); if (File.Exists(absolute_file_path)) { event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>"; } else { event_entry += "<dd>" + file_path + "</dd>"; } } } if (change_set.Added.Count > 0) { event_entry += "<dt>Added</dt>"; foreach (string file_path in change_set.Added) { string absolute_file_path = SparkleHelpers.CombineMore(SparklePaths.SparklePath, name, file_path); if (File.Exists(absolute_file_path)) { event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>"; } else { event_entry += "<dd>" + file_path + "</dd>"; } } } if (change_set.Deleted.Count > 0) { event_entry += "<dt>Deleted</dt>"; foreach (string file_path in change_set.Deleted) { string absolute_file_path = SparkleHelpers.CombineMore(SparklePaths.SparklePath, name, file_path); if (File.Exists(absolute_file_path)) { event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>"; } else { event_entry += "<dd>" + file_path + "</dd>"; } } } if (change_set.MovedFrom.Count > 0) { event_entry += "<dt>Moved</dt>"; int i = 0; foreach (string file_path in change_set.MovedFrom) { string to_file_path = change_set.MovedTo [i]; string absolute_file_path = SparkleHelpers.CombineMore(SparklePaths.SparklePath, name, file_path); string absolute_to_file_path = SparkleHelpers.CombineMore(SparklePaths.SparklePath, name, to_file_path); if (File.Exists(absolute_file_path)) { event_entry += "<dd><a href='" + absolute_file_path + "'>" + file_path + "</a><br/><span class='moved-arrow'>→</span> "; } else { event_entry += "<dd>" + file_path + "<br/><span class='moved-arrow'>→</span> "; } if (File.Exists(absolute_to_file_path)) { event_entry += "<a href='" + absolute_to_file_path + "'>" + to_file_path + "</a></dd>"; } else { event_entry += to_file_path + "</dd>"; } i++; } } } event_entry += "</dl>"; event_entries += event_entry_html.Replace("<!-- $event-entry-content -->", event_entry) .Replace("<!-- $event-user-name -->", change_set.UserName) .Replace("<!-- $event-avatar-url -->", "file://" + GetAvatar(change_set.UserEmail, 36)) .Replace("<!-- $event-time -->", change_set.DateTime.ToString("H:mm")); } string day_entry = ""; DateTime today = DateTime.Now; DateTime yesterday = DateTime.Now.AddDays(-1); if (today.Day == activity_day.DateTime.Day && today.Month == activity_day.DateTime.Month && today.Year == activity_day.DateTime.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<b>Today</b>"); } else if (yesterday.Day == activity_day.DateTime.Day && yesterday.Month == activity_day.DateTime.Month && yesterday.Year == activity_day.DateTime.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<b>Yesterday</b>"); } else { if (activity_day.DateTime.Year != DateTime.Now.Year) { // TRANSLATORS: This is the date in the event logs day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<b>" + activity_day.DateTime.ToString(_("ddd MMM d, yyyy")) + "</b>"); } else { // TRANSLATORS: This is the date in the event logs, without the year day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<b>" + activity_day.DateTime.ToString(_("ddd MMM d")) + "</b>"); } } event_log += day_entry.Replace("<!-- $day-entry-content -->", event_entries); } string html = event_log_html.Replace("<!-- $event-log-content -->", event_log); return(html); }
public string GetHTMLLog(List <SparkleChangeSet> change_sets) { if (change_sets.Count == 0) { return(""); } List <ActivityDay> activity_days = new List <ActivityDay> (); change_sets.Sort((x, y) => (x.Timestamp.CompareTo(y.Timestamp))); change_sets.Reverse(); foreach (SparkleChangeSet change_set in change_sets) { bool change_set_inserted = false; foreach (ActivityDay stored_activity_day in activity_days) { if (stored_activity_day.Date.Year == change_set.Timestamp.Year && stored_activity_day.Date.Month == change_set.Timestamp.Month && stored_activity_day.Date.Day == change_set.Timestamp.Day) { stored_activity_day.Add(change_set); change_set_inserted = true; break; } } if (!change_set_inserted) { ActivityDay activity_day = new ActivityDay(change_set.Timestamp); activity_day.Add(change_set); activity_days.Add(activity_day); } } string event_log_html = Program.Controller.EventLogHTML; string day_entry_html = Program.Controller.DayEntryHTML; string event_entry_html = Program.Controller.EventEntryHTML; string event_log = ""; foreach (ActivityDay activity_day in activity_days) { string event_entries = ""; foreach (SparkleChangeSet change_set in activity_day) { string event_entry = "<dl>"; foreach (SparkleChange change in change_set.Changes) { if (change.Type != SparkleChangeType.Moved) { event_entry += "<dd class='" + change.Type.ToString().ToLower() + "'>"; event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.Path); event_entry += "</dd>"; } else { event_entry += "<dd class='moved'>"; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.Path); event_entry += "<br>"; event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.MovedToPath); event_entry += "</dd>"; } } string change_set_avatar = Program.Controller.GetAvatar(change_set.User.Email, 48); if (change_set_avatar != null) { change_set_avatar = "file://" + change_set_avatar.Replace("\\", "/"); } else { change_set_avatar = "file://<!-- $pixmaps-path -->/" + Program.Controller.AssignAvatar(change_set.User.Email); } event_entry += "</dl>"; string timestamp = change_set.Timestamp.ToString("H:mm"); if (!change_set.FirstTimestamp.Equals(new DateTime()) && !change_set.Timestamp.ToString("H:mm").Equals(change_set.FirstTimestamp.ToString("H:mm"))) { timestamp = change_set.FirstTimestamp.ToString("H:mm") + " – " + timestamp; } event_entries += event_entry_html.Replace("<!-- $event-entry-content -->", event_entry) .Replace("<!-- $event-user-name -->", change_set.User.Name) .Replace("<!-- $event-avatar-url -->", change_set_avatar) .Replace("<!-- $event-url -->", change_set.RemoteUrl.ToString()) .Replace("<!-- $event-revision -->", change_set.Revision); if (this.selected_folder == null) { event_entries = event_entries.Replace("<!-- $event-folder -->", " @ " + change_set.Folder.Name); } } string day_entry = ""; DateTime today = DateTime.Now; DateTime yesterday = DateTime.Now.AddDays(-1); if (today.Day == activity_day.Date.Day && today.Month == activity_day.Date.Month && today.Year == activity_day.Date.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<span id='today' name='" + activity_day.Date.ToString("dddd, MMMM d") + "'>" + "Today" + "</span>"); } else if (yesterday.Day == activity_day.Date.Day && yesterday.Month == activity_day.Date.Month && yesterday.Year == activity_day.Date.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<span id='yesterday' name='" + activity_day.Date.ToString("dddd, MMMM d") + "'>" + "Yesterday" + "</span>"); } else { if (activity_day.Date.Year != DateTime.Now.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.Date.ToString("dddd, MMMM d, yyyy")); } else { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.Date.ToString("dddd, MMMM d")); } } event_log += day_entry.Replace("<!-- $day-entry-content -->", event_entries); } int midnight = (int)(DateTime.Today.AddDays(1) - new DateTime(1970, 1, 1)).TotalSeconds; string html = event_log_html.Replace("<!-- $event-log-content -->", event_log); html = html.Replace("<!-- $midnight -->", midnight.ToString()); return(html); }
public string GetHTMLLog(List <SparkleChangeSet> change_sets) { List <ActivityDay> activity_days = new List <ActivityDay> (); List <string> emails = new List <string> (); change_sets.Sort((x, y) => (x.Timestamp.CompareTo(y.Timestamp))); change_sets.Reverse(); if (change_sets.Count == 0) { return(null); } foreach (SparkleChangeSet change_set in change_sets) { if (!emails.Contains(change_set.User.Email)) { emails.Add(change_set.User.Email); } bool change_set_inserted = false; foreach (ActivityDay stored_activity_day in activity_days) { if (stored_activity_day.DateTime.Year == change_set.Timestamp.Year && stored_activity_day.DateTime.Month == change_set.Timestamp.Month && stored_activity_day.DateTime.Day == change_set.Timestamp.Day) { bool squash = false; foreach (SparkleChangeSet existing_set in stored_activity_day) { if (change_set.User.Name.Equals(existing_set.User.Name) && change_set.User.Email.Equals(existing_set.User.Email) && change_set.Folder.Equals(existing_set.Folder)) { existing_set.Added.AddRange(change_set.Added); existing_set.Edited.AddRange(change_set.Edited); existing_set.Deleted.AddRange(change_set.Deleted); existing_set.MovedFrom.AddRange(change_set.MovedFrom); existing_set.MovedTo.AddRange(change_set.MovedTo); existing_set.Notes.AddRange(change_set.Notes); existing_set.Added = existing_set.Added.Distinct().ToList(); existing_set.Edited = existing_set.Edited.Distinct().ToList(); existing_set.Deleted = existing_set.Deleted.Distinct().ToList(); if (DateTime.Compare(existing_set.Timestamp, change_set.Timestamp) < 1) { existing_set.FirstTimestamp = existing_set.Timestamp; existing_set.Timestamp = change_set.Timestamp; existing_set.Revision = change_set.Revision; } else { existing_set.FirstTimestamp = change_set.Timestamp; } squash = true; } } if (!squash) { stored_activity_day.Add(change_set); } change_set_inserted = true; break; } } if (!change_set_inserted) { ActivityDay activity_day = new ActivityDay(change_set.Timestamp); activity_day.Add(change_set); activity_days.Add(activity_day); } } new Thread(new ThreadStart(delegate { FetchAvatars(emails, 48); FetchAvatars(emails, 36); })).Start(); string event_log_html = EventLogHTML; string day_entry_html = DayEntryHTML; string event_entry_html = EventEntryHTML; string event_log = ""; foreach (ActivityDay activity_day in activity_days) { string event_entries = ""; foreach (SparkleChangeSet change_set in activity_day) { string event_entry = "<dl>"; if (change_set.IsMagical) { event_entry += "<dd>Did something magical</dd>"; } else { if (change_set.Edited.Count > 0) { foreach (string file_path in change_set.Edited) { string absolute_file_path = new string [] { SparkleConfig.DefaultConfig.FoldersPath, change_set.Folder, file_path }.Combine(); if (File.Exists(absolute_file_path)) { event_entry += "<dd class='document edited'><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>"; } else { event_entry += "<dd class='document edited'>" + file_path + "</dd>"; } } } if (change_set.Added.Count > 0) { foreach (string file_path in change_set.Added) { string absolute_file_path = new string [] { SparkleConfig.DefaultConfig.FoldersPath, change_set.Folder, file_path }.Combine(); if (File.Exists(absolute_file_path)) { event_entry += "<dd class='document added'><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>"; } else { event_entry += "<dd class='document added'>" + file_path + "</dd>"; } } } if (change_set.Deleted.Count > 0) { foreach (string file_path in change_set.Deleted) { string absolute_file_path = new string [] { SparkleConfig.DefaultConfig.FoldersPath, change_set.Folder, file_path }.Combine(); if (File.Exists(absolute_file_path)) { event_entry += "<dd class='document deleted'><a href='" + absolute_file_path + "'>" + file_path + "</a></dd>"; } else { event_entry += "<dd class='document deleted'>" + file_path + "</dd>"; } } } if (change_set.MovedFrom.Count > 0) { int i = 0; foreach (string file_path in change_set.MovedFrom) { string to_file_path = change_set.MovedTo [i]; string absolute_file_path = new string [] { SparkleConfig.DefaultConfig.FoldersPath, change_set.Folder, file_path }.Combine(); string absolute_to_file_path = new string [] { SparkleConfig.DefaultConfig.FoldersPath, change_set.Folder, to_file_path }.Combine(); if (File.Exists(absolute_file_path)) { event_entry += "<dd class='document moved'><a href='" + absolute_file_path + "'>" + file_path + "</a><br/>"; } else { event_entry += "<dd class='document moved'>" + file_path + "<br/>"; } if (File.Exists(absolute_to_file_path)) { event_entry += "<a href='" + absolute_to_file_path + "'>" + to_file_path + "</a></dd>"; } else { event_entry += to_file_path + "</dd>"; } i++; } } } string comments = ""; comments = "<div class=\"comments\">"; if (change_set.Notes != null) { change_set.Notes.Sort((x, y) => (x.Timestamp.CompareTo(y.Timestamp))); foreach (SparkleNote note in change_set.Notes) { string note_avatar = GetAvatar(note.User.Email, 48); if (File.Exists(note_avatar)) { note_avatar = "file://" + note_avatar; } else { note_avatar = "<!-- $no-buddy-icon-background-image -->"; } comments += "<div class=\"comment-text\">" + "<p class=\"comment-author\"" + " style=\"background-image: url('" + note_avatar + "');\">" + note.User.Name + "</p>" + note.Body + "</div>"; } } comments += "</div>"; string change_set_avatar = GetAvatar(change_set.User.Email, 48); if (File.Exists(change_set_avatar)) { change_set_avatar = "file://" + change_set_avatar; } else { change_set_avatar = "<!-- $no-buddy-icon-background-image -->"; } event_entry += "</dl>"; string timestamp = change_set.Timestamp.ToString("H:mm"); if (!change_set.FirstTimestamp.Equals(new DateTime())) { timestamp = change_set.FirstTimestamp.ToString("H:mm") + " – " + timestamp; } event_entries += event_entry_html.Replace("<!-- $event-entry-content -->", event_entry) .Replace("<!-- $event-user-name -->", change_set.User.Name) .Replace("<!-- $event-avatar-url -->", change_set_avatar) .Replace("<!-- $event-time -->", timestamp) .Replace("<!-- $event-folder -->", change_set.Folder) .Replace("<!-- $event-revision -->", change_set.Revision) .Replace("<!-- $event-folder-color -->", AssignColor(change_set.Folder)) .Replace("<!-- $event-comments -->", comments); } string day_entry = ""; DateTime today = DateTime.Now; DateTime yesterday = DateTime.Now.AddDays(-1); if (today.Day == activity_day.DateTime.Day && today.Month == activity_day.DateTime.Month && today.Year == activity_day.DateTime.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "Today"); } else if (yesterday.Day == activity_day.DateTime.Day && yesterday.Month == activity_day.DateTime.Month && yesterday.Year == activity_day.DateTime.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "Yesterday"); } else { if (activity_day.DateTime.Year != DateTime.Now.Year) { // TRANSLATORS: This is the date in the event logs day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.DateTime.ToString(_("dddd, MMMM d, yyyy"))); } else { // TRANSLATORS: This is the date in the event logs, without the year day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.DateTime.ToString(_("dddd, MMMM d"))); } } event_log += day_entry.Replace("<!-- $day-entry-content -->", event_entries); } string html = event_log_html.Replace("<!-- $event-log-content -->", event_log) .Replace("<!-- $username -->", UserName) .Replace("<!-- $user-avatar-url -->", "file://" + GetAvatar(UserEmail, 48)); return(html); }
public string GetHTMLLog(List <SparkleChangeSet> change_sets) { List <ActivityDay> activity_days = new List <ActivityDay> (); List <string> emails = new List <string> (); change_sets.Sort((x, y) => (x.Timestamp.CompareTo(y.Timestamp))); change_sets.Reverse(); if (change_sets.Count == 0) { return(null); } foreach (SparkleChangeSet change_set in change_sets) { if (!emails.Contains(change_set.User.Email)) { emails.Add(change_set.User.Email); } bool change_set_inserted = false; foreach (ActivityDay stored_activity_day in activity_days) { if (stored_activity_day.Date.Year == change_set.Timestamp.Year && stored_activity_day.Date.Month == change_set.Timestamp.Month && stored_activity_day.Date.Day == change_set.Timestamp.Day) { stored_activity_day.Add(change_set); change_set_inserted = true; break; } } if (!change_set_inserted) { ActivityDay activity_day = new ActivityDay(change_set.Timestamp); activity_day.Add(change_set); activity_days.Add(activity_day); } } string event_log_html = EventLogHTML; string day_entry_html = DayEntryHTML; string event_entry_html = EventEntryHTML; string event_log = ""; foreach (ActivityDay activity_day in activity_days) { string event_entries = ""; foreach (SparkleChangeSet change_set in activity_day) { string event_entry = "<dl>"; if (change_set.IsMagical) { event_entry += "<dd>Did something magical</dd>"; } else { foreach (SparkleChange change in change_set.Changes) { if (change.Type != SparkleChangeType.Moved) { event_entry += "<dd class='document " + change.Type.ToString().ToLower() + "'>"; event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.Path); event_entry += "</dd>"; } else { event_entry += "<dd class='document moved'>"; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.Path); event_entry += "<br>"; event_entry += "<small>" + change.Timestamp.ToString("HH:mm") + "</small> "; event_entry += FormatBreadCrumbs(change_set.Folder.FullPath, change.MovedPath); event_entry += "</dd>"; } } } string change_set_avatar = GetAvatar(change_set.User.Email, 48); if (File.Exists(change_set_avatar)) { change_set_avatar = "file://" + change_set_avatar.Replace("\\", "/"); } else { change_set_avatar = "file://<!-- $pixmaps-path -->/" + AssignAvatar(change_set.User.Email); } event_entry += "</dl>"; string timestamp = change_set.Timestamp.ToString("H:mm"); if (!change_set.FirstTimestamp.Equals(new DateTime()) && !change_set.Timestamp.ToString("H:mm").Equals(change_set.FirstTimestamp.ToString("H:mm"))) { timestamp = change_set.FirstTimestamp.ToString("H:mm") + " – " + timestamp; } event_entries += event_entry_html.Replace("<!-- $event-entry-content -->", event_entry) .Replace("<!-- $event-user-name -->", change_set.User.Name) .Replace("<!-- $event-avatar-url -->", change_set_avatar) .Replace("<!-- $event-folder -->", change_set.Folder.Name) .Replace("<!-- $event-url -->", change_set.RemoteUrl.ToString()) .Replace("<!-- $event-revision -->", change_set.Revision); } string day_entry = ""; DateTime today = DateTime.Now; DateTime yesterday = DateTime.Now.AddDays(-1); if (today.Day == activity_day.Date.Day && today.Month == activity_day.Date.Month && today.Year == activity_day.Date.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<span id='today' name='" + activity_day.Date.ToString(_("dddd, MMMM d")) + "'>" + _("Today") + "</span>"); } else if (yesterday.Day == activity_day.Date.Day && yesterday.Month == activity_day.Date.Month && yesterday.Year == activity_day.Date.Year) { day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", "<span id='yesterday' name='" + activity_day.Date.ToString(_("dddd, MMMM d")) + "'>" + _("Yesterday") + "</span>"); } else { if (activity_day.Date.Year != DateTime.Now.Year) { // TRANSLATORS: This is the date in the event logs day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.Date.ToString(_("dddd, MMMM d, yyyy"))); } else { // TRANSLATORS: This is the date in the event logs, without the year day_entry = day_entry_html.Replace("<!-- $day-entry-header -->", activity_day.Date.ToString(_("dddd, MMMM d"))); } } event_log += day_entry.Replace("<!-- $day-entry-content -->", event_entries); } int midnight = (int)(DateTime.Today.AddDays(1) - new DateTime(1970, 1, 1)).TotalSeconds; string html = event_log_html.Replace("<!-- $event-log-content -->", event_log) .Replace("<!-- $username -->", CurrentUser.Name) .Replace("<!-- $user-avatar-url -->", "file://" + GetAvatar(CurrentUser.Email, 48)) .Replace("<!-- $midnight -->", midnight.ToString()); new Thread( new ThreadStart(delegate { FetchAvatars(emails, 48); }) ).Start(); return(html); }