adium 4929:31f121d131c9: Added support for add and removing imag...

commits at adium.im commits at adium.im
Fri Jul 27 10:34:41 UTC 2012


details:	http://hg.adium.im/adium/rev/31f121d131c9
revision:	4929:31f121d131c9
branch:		(none)
author:		Evan Schoenberg
date:		Thu Jul 26 22:29:49 2012 -0500

Added support for add and removing image uploaders; no change in base functionality, but improved expandability for plugin writers. Patch from Félix. Fixes #15865

diffs (112 lines):

diff -r 8ef7c4253291 -r 31f121d131c9 Plugins/Image Uploading Plugin/AIImageUploaderPlugin.h
--- a/Plugins/Image Uploading Plugin/AIImageUploaderPlugin.h	Thu Jul 26 17:46:08 2012 +0100
+++ b/Plugins/Image Uploading Plugin/AIImageUploaderPlugin.h	Thu Jul 26 22:29:49 2012 -0500
@@ -31,10 +31,15 @@
 	
 	NSDictionary		*windowControllers;
 	NSDictionary		*uploadInstances;
+	
+	NSMenuItem* contextMenuItem;
+	NSMenuItem* editMenuItem;
 }
 
 @property (copy, nonatomic) NSString *defaultService;
 
+- (void)addUploader:(Class)uploader;
+- (void)removeUploader:(Class)uploader;
 - (void)errorWithMessage:(NSString *)message forChat:(AIChat *)chat;
 - (void)uploadedURL:(NSString *)url forChat:(AIChat *)chat;
 - (void)updateProgress:(NSUInteger)uploaded total:(NSUInteger)total forChat:(AIChat *)chat;
diff -r 8ef7c4253291 -r 31f121d131c9 Plugins/Image Uploading Plugin/AIImageUploaderPlugin.m
--- a/Plugins/Image Uploading Plugin/AIImageUploaderPlugin.m	Thu Jul 26 17:46:08 2012 +0100
+++ b/Plugins/Image Uploading Plugin/AIImageUploaderPlugin.m	Thu Jul 26 22:29:49 2012 -0500
@@ -44,40 +44,58 @@
 	windowControllers = [[NSMutableDictionary alloc] init];
 	uploadInstances = [[NSMutableDictionary alloc] init];
 	
-	[uploaders addObject:[AIImageShackImageUploader class]];
-	[uploaders addObject:[AIImgurImageUploader class]];
+	contextMenuItem = [[NSMenuItem alloc] initWithTitle:IMAGE_UPLOAD_MENU_TITLE target:self action:@selector(uploadImage) keyEquivalent:@""];
 	
-	NSMenuItem *menuItem;
+	editMenuItem = [[NSMenuItem alloc] initWithTitle:IMAGE_UPLOAD_MENU_TITLE
+											  target:self
+											  action:@selector(uploadImage)
+									   keyEquivalent:@"k" keyMask:NSCommandKeyMask | NSAlternateKeyMask];
 	
-	NSMenu *subMenu = [[NSMenu alloc] init];
-	[subMenu setDelegate:self];
+	NSMenu* contextSubmenu = [[NSMenu alloc] init];
+	NSMenu* editSubmenu = [[NSMenu alloc] init];
+	[contextSubmenu setDelegate:self];
+	[editSubmenu setDelegate:self];
 	
-	// Edit menu
-	menuItem = [[[NSMenuItem alloc] initWithTitle:IMAGE_UPLOAD_MENU_TITLE
-										   target:self
-										   action:@selector(uploadImage)
-									keyEquivalent:@"k"
-										  keyMask:NSCommandKeyMask | NSAlternateKeyMask] autorelease];
+	[contextMenuItem setSubmenu:contextSubmenu];
+	[editMenuItem setSubmenu:contextSubmenu];
 	
-	[menuItem setSubmenu:subMenu];
+	[adium.menuController addMenuItem:editMenuItem toLocation:LOC_Edit_Links];
+	[adium.menuController addContextualMenuItem:contextMenuItem toLocation:Context_TextView_Edit];
+	[adium.preferenceController registerPreferenceObserver:self forGroup:PREF_GROUP_FORMATTING];
 	
-	[adium.menuController addMenuItem:menuItem toLocation:LOC_Edit_Links];
+	[self addUploader:[AIImageShackImageUploader class]];
+	[self addUploader:[AIImgurImageUploader class]];
+}
 
-	// Context menu
-	menuItem = [[[NSMenuItem alloc] initWithTitle:IMAGE_UPLOAD_MENU_TITLE
-										   target:self
-										   action:@selector(uploadImage)
-									keyEquivalent:@""] autorelease];
+- (void)addUploader:(Class)uploader
+{
+	// using indexOfObjectIdenticalTo: because Class instances don't implement the NSObject protocol, causing all kinds
+	// of weirdness when using them with NSArrays
+	if ([uploaders indexOfObjectIdenticalTo:uploader] != NSNotFound)
+		return;
 	
-	[menuItem setSubmenu:[[subMenu copy] autorelease]];
+	[uploaders addObject:uploader];
+	[self menuNeedsUpdate:[contextMenuItem submenu]];
+	[self menuNeedsUpdate:[editMenuItem submenu]];
+}
+
+- (void)removeUploader:(Class)uploader
+{
+	// using indexOfObjectIdenticalTo: because Class instances don't implement the NSObject protocol, causing all kinds
+	// of weirdness when using them with NSArrays
+	NSUInteger index = [uploaders indexOfObjectIdenticalTo:uploader];
+	if (index == NSNotFound)
+		return;
 	
-	[adium.menuController addContextualMenuItem:menuItem toLocation:Context_TextView_Edit];
-	
-	[adium.preferenceController registerPreferenceObserver:self forGroup:PREF_GROUP_FORMATTING];
+	[uploaders removeObjectAtIndex:index];
+	[self menuNeedsUpdate:[contextMenuItem submenu]];
+	[self menuNeedsUpdate:[editMenuItem submenu]];
 }
 
 - (void)uninstallPlugin
 {
+	[[contextMenuItem menu] removeItem:contextMenuItem];
+	[[editMenuItem menu] removeItem:editMenuItem];
 	[adium.preferenceController unregisterPreferenceObserver:self];
 }
 
@@ -87,6 +105,8 @@
 	[windowControllers release];
 	[uploadInstances release];
 	[uploaders release];
+	[contextMenuItem release];
+	[editMenuItem release];
 	
 	[super dealloc];
 }




More information about the commits mailing list