diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-08 10:38:39 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-09-08 10:38:39 +0200 |
| commit | a5e25cc05e5e33e114331cc826211c89adbcfa6a (patch) | |
| tree | 2ea647b5117e5c3b530ec66d4caafd04969e0fbe /Factories | |
| parent | 0f26c5c3b3e606c89724067d4785323de3fee751 (diff) | |
Reorganize code, WIP save for tag handling
Diffstat (limited to 'Factories')
| -rw-r--r-- | Factories/QSBookmarkProviderFactory.h | 28 | ||||
| -rw-r--r-- | Factories/QSBookmarkProviderFactory.m | 66 |
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 |