commit
c696b3c412
|
@ -167,7 +167,7 @@ namespace SparkleShare {
|
|||
public abstract void SetFolderIcon ();
|
||||
|
||||
// Creates the SparkleShare folder in the user's home folder
|
||||
public abstract bool CreateSparkleShareFolder ();
|
||||
public abstract void CreateSparkleShareFolder ();
|
||||
|
||||
// Opens the SparkleShare folder or an (optional) subfolder
|
||||
public abstract void OpenFolder (string path);
|
||||
|
@ -206,9 +206,6 @@ namespace SparkleShare {
|
|||
Config = new Configuration (config_path, "projects.xml");
|
||||
Configuration.DefaultConfiguration = Config;
|
||||
|
||||
UserAuthenticationInfo = new SSHAuthenticationInfo ();
|
||||
SSHAuthenticationInfo.DefaultAuthenticationInfo = UserAuthenticationInfo;
|
||||
|
||||
FoldersPath = Config.FoldersPath;
|
||||
}
|
||||
|
||||
|
@ -227,6 +224,9 @@ namespace SparkleShare {
|
|||
// TODO: ToString() with nice os version names (Mac OS X Yosemite, Fedora 24, Ubuntu 16.04, etc.)
|
||||
Logger.LogInfo ("Environment", InstallationInfo.OperatingSystem + " (" + Environment.OSVersion + ")");
|
||||
|
||||
UserAuthenticationInfo = new SSHAuthenticationInfo ();
|
||||
SSHAuthenticationInfo.DefaultAuthenticationInfo = UserAuthenticationInfo;
|
||||
|
||||
Preset.PresetsPath = PresetsPath;
|
||||
InstallProtocolHandler ();
|
||||
|
||||
|
|
|
@ -33,15 +33,12 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
|
||||
public override bool CreateSparkleShareFolder ()
|
||||
public override void CreateSparkleShareFolder ()
|
||||
{
|
||||
if (Directory.Exists (Configuration.DefaultConfiguration.FoldersPath))
|
||||
return false;
|
||||
|
||||
if (!Directory.Exists (Configuration.DefaultConfiguration.FoldersPath)) {
|
||||
Directory.CreateDirectory (Configuration.DefaultConfiguration.FoldersPath);
|
||||
Syscall.chmod (Configuration.DefaultConfiguration.FoldersPath, (FilePermissions) 448); // 448 -> 700
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -61,16 +61,12 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
|
||||
public override bool CreateSparkleShareFolder ()
|
||||
public override void CreateSparkleShareFolder ()
|
||||
{
|
||||
if (!Directory.Exists (SparkleShare.Controller.FoldersPath)) {
|
||||
Directory.CreateDirectory (SparkleShare.Controller.FoldersPath);
|
||||
Syscall.chmod (SparkleShare.Controller.FoldersPath, (FilePermissions) 448); // 448 -> 700
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
3
SparkleShare/SparkleShare.exe.config
Normal file
3
SparkleShare/SparkleShare.exe.config
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
3
SparkleShare/SparkleShare.vshost.exe.config
Normal file
3
SparkleShare/SparkleShare.vshost.exe.config
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
|
@ -1,372 +0,0 @@
|
|||
// SparkleShare, a collaboration and sharing tool.
|
||||
// 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 System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Permissions;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
using Microsoft.Win32;
|
||||
using Shapes = System.Windows.Shapes;
|
||||
|
||||
using SparkleLib;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleEventLog : Window {
|
||||
|
||||
public SparkleEventLogController Controller = new SparkleEventLogController ();
|
||||
|
||||
private Canvas canvas;
|
||||
private Label size_label_value;
|
||||
private Label history_label_value;
|
||||
private ComboBox combo_box;
|
||||
private WebBrowser web_browser;
|
||||
private SparkleSpinner spinner;
|
||||
|
||||
|
||||
public SparkleEventLog ()
|
||||
{
|
||||
Title = "Recent Changes";
|
||||
Height = 640;
|
||||
Width = 480;
|
||||
ResizeMode = ResizeMode.NoResize; // TODO
|
||||
Background = new SolidColorBrush (Color.FromRgb (240, 240, 240));
|
||||
AllowsTransparency = false;
|
||||
Icon = SparkleUIHelpers.GetImageSource ("sparkleshare-app", "ico");
|
||||
|
||||
int x = (int) (SystemParameters.PrimaryScreenWidth * 0.61);
|
||||
int y = (int) (SystemParameters.PrimaryScreenHeight * 0.5 - (Height * 0.5));
|
||||
|
||||
WindowStartupLocation = WindowStartupLocation.Manual;
|
||||
Left = x;
|
||||
Top = y;
|
||||
|
||||
WriteOutImages ();
|
||||
|
||||
Label size_label = new Label () {
|
||||
Content = "Size:",
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
this.size_label_value = new Label () {
|
||||
Content = Controller.Size
|
||||
};
|
||||
|
||||
size_label.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity));
|
||||
Rect size_label_rect = new Rect (size_label.DesiredSize);
|
||||
|
||||
Label history_label = new Label () {
|
||||
Content = "History:",
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
this.history_label_value = new Label () {
|
||||
Content = Controller.HistorySize,
|
||||
};
|
||||
|
||||
history_label.Measure (new Size (Double.PositiveInfinity, Double.PositiveInfinity));
|
||||
Rect history_label_rect = new Rect (history_label.DesiredSize);
|
||||
|
||||
Shapes.Rectangle line = new Shapes.Rectangle () {
|
||||
Width = Width,
|
||||
Height = 1,
|
||||
Fill = new SolidColorBrush (Color.FromRgb (223, 223, 223))
|
||||
};
|
||||
|
||||
Shapes.Rectangle background = new Shapes.Rectangle () {
|
||||
Width = Width,
|
||||
Height = Height,
|
||||
Fill = new SolidColorBrush (Color.FromRgb (250, 250, 250))
|
||||
};
|
||||
|
||||
this.web_browser = new WebBrowser () {
|
||||
Width = Width - 6,
|
||||
Height = Height - 64
|
||||
};
|
||||
|
||||
this.web_browser.ObjectForScripting = new SparkleScriptingObject ();
|
||||
|
||||
|
||||
spinner = new SparkleSpinner (22);
|
||||
|
||||
// Disable annoying IE clicking sound
|
||||
CoInternetSetFeatureEnabled (21, 0x00000002, true);
|
||||
|
||||
|
||||
this.canvas = new Canvas ();
|
||||
Content = this.canvas;
|
||||
|
||||
this.canvas.Children.Add (size_label);
|
||||
Canvas.SetLeft (size_label, 24);
|
||||
Canvas.SetTop (size_label, 4);
|
||||
|
||||
this.canvas.Children.Add (this.size_label_value);
|
||||
Canvas.SetLeft (this.size_label_value, 22 + size_label_rect.Width);
|
||||
Canvas.SetTop (this.size_label_value, 4);
|
||||
|
||||
this.canvas.Children.Add (history_label);
|
||||
Canvas.SetLeft (history_label, 130);
|
||||
Canvas.SetTop (history_label, 4);
|
||||
|
||||
this.canvas.Children.Add (this.history_label_value);
|
||||
Canvas.SetLeft (this.history_label_value, 130 + history_label_rect.Width);
|
||||
Canvas.SetTop (this.history_label_value, 4);
|
||||
|
||||
this.canvas.Children.Add (background);
|
||||
Canvas.SetLeft (background, 0);
|
||||
Canvas.SetTop (background, 36);
|
||||
|
||||
this.canvas.Children.Add (spinner);
|
||||
Canvas.SetLeft (spinner, (Width / 2) - 15);
|
||||
Canvas.SetTop (spinner, (Height / 2) - 22);
|
||||
|
||||
this.canvas.Children.Add (line);
|
||||
Canvas.SetLeft (line, 0);
|
||||
Canvas.SetTop (line, 35);
|
||||
|
||||
|
||||
Closing += Close;
|
||||
|
||||
Controller.ShowWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
Show ();
|
||||
Activate ();
|
||||
BringIntoView ();
|
||||
});
|
||||
};
|
||||
|
||||
Controller.HideWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
Hide ();
|
||||
|
||||
if (this.canvas.Children.Contains (this.web_browser))
|
||||
this.canvas.Children.Remove (this.web_browser);
|
||||
});
|
||||
};
|
||||
|
||||
Controller.UpdateSizeInfoEvent += delegate (string size, string history_size) {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
this.size_label_value.Content = size;
|
||||
this.size_label_value.UpdateLayout ();
|
||||
|
||||
this.history_label_value.Content = history_size;
|
||||
this.history_label_value.UpdateLayout ();
|
||||
});
|
||||
};
|
||||
|
||||
Controller.UpdateChooserEvent += delegate (string [] folders) {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
UpdateChooser (folders);
|
||||
});
|
||||
};
|
||||
|
||||
Controller.UpdateChooserEnablementEvent += delegate (bool enabled) {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
this.combo_box.IsEnabled = enabled;
|
||||
});
|
||||
};
|
||||
|
||||
Controller.UpdateContentEvent += delegate (string html) {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
UpdateContent (html);
|
||||
});
|
||||
};
|
||||
|
||||
Controller.ContentLoadingEvent += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
this.spinner.Start ();
|
||||
|
||||
if (this.canvas.Children.Contains (this.web_browser))
|
||||
this.canvas.Children.Remove (this.web_browser);
|
||||
});
|
||||
};
|
||||
|
||||
Controller.ShowSaveDialogEvent += delegate (string file_name, string target_folder_path) {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
SaveFileDialog dialog = new SaveFileDialog () {
|
||||
FileName = file_name,
|
||||
InitialDirectory = target_folder_path,
|
||||
Title = "Restore from History",
|
||||
DefaultExt = "." + Path.GetExtension (file_name),
|
||||
Filter = "All Files|*.*"
|
||||
};
|
||||
|
||||
Nullable<bool> result = dialog.ShowDialog (this);
|
||||
|
||||
if (result == true)
|
||||
Controller.SaveDialogCompleted (dialog.FileName);
|
||||
else
|
||||
Controller.SaveDialogCancelled ();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public void UpdateChooser (string [] folders)
|
||||
{
|
||||
if (folders == null)
|
||||
folders = Controller.Folders;
|
||||
|
||||
if (this.combo_box != null)
|
||||
this.canvas.Children.Remove (this.combo_box);
|
||||
|
||||
this.combo_box = new ComboBox () {
|
||||
Width = 160
|
||||
};
|
||||
|
||||
ComboBoxItem item = new ComboBoxItem () {
|
||||
Content = "Summary"
|
||||
};
|
||||
|
||||
this.combo_box.Items.Add (item);
|
||||
this.combo_box.Items.Add (new Separator ());
|
||||
|
||||
this.combo_box.SelectedItem = combo_box.Items [0];
|
||||
|
||||
int row = 2;
|
||||
foreach (string folder in folders) {
|
||||
this.combo_box.Items.Add (
|
||||
new ComboBoxItem () { Content = folder }
|
||||
);
|
||||
|
||||
if (folder.Equals (Controller.SelectedFolder))
|
||||
this.combo_box.SelectedItem = combo_box.Items [row];
|
||||
|
||||
row++;
|
||||
}
|
||||
|
||||
this.combo_box.SelectionChanged += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
int index = this.combo_box.SelectedIndex;
|
||||
|
||||
if (index == 0)
|
||||
Controller.SelectedFolder = null;
|
||||
else
|
||||
Controller.SelectedFolder = (string)
|
||||
(this.combo_box.Items [index] as ComboBoxItem).Content;
|
||||
});
|
||||
};
|
||||
|
||||
this.canvas.Children.Add (combo_box);
|
||||
Canvas.SetLeft (this.combo_box, Width - 24 - this.combo_box.Width);
|
||||
Canvas.SetTop (this.combo_box, 6);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateContent (string html)
|
||||
{
|
||||
string pixmaps_path = Path.Combine (SparkleLib.SparkleConfig.DefaultConfig.TmpPath, "Images".SHA1 ());
|
||||
pixmaps_path = pixmaps_path.Replace ("\\", "/");
|
||||
|
||||
html = html.Replace ("<a href=", "<a class='windows' href=");
|
||||
html = html.Replace ("<!-- $body-font-family -->", "'Segoe UI', sans-serif");
|
||||
html = html.Replace ("<!-- $day-entry-header-font-size -->", "13px");
|
||||
html = html.Replace ("<!-- $body-font-size -->", "12px");
|
||||
html = html.Replace ("<!-- $secondary-font-color -->", "#bbb");
|
||||
html = html.Replace ("<!-- $small-color -->", "#ddd");
|
||||
html = html.Replace ("<!-- $small-font-size -->", "90%");
|
||||
html = html.Replace ("<!-- $day-entry-header-background-color -->", "#f5f5f5");
|
||||
html = html.Replace ("<!-- $a-color -->", "#0085cf");
|
||||
html = html.Replace ("<!-- $a-hover-color -->", "#009ff8");
|
||||
html = html.Replace ("<!-- $pixmaps-path -->", pixmaps_path);
|
||||
html = html.Replace ("<!-- $document-added-background-image -->", pixmaps_path + "/document-added-12.png");
|
||||
html = html.Replace ("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited-12.png");
|
||||
html = html.Replace ("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted-12.png");
|
||||
html = html.Replace ("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved-12.png");
|
||||
|
||||
this.spinner.Stop ();
|
||||
|
||||
this.web_browser.ObjectForScripting = new SparkleScriptingObject ();
|
||||
this.web_browser.NavigateToString (html);
|
||||
|
||||
if (!this.canvas.Children.Contains (this.web_browser)) {
|
||||
this.canvas.Children.Add (this.web_browser);
|
||||
Canvas.SetLeft (this.web_browser, 0);
|
||||
Canvas.SetTop (this.web_browser, 36);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void WriteOutImages ()
|
||||
{
|
||||
string tmp_path = SparkleLib.SparkleConfig.DefaultConfig.TmpPath;
|
||||
string pixmaps_path = Path.Combine (tmp_path, "Images".SHA1 ());
|
||||
|
||||
if (!Directory.Exists (pixmaps_path)) {
|
||||
Directory.CreateDirectory (pixmaps_path);
|
||||
|
||||
File.SetAttributes (tmp_path,
|
||||
File.GetAttributes (tmp_path) | FileAttributes.Hidden);
|
||||
}
|
||||
|
||||
BitmapSource image = SparkleUIHelpers.GetImageSource ("user-icon-default");
|
||||
string file_path = Path.Combine (pixmaps_path, "user-icon-default.png");
|
||||
|
||||
using (FileStream stream = new FileStream (file_path, FileMode.Create))
|
||||
{
|
||||
BitmapEncoder encoder = new PngBitmapEncoder ();
|
||||
encoder.Frames.Add (BitmapFrame.Create (image));
|
||||
encoder.Save (stream);
|
||||
}
|
||||
|
||||
string [] actions = new string [] {"added", "deleted", "edited", "moved"};
|
||||
|
||||
foreach (string action in actions) {
|
||||
image = SparkleUIHelpers.GetImageSource ("document-" + action + "-12");
|
||||
file_path = Path.Combine (pixmaps_path, "document-" + action + "-12.png");
|
||||
|
||||
using (FileStream stream = new FileStream (file_path, FileMode.Create))
|
||||
{
|
||||
BitmapEncoder encoder = new PngBitmapEncoder ();
|
||||
encoder.Frames.Add (BitmapFrame.Create (image));
|
||||
encoder.Save (stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Close (object sender, CancelEventArgs args)
|
||||
{
|
||||
Controller.WindowClosed ();
|
||||
args.Cancel = true;
|
||||
}
|
||||
|
||||
|
||||
[DllImport ("urlmon.dll")]
|
||||
[PreserveSig]
|
||||
[return:MarshalAs (UnmanagedType.Error)]
|
||||
static extern int CoInternetSetFeatureEnabled (int feature,
|
||||
[MarshalAs (UnmanagedType.U4)] int flags, bool enable);
|
||||
}
|
||||
|
||||
|
||||
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
|
||||
[ComVisible(true)]
|
||||
public class SparkleScriptingObject {
|
||||
|
||||
public void LinkClicked (string url)
|
||||
{
|
||||
SparkleShare.UI.EventLog.Controller.LinkClicked (url);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
<Window x:Class="SparkleShare.SparkleEventLogWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:sparkleShare="clr-namespace:SparkleShare"
|
||||
mc:Ignorable="d"
|
||||
Height="640" SizeToContent="WidthAndHeight" Title="Recent Changes" MinHeight="640" MinWidth="490">
|
||||
<Grid x:Name="grid_Base" Background="White">
|
||||
<Border VerticalAlignment="Top" Height="35" Background="#FFF0F0F0" BorderBrush="#FFDFDFDF" BorderThickness="0,0,0,1">
|
||||
<Grid>
|
||||
<Label Content="Size: ?" Height="28" Name="label_Size" HorizontalAlignment="Left" Margin="20,0,0,0" FontWeight="Bold" />
|
||||
<Label Content="History: ?" Height="28" Name="label_History" HorizontalAlignment="Left" Margin="100,0,0,0" FontWeight="Bold" />
|
||||
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0" MinWidth="120" x:Name="combobox" />
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Margin="0, 35, 0, 0">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"></ColumnDefinition>
|
||||
<ColumnDefinition Width="Auto"></ColumnDefinition>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<sparkleShare:SparkleSpinner x:Name="spinner" />
|
||||
<WebBrowser x:Name="webbrowser" Height="{Binding ElementName=sizingControlHeight, Path=ActualHeight}" Width="{Binding ElementName=sizingControlWidth, Path=ActualWidth}" />
|
||||
|
||||
<!-- WPF always resizes from child to parent. Unfortunately the webbrowser takes all space it gets.
|
||||
To correct this "feature" we use a dummy control in a different column to bind the height to.
|
||||
See: http://stackoverflow.com/questions/7300975/prevent-parent-from-being-resized-by-child -->
|
||||
<Rectangle Name="sizingControlHeight" Grid.Column="1" Visibility="Hidden" />
|
||||
<Rectangle Name="sizingControlWidth" Grid.Column="0" Grid.Row="1" Visibility="Hidden" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Window>
|
|
@ -1,262 +0,0 @@
|
|||
// SparkleShare, a collaboration and sharing tool.
|
||||
// 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 System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Permissions;
|
||||
using System.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace SparkleShare
|
||||
{
|
||||
public partial class SparkleEventLogWindow : Window
|
||||
{
|
||||
public SparkleEventLogController Controller = new SparkleEventLogController ();
|
||||
|
||||
[DllImport("urlmon.dll")]
|
||||
[PreserveSig]
|
||||
[return: MarshalAs(UnmanagedType.Error)]
|
||||
static extern int CoInternetSetFeatureEnabled (int feature, [MarshalAs(UnmanagedType.U4)] int flags, bool enable);
|
||||
|
||||
|
||||
public SparkleEventLogWindow ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
|
||||
|
||||
Background = new SolidColorBrush (Color.FromRgb(240, 240, 240));
|
||||
AllowsTransparency = false;
|
||||
Icon = SparkleUIHelpers.GetImageSource ("sparkleshare-app", "ico");
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||
|
||||
WriteOutImages ();
|
||||
|
||||
this.label_Size.Content = "Size: " + Controller.Size;
|
||||
this.label_History.Content = "History: " + Controller.HistorySize;
|
||||
|
||||
this.webbrowser.ObjectForScripting = new SparkleScriptingObject ();
|
||||
|
||||
// Disable annoying IE clicking sound
|
||||
CoInternetSetFeatureEnabled (21, 0x00000002, true);
|
||||
|
||||
Closing += this.OnClosing;
|
||||
|
||||
Controller.ShowWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) (() => {
|
||||
Show ();
|
||||
Activate ();
|
||||
BringIntoView ();
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.HideWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) (() => {
|
||||
Hide ();
|
||||
this.spinner.Visibility = Visibility.Visible;
|
||||
this.webbrowser.Visibility = Visibility.Collapsed;
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.UpdateSizeInfoEvent += delegate (string size, string history_size) {
|
||||
Dispatcher.BeginInvoke ((Action) (() => {
|
||||
this.label_Size.Content = "Size: " + size;
|
||||
this.label_History.Content = "History: " + history_size;
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.UpdateChooserEvent += delegate (string [] folders) {
|
||||
Dispatcher.BeginInvoke ((Action) (() =>
|
||||
UpdateChooser (folders))
|
||||
);
|
||||
};
|
||||
|
||||
Controller.UpdateChooserEnablementEvent += delegate (bool enabled) {
|
||||
Dispatcher.BeginInvoke ((Action) (() =>
|
||||
this.combobox.IsEnabled = enabled
|
||||
));
|
||||
};
|
||||
|
||||
Controller.UpdateContentEvent += delegate (string html) {
|
||||
Dispatcher.BeginInvoke ((Action) (() => {
|
||||
UpdateContent (html);
|
||||
|
||||
this.spinner.Visibility = Visibility.Collapsed;
|
||||
this.webbrowser.Visibility = Visibility.Visible;
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.ContentLoadingEvent += () => this.Dispatcher.BeginInvoke (
|
||||
(Action)(() => {
|
||||
this.spinner.Visibility = Visibility.Visible;
|
||||
this.spinner.Start ();
|
||||
this.webbrowser.Visibility = Visibility.Collapsed;
|
||||
}));
|
||||
|
||||
Controller.ShowSaveDialogEvent += delegate (string file_name, string target_folder_path) {
|
||||
Dispatcher.BeginInvoke ((Action) (() => {
|
||||
SaveFileDialog dialog = new SaveFileDialog () {
|
||||
FileName = file_name,
|
||||
InitialDirectory = target_folder_path,
|
||||
Title = "Restore from History",
|
||||
DefaultExt = "." + Path.GetExtension (file_name),
|
||||
Filter = "All Files|*.*"
|
||||
};
|
||||
|
||||
bool? result = dialog.ShowDialog (this);
|
||||
|
||||
if (result == true)
|
||||
Controller.SaveDialogCompleted (dialog.FileName);
|
||||
else
|
||||
Controller.SaveDialogCancelled ();
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private void OnClosing (object sender, CancelEventArgs cancel_event_args)
|
||||
{
|
||||
Controller.WindowClosed ();
|
||||
cancel_event_args.Cancel = true;
|
||||
}
|
||||
|
||||
|
||||
private void UpdateContent (string html)
|
||||
{
|
||||
string pixmaps_path = Path.Combine (Sparkles.SparkleConfig.DefaultConfig.TmpPath, "Images");
|
||||
pixmaps_path = pixmaps_path.Replace ("\\", "/");
|
||||
|
||||
html = html.Replace ("<a href=", "<a class='windows' href=");
|
||||
html = html.Replace ("<!-- $body-font-family -->", "Segoe UI");
|
||||
html = html.Replace ("<!-- $day-entry-header-font-size -->", "13px");
|
||||
html = html.Replace ("<!-- $body-font-size -->", "12px");
|
||||
html = html.Replace ("<!-- $secondary-font-color -->", "#bbb");
|
||||
html = html.Replace ("<!-- $small-color -->", "#ddd");
|
||||
html = html.Replace ("<!-- $small-font-size -->", "90%");
|
||||
html = html.Replace ("<!-- $day-entry-header-background-color -->", "#f5f5f5");
|
||||
html = html.Replace ("<!-- $a-color -->", "#0085cf");
|
||||
html = html.Replace ("<!-- $a-hover-color -->", "#009ff8");
|
||||
html = html.Replace ("<!-- $pixmaps-path -->", pixmaps_path);
|
||||
html = html.Replace ("<!-- $document-added-background-image -->", pixmaps_path + "/document-added-12.png");
|
||||
html = html.Replace ("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited-12.png");
|
||||
html = html.Replace ("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted-12.png");
|
||||
html = html.Replace ("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved-12.png");
|
||||
|
||||
this.spinner.Stop ();
|
||||
|
||||
this.webbrowser.ObjectForScripting = new SparkleScriptingObject ();
|
||||
this.webbrowser.NavigateToString (html);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateChooser (string [] folders)
|
||||
{
|
||||
if (folders == null) {
|
||||
folders = Controller.Folders;
|
||||
}
|
||||
|
||||
this.combobox.Items.Clear ();
|
||||
this.combobox.Items.Add (new ComboBoxItem () { Content = "Summary" });
|
||||
this.combobox.Items.Add (new Separator ());
|
||||
this.combobox.SelectedItem = combobox.Items [0];
|
||||
|
||||
int row = 2;
|
||||
foreach (string folder in folders) {
|
||||
this.combobox.Items.Add (new ComboBoxItem () { Content = folder } );
|
||||
|
||||
if (folder.Equals (Controller.SelectedFolder))
|
||||
this.combobox.SelectedItem = this.combobox.Items [row];
|
||||
|
||||
row++;
|
||||
}
|
||||
|
||||
this.combobox.SelectionChanged += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
int index = this.combobox.SelectedIndex;
|
||||
|
||||
if (index == 0)
|
||||
Controller.SelectedFolder = null;
|
||||
else
|
||||
Controller.SelectedFolder = (string) ((ComboBoxItem) this.combobox.Items [index]).Content;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private void WriteOutImages ()
|
||||
{
|
||||
string tmp_path = Sparkles.SparkleConfig.DefaultConfig.TmpPath;
|
||||
string pixmaps_path = Path.Combine (tmp_path, "Images");
|
||||
|
||||
if (!Directory.Exists (pixmaps_path))
|
||||
{
|
||||
Directory.CreateDirectory (pixmaps_path);
|
||||
|
||||
File.SetAttributes (tmp_path, File.GetAttributes (tmp_path) | FileAttributes.Hidden);
|
||||
}
|
||||
|
||||
BitmapSource image = SparkleUIHelpers.GetImageSource ("user-icon-default");
|
||||
string file_path = Path.Combine (pixmaps_path, "user-icon-default.png");
|
||||
|
||||
using (FileStream stream = new FileStream (file_path, FileMode.Create))
|
||||
{
|
||||
BitmapEncoder encoder = new PngBitmapEncoder ();
|
||||
encoder.Frames.Add (BitmapFrame.Create (image));
|
||||
encoder.Save (stream);
|
||||
}
|
||||
|
||||
string[] actions = new string [] { "added", "deleted", "edited", "moved" };
|
||||
|
||||
foreach (string action in actions)
|
||||
{
|
||||
image = SparkleUIHelpers.GetImageSource ("document-" + action + "-12");
|
||||
file_path = Path.Combine (pixmaps_path, "document-" + action + "-12.png");
|
||||
|
||||
using (FileStream stream = new FileStream (file_path, FileMode.Create))
|
||||
{
|
||||
BitmapEncoder encoder = new PngBitmapEncoder ();
|
||||
encoder.Frames.Add (BitmapFrame.Create(image));
|
||||
encoder.Save (stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
|
||||
[ComVisible(true)]
|
||||
public class SparkleScriptingObject
|
||||
{
|
||||
public void LinkClicked(string url)
|
||||
{
|
||||
SparkleShare.UI.EventLog.Controller.LinkClicked(url);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{7F0DB8D0-E278-4955-8204-FC391B99F7C1}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>SparkleLib.Git</RootNamespace>
|
||||
<AssemblyName>SparkleLib.Git</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\..\bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\..\..\bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\..\..\SparkleLib\Git\SparkleFetcherGit.cs">
|
||||
<Link>SparkleFetcherGit.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\..\SparkleLib\Git\SparkleGit.cs">
|
||||
<Link>SparkleGit.cs</Link>
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\..\SparkleLib\Git\SparkleRepoGit.cs">
|
||||
<Link>SparkleRepoGit.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SparkleLib.csproj">
|
||||
<Project>{748f6316-37b4-46fd-a011-af073bc7c02d}</Project>
|
||||
<Name>SparkleLib</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,97 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{748F6316-37B4-46FD-A011-AF073BC7C02D}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>SparkleLib</RootNamespace>
|
||||
<AssemblyName>SparkleLib</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\bin\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\..\bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\..\SparkleLib\Defines.cs">
|
||||
<Link>Defines.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleBackend.cs">
|
||||
<Link>SparkleBackend.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleConfig.cs">
|
||||
<Link>SparkleConfig.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleExtensions.cs">
|
||||
<Link>SparkleExtensions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleFetcherBase.cs">
|
||||
<Link>SparkleFetcherBase.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleFetcherSSH.cs">
|
||||
<Link>SparkleFetcherSSH.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleListenerBase.cs">
|
||||
<Link>SparkleListenerBase.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleListenerFactory.cs">
|
||||
<Link>SparkleListenerFactory.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleListenerTcp.cs">
|
||||
<Link>SparkleListenerTcp.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleLogger.cs">
|
||||
<Link>SparkleLogger.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleRepoBase.cs">
|
||||
<Link>SparkleRepoBase.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleUser.cs">
|
||||
<Link>SparkleUser.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleWatcher.cs">
|
||||
<Link>SparkleWatcher.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\..\..\SparkleLib\SparkleWrappers.cs">
|
||||
<Link>SparkleWrappers.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
|
@ -6,9 +6,9 @@
|
|||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<ProjectGuid>{728483AA-E34B-4441-BF2C-C8BC2901E4E0}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AssemblyName>SparkleShare</AssemblyName>
|
||||
<AssemblyName>SparkleShare.Windows</AssemblyName>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<RootNamespace>SparkleShare</RootNamespace>
|
||||
<RootNamespace>SparkleShare.Windows</RootNamespace>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<OldToolsVersion>3.5</OldToolsVersion>
|
||||
|
@ -44,6 +44,7 @@
|
|||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<OutputPath>..\..\bin\</OutputPath>
|
||||
|
@ -53,6 +54,26 @@
|
|||
<DebugSymbols>true</DebugSymbols>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Optimize>false</Optimize>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Windows-Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>..\..\bin\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseWindows|AnyCPU'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>..\..\bin\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugMac|AnyCPU' ">
|
||||
<OutputPath>..\..\bin\</OutputPath>
|
||||
|
@ -80,53 +101,30 @@
|
|||
<Reference Include="System.Xaml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\SparkleBubblesController.cs">
|
||||
<Link>SparkleBubblesController.cs</Link>
|
||||
<Compile Include="..\Common\AboutController.cs" />
|
||||
<Compile Include="..\Common\Avatars.cs" />
|
||||
<Compile Include="..\Common\BaseController.cs" />
|
||||
<Compile Include="..\Common\BubblesController.cs" />
|
||||
<Compile Include="..\Common\EventLogController.cs" />
|
||||
<Compile Include="..\Common\NoteController.cs" />
|
||||
<Compile Include="..\Common\SetupController.cs" />
|
||||
<Compile Include="..\Common\SparkleShare.cs" />
|
||||
<Compile Include="..\Common\StatusIconController.cs" />
|
||||
<Compile Include="UserInterface\About.cs" />
|
||||
<Compile Include="UserInterface\Bubbles.cs" />
|
||||
<Compile Include="UserInterface\EventLog.cs" />
|
||||
<Compile Include="UserInterface\Controller.cs" />
|
||||
<Compile Include="UserInterface\Note.xaml.cs">
|
||||
<DependentUpon>Note.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleControllerBase.cs">
|
||||
<Link>SparkleControllerBase.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleExtensions.cs">
|
||||
<Link>SparkleExtensions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleInvite.cs">
|
||||
<Link>SparkleInvite.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleNoteController.cs">
|
||||
<Link>SparkleNoteController.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparklePlugin.cs">
|
||||
<Link>SparklePlugin.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleStatusIconController.cs">
|
||||
<Link>SparkleStatusIconController.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\SparkleSetupController.cs" />
|
||||
<Compile Include="SparkleEventLogWindow.xaml.cs">
|
||||
<DependentUpon>SparkleEventLogWindow.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="SparkleNote.xaml.cs">
|
||||
<DependentUpon>SparkleNote.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="SparkleShortcut.cs" />
|
||||
<Compile Include="SparkleUI.cs" />
|
||||
<Compile Include="..\SparkleAboutController.cs" />
|
||||
<Compile Include="..\SparkleAvatars.cs" />
|
||||
<Compile Include="SparkleBubbles.cs" />
|
||||
<Compile Include="SparkleAbout.cs" />
|
||||
<Compile Include="SparkleController.cs" />
|
||||
<Compile Include="SparkleSetup.cs" />
|
||||
<Compile Include="SparkleStatusIcon.cs" />
|
||||
<Compile Include="SparkleUIHelpers.cs" />
|
||||
<Compile Include="..\SparkleEventLogController.cs">
|
||||
<Link>SparkleEventLogController.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="SparkleSetupWindow.cs" />
|
||||
<Compile Include="..\Program.cs">
|
||||
<Link>Program.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="SparkleNotifyIcon.cs" />
|
||||
<Compile Include="SparkleSpinner.cs" />
|
||||
<Compile Include="UserInterface\NotifyIcon.cs" />
|
||||
<Compile Include="UserInterface\Setup.cs" />
|
||||
<Compile Include="UserInterface\SetupWindow.cs" />
|
||||
<Compile Include="UserInterface\Shortcut.cs" />
|
||||
<Compile Include="UserInterface\Spinner.cs" />
|
||||
<Compile Include="UserInterface\StatusIcon.cs" />
|
||||
<Compile Include="UserInterface\UserInterface.cs" />
|
||||
<Compile Include="UserInterface\UserInterfaceHelpers.cs" />
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<VisualStudio />
|
||||
|
@ -155,9 +153,11 @@
|
|||
<ItemGroup>
|
||||
<EmbeddedResource Include="..\Common\Images\about.png">
|
||||
<Link>Images\about.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Common\Images\side-splash.png">
|
||||
<Link>Images\side-splash.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Common\HTML\day-entry.html">
|
||||
<Link>HTML\day-entry.html</Link>
|
||||
|
@ -174,31 +174,47 @@
|
|||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Common\Images\user-icon-default.png">
|
||||
<Link>Images\user-icon-default.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\document-added-12.png">
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\hicolor\document-added-12.png">
|
||||
<Link>Images\document-added-12.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\document-deleted-12.png">
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\hicolor\document-deleted-12.png">
|
||||
<Link>Images\document-deleted-12.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\document-edited-12.png">
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\hicolor\document-edited-12.png">
|
||||
<Link>Images\document-edited-12.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\document-moved-12.png">
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\hicolor\document-moved-12.png">
|
||||
<Link>Images\document-moved-12.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\process-working-22.png">
|
||||
<EmbeddedResource Include="..\Linux\Images\icons\hicolor\process-working-22.png">
|
||||
<Link>Images\process-working-22.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\process-syncing-down.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\process-syncing-idle.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\process-syncing-up.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\process-syncing.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\process-syncing-down.png" />
|
||||
<EmbeddedResource Include="Images\process-syncing-idle.png" />
|
||||
<EmbeddedResource Include="Images\process-syncing-up.png" />
|
||||
<EmbeddedResource Include="Images\process-syncing.png" />
|
||||
<EmbeddedResource Include="..\Common\Images\tutorial-slide-1.png">
|
||||
<Link>Images\tutorial-slide-1.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="..\Common\Images\tutorial-slide-2.png">
|
||||
<Link>Images\tutorial-slide-2.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -206,10 +222,6 @@
|
|||
<Link>Presets\github.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\gitorious.png">
|
||||
<Link>Presets\gitorious.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\own-server.png">
|
||||
<Link>Presets\own-server.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
|
@ -218,20 +230,13 @@
|
|||
<Link>Presets\bitbucket.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\ssnet.png">
|
||||
<Link>Presets\ssnet.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\planio.png">
|
||||
<Link>Presets\planio.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\Common\Presets\ssnet.xml">
|
||||
<Link>Presets\ssnet.xml</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\bitbucket.xml">
|
||||
<Link>Presets\bitbucket.xml</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
|
@ -240,10 +245,6 @@
|
|||
<Link>Presets\github.xml</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\gitorious.xml">
|
||||
<Link>Presets\gitorious.xml</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\Common\Presets\own-server.xml">
|
||||
<Link>Presets\own-server.xml</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
|
@ -254,26 +255,35 @@
|
|||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Images\folder.png" />
|
||||
<EmbeddedResource Include="Images\process-syncing-error.png" />
|
||||
<EmbeddedResource Include="Images\sparkleshare-app.ico" />
|
||||
<EmbeddedResource Include="Images\sparkleshare-folder.png" />
|
||||
<EmbeddedResource Include="Images\folder.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\process-syncing-error.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\sparkleshare-app.ico">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Images\sparkleshare-folder.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Images\tutorial-slide-3.png" />
|
||||
<EmbeddedResource Include="Images\tutorial-slide-3.png">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="..\Common\Images\text-balloon.png">
|
||||
<Link>Images\text-balloon.png</Link>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Resource>
|
||||
<Content Include="Images\sparkleshare-folder.ico" />
|
||||
<Content Include="Images\sparkleshare-folder.ico">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="SparkleEventLogWindow.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="SparkleNote.xaml">
|
||||
<Page Include="UserInterface\Note.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
|
|
|
@ -17,30 +17,27 @@
|
|||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Xaml;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleAbout : Window {
|
||||
public class About : Window {
|
||||
|
||||
public SparkleAboutController Controller = new SparkleAboutController ();
|
||||
public AboutController Controller = new AboutController ();
|
||||
|
||||
private Label updates;
|
||||
|
||||
|
||||
public SparkleAbout ()
|
||||
public About ()
|
||||
{
|
||||
Title = "About SparkleShare";
|
||||
ResizeMode = ResizeMode.NoResize;
|
||||
Height = 288;
|
||||
Width = 720;
|
||||
Icon = SparkleUIHelpers.GetImageSource("sparkleshare-app", "ico");
|
||||
Icon = UserInterfaceHelpers.GetImageSource("sparkleshare-app", "ico");
|
||||
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||
Closing += Close;
|
||||
|
@ -77,7 +74,7 @@ namespace SparkleShare {
|
|||
Height = 260
|
||||
};
|
||||
|
||||
image.Source = SparkleUIHelpers.GetImageSource ("about");
|
||||
image.Source = UserInterfaceHelpers.GetImageSource ("about");
|
||||
|
||||
|
||||
Label version = new Label () {
|
|
@ -15,16 +15,14 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
using System;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleBubbles {
|
||||
public class Bubbles {
|
||||
|
||||
public SparkleBubblesController Controller = new SparkleBubblesController ();
|
||||
public BubblesController Controller = new BubblesController ();
|
||||
|
||||
|
||||
public SparkleBubbles ()
|
||||
public Bubbles ()
|
||||
{
|
||||
Controller.ShowBubbleEvent += delegate (string title, string subtext, string image_path) {
|
||||
if (!SparkleShare.Controller.NotificationsEnabled)
|
|
@ -16,26 +16,22 @@
|
|||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
|
||||
using System.Windows;
|
||||
using Forms = System.Windows.Forms;
|
||||
using Microsoft.Win32;
|
||||
|
||||
using Sparkles;
|
||||
using Sparkles.Git;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleController : SparkleControllerBase {
|
||||
public class Controller : BaseController {
|
||||
|
||||
public SparkleController ()
|
||||
public Controller ()
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -43,7 +39,7 @@ namespace SparkleShare {
|
|||
public override string PresetsPath
|
||||
{
|
||||
get {
|
||||
return Path.Combine (Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location), "plugins");
|
||||
return Path.Combine (Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location), "Presets");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,15 +51,11 @@ namespace SparkleShare {
|
|||
string executable_path = Path.GetDirectoryName (Forms.Application.ExecutablePath);
|
||||
string msysgit_path = Path.Combine (executable_path, "msysgit");
|
||||
|
||||
string new_PATH = msysgit_path + @"\bin" + ";" +
|
||||
msysgit_path + @"\mingw\bin" + ";" +
|
||||
msysgit_path + @"\cmd" + ";" +
|
||||
Environment.ExpandEnvironmentVariables ("%PATH%");
|
||||
|
||||
Environment.SetEnvironmentVariable ("PATH", new_PATH);
|
||||
Environment.SetEnvironmentVariable ("HOME", Environment.GetFolderPath (Environment.SpecialFolder.UserProfile));
|
||||
|
||||
Sparkles.Git.SparkleGit.SSHPath = Path.Combine (msysgit_path, "bin", "ssh.exe");
|
||||
SSHCommand.SSHPath = Path.Combine (msysgit_path, "usr", "bin");
|
||||
SSHFetcher.SSHKeyScan = Path.Combine (msysgit_path, "usr", "bin", "ssh-keyscan.exe");
|
||||
GitCommand.GitPath = Path.Combine (msysgit_path, "bin", "git.exe");
|
||||
|
||||
base.Initialize ();
|
||||
}
|
||||
|
@ -71,22 +63,54 @@ namespace SparkleShare {
|
|||
|
||||
public override string EventLogHTML {
|
||||
get {
|
||||
string html = SparkleUIHelpers.GetHTML ("event-log.html");
|
||||
return html.Replace ("<!-- $jquery -->", SparkleUIHelpers.GetHTML ("jquery.js"));
|
||||
string html = UserInterfaceHelpers.GetHTML ("event-log.html");
|
||||
return html.Replace ("<!-- $jquery -->", UserInterfaceHelpers.GetHTML ("jquery.js"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override string DayEntryHTML {
|
||||
get {
|
||||
return SparkleUIHelpers.GetHTML ("day-entry.html");
|
||||
return UserInterfaceHelpers.GetHTML ("day-entry.html");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override string EventEntryHTML {
|
||||
get {
|
||||
return SparkleUIHelpers.GetHTML ("event-entry.html");
|
||||
return UserInterfaceHelpers.GetHTML ("event-entry.html");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void SetFolderIcon ()
|
||||
{
|
||||
string app_path = Path.GetDirectoryName (Forms.Application.ExecutablePath);
|
||||
string icon_file_path = Path.Combine (app_path, "Images", "sparkleshare-folder.ico");
|
||||
|
||||
if (!File.Exists (icon_file_path))
|
||||
{
|
||||
string ini_file_path = Path.Combine (FoldersPath, "desktop.ini");
|
||||
string n = Environment.NewLine;
|
||||
|
||||
string ini_file = "[.ShellClassInfo]" + n +
|
||||
"IconFile=" + icon_file_path + n +
|
||||
"IconIndex=0" + n +
|
||||
"InfoTip=SparkleShare";
|
||||
|
||||
try
|
||||
{
|
||||
File.Create (ini_file_path).Close ();
|
||||
File.WriteAllText (ini_file_path, ini_file);
|
||||
|
||||
File.SetAttributes (ini_file_path,
|
||||
File.GetAttributes (ini_file_path) | FileAttributes.Hidden | FileAttributes.System);
|
||||
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
Logger.LogInfo ("Config", "Failed setting icon for '" + FoldersPath + "': " + e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,7 +136,7 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
|
||||
public override void AddToBookmarks ()
|
||||
public void AddToBookmarks ()
|
||||
{
|
||||
string user_profile_path = Environment.GetFolderPath (Environment.SpecialFolder.UserProfile);
|
||||
string shortcut_path = Path.Combine (user_profile_path, "Links", "SparkleShare.lnk");
|
||||
|
@ -125,43 +149,15 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
|
||||
public override bool CreateSparkleShareFolder ()
|
||||
public override void CreateSparkleShareFolder ()
|
||||
{
|
||||
if (!Directory.Exists (FoldersPath))
|
||||
{
|
||||
if (Directory.Exists (FoldersPath))
|
||||
return false;
|
||||
|
||||
Directory.CreateDirectory (FoldersPath);
|
||||
|
||||
File.SetAttributes (FoldersPath, File.GetAttributes (FoldersPath) | FileAttributes.System);
|
||||
SparkleLogger.LogInfo ("Config", "Created '" + FoldersPath + "'");
|
||||
|
||||
string app_path = Path.GetDirectoryName (Forms.Application.ExecutablePath);
|
||||
string icon_file_path = Path.Combine (app_path, "Images", "sparkleshare-folder.ico");
|
||||
|
||||
if (!File.Exists (icon_file_path)) {
|
||||
string ini_file_path = Path.Combine (FoldersPath, "desktop.ini");
|
||||
string n = Environment.NewLine;
|
||||
|
||||
string ini_file = "[.ShellClassInfo]" + n +
|
||||
"IconFile=" + icon_file_path + n +
|
||||
"IconIndex=0" + n +
|
||||
"InfoTip=SparkleShare";
|
||||
|
||||
try {
|
||||
File.Create (ini_file_path).Close ();
|
||||
File.WriteAllText (ini_file_path, ini_file);
|
||||
|
||||
File.SetAttributes (ini_file_path,
|
||||
File.GetAttributes (ini_file_path) | FileAttributes.Hidden | FileAttributes.System);
|
||||
|
||||
} catch (IOException e) {
|
||||
SparkleLogger.LogInfo ("Config", "Failed setting icon for '" + FoldersPath + "': " + e.Message);
|
||||
File.SetAttributes (FoldersPath, File.GetAttributes(FoldersPath) | FileAttributes.System);
|
||||
Logger.LogInfo ("Config", "Created '" + FoldersPath + "'");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -189,7 +185,7 @@ namespace SparkleShare {
|
|||
Clipboard.SetData (DataFormats.Text, text);
|
||||
|
||||
} catch (COMException e) {
|
||||
SparkleLogger.LogInfo ("Controller", "Copy to clipboard failed", e);
|
||||
Logger.LogInfo ("Controller", "Copy to clipboard failed", e);
|
||||
}
|
||||
}
|
||||
|
347
SparkleShare/Windows/UserInterface/EventLog.cs
Normal file
347
SparkleShare/Windows/UserInterface/EventLog.cs
Normal file
|
@ -0,0 +1,347 @@
|
|||
// SparkleShare, a collaboration and sharing tool.
|
||||
// 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 System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Security.Permissions;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
using Microsoft.Win32;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace SparkleShare
|
||||
{
|
||||
public class EventLog : Window {
|
||||
|
||||
public EventLogController Controller = new EventLogController ();
|
||||
|
||||
private Label label_Size;
|
||||
private Label label_History;
|
||||
|
||||
private WebBrowser webbrowser;
|
||||
|
||||
private Spinner spinner;
|
||||
|
||||
private ComboBox combobox;
|
||||
|
||||
private Grid grid_Base;
|
||||
|
||||
[DllImport("urlmon.dll")]
|
||||
[PreserveSig]
|
||||
[return: MarshalAs(UnmanagedType.Error)]
|
||||
static extern int CoInternetSetFeatureEnabled(int feature, [MarshalAs(UnmanagedType.U4)] int flags, bool enable);
|
||||
|
||||
public EventLog()
|
||||
{
|
||||
CreateEventLog();
|
||||
|
||||
Background = new SolidColorBrush(Color.FromRgb(240, 240, 240));
|
||||
AllowsTransparency = false;
|
||||
Icon = UserInterfaceHelpers.GetImageSource("sparkleshare-app", "ico");
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||
|
||||
WriteOutImages();
|
||||
|
||||
this.label_Size.Content = "Size: " + Controller.Size;
|
||||
this.label_History.Content = "History: " + Controller.HistorySize;
|
||||
|
||||
this.webbrowser.ObjectForScripting = new SparkleScriptingObject();
|
||||
|
||||
// Disable annoying IE clicking sound
|
||||
CoInternetSetFeatureEnabled(21, 0x00000002, true);
|
||||
|
||||
Closing += this.OnClosing;
|
||||
|
||||
Controller.ShowWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke((Action)(() => {
|
||||
Show();
|
||||
Activate();
|
||||
BringIntoView();
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.HideWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke((Action)(() => {
|
||||
Hide();
|
||||
this.spinner.Visibility = Visibility.Visible;
|
||||
this.webbrowser.Visibility = Visibility.Collapsed;
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.UpdateSizeInfoEvent += delegate (string size, string history_size) {
|
||||
Dispatcher.BeginInvoke((Action)(() => {
|
||||
this.label_Size.Content = "Size: " + size;
|
||||
this.label_History.Content = "History: " + history_size;
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.UpdateChooserEvent += delegate (string[] folders) {
|
||||
Dispatcher.BeginInvoke((Action)(() =>
|
||||
UpdateChooser(folders))
|
||||
);
|
||||
};
|
||||
|
||||
Controller.UpdateChooserEnablementEvent += delegate (bool enabled) {
|
||||
Dispatcher.BeginInvoke((Action)(() =>
|
||||
this.combobox.IsEnabled = enabled
|
||||
));
|
||||
};
|
||||
|
||||
Controller.UpdateContentEvent += delegate (string html) {
|
||||
Dispatcher.BeginInvoke((Action)(() => {
|
||||
UpdateContent(html);
|
||||
|
||||
this.spinner.Visibility = Visibility.Collapsed;
|
||||
this.webbrowser.Visibility = Visibility.Visible;
|
||||
}));
|
||||
};
|
||||
|
||||
Controller.ContentLoadingEvent += () => this.Dispatcher.BeginInvoke(
|
||||
(Action)(() => {
|
||||
this.spinner.Visibility = Visibility.Visible;
|
||||
this.spinner.Start();
|
||||
this.webbrowser.Visibility = Visibility.Collapsed;
|
||||
}));
|
||||
|
||||
Controller.ShowSaveDialogEvent += delegate (string file_name, string target_folder_path) {
|
||||
Dispatcher.BeginInvoke((Action)(() => {
|
||||
SaveFileDialog dialog = new SaveFileDialog()
|
||||
{
|
||||
FileName = file_name,
|
||||
InitialDirectory = target_folder_path,
|
||||
Title = "Restore from History",
|
||||
DefaultExt = "." + System.IO.Path.GetExtension(file_name),
|
||||
Filter = "All Files|*.*"
|
||||
};
|
||||
|
||||
bool? result = dialog.ShowDialog(this);
|
||||
|
||||
if (result == true)
|
||||
Controller.SaveDialogCompleted(dialog.FileName);
|
||||
else
|
||||
Controller.SaveDialogCancelled();
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private void CreateEventLog () {
|
||||
grid_Base = new Grid { Background = Brushes.White };
|
||||
|
||||
label_Size = new Label {
|
||||
Content = "Size: ?",
|
||||
Height = 28,
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
Margin = new Thickness(20, 0, 0, 0),
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
label_History = new Label {
|
||||
Content = "History: ?",
|
||||
Height = 28,
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
Margin = new Thickness(100, 0, 0, 0),
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
combobox = new ComboBox {
|
||||
HorizontalAlignment = HorizontalAlignment.Right,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = new Thickness(0, 0, 6, 0),
|
||||
MinWidth = 120
|
||||
};
|
||||
|
||||
spinner = new Spinner { Name = "spinner" };
|
||||
webbrowser = new WebBrowser { Name = "webbrowser" };
|
||||
|
||||
Border border = new Border {
|
||||
VerticalAlignment = VerticalAlignment.Top,
|
||||
Height = 35,
|
||||
Background = new SolidColorBrush(Color.FromArgb(255, 240, 240, 240)),
|
||||
BorderBrush = new SolidColorBrush(Color.FromArgb(255, 223, 223, 223)),
|
||||
BorderThickness = new Thickness(0, 0, 0, 1)
|
||||
};
|
||||
|
||||
Grid borderGrid = new Grid();
|
||||
|
||||
borderGrid.Children.Add(this.label_Size);
|
||||
borderGrid.Children.Add(this.label_History);
|
||||
borderGrid.Children.Add(this.combobox);
|
||||
|
||||
border.Child = borderGrid;
|
||||
|
||||
Grid browserGrid = new Grid { Margin = new Thickness(0, 35, 0, 0) };
|
||||
|
||||
browserGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
|
||||
browserGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
|
||||
|
||||
browserGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
|
||||
browserGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
|
||||
|
||||
browserGrid.Children.Add(this.spinner);
|
||||
browserGrid.Children.Add(this.webbrowser);
|
||||
|
||||
Rectangle sizingControlHeight = new Rectangle {
|
||||
Name = "sizingControlHeight",
|
||||
Visibility = Visibility.Hidden
|
||||
};
|
||||
|
||||
Grid.SetColumn(sizingControlHeight, 1);
|
||||
|
||||
Rectangle sizingControlWidth = new Rectangle {
|
||||
Name = "sizingControlHeight",
|
||||
Visibility = Visibility.Hidden
|
||||
};
|
||||
|
||||
Grid.SetColumn(sizingControlWidth, 0);
|
||||
Grid.SetRow(sizingControlWidth, 0);
|
||||
|
||||
browserGrid.Children.Add(sizingControlHeight);
|
||||
browserGrid.Children.Add(sizingControlWidth);
|
||||
|
||||
webbrowser.SetBinding(HeightProperty, new Binding("ActualHeightProperty") { ElementName = sizingControlHeight.Name });
|
||||
webbrowser.SetBinding(WidthProperty, new Binding("ActualWidthProperty") { ElementName = sizingControlWidth.Name });
|
||||
|
||||
grid_Base.Children.Add(border);
|
||||
}
|
||||
|
||||
private void OnClosing(object sender, CancelEventArgs cancel_event_args)
|
||||
{
|
||||
Controller.WindowClosed();
|
||||
cancel_event_args.Cancel = true;
|
||||
}
|
||||
|
||||
|
||||
private void UpdateContent(string html)
|
||||
{
|
||||
string pixmaps_path = System.IO.Path.Combine(Sparkles.Configuration.DefaultConfiguration.TmpPath, "Images");
|
||||
pixmaps_path = pixmaps_path.Replace("\\", "/");
|
||||
|
||||
html = html.Replace("<a href=", "<a class='windows' href=");
|
||||
html = html.Replace("<!-- $body-font-family -->", "Segoe UI");
|
||||
html = html.Replace("<!-- $day-entry-header-font-size -->", "13px");
|
||||
html = html.Replace("<!-- $body-font-size -->", "12px");
|
||||
html = html.Replace("<!-- $secondary-font-color -->", "#bbb");
|
||||
html = html.Replace("<!-- $small-color -->", "#ddd");
|
||||
html = html.Replace("<!-- $small-font-size -->", "90%");
|
||||
html = html.Replace("<!-- $day-entry-header-background-color -->", "#f5f5f5");
|
||||
html = html.Replace("<!-- $a-color -->", "#0085cf");
|
||||
html = html.Replace("<!-- $a-hover-color -->", "#009ff8");
|
||||
html = html.Replace("<!-- $pixmaps-path -->", pixmaps_path);
|
||||
html = html.Replace("<!-- $document-added-background-image -->", pixmaps_path + "/document-added-12.png");
|
||||
html = html.Replace("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited-12.png");
|
||||
html = html.Replace("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted-12.png");
|
||||
html = html.Replace("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved-12.png");
|
||||
|
||||
this.spinner.Stop();
|
||||
|
||||
this.webbrowser.ObjectForScripting = new SparkleScriptingObject();
|
||||
this.webbrowser.NavigateToString(html);
|
||||
}
|
||||
|
||||
|
||||
public void UpdateChooser(string[] folders)
|
||||
{
|
||||
if (folders == null)
|
||||
{
|
||||
folders = Controller.Folders;
|
||||
}
|
||||
|
||||
this.combobox.Items.Clear();
|
||||
this.combobox.Items.Add(new ComboBoxItem() { Content = "Summary" });
|
||||
this.combobox.Items.Add(new Separator());
|
||||
this.combobox.SelectedItem = combobox.Items[0];
|
||||
|
||||
int row = 2;
|
||||
foreach (string folder in folders)
|
||||
{
|
||||
this.combobox.Items.Add(new ComboBoxItem() { Content = folder });
|
||||
|
||||
if (folder.Equals(Controller.SelectedFolder))
|
||||
this.combobox.SelectedItem = this.combobox.Items[row];
|
||||
|
||||
row++;
|
||||
}
|
||||
|
||||
this.combobox.SelectionChanged += delegate {
|
||||
Dispatcher.BeginInvoke((Action)delegate {
|
||||
int index = this.combobox.SelectedIndex;
|
||||
|
||||
if (index == 0)
|
||||
Controller.SelectedFolder = null;
|
||||
else
|
||||
Controller.SelectedFolder = (string)((ComboBoxItem)this.combobox.Items[index]).Content;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private void WriteOutImages()
|
||||
{
|
||||
string tmp_path = Sparkles.Configuration.DefaultConfiguration.TmpPath;
|
||||
string pixmaps_path = System.IO.Path.Combine(tmp_path, "Images");
|
||||
|
||||
if (!Directory.Exists(pixmaps_path))
|
||||
{
|
||||
Directory.CreateDirectory(pixmaps_path);
|
||||
|
||||
File.SetAttributes(tmp_path, File.GetAttributes(tmp_path) | FileAttributes.Hidden);
|
||||
}
|
||||
|
||||
BitmapSource image = UserInterfaceHelpers.GetImageSource("user-icon-default");
|
||||
string file_path = System.IO.Path.Combine(pixmaps_path, "user-icon-default.png");
|
||||
|
||||
using (FileStream stream = new FileStream(file_path, FileMode.Create))
|
||||
{
|
||||
BitmapEncoder encoder = new PngBitmapEncoder();
|
||||
encoder.Frames.Add(BitmapFrame.Create(image));
|
||||
encoder.Save(stream);
|
||||
}
|
||||
|
||||
string[] actions = new string[] { "added", "deleted", "edited", "moved" };
|
||||
|
||||
foreach (string action in actions)
|
||||
{
|
||||
image = UserInterfaceHelpers.GetImageSource("document-" + action + "-12");
|
||||
file_path = System.IO.Path.Combine(pixmaps_path, "document-" + action + "-12.png");
|
||||
|
||||
using (FileStream stream = new FileStream(file_path, FileMode.Create))
|
||||
{
|
||||
BitmapEncoder encoder = new PngBitmapEncoder();
|
||||
encoder.Frames.Add(BitmapFrame.Create(image));
|
||||
encoder.Save(stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
|
||||
[ComVisible(true)]
|
||||
public class SparkleScriptingObject
|
||||
{
|
||||
public void LinkClicked(string url)
|
||||
{
|
||||
SparkleShare.UI.EventLog.Controller.LinkClicked(url);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
<Window x:Class="SparkleShare.SparkleNote"
|
||||
<Window x:Class="SparkleShare.Note"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
|
@ -26,7 +26,7 @@
|
|||
</StackPanel>
|
||||
<TextBox x:Name="balloon_text_field" Grid.Row="1" Grid.ColumnSpan="2" Width="438" Height="72" BorderBrush="{x:Null}" BorderThickness="0" Padding="8,12,8,8" TextWrapping="Wrap" AcceptsReturn="True" Text="Anything to add?" >
|
||||
<TextBox.Background>
|
||||
<ImageBrush ImageSource="pack://application:,,,/SparkleShare;component/Images/text-balloon.png" Stretch="Uniform"></ImageBrush>
|
||||
<ImageBrush ImageSource="pack://application:,,,/SparkleShare.Windows;component/Images/text-balloon.png" Stretch="Uniform"></ImageBrush>
|
||||
</TextBox.Background>
|
||||
</TextBox>
|
||||
<StackPanel Grid.Column="1" Grid.Row="2" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal">
|
|
@ -26,19 +26,19 @@ using Sparkles;
|
|||
|
||||
namespace SparkleShare {
|
||||
|
||||
public partial class SparkleNote : Window {
|
||||
public partial class Note : Window {
|
||||
|
||||
public SparkleNoteController Controller = new SparkleNoteController ();
|
||||
public NoteController Controller = new NoteController ();
|
||||
|
||||
private readonly string default_text = "Anything to add?";
|
||||
|
||||
public SparkleNote()
|
||||
public Note ()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Background = new SolidColorBrush(Color.FromRgb(240, 240, 240));
|
||||
AllowsTransparency = false;
|
||||
Icon = SparkleUIHelpers.GetImageSource("sparkleshare-app", "ico");
|
||||
Icon = UserInterfaceHelpers.GetImageSource("sparkleshare-app", "ico");
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||
|
||||
Closing += this.OnClosing;
|
||||
|
@ -85,10 +85,10 @@ namespace SparkleShare {
|
|||
|
||||
private void CreateNote()
|
||||
{
|
||||
ImageSource avatar = SparkleUIHelpers.GetImageSource("user-icon-default");
|
||||
ImageSource avatar = UserInterfaceHelpers.GetImageSource("user-icon-default");
|
||||
|
||||
if (File.Exists (Controller.AvatarFilePath)) {
|
||||
avatar = SparkleUIHelpers.GetImage (Controller.AvatarFilePath);
|
||||
avatar = UserInterfaceHelpers.GetImage (Controller.AvatarFilePath);
|
||||
}
|
||||
|
||||
this.user_image.ImageSource = avatar;
|
|
@ -30,14 +30,14 @@ namespace SparkleShare {
|
|||
|
||||
[ContentProperty("Text")]
|
||||
[DefaultEvent("MouseDoubleClick")]
|
||||
public class SparkleNotifyIcon : UIElement, IAddChild {
|
||||
public class NotifyIcon : UIElement, IAddChild {
|
||||
|
||||
[DllImport("user32.dll", EntryPoint = "DestroyIcon")]
|
||||
static extern bool DestroyIcon(IntPtr h_icon);
|
||||
|
||||
public Drawing.Bitmap Icon {
|
||||
set {
|
||||
NotifyIcon.Icon = GetIconFromBitmap(value);
|
||||
Notification.Icon = GetIconFromBitmap(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,43 +65,43 @@ namespace SparkleShare {
|
|||
set;
|
||||
}
|
||||
|
||||
private Forms.NotifyIcon NotifyIcon {
|
||||
private Forms.NotifyIcon Notification {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public readonly RoutedEvent MouseClickEvent = EventManager.RegisterRoutedEvent(
|
||||
"MouseClick", RoutingStrategy.Bubble, typeof(MouseButtonEventHandler), typeof(SparkleNotifyIcon));
|
||||
"MouseClick", RoutingStrategy.Bubble, typeof(MouseButtonEventHandler), typeof(NotifyIcon));
|
||||
|
||||
public readonly RoutedEvent MouseDoubleClickEvent = EventManager.RegisterRoutedEvent(
|
||||
"MouseDoubleClick", RoutingStrategy.Bubble, typeof(MouseButtonEventHandler), typeof(SparkleNotifyIcon));
|
||||
"MouseDoubleClick", RoutingStrategy.Bubble, typeof(MouseButtonEventHandler), typeof(NotifyIcon));
|
||||
|
||||
public readonly DependencyProperty TextProperty = DependencyProperty.Register(
|
||||
"Text", typeof(string), typeof(SparkleNotifyIcon), new PropertyMetadata(OnTextChanged));
|
||||
"Text", typeof(string), typeof(NotifyIcon), new PropertyMetadata(OnTextChanged));
|
||||
|
||||
public SparkleNotifyIcon() {
|
||||
VisibilityProperty.OverrideMetadata(typeof(SparkleNotifyIcon), new PropertyMetadata(OnVisibilityChanged));
|
||||
public NotifyIcon() {
|
||||
VisibilityProperty.OverrideMetadata(typeof(NotifyIcon), new PropertyMetadata(OnVisibilityChanged));
|
||||
|
||||
NotifyIcon = new Forms.NotifyIcon {
|
||||
Notification = new Forms.NotifyIcon {
|
||||
Text = Text,
|
||||
Visible = true,
|
||||
ContextMenu = new Forms.ContextMenu()
|
||||
};
|
||||
NotifyIcon.MouseDown += OnMouseDown;
|
||||
NotifyIcon.MouseUp += OnMouseUp;
|
||||
NotifyIcon.MouseClick += OnMouseClick;
|
||||
NotifyIcon.MouseDoubleClick += OnMouseDoubleClick;
|
||||
Notification.MouseDown += OnMouseDown;
|
||||
Notification.MouseUp += OnMouseUp;
|
||||
Notification.MouseClick += OnMouseClick;
|
||||
Notification.MouseDoubleClick += OnMouseDoubleClick;
|
||||
}
|
||||
|
||||
public void ShowBalloonTip(string title, string subtext, string image_path) {
|
||||
// TODO:
|
||||
// - Use the image pointed to by image_path
|
||||
// - Find a way to use the prettier (Win7?) balloons
|
||||
NotifyIcon.ShowBalloonTip(5 * 1000, title, subtext, Forms.ToolTipIcon.Info);
|
||||
Notification.ShowBalloonTip(5 * 1000, title, subtext, Forms.ToolTipIcon.Info);
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
NotifyIcon.Dispose();
|
||||
Notification.Dispose();
|
||||
}
|
||||
|
||||
|
||||
|
@ -144,8 +144,8 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
private void OnVisibilityChanged(DependencyObject target, DependencyPropertyChangedEventArgs args) {
|
||||
SparkleNotifyIcon control = (SparkleNotifyIcon) target;
|
||||
control.NotifyIcon.Visible = (control.Visibility == Visibility.Visible);
|
||||
NotifyIcon control = (NotifyIcon) target;
|
||||
control.Notification.Visible = (control.Visibility == Visibility.Visible);
|
||||
}
|
||||
|
||||
private void OnMouseDown(object sender, Forms.MouseEventArgs args) {
|
||||
|
@ -172,8 +172,8 @@ namespace SparkleShare {
|
|||
}
|
||||
|
||||
private static void OnTextChanged(DependencyObject target, DependencyPropertyChangedEventArgs args) {
|
||||
SparkleNotifyIcon control = (SparkleNotifyIcon) target;
|
||||
control.NotifyIcon.Text = control.Text;
|
||||
NotifyIcon control = (NotifyIcon) target;
|
||||
control.Notification.Text = control.Text;
|
||||
}
|
||||
|
||||
|
|
@ -15,33 +15,27 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
using Sparkles;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Media;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Markup;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shell;
|
||||
|
||||
using Drawing = System.Drawing;
|
||||
using Imaging = System.Windows.Interop.Imaging;
|
||||
using WPF = System.Windows.Controls;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleSetup : SparkleSetupWindow {
|
||||
public class Setup : SetupWindow {
|
||||
|
||||
public SparkleSetupController Controller = new SparkleSetupController ();
|
||||
public SetupController Controller = new SetupController ();
|
||||
|
||||
|
||||
public SparkleSetup ()
|
||||
public Setup ()
|
||||
{
|
||||
Controller.ShowWindowEvent += delegate {
|
||||
Dispatcher.BeginInvoke ((Action) delegate {
|
||||
|
@ -268,7 +262,7 @@ namespace SparkleShare {
|
|||
header_style.Setters.Add (new Setter (GridViewColumnHeader.VisibilityProperty, Visibility.Collapsed));
|
||||
grid_view.ColumnHeaderContainerStyle = header_style;
|
||||
|
||||
foreach (SparklePreset plugin in Controller.Presets) {
|
||||
foreach (Preset plugin in Controller.Presets) {
|
||||
// FIXME: images are blurry
|
||||
BitmapFrame image = BitmapFrame.Create (
|
||||
new Uri (plugin.ImagePath)
|
||||
|
@ -814,167 +808,6 @@ namespace SparkleShare {
|
|||
|
||||
break;
|
||||
}
|
||||
|
||||
case PageType.Tutorial: {
|
||||
switch (Controller.TutorialPageNumber) {
|
||||
case 1: {
|
||||
Header = "What’s happening next?";
|
||||
Description = "SparkleShare creates a special folder on your computer " +
|
||||
"that will keep track of your projects.";
|
||||
|
||||
|
||||
WPF.Image slide_image = new WPF.Image () {
|
||||
Width = 324,
|
||||
Height = 200
|
||||
};
|
||||
|
||||
slide_image.Source = SparkleUIHelpers.GetImageSource ("tutorial-slide-1");
|
||||
|
||||
Button skip_tutorial_button = new Button () {
|
||||
Content = "Skip tutorial"
|
||||
};
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue"
|
||||
};
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (slide_image);
|
||||
Canvas.SetLeft (slide_image, 228);
|
||||
Canvas.SetTop (slide_image, 130);
|
||||
|
||||
Buttons.Add (skip_tutorial_button);
|
||||
Buttons.Add (continue_button);
|
||||
|
||||
|
||||
skip_tutorial_button.Click += delegate {
|
||||
Controller.TutorialSkipped ();
|
||||
};
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 2: {
|
||||
Header = "Sharing files with others";
|
||||
Description = "All files added to your project folders are synced automatically with " +
|
||||
"the host and your team members.";
|
||||
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue"
|
||||
};
|
||||
|
||||
WPF.Image slide_image = new WPF.Image () {
|
||||
Width = 324,
|
||||
Height = 200
|
||||
};
|
||||
|
||||
slide_image.Source = SparkleUIHelpers.GetImageSource ("tutorial-slide-2");
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (slide_image);
|
||||
Canvas.SetLeft (slide_image, 228);
|
||||
Canvas.SetTop (slide_image, 130);
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 3: {
|
||||
Header = "The status icon helps you";
|
||||
Description = "It shows the syncing progress, provides easy access to " +
|
||||
"your projects, and lets you view recent changes.";
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue"
|
||||
};
|
||||
|
||||
WPF.Image slide_image = new WPF.Image () {
|
||||
Width = 324,
|
||||
Height = 200
|
||||
};
|
||||
|
||||
slide_image.Source = SparkleUIHelpers.GetImageSource ("tutorial-slide-3");
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (slide_image);
|
||||
Canvas.SetLeft (slide_image, 228);
|
||||
Canvas.SetTop (slide_image, 130);
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 4: {
|
||||
Header = "Here’s your unique Client ID";
|
||||
Description = "You’ll need it whenever you want to link this computer to a host. " +
|
||||
"You can also find it in the status icon menu.";
|
||||
|
||||
|
||||
TextBox link_code_text_box = new TextBox () {
|
||||
Text = SparkleShare.Controller.CurrentUser.PublicKey,
|
||||
Width = 250,
|
||||
MaxLines = 1,
|
||||
TextWrapping = TextWrapping.NoWrap,
|
||||
IsEnabled = false
|
||||
};
|
||||
|
||||
Button copy_button = new Button () {
|
||||
Content = "Copy",
|
||||
Width = 60
|
||||
};
|
||||
|
||||
Button finish_button = new Button () {
|
||||
Content = "Finish"
|
||||
};
|
||||
|
||||
CheckBox check_box = new CheckBox () {
|
||||
Content = "Add SparkleShare to startup items",
|
||||
IsChecked = true
|
||||
};
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (link_code_text_box);
|
||||
Canvas.SetLeft (link_code_text_box, 235);
|
||||
Canvas.SetTop (link_code_text_box, 190);
|
||||
|
||||
ContentCanvas.Children.Add (copy_button);
|
||||
Canvas.SetLeft (copy_button, 490);
|
||||
Canvas.SetTop (copy_button, 190);
|
||||
|
||||
ContentCanvas.Children.Add (check_box);
|
||||
Canvas.SetLeft (check_box, 185);
|
||||
Canvas.SetBottom (check_box, 12);
|
||||
|
||||
Buttons.Add (finish_button);
|
||||
|
||||
|
||||
check_box.Click += delegate { Controller.StartupItemChanged (check_box.IsChecked.Value); };
|
||||
finish_button.Click += delegate { Controller.TutorialPageCompleted (); };
|
||||
copy_button.Click += delegate { Controller.CopyToClipboardClicked(); };
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ShowAll ();
|
|
@ -29,7 +29,7 @@ using System.Windows.Interop;
|
|||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleSetupWindow : Window {
|
||||
public class SetupWindow : Window {
|
||||
|
||||
public Canvas ContentCanvas = new Canvas ();
|
||||
public List <Button> Buttons = new List <Button> ();
|
||||
|
@ -42,14 +42,14 @@ namespace SparkleShare {
|
|||
private Rectangle line;
|
||||
|
||||
|
||||
public SparkleSetupWindow ()
|
||||
public SetupWindow ()
|
||||
{
|
||||
Title = "SparkleShare Setup";
|
||||
Width = 640;
|
||||
Height = 440;
|
||||
ResizeMode = ResizeMode.NoResize;
|
||||
Background = new SolidColorBrush (Colors.WhiteSmoke);
|
||||
Icon = SparkleUIHelpers.GetImageSource ("sparkleshare-app", "ico");
|
||||
Icon = UserInterfaceHelpers.GetImageSource ("sparkleshare-app", "ico");
|
||||
|
||||
TaskbarItemInfo = new TaskbarItemInfo () {
|
||||
Description = "SparkleShare"
|
||||
|
@ -85,7 +85,7 @@ namespace SparkleShare {
|
|||
Height = 482
|
||||
};
|
||||
|
||||
this.side_splash.Source = SparkleUIHelpers.GetImageSource ("side-splash");
|
||||
this.side_splash.Source = UserInterfaceHelpers.GetImageSource ("side-splash");
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (this.bar);
|
|
@ -16,11 +16,8 @@
|
|||
|
||||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
|
@ -23,15 +23,15 @@ using System.Windows.Media.Imaging;
|
|||
using System.ComponentModel;
|
||||
|
||||
namespace SparkleShare {
|
||||
public class SparkleSpinner : Image {
|
||||
public class Spinner : Image {
|
||||
|
||||
private Timer timer;
|
||||
|
||||
public SparkleSpinner ()
|
||||
public Spinner ()
|
||||
: this (22) {
|
||||
}
|
||||
|
||||
public SparkleSpinner (int size) : base () {
|
||||
public Spinner (int size) : base () {
|
||||
if (DesignerProperties.GetIsInDesignMode(this)) {
|
||||
return;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ namespace SparkleShare {
|
|||
Height = size;
|
||||
|
||||
int current_frame = 0;
|
||||
BitmapSource spinner_gallery = SparkleUIHelpers.GetImageSource ("process-working-22");
|
||||
BitmapSource spinner_gallery = UserInterfaceHelpers.GetImageSource ("process-working-22");
|
||||
int frames_in_width = spinner_gallery.PixelWidth / size;
|
||||
int frames_in_height = spinner_gallery.PixelHeight / size;
|
||||
int frame_count = (frames_in_width * frames_in_height) - 1;
|
|
@ -26,15 +26,15 @@ using Drawing = System.Drawing;
|
|||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleStatusIcon : Control {
|
||||
public class StatusIcon : Control {
|
||||
|
||||
public SparkleStatusIconController Controller = new SparkleStatusIconController();
|
||||
public StatusIconController Controller = new StatusIconController();
|
||||
|
||||
private readonly Drawing.Bitmap syncing_idle_image = SparkleUIHelpers.GetBitmap("process-syncing-idle");
|
||||
private readonly Drawing.Bitmap syncing_up_image = SparkleUIHelpers.GetBitmap("process-syncing-up");
|
||||
private readonly Drawing.Bitmap syncing_down_image = SparkleUIHelpers.GetBitmap("process-syncing-down");
|
||||
private readonly Drawing.Bitmap syncing_image = SparkleUIHelpers.GetBitmap("process-syncing");
|
||||
private readonly Drawing.Bitmap syncing_error_image = SparkleUIHelpers.GetBitmap("process-syncing-error");
|
||||
private readonly Drawing.Bitmap syncing_idle_image = UserInterfaceHelpers.GetBitmap("process-syncing-idle");
|
||||
private readonly Drawing.Bitmap syncing_up_image = UserInterfaceHelpers.GetBitmap("process-syncing-up");
|
||||
private readonly Drawing.Bitmap syncing_down_image = UserInterfaceHelpers.GetBitmap("process-syncing-down");
|
||||
private readonly Drawing.Bitmap syncing_image = UserInterfaceHelpers.GetBitmap("process-syncing");
|
||||
private readonly Drawing.Bitmap syncing_error_image = UserInterfaceHelpers.GetBitmap("process-syncing-error");
|
||||
|
||||
private ContextMenu context_menu;
|
||||
|
||||
|
@ -43,10 +43,10 @@ namespace SparkleShare {
|
|||
private SparkleMenuItem exit_item;
|
||||
private SparkleMenuItem[] state_menu_items;
|
||||
|
||||
private readonly SparkleNotifyIcon notify_icon = new SparkleNotifyIcon();
|
||||
private readonly NotifyIcon notify_icon = new NotifyIcon();
|
||||
|
||||
|
||||
public SparkleStatusIcon() {
|
||||
public StatusIcon() {
|
||||
this.notify_icon.HeaderText = "SparkleShare";
|
||||
this.notify_icon.Icon = this.syncing_idle_image;
|
||||
|
||||
|
@ -117,7 +117,7 @@ namespace SparkleShare {
|
|||
};
|
||||
|
||||
Image folder_image = new Image {
|
||||
Source = SparkleUIHelpers.GetImageSource("sparkleshare-folder"),
|
||||
Source = UserInterfaceHelpers.GetImageSource("sparkleshare-folder"),
|
||||
Width = 16,
|
||||
Height = 16
|
||||
};
|
||||
|
@ -142,7 +142,7 @@ namespace SparkleShare {
|
|||
|
||||
if(Controller.LinkCodeItemEnabled) {
|
||||
SparkleMenuItem code_item = new SparkleMenuItem {
|
||||
Header = SparkleShare.Controller.CurrentUser.PublicKey.Substring(0, 20) + "..."
|
||||
Header = SparkleShare.Controller.UserAuthenticationInfo.PublicKey.Substring(0, 20) + "..."
|
||||
};
|
||||
|
||||
SparkleMenuItem copy_item = new SparkleMenuItem {
|
||||
|
@ -215,7 +215,7 @@ namespace SparkleShare {
|
|||
SparkleMenuItem subfolder_item = new SparkleMenuItem {
|
||||
Header = project.Name.Replace("_", "__"),
|
||||
Icon = new Image {
|
||||
Source = SparkleUIHelpers.GetImageSource("folder"),
|
||||
Source = UserInterfaceHelpers.GetImageSource("folder"),
|
||||
Width = 16,
|
||||
Height = 16
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ namespace SparkleShare {
|
|||
Header = "Open folder",
|
||||
Icon = new Image
|
||||
{
|
||||
Source = SparkleUIHelpers.GetImageSource("folder"),
|
||||
Source = UserInterfaceHelpers.GetImageSource("folder"),
|
||||
Width = 16,
|
||||
Height = 16
|
||||
}
|
|
@ -23,39 +23,39 @@ using Sparkles;
|
|||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleUI {
|
||||
public class UserInterface {
|
||||
|
||||
public SparkleSetup Setup;
|
||||
public SparkleEventLogWindow EventLog;
|
||||
public SparkleBubbles Bubbles;
|
||||
public SparkleStatusIcon StatusIcon;
|
||||
public SparkleAbout About;
|
||||
public SparkleNote Note;
|
||||
public Setup Setup;
|
||||
public EventLog EventLog;
|
||||
public Bubbles Bubbles;
|
||||
public StatusIcon StatusIcon;
|
||||
public About About;
|
||||
public Note Note;
|
||||
|
||||
static SparkleUI ()
|
||||
static UserInterface ()
|
||||
{
|
||||
Application.ThreadException += OnUnhandledException;
|
||||
Application.SetUnhandledExceptionMode (UnhandledExceptionMode.CatchException);
|
||||
}
|
||||
|
||||
|
||||
public SparkleUI ()
|
||||
public UserInterface ()
|
||||
{
|
||||
// FIXME: The second time windows are shown, the windows
|
||||
// don't have the smooth ease in animation, but appear abruptly.
|
||||
// The ease out animation always seems to work
|
||||
Setup = new SparkleSetup ();
|
||||
EventLog = new SparkleEventLogWindow();
|
||||
About = new SparkleAbout ();
|
||||
Bubbles = new SparkleBubbles ();
|
||||
StatusIcon = new SparkleStatusIcon ();
|
||||
Note = new SparkleNote ();
|
||||
Setup = new Setup ();
|
||||
EventLog = new EventLog();
|
||||
About = new About ();
|
||||
Bubbles = new Bubbles ();
|
||||
StatusIcon = new StatusIcon ();
|
||||
Note = new Note ();
|
||||
|
||||
SparkleShare.Controller.UIHasLoaded ();
|
||||
}
|
||||
|
||||
|
||||
public void Run ()
|
||||
public void Run (string [] args)
|
||||
{
|
||||
Application.Run ();
|
||||
StatusIcon.Dispose ();
|
||||
|
@ -64,7 +64,7 @@ namespace SparkleShare {
|
|||
private static void OnUnhandledException (object sender, ThreadExceptionEventArgs exception_args)
|
||||
{
|
||||
try {
|
||||
SparkleLogger.WriteCrashReport (exception_args.Exception);
|
||||
Logger.WriteCrashReport (exception_args.Exception);
|
||||
} finally {
|
||||
Environment.Exit (-1);
|
||||
}
|
|
@ -18,8 +18,6 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
|
@ -27,7 +25,7 @@ using Drawing = System.Drawing;
|
|||
|
||||
namespace SparkleShare {
|
||||
|
||||
public static class SparkleUIHelpers {
|
||||
public static class UserInterfaceHelpers {
|
||||
|
||||
public static string ToHex (this Drawing.Color color)
|
||||
{
|
||||
|
@ -44,7 +42,7 @@ namespace SparkleShare {
|
|||
public static BitmapFrame GetImageSource (string name, string type)
|
||||
{
|
||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||
Stream image_stream = assembly.GetManifestResourceStream("SparkleShare.Images." + name + "." + type);
|
||||
Stream image_stream = assembly.GetManifestResourceStream("SparkleShare.Windows.Images." + name + "." + type);
|
||||
return BitmapFrame.Create(image_stream);
|
||||
}
|
||||
|
||||
|
@ -62,7 +60,7 @@ namespace SparkleShare {
|
|||
public static Drawing.Bitmap GetBitmap (string name)
|
||||
{
|
||||
Assembly assembly = Assembly.GetExecutingAssembly ();
|
||||
Stream image_stream = assembly.GetManifestResourceStream ("SparkleShare.Images." + name + ".png");
|
||||
Stream image_stream = assembly.GetManifestResourceStream ("SparkleShare.Windows.Images." + name + ".png");
|
||||
return (Drawing.Bitmap) Drawing.Bitmap.FromStream (image_stream);
|
||||
}
|
||||
|
||||
|
@ -71,7 +69,7 @@ namespace SparkleShare {
|
|||
{
|
||||
Assembly assembly = Assembly.GetExecutingAssembly ();
|
||||
StreamReader html_reader = new StreamReader (
|
||||
assembly.GetManifestResourceStream ("SparkleShare.HTML." + name));
|
||||
assembly.GetManifestResourceStream ("SparkleShare.Windows.HTML." + name));
|
||||
|
||||
return html_reader.ReadToEnd ();
|
||||
}
|
3
SparkleShare/Windows/app.config
Normal file
3
SparkleShare/Windows/app.config
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
|
@ -21,7 +21,6 @@ namespace Sparkles.Git {
|
|||
|
||||
public class GitCommand : Command {
|
||||
|
||||
public static string SSHPath = "ssh";
|
||||
public static string ExecPath;
|
||||
|
||||
|
||||
|
@ -82,10 +81,10 @@ namespace Sparkles.Git {
|
|||
{
|
||||
StartInfo.WorkingDirectory = working_dir;
|
||||
|
||||
string GIT_SSH_COMMAND = SSHPath;
|
||||
string GIT_SSH_COMMAND = SSHCommand.SSHCommandPath;
|
||||
|
||||
if (auth_info != null)
|
||||
GIT_SSH_COMMAND = FormatGitSSHCommand (auth_info);
|
||||
GIT_SSH_COMMAND = SSHCommand.FormatGitSSHCommand (auth_info);
|
||||
|
||||
if (ExecPath != null)
|
||||
SetEnvironmentVariable ("GIT_EXEC_PATH", ExecPath);
|
||||
|
@ -209,16 +208,5 @@ namespace Sparkles.Git {
|
|||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
public static string FormatGitSSHCommand (SSHAuthenticationInfo auth_info)
|
||||
{
|
||||
return SSHPath + " " +
|
||||
"-i " + auth_info.PrivateKeyFilePath.Replace (" ", "\\ ") + " " +
|
||||
"-o UserKnownHostsFile=" + auth_info.KnownHostsFilePath.Replace (" ", "\\ ") + " " +
|
||||
"-o IdentitiesOnly=yes" + " " + // Don't fall back to other keys on the system
|
||||
"-o PasswordAuthentication=no" + " " + // Don't hang on possible password prompts
|
||||
"-F /dev/null"; // Ignore the system's SSH config file
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
|
||||
namespace Sparkles.Git {
|
||||
|
@ -418,15 +416,15 @@ namespace Sparkles.Git {
|
|||
{
|
||||
var git_config_required = new GitCommand (TargetFolder, "config filter.lfs.required true");
|
||||
|
||||
string GIT_SSH_COMMAND = GitCommand.FormatGitSSHCommand (auth_info);
|
||||
string GIT_SSH_COMMAND = SSHCommand.FormatGitSSHCommand (auth_info);
|
||||
string smudge_command;
|
||||
string clean_command;
|
||||
|
||||
if (InstallationInfo.OperatingSystem == OS.Mac) {
|
||||
if (InstallationInfo.OperatingSystem == OS.Mac || InstallationInfo.OperatingSystem == OS.Windows) {
|
||||
smudge_command = "env GIT_SSH_COMMAND='" + GIT_SSH_COMMAND + "' " +
|
||||
Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs") + " smudge %f";
|
||||
Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " smudge %f";
|
||||
|
||||
clean_command = Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs") + " clean %f";
|
||||
clean_command = Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " clean %f";
|
||||
|
||||
} else {
|
||||
smudge_command = "env GIT_SSH_COMMAND='" + GIT_SSH_COMMAND + "' git-lfs smudge %f";
|
||||
|
|
|
@ -78,6 +78,9 @@ namespace Sparkles.Git {
|
|||
|
||||
git_config = new GitCommand (LocalPath, "config remote.origin.url \"" + RemoteUrl + "\"");
|
||||
git_config.StartAndWaitForExit ();
|
||||
|
||||
git_config = new GitCommand (LocalPath, "config core.sshCommand " + SSHCommand.FormatGitSSHCommand (auth_info));
|
||||
git_config.StartAndWaitForExit();
|
||||
}
|
||||
|
||||
|
||||
|
@ -204,16 +207,16 @@ namespace Sparkles.Git {
|
|||
string pre_push_hook_content;
|
||||
|
||||
// The pre-push hook may have been changed by Git LFS, overwrite it to use our own configuration
|
||||
if (InstallationInfo.OperatingSystem == OS.Mac) {
|
||||
if (InstallationInfo.OperatingSystem == OS.Mac || InstallationInfo.OperatingSystem == OS.Windows) {
|
||||
pre_push_hook_content =
|
||||
"#!/bin/sh" + Environment.NewLine +
|
||||
"env GIT_SSH_COMMAND='" + GitCommand.FormatGitSSHCommand (auth_info) + "' " +
|
||||
Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs") + " pre-push \"$@\"";
|
||||
"env GIT_SSH_COMMAND='" + SSHCommand.FormatGitSSHCommand (auth_info) + "' " +
|
||||
Path.Combine (Configuration.DefaultConfiguration.BinPath, "git-lfs").Replace ("\\", "/") + " pre-push \"$@\"";
|
||||
|
||||
} else {
|
||||
pre_push_hook_content =
|
||||
"#!/bin/sh" + Environment.NewLine +
|
||||
"env GIT_SSH_COMMAND='" + GitCommand.FormatGitSSHCommand (auth_info) + "' " +
|
||||
"env GIT_SSH_COMMAND='" + SSHCommand.FormatGitSSHCommand (auth_info) + "' " +
|
||||
"git-lfs pre-push \"$@\"";
|
||||
}
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ namespace Sparkles {
|
|||
"-C \"" + computer_name + " (SparkleShare)\" " + // Key comment
|
||||
"-f \"" + key_file_name + "\"";
|
||||
|
||||
var ssh_keygen = new Command ("ssh-keygen", arguments);
|
||||
var ssh_keygen = new SSHCommand ("ssh-keygen", arguments);
|
||||
ssh_keygen.StartInfo.WorkingDirectory = Path;
|
||||
ssh_keygen.StartAndWaitForExit ();
|
||||
|
||||
|
|
35
Sparkles/SSHCommand.cs
Normal file
35
Sparkles/SSHCommand.cs
Normal file
|
@ -0,0 +1,35 @@
|
|||
using System.IO;
|
||||
|
||||
namespace Sparkles {
|
||||
public class SSHCommand : Command
|
||||
{
|
||||
public static string SSHPath = "";
|
||||
public static string SSHCommandPath {
|
||||
get {
|
||||
return Path.Combine(SSHPath, "ssh").Replace("\\", "/");
|
||||
}
|
||||
}
|
||||
|
||||
public SSHCommand(string command, string args) : this (command, args, null) {
|
||||
}
|
||||
|
||||
public SSHCommand(string command, string args, SSHAuthenticationInfo auth_info) : base (Path.Combine(SSHPath, command), args) {
|
||||
string GIT_SSH_COMMAND = SSHPath;
|
||||
|
||||
if (auth_info != null)
|
||||
GIT_SSH_COMMAND = FormatGitSSHCommand(auth_info);
|
||||
|
||||
SetEnvironmentVariable("GIT_SSH_COMMAND", GIT_SSH_COMMAND);
|
||||
}
|
||||
|
||||
public static string FormatGitSSHCommand(SSHAuthenticationInfo auth_info)
|
||||
{
|
||||
return SSHCommandPath + " " +
|
||||
"-i " + auth_info.PrivateKeyFilePath.Replace("\\" , "/").Replace(" ", "\\ ") + " " +
|
||||
"-o UserKnownHostsFile=" + auth_info.KnownHostsFilePath.Replace("\\", "/").Replace(" ", "\\ ") + " " +
|
||||
"-o IdentitiesOnly=yes" + " " + // Don't fall back to other keys on the system
|
||||
"-o PasswordAuthentication=no" + " " + // Don't hang on possible password prompts
|
||||
"-F /dev/null"; // Ignore the system's SSH config file
|
||||
}
|
||||
}
|
||||
}
|
|
@ -23,6 +23,8 @@ namespace Sparkles {
|
|||
|
||||
public abstract class SSHFetcher : BaseFetcher {
|
||||
|
||||
public static string SSHKeyScan = "ssh-keyscan";
|
||||
|
||||
protected SSHFetcher (SparkleFetcherInfo info) : base (info)
|
||||
{
|
||||
}
|
||||
|
@ -90,7 +92,7 @@ namespace Sparkles {
|
|||
string FetchHostKey ()
|
||||
{
|
||||
Logger.LogInfo ("Auth", string.Format ("Fetching host key for {0}", RemoteUrl.Host));
|
||||
var ssh_keyscan = new Command ("ssh-keyscan", string.Format ("-t rsa -p 22 {0}", RemoteUrl.Host));
|
||||
var ssh_keyscan = new Command (SSHKeyScan, string.Format ("-t rsa -p 22 {0}", RemoteUrl.Host));
|
||||
|
||||
if (RemoteUrl.Port > 0)
|
||||
ssh_keyscan.StartInfo.Arguments = string.Format ("-t rsa -p {0} {1}", RemoteUrl.Port, RemoteUrl.Host);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
|
@ -48,53 +48,27 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AuthenticationInfo.cs" />
|
||||
<Compile Include="BaseFetcher.cs" />
|
||||
<Compile Include="BaseListener.cs" />
|
||||
<Compile Include="BaseRepository.cs" />
|
||||
<Compile Include="ChangeSet.cs" />
|
||||
<Compile Include="Configuration.cs" />
|
||||
<Compile Include="Extensions.cs" />
|
||||
<Compile Include="ListenerFactory.cs" />
|
||||
<Compile Include="Logger.cs" />
|
||||
<Compile Include="InstallationInfo.Directory.cs" />
|
||||
<Compile Include="Command.cs" />
|
||||
<Compile Include="SSHFetcher.cs">
|
||||
<Link>Fetcher\SSHFetcher.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="BaseFetcher.cs">
|
||||
<Link>Fetcher\BaseFetcher.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="TcpListener.cs">
|
||||
<Link>Listener\TcpListener.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="BaseListener.cs">
|
||||
<Link>Listener\BaseListener.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="ListenerFactory.cs">
|
||||
<Link>Listener\ListenerFactory.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="SSHAuthenticationInfo.cs">
|
||||
<Link>AuthenticationInfo\SSHAuthenticationInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="AuthenticationInfo.cs">
|
||||
<Link>AuthenticationInfo\AuthenticationInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="BaseRepository.cs">
|
||||
<Link>Repository\BaseRepository.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="ChangeSet.cs">
|
||||
<Link>Repository\ChangeSet.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="User.cs">
|
||||
<Link>Repository\User.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Watcher.cs">
|
||||
<Link>Repository\Watcher.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="SSHCommand.cs" />
|
||||
<Compile Include="SSHFetcher.cs" />
|
||||
<Compile Include="SSHAuthenticationInfo.cs" />
|
||||
<Compile Include="TcpListener.cs" />
|
||||
<Compile Include="User.cs" />
|
||||
<Compile Include="InstallationInfo.cs" />
|
||||
<Compile Include="Preset.cs" />
|
||||
<Compile Include="Invite.cs" />
|
||||
<Compile Include="Watcher.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Fetcher\" />
|
||||
<Folder Include="Listener\" />
|
||||
<Folder Include="AuthenticationInfo\" />
|
||||
<Folder Include="Repository\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
|
Loading…
Reference in a new issue