rename [window] to [log]
This commit is contained in:
parent
333be72bfe
commit
4330483db3
|
@ -282,7 +282,7 @@ namespace SparkleLib {
|
|||
|
||||
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Fetching changes...");
|
||||
|
||||
process.StartInfo.Arguments = "fetch origin master";
|
||||
process.StartInfo.Arguments = "fetch -v origin master";
|
||||
|
||||
process.Start ();
|
||||
|
||||
|
@ -316,7 +316,7 @@ namespace SparkleLib {
|
|||
|
||||
SparkleHelpers.DebugInfo ("Git", "[" + Name + "] Rebasing changes...");
|
||||
|
||||
Process.StartInfo.Arguments = "rebase -v origin/master";
|
||||
Process.StartInfo.Arguments = "rebase -v FETCH_HEAD";
|
||||
Process.WaitForExit ();
|
||||
Process.Start ();
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ SOURCES = \
|
|||
SparkleEntry.cs \
|
||||
SparkleIntro.cs \
|
||||
SparkleInvitation.cs \
|
||||
SparkleLog.cs \
|
||||
SparkleShare.cs \
|
||||
SparkleSpinner.cs \
|
||||
SparkleStatusIcon.cs \
|
||||
|
|
291
SparkleShare/SparkleLog.cs
Normal file
291
SparkleShare/SparkleLog.cs
Normal file
|
@ -0,0 +1,291 @@
|
|||
// SparkleShare, an instant update workflow to Git.
|
||||
// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
using Gtk;
|
||||
using Mono.Unix;
|
||||
using SparkleLib;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Timers;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleLog : Window {
|
||||
|
||||
// Short alias for the translations
|
||||
public static string _ (string s)
|
||||
{
|
||||
return Catalog.GetString (s);
|
||||
}
|
||||
|
||||
private SparkleRepo SparkleRepo;
|
||||
private VBox LayoutVertical;
|
||||
private ScrolledWindow ScrolledWindow;
|
||||
|
||||
public SparkleLog (SparkleRepo sparkle_repo) : base ("")
|
||||
{
|
||||
|
||||
SparkleRepo = sparkle_repo;
|
||||
SetSizeRequest (540, 640);
|
||||
SetPosition (WindowPosition.Center);
|
||||
BorderWidth = 12;
|
||||
|
||||
// TRANSLATORS: {0} is a folder name, and {1} is a server address
|
||||
Title = String.Format(_("Recent Events in ‘{0}’"), SparkleRepo.Name);
|
||||
IconName = "folder";
|
||||
|
||||
LayoutVertical = new VBox (false, 12);
|
||||
|
||||
LayoutVertical.PackStart (CreateEventLog (), true, true, 0);
|
||||
|
||||
HButtonBox dialog_buttons = new HButtonBox {
|
||||
Layout = ButtonBoxStyle.Edge,
|
||||
BorderWidth = 0
|
||||
};
|
||||
|
||||
Button open_folder_button = new Button (_("Open Folder"));
|
||||
open_folder_button.Clicked += delegate (object o, EventArgs args) {
|
||||
Process process = new Process ();
|
||||
process.StartInfo.FileName = "xdg-open";
|
||||
string path = SparkleHelpers.CombineMore (SparklePaths.SparklePath,
|
||||
SparkleRepo.Name);
|
||||
process.StartInfo.Arguments = path.Replace(" ", "\\ ");
|
||||
process.Start ();
|
||||
Destroy ();
|
||||
};
|
||||
|
||||
Button close_button = new Button (Stock.Close);
|
||||
close_button.Clicked += delegate (object o, EventArgs args) {
|
||||
Destroy ();
|
||||
};
|
||||
|
||||
dialog_buttons.Add (open_folder_button);
|
||||
dialog_buttons.Add (close_button);
|
||||
|
||||
LayoutVertical.PackStart (dialog_buttons, false, false, 0);
|
||||
|
||||
Add (LayoutVertical);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void UpdateEventLog ()
|
||||
{
|
||||
|
||||
LayoutVertical.Remove (ScrolledWindow);
|
||||
ScrolledWindow = CreateEventLog ();
|
||||
LayoutVertical.PackStart (ScrolledWindow, true, true, 0);
|
||||
LayoutVertical.ReorderChild (ScrolledWindow, 0);
|
||||
ShowAll ();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private ScrolledWindow CreateEventLog ()
|
||||
{
|
||||
|
||||
int number_of_events = 50;
|
||||
|
||||
Process process = new Process ();
|
||||
process.EnableRaisingEvents = true;
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.WorkingDirectory = SparkleRepo.LocalPath;
|
||||
process.StartInfo.FileName = "git";
|
||||
process.StartInfo.Arguments = "log --format=\"%at☃%an☃%ae☃%s\" -" + number_of_events;
|
||||
|
||||
process.Start ();
|
||||
|
||||
string output = process.StandardOutput.ReadToEnd ().Trim ();
|
||||
|
||||
output = output.TrimStart ("\n".ToCharArray ());
|
||||
string [] lines = Regex.Split (output, "\n");
|
||||
int linesLength = lines.Length;
|
||||
if (output == "")
|
||||
linesLength = 0;
|
||||
|
||||
// Sort by time and get the last 25
|
||||
Array.Sort (lines);
|
||||
Array.Reverse (lines);
|
||||
|
||||
List <ActivityDay> activity_days = new List <ActivityDay> ();
|
||||
|
||||
for (int i = 0; i < number_of_events && i < linesLength; i++) {
|
||||
|
||||
string line = lines [i];
|
||||
|
||||
// Look for the snowman!
|
||||
string [] parts = Regex.Split (line, "☃");
|
||||
|
||||
int unix_timestamp = int.Parse (parts [0]);
|
||||
string user_name = parts [1];
|
||||
string user_email = parts [2];
|
||||
string message = parts [3];
|
||||
|
||||
DateTime date_time = UnixTimestampToDateTime (unix_timestamp);
|
||||
|
||||
message = message.Replace ("/", " ‣ ");
|
||||
message = message.Replace ("\n", " ");
|
||||
|
||||
ChangeSet change_set = new ChangeSet (user_name, user_email, message, date_time);
|
||||
|
||||
bool change_set_inserted = false;
|
||||
foreach (ActivityDay stored_activity_day in activity_days) {
|
||||
|
||||
if (stored_activity_day.DateTime.Year == change_set.DateTime.Year &&
|
||||
stored_activity_day.DateTime.Month == change_set.DateTime.Month &&
|
||||
stored_activity_day.DateTime.Day == change_set.DateTime.Day) {
|
||||
|
||||
stored_activity_day.Add (change_set);
|
||||
change_set_inserted = true;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!change_set_inserted) {
|
||||
|
||||
ActivityDay activity_day = new ActivityDay (change_set.DateTime);
|
||||
activity_day.Add (change_set);
|
||||
activity_days.Add (activity_day);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
VBox layout_vertical = new VBox (false, 0);
|
||||
|
||||
foreach (ActivityDay activity_day in activity_days) {
|
||||
|
||||
TreeIter iter = new TreeIter ();
|
||||
ListStore list_store = new ListStore (typeof (Gdk.Pixbuf),
|
||||
typeof (string),
|
||||
typeof (string));
|
||||
|
||||
foreach (ChangeSet change_set in activity_day) {
|
||||
|
||||
iter = list_store.Append ();
|
||||
list_store.SetValue (iter, 0, SparkleHelpers.GetAvatar (change_set.UserEmail , 32));
|
||||
list_store.SetValue (iter, 1, "<b>" + change_set.UserName + "</b>\n" +
|
||||
"<span fgcolor='#777'>" + change_set.Message + "</span>");
|
||||
list_store.SetValue (iter, 2, change_set.UserEmail);
|
||||
|
||||
}
|
||||
|
||||
Label date_label = new Label ("") {
|
||||
UseMarkup = true,
|
||||
Xalign = 0,
|
||||
Xpad = 9,
|
||||
Ypad = 9
|
||||
};
|
||||
|
||||
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) {
|
||||
|
||||
date_label.Markup = "<b>Today</b>";
|
||||
|
||||
} else if (yesterday.Day == activity_day.DateTime.Day &&
|
||||
yesterday.Month == activity_day.DateTime.Month &&
|
||||
yesterday.Year == activity_day.DateTime.Year) {
|
||||
|
||||
date_label.Markup = "<b>Yesterday</b>";
|
||||
|
||||
} else {
|
||||
|
||||
date_label.Markup = "<b>" + activity_day.DateTime.ToString ("ddd MMM d, yyyy") + "</b>";
|
||||
|
||||
}
|
||||
|
||||
layout_vertical.PackStart (date_label, false, false, 0);
|
||||
|
||||
IconView icon_view = new IconView (list_store) {
|
||||
ItemWidth = 470,
|
||||
MarkupColumn = 1,
|
||||
Orientation = Orientation.Horizontal,
|
||||
PixbufColumn = 0,
|
||||
Spacing = 9
|
||||
};
|
||||
|
||||
icon_view.SelectionChanged += delegate {
|
||||
icon_view.UnselectAll ();
|
||||
};
|
||||
|
||||
layout_vertical.PackStart (icon_view, false, false, 0);
|
||||
|
||||
}
|
||||
|
||||
ScrolledWindow = new ScrolledWindow ();
|
||||
ScrolledWindow.ShadowType = ShadowType.None;
|
||||
ScrolledWindow.AddWithViewport (layout_vertical);
|
||||
|
||||
return ScrolledWindow;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Converts a UNIX timestamp to a more usable time object
|
||||
public DateTime UnixTimestampToDateTime (int timestamp)
|
||||
{
|
||||
DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
|
||||
return unix_epoch.AddSeconds (timestamp);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class ActivityDay : List <ChangeSet>
|
||||
{
|
||||
|
||||
public DateTime DateTime;
|
||||
|
||||
public ActivityDay (DateTime date_time)
|
||||
{
|
||||
DateTime = date_time;
|
||||
DateTime = new DateTime (DateTime.Year, DateTime.Month, DateTime.Day);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class ChangeSet
|
||||
{
|
||||
|
||||
public string UserName;
|
||||
public string UserEmail;
|
||||
public string Message;
|
||||
public DateTime DateTime;
|
||||
|
||||
public ChangeSet (string user_name, string user_email, string message, DateTime date_time)
|
||||
{
|
||||
UserName = user_name;
|
||||
UserEmail = user_email;
|
||||
Message = message;
|
||||
DateTime = date_time;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -118,8 +118,8 @@ namespace SparkleShare {
|
|||
|
||||
return delegate {
|
||||
|
||||
SparkleWindow SparkleWindow = new SparkleWindow (repo);
|
||||
SparkleWindow.ShowAll ();
|
||||
SparkleLog log = new SparkleLog (repo);
|
||||
log.ShowAll ();
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -256,36 +256,4 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
|
||||
public class ActivityDay : List <ChangeSet>
|
||||
{
|
||||
|
||||
public DateTime DateTime;
|
||||
|
||||
public ActivityDay (DateTime date_time)
|
||||
{
|
||||
DateTime = date_time;
|
||||
DateTime = new DateTime (DateTime.Year, DateTime.Month, DateTime.Day);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class ChangeSet
|
||||
{
|
||||
|
||||
public string UserName;
|
||||
public string UserEmail;
|
||||
public string Message;
|
||||
public DateTime DateTime;
|
||||
|
||||
public ChangeSet (string user_name, string user_email, string message, DateTime date_time)
|
||||
{
|
||||
UserName = user_name;
|
||||
UserEmail = user_email;
|
||||
Message = message;
|
||||
DateTime = date_time;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue