save progress on notes
This commit is contained in:
parent
c3e890c9fa
commit
9c0982f06d
|
@ -22,6 +22,7 @@ using System.IO;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
namespace SparkleLib {
|
namespace SparkleLib {
|
||||||
|
|
||||||
|
@ -117,8 +118,20 @@ namespace SparkleLib {
|
||||||
|
|
||||||
public override bool SyncDown ()
|
public override bool SyncDown ()
|
||||||
{
|
{
|
||||||
SparkleGit git = new SparkleGit (LocalPath, "fetch -v origin master");
|
// Check if note fetching is set up
|
||||||
|
SparkleGit git_config = new SparkleGit (LocalPath, "config --get remote.origin.fetch");
|
||||||
|
git_config.Start ();
|
||||||
|
git_config.WaitForExit ();
|
||||||
|
|
||||||
|
// Add configuration for note fetching if it's
|
||||||
|
// not there yet
|
||||||
|
if (git_config.ExitCode != 0) {
|
||||||
|
git_config = new SparkleGit (LocalPath, "config --add remote.origin.fetch +refs/notes/*:refs/notes/*");
|
||||||
|
git_config.Start ();
|
||||||
|
git_config.WaitForExit ();
|
||||||
|
}
|
||||||
|
|
||||||
|
SparkleGit git = new SparkleGit (LocalPath, "fetch -v origin master");
|
||||||
git.Start ();
|
git.Start ();
|
||||||
git.WaitForExit ();
|
git.WaitForExit ();
|
||||||
|
|
||||||
|
@ -349,7 +362,7 @@ namespace SparkleLib {
|
||||||
|
|
||||||
List <SparkleChangeSet> change_sets = new List <SparkleChangeSet> ();
|
List <SparkleChangeSet> change_sets = new List <SparkleChangeSet> ();
|
||||||
|
|
||||||
SparkleGit git_log = new SparkleGit (LocalPath, "log -" + count + " --raw -M --date=iso");
|
SparkleGit git_log = new SparkleGit (LocalPath, "log -" + count + " --raw -M --date=iso --show-notes=*");
|
||||||
Console.OutputEncoding = System.Text.Encoding.Unicode;
|
Console.OutputEncoding = System.Text.Encoding.Unicode;
|
||||||
git_log.Start ();
|
git_log.Start ();
|
||||||
|
|
||||||
|
@ -412,6 +425,7 @@ namespace SparkleLib {
|
||||||
change_set.UserName = match.Groups [2].Value;
|
change_set.UserName = match.Groups [2].Value;
|
||||||
change_set.UserEmail = match.Groups [3].Value;
|
change_set.UserEmail = match.Groups [3].Value;
|
||||||
change_set.IsMerge = is_merge_commit;
|
change_set.IsMerge = is_merge_commit;
|
||||||
|
change_set.SupportsNotes = true;
|
||||||
|
|
||||||
change_set.Timestamp = new DateTime (int.Parse (match.Groups [4].Value),
|
change_set.Timestamp = new DateTime (int.Parse (match.Groups [4].Value),
|
||||||
int.Parse (match.Groups [5].Value), int.Parse (match.Groups [6].Value),
|
int.Parse (match.Groups [5].Value), int.Parse (match.Groups [6].Value),
|
||||||
|
@ -451,6 +465,26 @@ namespace SparkleLib {
|
||||||
change_set.MovedFrom.Add (file_path);
|
change_set.MovedFrom.Add (file_path);
|
||||||
change_set.MovedTo.Add (to_file_path);
|
change_set.MovedTo.Add (to_file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (entry_line.StartsWith (" <note>")) {
|
||||||
|
|
||||||
|
Regex regex_notes = new Regex (@"<name>(.+)</name>.*" +
|
||||||
|
"<email>(.+)</email>.*" +
|
||||||
|
"<timestamp>([0-9]+)</timestamp>.*" +
|
||||||
|
"<body>(.+)</body>", RegexOptions.Compiled);
|
||||||
|
|
||||||
|
Match match_notes = regex_notes.Match (entry_line);
|
||||||
|
|
||||||
|
if (match_notes.Success) {
|
||||||
|
SparkleNote note = new SparkleNote () {
|
||||||
|
UserName = match_notes.Groups [1].Value,
|
||||||
|
UserEmail = match_notes.Groups [2].Value,
|
||||||
|
Timestamp = new DateTime (1970, 1, 1).AddSeconds (int.Parse (match_notes.Groups [3].Value)),
|
||||||
|
Body = match_notes.Groups [4].Value
|
||||||
|
};
|
||||||
|
|
||||||
|
change_set.Notes.Add (note);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,13 +594,20 @@ namespace SparkleLib {
|
||||||
git_notes.Start ();
|
git_notes.Start ();
|
||||||
git_notes.WaitForExit ();
|
git_notes.WaitForExit ();
|
||||||
|
|
||||||
|
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Added note to " + revision);
|
||||||
|
|
||||||
while (Status != SyncStatus.Idle) {
|
while (Status != SyncStatus.Idle) {
|
||||||
System.Threading.Thread.Sleep (5 * 20);
|
System.Threading.Thread.Sleep (5 * 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
SparkleGit git_push = new SparkleGit (LocalPath, "git push origin refs/notes/*");
|
SparkleGit git_push = new SparkleGit (LocalPath, "push origin refs/notes/*");
|
||||||
git_push.Start ();
|
git_push.Start ();
|
||||||
git_push.WaitForExit ();
|
git_push.WaitForExit ();
|
||||||
|
|
||||||
|
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Notes pushed");
|
||||||
|
|
||||||
|
SparkleAnnouncement announcement = new SparkleAnnouncement (Identifier, note_namespace);
|
||||||
|
base.listener.Announce (announcement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace SparkleLib {
|
||||||
public string Folder;
|
public string Folder;
|
||||||
public string Revision;
|
public string Revision;
|
||||||
public DateTime Timestamp;
|
public DateTime Timestamp;
|
||||||
public bool FolderSupportsNotes = false;
|
public bool SupportsNotes = false;
|
||||||
public bool IsMerge = false;
|
public bool IsMerge = false;
|
||||||
|
|
||||||
public List<string> Added = new List<string> ();
|
public List<string> Added = new List<string> ();
|
||||||
|
|
|
@ -38,7 +38,6 @@ namespace SparkleLib {
|
||||||
private TimeSpan long_interval = new TimeSpan (0, 0, 10, 0);
|
private TimeSpan long_interval = new TimeSpan (0, 0, 10, 0);
|
||||||
|
|
||||||
private SparkleWatcher watcher;
|
private SparkleWatcher watcher;
|
||||||
private SparkleListenerBase listener;
|
|
||||||
private TimeSpan poll_interval;
|
private TimeSpan poll_interval;
|
||||||
private Timer local_timer = new Timer () { Interval = 0.25 * 1000 };
|
private Timer local_timer = new Timer () { Interval = 0.25 * 1000 };
|
||||||
private Timer remote_timer = new Timer () { Interval = 10 * 1000 };
|
private Timer remote_timer = new Timer () { Interval = 10 * 1000 };
|
||||||
|
@ -47,6 +46,7 @@ namespace SparkleLib {
|
||||||
private bool has_changed = false;
|
private bool has_changed = false;
|
||||||
private Object change_lock = new Object ();
|
private Object change_lock = new Object ();
|
||||||
|
|
||||||
|
protected SparkleListenerBase listener;
|
||||||
protected SyncStatus status;
|
protected SyncStatus status;
|
||||||
protected bool is_buffering = false;
|
protected bool is_buffering = false;
|
||||||
protected bool server_online = true;
|
protected bool server_online = true;
|
||||||
|
|
|
@ -20,6 +20,7 @@ using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
using MonoMac.Foundation;
|
using MonoMac.Foundation;
|
||||||
|
@ -215,19 +216,29 @@ namespace SparkleShare {
|
||||||
NSUrlRequest request, WebFrame frame, NSObject decision_token)
|
NSUrlRequest request, WebFrame frame, NSObject decision_token)
|
||||||
{
|
{
|
||||||
string url = request.Url.ToString ();
|
string url = request.Url.ToString ();
|
||||||
Console.WriteLine (url);
|
|
||||||
string id = url.Substring (0, url.IndexOf ("%20"));
|
|
||||||
string note = url.Substring (url.IndexOf ("%20") + 3);
|
|
||||||
Console.WriteLine (id + " " + note);
|
|
||||||
|
|
||||||
SparkleShare.Controller.Repositories [0].AddNote (id, note);
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
|
||||||
|
if (url.StartsWith (Path.VolumeSeparatorChar.ToString ())) {
|
||||||
string file_path = request.Url.ToString ();
|
string file_path = request.Url.ToString ();
|
||||||
file_path = file_path.Replace ("%20", " ");
|
file_path = file_path.Replace ("%20", " ");
|
||||||
|
|
||||||
NSWorkspace.SharedWorkspace.OpenFile (file_path);
|
NSWorkspace.SharedWorkspace.OpenFile (file_path);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Regex regex = new Regex (@"(.+)~(.+)~(.+)");
|
||||||
|
Match match = regex.Match (url);
|
||||||
|
|
||||||
|
if (match.Success) {
|
||||||
|
string folder_name = match.Groups [1].Value;
|
||||||
|
string revision = match.Groups [2].Value;
|
||||||
|
string note = match.Groups [3].Value;
|
||||||
|
|
||||||
|
Thread thread = new Thread (new ThreadStart (delegate {
|
||||||
|
SparkleShare.Controller.AddNoteToFolder (folder_name, revision, note);
|
||||||
|
}));
|
||||||
|
|
||||||
|
thread.Start ();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,7 @@ namespace SparkleShare {
|
||||||
|
|
||||||
html = html.Replace ("<!-- $jquery-url -->", "file://" +
|
html = html.Replace ("<!-- $jquery-url -->", "file://" +
|
||||||
Path.Combine (NSBundle.MainBundle.ResourcePath, "HTML", "jquery.js"));
|
Path.Combine (NSBundle.MainBundle.ResourcePath, "HTML", "jquery.js"));
|
||||||
Console.WriteLine (html);
|
|
||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -390,6 +390,24 @@ namespace SparkleShare {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string comments = "";
|
||||||
|
if (change_set.SupportsNotes) {
|
||||||
|
comments = "<table class=\"comments\">";
|
||||||
|
|
||||||
|
foreach (SparkleNote note in change_set.Notes) {
|
||||||
|
comments += "<tr>" +
|
||||||
|
" <td class=\"comment-author\">" + note.UserName + "</td>" +
|
||||||
|
" <td class=\"comment-text\" rowspan=\"2\">" + note.Body + "</td>" +
|
||||||
|
"</tr>" +
|
||||||
|
"<tr>" +
|
||||||
|
" <td class=\"comment-timestamp\">" + note.Timestamp + "</td>" +
|
||||||
|
" <td></td>" +
|
||||||
|
"</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
comments += "</table>";
|
||||||
|
}
|
||||||
|
|
||||||
event_entry += "</dl>";
|
event_entry += "</dl>";
|
||||||
event_entries += event_entry_html.Replace ("<!-- $event-entry-content -->", event_entry)
|
event_entries += event_entry_html.Replace ("<!-- $event-entry-content -->", event_entry)
|
||||||
.Replace ("<!-- $event-user-name -->", change_set.UserName)
|
.Replace ("<!-- $event-user-name -->", change_set.UserName)
|
||||||
|
@ -397,7 +415,8 @@ namespace SparkleShare {
|
||||||
.Replace ("<!-- $event-time -->", change_set.Timestamp.ToString ("H:mm"))
|
.Replace ("<!-- $event-time -->", change_set.Timestamp.ToString ("H:mm"))
|
||||||
.Replace ("<!-- $event-folder -->", change_set.Folder)
|
.Replace ("<!-- $event-folder -->", change_set.Folder)
|
||||||
.Replace ("<!-- $event-revision -->", change_set.Revision)
|
.Replace ("<!-- $event-revision -->", change_set.Revision)
|
||||||
.Replace ("<!-- $event-folder-color -->", AssignColor (change_set.Folder));
|
.Replace ("<!-- $event-folder-color -->", AssignColor (change_set.Folder))
|
||||||
|
.Replace ("<!-- $event-comments -->", comments);
|
||||||
}
|
}
|
||||||
|
|
||||||
string day_entry = "";
|
string day_entry = "";
|
||||||
|
@ -1021,6 +1040,15 @@ namespace SparkleShare {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void AddNoteToFolder (string folder_name, string revision, string note)
|
||||||
|
{
|
||||||
|
foreach (SparkleRepoBase repo in Repositories) {
|
||||||
|
if (repo.Name.Equals (folder_name))
|
||||||
|
repo.AddNote (revision, note);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void CheckForNewVersion ()
|
public void CheckForNewVersion ()
|
||||||
{
|
{
|
||||||
WebClient web_client = new WebClient ();
|
WebClient web_client = new WebClient ();
|
||||||
|
|
|
@ -16,12 +16,7 @@
|
||||||
-webkit-box-sizing:border-box;
|
-webkit-box-sizing:border-box;
|
||||||
-moz-box-sizing: border-box; margin-top: 3px;width:100%;padding:12px;'>
|
-moz-box-sizing: border-box; margin-top: 3px;width:100%;padding:12px;'>
|
||||||
|
|
||||||
<table class="comments">
|
<!-- $event-comments -->
|
||||||
<tr><td class="comment-author">Hylke Bons</td><td class="comment-text" rowspan="2">this looks awesome!</td></tr>
|
|
||||||
<tr><td class="comment-timestamp">date</td><td></td></tr>
|
|
||||||
<tr><td class="comment-author">Hylke Bons</td><td class="comment-text" rowspan="2">this looks awesome!</td></tr>
|
|
||||||
<tr><td class="comment-timestamp">date</td><td></td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<textarea style="margin-top: 12px;box-sizing: border-box;
|
<textarea style="margin-top: 12px;box-sizing: border-box;
|
||||||
-webkit-box-sizing:border-box;
|
-webkit-box-sizing:border-box;
|
||||||
|
@ -29,7 +24,7 @@
|
||||||
width: 75%;float:right;height: 40px"></textarea>
|
width: 75%;float:right;height: 40px"></textarea>
|
||||||
<div style='clear: both'></div>
|
<div style='clear: both'></div>
|
||||||
<input style="float:right; margin-top: 6px;margin-bottom: 6px;" type="button"
|
<input style="float:right; margin-top: 6px;margin-bottom: 6px;" type="button"
|
||||||
value="Add comment" id="<!-- $event-revision -->">
|
value="Add note" id="<!-- $event-folder -->~<!-- $event-revision -->">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div style='clear: both'></div>
|
<div style='clear: both'></div>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
table.html (comments);
|
table.html (comments);
|
||||||
|
|
||||||
location = this.id + ' ' + text;
|
location = this.id + '~' + text;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -159,6 +159,20 @@ font-size: 12px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-bottom: 1px #ccc solid;
|
border-bottom: 1px #ccc solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comments {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-author {
|
||||||
|
font-weight: bold;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-timestamp {
|
||||||
|
color: <!-- $secondary-font-color -->;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
Loading…
Reference in a new issue