public ApplicationMain.Signal Process(string uri, ref List <InternalNotification> queuedNotifications, ref int signalValue) { // general format: growl:action*data1&data2&data3...etc // example: growl:display*http://www.somesite.org/display.xml // 09.22.2009 - changed protocol scheme from growl:// to just growl: because of a bug in Google Chrome: http://code.google.com/p/chromium/issues/detail?id=160 // the old syntax (with //) is still supported as well ApplicationMain.Signal result = 0; Regex regex = new Regex(@"growl:(//)?(?<Action>[^\*]*)\*(?<Data>[\s\S]*)"); Match match = regex.Match(uri); if (match.Success) { string action = match.Groups["Action"].Value.ToLower(); string data = match.Groups["Data"].Value; switch (action) { case "display": InstallDisplay id = new InstallDisplay(); using (id) { bool newDisplayLoaded = id.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications); if (newDisplayLoaded) { result = ApplicationMain.Signal.ReloadDisplays; } } id = null; break; case "extension": // this isnt a real use case yet break; case "language": InstallLanguage il = new InstallLanguage(); using (il) { bool languageInstalled = il.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications, ref signalValue); if (languageInstalled) { result = ApplicationMain.Signal.UpdateLanguage; } } il = null; break; case "languageelevatedinstall": InstallLanguage eil = new InstallLanguage(); using (eil) { bool languageInstalled = eil.FinishElevatedInstall(data, ref queuedNotifications, ref signalValue); if (languageInstalled) { result = ApplicationMain.Signal.UpdateLanguage; } } eil = null; break; case "forwarder": InstallForwarder ifwd = new InstallForwarder(); using (ifwd) { bool installed = ifwd.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications, ref signalValue); if (installed) { result = ApplicationMain.Signal.ReloadForwarders; } } ifwd = null; break; case "subscriber": InstallSubscriber isub = new InstallSubscriber(); using (isub) { bool installed = isub.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications, ref signalValue); if (installed) { result = ApplicationMain.Signal.ReloadSubscribers; } } isub = null; break; } } // go silent to suppress the 'Growl is running' notification if another event has occurred if (result > 0) { result = result | ApplicationMain.Signal.Silent; } return(result); }
public ApplicationMain.Signal Process(string uri, ref List<InternalNotification> queuedNotifications, ref int signalValue) { // general format: growl:action*data1&data2&data3...etc // example: growl:display*http://www.somesite.org/display.xml // 09.22.2009 - changed protocol scheme from growl:// to just growl: because of a bug in Google Chrome: http://code.google.com/p/chromium/issues/detail?id=160 // the old syntax (with //) is still supported as well ApplicationMain.Signal result = 0; Regex regex = new Regex(@"growl:(//)?(?<Action>[^\*]*)\*(?<Data>[\s\S]*)"); Match match = regex.Match(uri); if (match.Success) { string action = match.Groups["Action"].Value.ToLower(); string data = match.Groups["Data"].Value; switch (action) { case "display": InstallDisplay id = new InstallDisplay(); using (id) { bool newDisplayLoaded = id.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications); if (newDisplayLoaded) result = ApplicationMain.Signal.ReloadDisplays; } id = null; break; case "extension": // this isnt a real use case yet break; case "language": InstallLanguage il = new InstallLanguage(); using (il) { bool languageInstalled = il.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications, ref signalValue); if (languageInstalled) result = ApplicationMain.Signal.UpdateLanguage; } il = null; break; case "languageelevatedinstall" : InstallLanguage eil = new InstallLanguage(); using (eil) { bool languageInstalled = eil.FinishElevatedInstall(data, ref queuedNotifications, ref signalValue); if (languageInstalled) result = ApplicationMain.Signal.UpdateLanguage; } eil = null; break; case "forwarder": InstallForwarder ifwd = new InstallForwarder(); using (ifwd) { bool installed = ifwd.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications, ref signalValue); if (installed) result = ApplicationMain.Signal.ReloadForwarders; } ifwd = null; break; case "subscriber": InstallSubscriber isub = new InstallSubscriber(); using (isub) { bool installed = isub.LaunchInstaller(data, this.appIsAlreadyRunning, ref queuedNotifications, ref signalValue); if (installed) result = ApplicationMain.Signal.ReloadSubscribers; } isub = null; break; } } // go silent to suppress the 'Growl is running' notification if another event has occurred if (result > 0) result = result | ApplicationMain.Signal.Silent; return result; }