summaryrefslogtreecommitdiff
path: root/QSBookmarkProviderFactory.m
diff options
context:
space:
mode:
Diffstat (limited to 'QSBookmarkProviderFactory.m')
-rw-r--r--QSBookmarkProviderFactory.m66
1 files changed, 66 insertions, 0 deletions
diff --git a/QSBookmarkProviderFactory.m b/QSBookmarkProviderFactory.m
new file mode 100644
index 0000000..6fcfdfb
--- /dev/null
+++ b/QSBookmarkProviderFactory.m
@@ -0,0 +1,66 @@
+//
+// QSBookmarkProviderFactory.m
+// QSDeliciousPlugIn
+//
+
+#import "QSBookmarkProviderFactory.h"
+#import "QSDeliciousAPIProvider.h"
+#import "QSLinkdingProvider.h"
+#import "SocialSite.h"
+
+@interface QSBookmarkProviderFactory ()
+@property (nonatomic, strong, readwrite) NSArray<id<QSBookmarkProvider>> *providers;
+@end
+
+@implementation QSBookmarkProviderFactory
+
++ (instancetype)sharedFactory {
+ static QSBookmarkProviderFactory *sharedInstance = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ sharedInstance = [[self alloc] init];
+ });
+ return sharedInstance;
+}
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ [self setupProviders];
+ }
+ return self;
+}
+
+- (void)setupProviders {
+ NSMutableArray *mutableProviders = [NSMutableArray array];
+
+ // Create Pinboard API providers for each supported site
+ QSDeliciousAPIProvider *deliciousProvider = [[QSDeliciousAPIProvider alloc] initWithSite:SocialSiteDelicious];
+ QSDeliciousAPIProvider *magnoliaProvider = [[QSDeliciousAPIProvider alloc] initWithSite:SocialSiteMagnolia];
+ QSDeliciousAPIProvider *pinboardProvider = [[QSDeliciousAPIProvider alloc] initWithSite:SocialSitePinboard];
+
+ // Create Linkding provider
+ QSLinkdingProvider *linkdingProvider = [[QSLinkdingProvider alloc] init];
+
+ [mutableProviders addObject:deliciousProvider];
+ [mutableProviders addObject:magnoliaProvider];
+ [mutableProviders addObject:pinboardProvider];
+ [mutableProviders addObject:linkdingProvider];
+
+ self.providers = [mutableProviders copy];
+}
+
+- (id<QSBookmarkProvider>)providerForSite:(SocialSite)site username:(NSString *)username password:(NSString *)password host:(NSString *)host {
+ for (id<QSBookmarkProvider> provider in self.providers) {
+ if ([provider canHandleSite:site username:username password:password host:host]) {
+ return provider;
+ }
+ }
+ return nil;
+}
+
+- (NSArray<id<QSBookmarkProvider>> *)allProviders {
+ return self.providers;
+}
+
+@end