drafting simple plugin system

This commit is contained in:
michael starke
2015-07-16 15:06:37 +02:00
parent e4a7b81a5f
commit af27e7b265
4 changed files with 122 additions and 0 deletions

View File

@@ -87,6 +87,7 @@
4C305F36179A0BD70082334F /* KPKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C305F35179A0BD70082334F /* KPKIcon.m */; }; 4C305F36179A0BD70082334F /* KPKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C305F35179A0BD70082334F /* KPKIcon.m */; };
4C305F3C179A19F90082334F /* KPKIconLoading.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C305F3B179A19F90082334F /* KPKIconLoading.m */; }; 4C305F3C179A19F90082334F /* KPKIconLoading.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C305F3B179A19F90082334F /* KPKIconLoading.m */; };
4C305F3E179A1A760082334F /* image.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C305F3D179A1A760082334F /* image.png */; }; 4C305F3E179A1A760082334F /* image.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C305F3D179A1A760082334F /* image.png */; };
4C31FEB31B57CDDB008E7CE3 /* MPPluginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C31FEB21B57CDDB008E7CE3 /* MPPluginManager.m */; };
4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B0E61A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m */; }; 4C32B0E71A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B0E61A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m */; };
4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */; }; 4C3666411787327E00B249F1 /* MPDocument+Attachments.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */; };
4C37A6731769393300AD0A40 /* HNHTableHeaderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C37A6721769393300AD0A40 /* HNHTableHeaderCell.m */; }; 4C37A6731769393300AD0A40 /* HNHTableHeaderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C37A6721769393300AD0A40 /* HNHTableHeaderCell.m */; };
@@ -576,6 +577,9 @@
4C305F35179A0BD70082334F /* KPKIcon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKIcon.m; sourceTree = "<group>"; }; 4C305F35179A0BD70082334F /* KPKIcon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKIcon.m; sourceTree = "<group>"; };
4C305F3B179A19F90082334F /* KPKIconLoading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKIconLoading.m; sourceTree = "<group>"; }; 4C305F3B179A19F90082334F /* KPKIconLoading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKIconLoading.m; sourceTree = "<group>"; };
4C305F3D179A1A760082334F /* image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = image.png; path = Images/image.png; sourceTree = "<group>"; }; 4C305F3D179A1A760082334F /* image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = image.png; path = Images/image.png; sourceTree = "<group>"; };
4C31FEB11B57CDDB008E7CE3 /* MPPluginManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPluginManager.h; sourceTree = "<group>"; };
4C31FEB21B57CDDB008E7CE3 /* MPPluginManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPluginManager.m; sourceTree = "<group>"; };
4C31FEBD1B57CE45008E7CE3 /* MPGenericPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPGenericPlugin.h; sourceTree = "<group>"; };
4C32B0E51A1D4436007E12F1 /* KPKFormat+MPUTIDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKFormat+MPUTIDetection.h"; sourceTree = "<group>"; }; 4C32B0E51A1D4436007E12F1 /* KPKFormat+MPUTIDetection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KPKFormat+MPUTIDetection.h"; sourceTree = "<group>"; };
4C32B0E61A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKFormat+MPUTIDetection.m"; sourceTree = "<group>"; }; 4C32B0E61A1D4436007E12F1 /* KPKFormat+MPUTIDetection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KPKFormat+MPUTIDetection.m"; sourceTree = "<group>"; };
4C3666401787327E00B249F1 /* MPDocument+Attachments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Attachments.m"; sourceTree = "<group>"; }; 4C3666401787327E00B249F1 /* MPDocument+Attachments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MPDocument+Attachments.m"; sourceTree = "<group>"; };
@@ -1456,6 +1460,16 @@
name = Images; name = Images;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
4C31FEBC1B57CDE0008E7CE3 /* Plugins */ = {
isa = PBXGroup;
children = (
4C31FEB11B57CDDB008E7CE3 /* MPPluginManager.h */,
4C31FEB21B57CDDB008E7CE3 /* MPPluginManager.m */,
4C31FEBD1B57CE45008E7CE3 /* MPGenericPlugin.h */,
);
name = Plugins;
sourceTree = "<group>";
};
4C37A84115B8B47D005EF8EE /* Delegates */ = { 4C37A84115B8B47D005EF8EE /* Delegates */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -1758,6 +1772,7 @@
4C77E36C15B84A240093A587 /* MacPass */ = { 4C77E36C15B84A240093A587 /* MacPass */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4C31FEBC1B57CDE0008E7CE3 /* Plugins */,
4C217D8E17A32BCF00609FAA /* Common */, 4C217D8E17A32BCF00609FAA /* Common */,
4C104129178CDD26001B5239 /* Categories */, 4C104129178CDD26001B5239 /* Categories */,
4C245C11176E22150086100E /* KeepassHttp */, 4C245C11176E22150086100E /* KeepassHttp */,
@@ -2732,6 +2747,7 @@
4C5CD35A17D15DBD000B7F38 /* NSString+Hexdata.m in Sources */, 4C5CD35A17D15DBD000B7F38 /* NSString+Hexdata.m in Sources */,
4C5CD36117D15DCA000B7F38 /* KPKArc4RandomStream.m in Sources */, 4C5CD36117D15DCA000B7F38 /* KPKArc4RandomStream.m in Sources */,
4C5CD36217D15DCA000B7F38 /* KPKRandomStream.m in Sources */, 4C5CD36217D15DCA000B7F38 /* KPKRandomStream.m in Sources */,
4C31FEB31B57CDDB008E7CE3 /* MPPluginManager.m in Sources */,
4C5CD36317D15DCA000B7F38 /* KPKSalsa20RandomStream.m in Sources */, 4C5CD36317D15DCA000B7F38 /* KPKSalsa20RandomStream.m in Sources */,
4C3C4EA518D6FEA100153127 /* TTTImageTransformers.m in Sources */, 4C3C4EA518D6FEA100153127 /* TTTImageTransformers.m in Sources */,
4CC6DB7A17D23719002C6091 /* KPKNode+IconImage.m in Sources */, 4CC6DB7A17D23719002C6091 /* KPKNode+IconImage.m in Sources */,

28
MacPass/MPGenericPlugin.h Normal file
View File

@@ -0,0 +1,28 @@
//
// MPGenericPlugin.h
// MacPass
//
// Created by Michael Starke on 16/07/15.
// Copyright (c) 2015 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class MPPluginManager
@protocol MPGenericPlugin <NSObject>
@required
@property (readonly) NSString *name;
@property (readonly) NSString *version;
@property (readonly) NSInteger *versionNumber;
- (instancetype)initWithPluginManager:(MPPluginManager *)manager;
@optional
- (void)manager:(MPPluginManager *)manager willAddNode:(KPKNode *)node;
- (void)manager:(MPPluginManager *)manager didAddNode(KPKNode *)node;
- (void)manager:(MPPluginManager *)manager willRemoveNode:(KPKNode *)node;
- (void)manager:(MPPluginManager *)manager didRemoveNode:(KPKNode *)node;
@end

22
MacPass/MPPluginManager.h Normal file
View File

@@ -0,0 +1,22 @@
//
// MPPluginManager.h
// MacPass
//
// Created by Michael Starke on 16/07/15.
// Copyright (c) 2015 HicknHack Software GmbH. All rights reserved.
//
#import <Foundation/Foundation.h>
@class KPKNode;
@interface MPPluginManager : NSObject
typedef BOOL (^NodeMatchBlock)(KPKNode *aNode);
+ (instancetype)sharedManager;
- (NSArray *)filteredEntriesUsingBlock:(NodeMatchBlock) matchBlock;
- (NSArray *)filteredGroupsUsingBlock:(NodeMatchBlock) matchBlock;
@end

56
MacPass/MPPluginManager.m Normal file
View File

@@ -0,0 +1,56 @@
//
// MPPluginManager.m
// MacPass
//
// Created by Michael Starke on 16/07/15.
// Copyright (c) 2015 HicknHack Software GmbH. All rights reserved.
//
#import "MPPluginManager.h"
#import "MPDocument.h"
#import "KPKTree.h"
@implementation MPPluginManager
+ (instancetype)sharedManager {
static MPPluginManager *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[MPPluginManager alloc] _init];
});
return instance;
}
- (instancetype)init {
return nil;
}
- (instancetype)_init {
self = [super init];
return self;
}
- (NSArray *)filteredEntriesUsingBlock:(NodeMatchBlock)matchBlock {
NSArray *currentDocuments = [[NSDocumentController sharedDocumentController] documents];
NSMutableArray *entries = [[NSMutableArray alloc] initWithCapacity:200];
for(MPDocument *document in currentDocuments) {
if(document.tree) {
[entries addObjectsFromArray:document.tree.allEntries];
}
}
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { return matchBlock(evaluatedObject); }];
return [[NSArray alloc] initWithArray:[entries filteredArrayUsingPredicate:predicate] copyItems:YES];
}
- (NSArray *)filteredGroupsUsingBlock:(NodeMatchBlock)matchBlock {
return nil;
}
- (void)_loadPlugins {
}
@end