mirror of
https://github.com/MacDownApp/macdown.git
synced 2026-05-17 12:40:37 +00:00
75 lines
1.7 KiB
Objective-C
75 lines
1.7 KiB
Objective-C
//
|
|
// MPPlugInController.m
|
|
// MacDown
|
|
//
|
|
// Created by Tzu-ping Chung on 02/3.
|
|
// Copyright © 2016 Tzu-ping Chung . All rights reserved.
|
|
//
|
|
|
|
#import "NSString+Lookup.h"
|
|
#import "MPPlugIn.h"
|
|
#import "MPPlugInController.h"
|
|
#import "MPUtilities.h"
|
|
|
|
|
|
@implementation MPPlugInController
|
|
|
|
- (instancetype)init
|
|
{
|
|
self = [super init];
|
|
if (!self)
|
|
return nil;
|
|
|
|
id q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
|
|
dispatch_async(q, ^{
|
|
for (MPPlugIn *plugin in [self buildPlugIns])
|
|
[plugin plugInDidInitialize];
|
|
});
|
|
return self;
|
|
}
|
|
|
|
|
|
#pragma mark - NSMenuDelegate
|
|
|
|
- (void)menuNeedsUpdate:(NSMenu *)menu
|
|
{
|
|
[menu removeAllItems];
|
|
for (MPPlugIn *plugin in [self buildPlugIns])
|
|
{
|
|
NSMenuItem *item = [menu addItemWithTitle:plugin.name
|
|
action:@selector(invokePlugIn:)
|
|
keyEquivalent:@""];
|
|
item.target = self;
|
|
item.representedObject = plugin;
|
|
}
|
|
}
|
|
|
|
|
|
#pragma mark - Private
|
|
|
|
- (void)invokePlugIn:(NSMenuItem *)item
|
|
{
|
|
MPPlugIn *plugin = item.representedObject;
|
|
if (![plugin run:item])
|
|
NSLog(@"Failed to run plugin %@", plugin.name);
|
|
}
|
|
|
|
- (NSArray<MPPlugIn *> *)buildPlugIns
|
|
{
|
|
NSArray *paths = MPListEntriesForDirectory(kMPPlugInsDirectoryName, nil);
|
|
NSMutableArray *plugins = [NSMutableArray arrayWithCapacity:paths.count];
|
|
for (NSString *path in paths)
|
|
{
|
|
if (![path hasExtension:kMPPlugInFileExtension])
|
|
continue;
|
|
NSBundle *bundle = [NSBundle bundleWithPath:path];
|
|
MPPlugIn *plugin = [[MPPlugIn alloc] initWithBundle:bundle];
|
|
if (!plugin)
|
|
continue;
|
|
[plugins addObject:plugin];
|
|
}
|
|
return [plugins copy];
|
|
}
|
|
|
|
@end
|