adium/adium

Parents 4593cc2cb86a
Children b1fdbe9e2780
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
--- a/Plugins/Image Uploading Plugin/AIImageUploaderPlugin.h Fri Jul 27 12:31:32 2012 +0200
+++ 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;
--- a/Plugins/Image Uploading Plugin/AIImageUploaderPlugin.m Fri Jul 27 12:31:32 2012 +0200
+++ 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];
+
+ [adium.menuController addMenuItem:editMenuItem toLocation:LOC_Edit_Links];
+ [adium.menuController addContextualMenuItem:contextMenuItem toLocation:Context_TextView_Edit];
+ [adium.preferenceController registerPreferenceObserver:self forGroup:PREF_GROUP_FORMATTING];
- [menuItem setSubmenu:subMenu];
-
- [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];
}