From 16ce6691ab29761c224a1b5d527f66677f8106e4 Mon Sep 17 00:00:00 2001 From: Sebastien Vincent Date: Tue, 5 Oct 2010 17:50:31 +0000 Subject: [PATCH] Fix libsparkle_init.dylib of commit 7779 (@loader_path -> @executable_path) and bring back SparkleActivator changes. --- lib/native/mac/libsparkle_init.dylib | Bin 50052 -> 50220 bytes ...mmunicator_impl_sparkle_SparkleActivator.h | 4 +- ...mmunicator_impl_sparkle_SparkleActivator.m | 28 ++++++--- .../impl/sparkle/SparkleActivator.java | 56 +++++++++++++++++- 4 files changed, 75 insertions(+), 13 deletions(-) diff --git a/lib/native/mac/libsparkle_init.dylib b/lib/native/mac/libsparkle_init.dylib index c50bde7874324f4eebefd2a5288a87ebe46adea9..12580d18bf839a67eb3223b762f7be7f6b62f827 100755 GIT binary patch literal 50220 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 diff --git a/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.h b/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.h index f81b0dff4..d1b765f31 100644 --- a/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.h +++ b/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.h @@ -10,10 +10,10 @@ extern "C" { /* * Class: net_java_sip_communicator_impl_sparkle_SparkleActivator * Method: initSparkle - * Signature: (Ljava/lang/String;ZI)V + * Signature: (Ljava/lang/String;ZILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_sparkle_SparkleActivator_initSparkle - (JNIEnv *, jclass, jstring, jboolean, jint); + (JNIEnv *, jclass, jstring, jboolean, jint, jstring); #ifdef __cplusplus } diff --git a/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.m b/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.m index c5df1a915..f5d4126da 100644 --- a/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.m +++ b/src/native/macosx/sparkle/net_java_sip_communicator_impl_sparkle_SparkleActivator.m @@ -16,7 +16,7 @@ * installed in /Library/Frameworks/. This Framework is * available at http://sparkle.andymatuschak.org/ * - * @author Romain Kuntz + * @author Romain Kuntz * @author Egidijus Jankauskas */ @@ -27,21 +27,21 @@ /* * Class: net_java_sip_communicator_impl_sparkle_SparkleActivator * Method: initSparkle - * Signature: (Ljava/lang/String;ZI)V + * Signature: (Ljava/lang/String;ZILjava/lang/String;)V */ JNIEXPORT void JNICALL Java_net_java_sip_communicator_impl_sparkle_SparkleActivator_initSparkle (JNIEnv *env, jclass obj, jstring pathToSparkleFramework, - jboolean updateAtStartup, jint checkInterval) + jboolean updateAtStartup, jint checkInterval, jstring downloadLink) { BOOL hasLaunchedBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"SCHasLaunchedBefore"]; - + if(!hasLaunchedBefore) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SCHasLaunchedBefore"]; [[NSUserDefaults standardUserDefaults] synchronize]; } - + // The below code was used to avoid to link the Sparkle framework // at comilation time. //const char *path = (*env)->GetStringUTFChars(env, pathToSparkleFramework, 0); @@ -49,9 +49,21 @@ Java_net_java_sip_communicator_impl_sparkle_SparkleActivator_initSparkle //Class suUpdaterClass = [bundle classNamed:@"SUUpdater"]; //id suUpdater = [[suUpdaterClass alloc] init]; //(*env)->ReleaseStringUTFChars(env, pathToSparkleFramework, path); - + SUUpdater *suUpdater = [SUUpdater updaterForBundle:[NSBundle mainBundle]]; - + + if(downloadLink) + { + const char* link = (*env)->GetStringUTFChars(env, downloadLink, 0); + NSString* sLink = [NSString stringWithCString: link length: strlen(link)]; + NSURL* nsLink = [NSURL URLWithString: sLink]; + + if(nsLink) + { + [suUpdater setFeedURL: nsLink]; + } + } + NSMenu* menu = [[NSApplication sharedApplication] mainMenu]; NSMenu* applicationMenu = [[menu itemAtIndex:0] submenu]; NSMenuItem* checkForUpdatesMenuItem = [[NSMenuItem alloc] @@ -61,7 +73,7 @@ Java_net_java_sip_communicator_impl_sparkle_SparkleActivator_initSparkle [checkForUpdatesMenuItem setEnabled:YES]; [checkForUpdatesMenuItem setTarget:suUpdater]; - + // 0 => top, 1 => after "About..." [applicationMenu insertItem:checkForUpdatesMenuItem atIndex:1]; diff --git a/src/net/java/sip/communicator/impl/sparkle/SparkleActivator.java b/src/net/java/sip/communicator/impl/sparkle/SparkleActivator.java index 8a98b5f35..73109078c 100644 --- a/src/net/java/sip/communicator/impl/sparkle/SparkleActivator.java +++ b/src/net/java/sip/communicator/impl/sparkle/SparkleActivator.java @@ -7,6 +7,8 @@ package net.java.sip.communicator.impl.sparkle; import org.osgi.framework.*; + +import net.java.sip.communicator.service.configuration.*; import net.java.sip.communicator.util.*; /** @@ -22,6 +24,17 @@ public class SparkleActivator */ private static Logger logger = Logger.getLogger(SparkleActivator.class); + /** + * A reference to the ConfigurationService implementation instance that + * is currently registered with the bundle context. + */ + private static ConfigurationService configurationService = null; + + /** + * The current BundleContext. + */ + private static BundleContext bundleContext = null; + /** * Native method declaration * @@ -29,10 +42,14 @@ public class SparkleActivator * @param updateAtStartup specifies whether Sparkle should be checking for * updates on startup. * @param checkInterval specifies an interval for the update checks. + * @param downloadLink a custom download link for sparkle (i.e. the + * SUFeedURL). If null the default URL will be choosen (the + * SUFeedURL parameter in the .app/Contents/Info.pList). */ public native static void initSparkle(String pathToSparkleFramework, boolean updateAtStartup, - int checkInterval); + int checkInterval, + String downloadLink); /** * Whether updates are checked at startup @@ -50,14 +67,22 @@ public native static void initSparkle(String pathToSparkleFramework, */ private static boolean sparkleLibLoaded = false; + /** + * Property name for the update link in the configuration file. + */ + private static final String PROP_UPDATE_LINK = + "net.java.sip.communicator.UPDATE_LINK"; + /** * Initialize and start Sparkle * * @param bundleContext BundleContext - * @throws Exception + * @throws Exception if something goes wrong during sparkle initialization */ public void start(BundleContext bundleContext) throws Exception { + SparkleActivator.bundleContext = bundleContext; + /** * Dynamically loads JNI object. Will fail if non-MacOSX * or when libinit_sparkle.dylib is outside of the LD_LIBRARY_PATH @@ -79,10 +104,14 @@ public void start(BundleContext bundleContext) throws Exception return; } + String downloadLink = getConfigurationService().getString( + PROP_UPDATE_LINK); + + System.out.println("download link is: " + downloadLink); // TODO: better way to get the Sparkle Framework path? initSparkle(System.getProperty("user.dir") + "/../../Frameworks/Sparkle.framework", - updateAtStartup, checkInterval); + updateAtStartup, checkInterval, downloadLink); if (logger.isInfoEnabled()) logger.info("Sparkle Plugin ...[Started]"); } @@ -97,7 +126,28 @@ public void start(BundleContext bundleContext) throws Exception */ public void stop(BundleContext bundleContext) throws Exception { + bundleContext = null; if (logger.isInfoEnabled()) logger.info("Sparkle Plugin ...[Stopped]"); } + + /** + * Returns a reference to a ConfigurationService implementation currently + * registered in the bundle context or null if no such implementation was + * found. + * + * @return a currently valid implementation of the ConfigurationService. + */ + public static ConfigurationService getConfigurationService() + { + if (configurationService == null) + { + ServiceReference confReference + = bundleContext.getServiceReference( + ConfigurationService.class.getName()); + configurationService + = (ConfigurationService)bundleContext.getService(confReference); + } + return configurationService; + } }