From 14da54b8b6b2f1e66051cc195bc8f02ca7c4df42 Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Fri, 22 Jul 2011 02:12:09 +0100 Subject: [PATCH] Squash events per day+user+folder --- SparkleLib/SparkleChangeSet.cs | 1 + SparkleShare/Mac/SparkleEventLog.cs | 4 +-- SparkleShare/SparkleController.cs | 47 +++++++++++++++++++++++++++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/SparkleLib/SparkleChangeSet.cs b/SparkleLib/SparkleChangeSet.cs index 5adfa4dd..3961c39c 100644 --- a/SparkleLib/SparkleChangeSet.cs +++ b/SparkleLib/SparkleChangeSet.cs @@ -28,6 +28,7 @@ namespace SparkleLib { public string Folder; public string Revision; public DateTime Timestamp; + public DateTime FirstTimestamp; public bool IsMerge = false; public List Added = new List (); diff --git a/SparkleShare/Mac/SparkleEventLog.cs b/SparkleShare/Mac/SparkleEventLog.cs index 88df1f37..d4e3acc3 100644 --- a/SparkleShare/Mac/SparkleEventLog.cs +++ b/SparkleShare/Mac/SparkleEventLog.cs @@ -196,7 +196,7 @@ namespace SparkleShare { NSUrlRequest request, WebFrame frame, NSObject decision_token) { string url = request.Url.ToString (); - + if (url.StartsWith (Path.VolumeSeparatorChar.ToString ())) { string file_path = request.Url.ToString (); file_path = file_path.Replace ("%20", " "); @@ -210,7 +210,7 @@ namespace SparkleShare { if (match.Success) { string folder_name = match.Groups [1].Value; string revision = match.Groups [2].Value; - string note = match.Groups [3].Value.Replace ("%20", " "); + string note = match.Groups [3].Value; Thread thread = new Thread (new ThreadStart (delegate { SparkleShare.Controller.AddNoteToFolder (folder_name, revision, note); diff --git a/SparkleShare/SparkleController.cs b/SparkleShare/SparkleController.cs index 931a8ea0..fefe3540 100644 --- a/SparkleShare/SparkleController.cs +++ b/SparkleShare/SparkleController.cs @@ -298,7 +298,39 @@ namespace SparkleShare { stored_activity_day.DateTime.Month == change_set.Timestamp.Month && stored_activity_day.DateTime.Day == change_set.Timestamp.Day) { - stored_activity_day.Add (change_set); + bool squash = false; + foreach (SparkleChangeSet existing_set in stored_activity_day) { + if (change_set.UserName.Equals (existing_set.UserName) && + change_set.UserEmail.Equals (existing_set.UserEmail) && + 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; } @@ -413,10 +445,18 @@ namespace SparkleShare { avatar_email = change_set.UserEmail; event_entry += ""; + + string timestamp = change_set.Timestamp.ToString ("H:mm"); + + if (change_set.FirstTimestamp != null) + timestamp = change_set.FirstTimestamp.ToString ("H:mm") + + " – " + + change_set.Timestamp.ToString ("H:mm"); + event_entries += event_entry_html.Replace ("", event_entry) .Replace ("", change_set.UserName) .Replace ("", "file://" + GetAvatar (avatar_email, 48)) - .Replace ("", change_set.Timestamp.ToString ("H:mm")) + .Replace ("", timestamp) .Replace ("", change_set.Folder) .Replace ("", change_set.Revision) .Replace ("", AssignColor (change_set.Folder)) @@ -1056,6 +1096,9 @@ namespace SparkleShare { public void AddNoteToFolder (string folder_name, string revision, string note) { + folder_name = folder_name.Replace ("%20", " "); + note = note.Replace ("%20", " "); + foreach (SparkleRepoBase repo in Repositories) { if (repo.Name.Equals (folder_name)) repo.AddNote (revision, note);