summaryrefslogtreecommitdiff
path: root/Factories
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-09-08 10:38:39 +0200
committerRuben Beltran del Rio <git@r.bdr.sh>2025-09-08 10:38:39 +0200
commita5e25cc05e5e33e114331cc826211c89adbcfa6a (patch)
tree2ea647b5117e5c3b530ec66d4caafd04969e0fbe /Factories
parent0f26c5c3b3e606c89724067d4785323de3fee751 (diff)
Reorganize code, WIP save for tag handling
Diffstat (limited to 'Factories')
-rw-r--r--Factories/QSBookmarkProviderFactory.h28
-rw-r--r--Factories/QSBookmarkProviderFactory.m66
2 files changed, 94 insertions, 0 deletions
diff --git a/Factories/QSBookmarkProviderFactory.h b/Factories/QSBookmarkProviderFactory.h
new file mode 100644
index 0000000..e2e694b
--- /dev/null
+++ b/Factories/QSBookmarkProviderFactory.h
@@ -0,0 +1,28 @@
+//
+// QSBookmarkProviderFactory.h
+// QSDeliciousPlugIn
+//
+// Factory for managing bookmark providers
+//
+
+#import <Foundation/Foundation.h>
+#import "QSBookmarkProvider.h"
+#import "SocialSite.h"
+
+@interface QSBookmarkProviderFactory : NSObject
+
+@property (nonatomic, strong, readonly) NSArray<id<QSBookmarkProvider>> *providers;
+
++ (instancetype)sharedFactory;
+
+/**
+ * Get the appropriate provider for the given site configuration
+ */
+- (id<QSBookmarkProvider>)providerForSite:(SocialSite)site username:(NSString *)username password:(NSString *)password host:(NSString *)host;
+
+/**
+ * Get all available providers
+ */
+- (NSArray<id<QSBookmarkProvider>> *)allProviders;
+
+@end \ No newline at end of file
diff --git a/Factories/QSBookmarkProviderFactory.m b/Factories/QSBookmarkProviderFactory.m
new file mode 100644
index 0000000..6fcfdfb
--- /dev/null
+++ b/Factories/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