diff --git a/SparkleLib/SparklePaths.cs b/SparkleLib/SparklePaths.cs index 051e7514..18de28f1 100644 --- a/SparkleLib/SparklePaths.cs +++ b/SparkleLib/SparklePaths.cs @@ -20,62 +20,75 @@ using System.IO; using Mono.Unix; namespace SparkleLib { + + public static class Backend { + + public static string Name = "Git"; + + public static string Path { + + get { + + Process process = new Process (); + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.UseShellExecute = false; + process.StartInfo.FileName = "which"; + process.StartInfo.Arguments = Backend.Name.ToLower (); + process.Start (); + + string path = process.StandardOutput.ReadToEnd (); + path = path.Trim (); + + if (!string.IsNullOrEmpty (path)) { + + return path; + + } else { + + Console.WriteLine ("Sorry, SparkleShare needs " + Backend.Name + " to run, but it wasn't found."); + return null; + + } + + } + + } + + + public static bool IsPresent { + + get { + + Process process = new Process (); + process.StartInfo.RedirectStandardOutput = true; + process.StartInfo.UseShellExecute = false; + process.StartInfo.FileName = "which"; + process.StartInfo.Arguments = Backend.Name.ToLower (); + process.Start (); + + string path = process.StandardOutput.ReadToEnd (); + path = path.Trim (); + + return !string.IsNullOrEmpty (path); + + } + + } + + } + - public static class SparklePaths - { + public static class SparklePaths { - public static string GitPath = SystemGitPath; - - public static string HomePath = new UnixUserInfo (UnixEnvironment.UserName).HomeDirectory; - - public static string SparklePath = Path.Combine (HomePath ,"SparkleShare"); - - public static string SparkleTmpPath = Path.Combine (SparklePath, ".tmp"); - - public static string SparkleConfigPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare"); - - public static string SparkleKeysPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare"); - - public static string SparkleInstallPath = SparkleHelpers.CombineMore (Defines.PREFIX, "sparkleshare"); - + public static string GitPath = Backend.Path; + public static string HomePath = new UnixUserInfo (UnixEnvironment.UserName).HomeDirectory; + public static string SparklePath = Path.Combine (HomePath ,"SparkleShare"); + public static string SparkleTmpPath = Path.Combine (SparklePath, ".tmp"); + public static string SparkleConfigPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare"); + public static string SparkleKeysPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare"); + public static string SparkleInstallPath = SparkleHelpers.CombineMore (Defines.PREFIX, "sparkleshare"); public static string SparkleLocalIconPath = SparkleHelpers.CombineMore (SparkleConfigPath, "icons", "hicolor"); - - public static string SparkleIconPath = SparkleHelpers.CombineMore (Defines.DATAROOTDIR, "sparkleshare", - "icons"); - - - private static string SystemGitPath - { - - get { - - Process process = new Process (); - - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.UseShellExecute = false; - process.StartInfo.FileName = "which"; - process.StartInfo.Arguments = "git"; - process.Start (); - - string git_path = process.StandardOutput.ReadToEnd (); - git_path = git_path.Trim (); - - if (!string.IsNullOrEmpty (git_path)) { - - return git_path; - - } else { - - Console.WriteLine ("Sorry, SparkleShare needs Git to run, but it wasn't found."); - Environment.Exit (-1); - - return null; - - } - - } - - } + public static string SparkleIconPath = SparkleHelpers.CombineMore (Defines.DATAROOTDIR, "sparkleshare", "icons"); } diff --git a/SparkleShare/Mac/SparkleAlert.cs b/SparkleShare/Mac/SparkleAlert.cs new file mode 100644 index 00000000..e01ef38c --- /dev/null +++ b/SparkleShare/Mac/SparkleAlert.cs @@ -0,0 +1,65 @@ +// SparkleShare, an instant update workflow to Git. +// Copyright (C) 2010 Hylke Bons +// +// 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 . + + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; + +using MonoMac.Foundation; +using MonoMac.AppKit; +using MonoMac.ObjCRuntime; +using MonoMac.WebKit; +using Mono.Unix; + +namespace SparkleShare { + + public class SparkleAlert : NSAlert { + + public SparkleAlert () : base () + { + + MessageText = "SparkleShare couldn't find Git on your system. Do you want to download it?"; + InformativeText = "Git is required to run SparkleShare."; + + Icon = NSImage.ImageNamed ("sparkleshare.icns"); + + AddButton ("Download"); + AddButton ("Cancel"); + + Buttons [0].Activated += delegate { + + NSUrl url = new NSUrl ("http://code.google.com/p/git-osx-installer/downloads/list"); + NSWorkspace.SharedWorkspace.OpenUrl (url); + Environment.Exit (0); + + }; + + Buttons [1].Activated += delegate { + + (Window as NSWindow).OrderOut (this); + Environment.Exit (-1); + + }; + + RunModal (); + + } + + } + +} diff --git a/SparkleShare/Mac/SparkleShare.csproj b/SparkleShare/Mac/SparkleShare.csproj index 6d2a74a9..7ac1927c 100644 --- a/SparkleShare/Mac/SparkleShare.csproj +++ b/SparkleShare/Mac/SparkleShare.csproj @@ -102,6 +102,7 @@ SparkleShare.cs + diff --git a/SparkleShare/Mac/SparkleUI.cs b/SparkleShare/Mac/SparkleUI.cs index 31ac0e89..d86b42c9 100644 --- a/SparkleShare/Mac/SparkleUI.cs +++ b/SparkleShare/Mac/SparkleUI.cs @@ -41,7 +41,9 @@ namespace SparkleShare { public static int NewEvents; public static SparkleIntro Intro; public static NSFont Font; - public SparkleAbout About; + + private SparkleAbout About; + private NSAlert Alert; public SparkleUI () { @@ -53,18 +55,24 @@ namespace SparkleShare { // TODO: Getting crashes when I remove this NSApplication.SharedApplication.ApplicationIconImage = NSImage.ImageNamed ("sparkleshare.icns"); - + + + if (!SparkleShare.Controller.BackendIsPresent) { + + Alert = new SparkleAlert (); + return; + + } + Font = NSFontManager.SharedFontManager.FontWithFamily ("Lucida Grande", NSFontTraitMask.Condensed, 0, 13); - OpenLogs = new List (); StatusIcon = new SparkleStatusIcon (); NewEvents = 0; - SparkleShare.Controller.NotificationRaised += delegate { InvokeOnMainThread (delegate { diff --git a/SparkleShare/Mac/SparkleWindow.cs b/SparkleShare/Mac/SparkleWindow.cs index b0da98ed..47da4a5a 100644 --- a/SparkleShare/Mac/SparkleWindow.cs +++ b/SparkleShare/Mac/SparkleWindow.cs @@ -19,6 +19,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.IO; + using MonoMac.Foundation; using MonoMac.AppKit; using MonoMac.ObjCRuntime; diff --git a/SparkleShare/SparkleController.cs b/SparkleShare/SparkleController.cs index dec865ea..1090e776 100644 --- a/SparkleShare/SparkleController.cs +++ b/SparkleShare/SparkleController.cs @@ -746,6 +746,17 @@ namespace SparkleShare { } + public bool BackendIsPresent { + + get { + + return SparkleLib.Backend.IsPresent; + + } + + } + + // Looks up the user's name from the global configuration public string UserName {