Stubbed API for Autotype plugins that resolve window titles

This commit is contained in:
Michael Starke
2019-05-07 08:13:41 +02:00
parent ba2fc255dc
commit 5da86637e5
3 changed files with 37 additions and 4 deletions

View File

@@ -118,6 +118,13 @@ FOUNDATION_EXPORT NSString *const MPPluginUnkownVersion;
- (KPKTree *)treeForRunningOpenPanel:(NSOpenPanel *)panel withResponse:(NSModalResponse)response;
@end
@protocol MPAutotypeWindowTitleResolverPlugin <NSObject>
@required
- (BOOL)acceptsRunningApplication:(NSRunningApplication *)runningApplication;
- (NSString *)windowTitleForRunningApplication:(NSRunningApplication *)runningApplication;
@end
@interface MPPlugin (Deprecated)
- (instancetype)initWithPluginManager:(id)manager;

View File

@@ -32,6 +32,7 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
@class MPPlugin;
@class KPKEntry;
@protocol MPImportPlugin;
@protocol MPAutotypeWindowTitleResolverPlugin;
@interface MPPluginHost : NSObject
@@ -57,3 +58,9 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey;
@property (readonly, copy) NSArray <MPPlugin<MPImportPlugin> __kindof*> *importPlugins;
@end
@interface MPPluginHost (MPWindowTitleResolverSupport)
- (NSArray<MPPlugin<MPAutotypeWindowTitleResolverPlugin> __kindof*> *)windowTitleResolverForRunningApplication:(NSRunningApplication *)runningApplication;
@end

View File

@@ -447,6 +447,13 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun
[context.plugin performActionForMenuItem:item withEntries:context.entries];
}
- (NSArray *)_pluginsConformingToProtocoll:(Protocol *)protocol {
NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
return ([evaluatedObject conformsToProtocol:protocol]);
}];
return [self.mutablePlugins filteredArrayUsingPredicate:filterPredicate];
}
@end
NSString *const MPPluginBundleIdentifierKey = @"MPPluginBundleIdentifierKey";
@@ -455,10 +462,22 @@ NSString *const MPImportPluginUTIKey = @"MPImportPluginUTIKey";
@implementation MPPluginHost (MPImportPluginSupport)
- (NSArray<MPPlugin *> *)importPlugins {
NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
return ([evaluatedObject conformsToProtocol:@protocol(MPImportPlugin)]);
}];
return [self.mutablePlugins filteredArrayUsingPredicate:filterPredicate];
return [self _pluginsConformingToProtocoll:@protocol(MPImportPlugin)];
}
@end
@implementation MPPluginHost (MPWindowTitleResolverSupport)
- (NSArray<MPPlugin *> *)windowTitleResolverForRunningApplication:(NSRunningApplication *)runningApplication {
NSArray<MPPlugin<MPAutotypeWindowTitleResolverPlugin> *> *plugins = [self _pluginsConformingToProtocoll:@protocol(MPAutotypeWindowTitleResolverPlugin)];
NSMutableArray *resolver = [[NSMutableArray alloc] init];
for(MPPlugin<MPAutotypeWindowTitleResolverPlugin> *plugin in plugins) {
if([plugin acceptsRunningApplication:runningApplication]) {
[resolver addObject:plugin];
}
}
return [resolver copy];
}
@end