KMEmailSubWindowController.m 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // KMEmailSubWindowController.m
  3. // PDF Reader Pro Edition
  4. //
  5. // Created by 王帅 on 2019/4/18.
  6. //
  7. #import "KMEmailSubWindowController.h"
  8. #import <PDF_Reader_Pro-Swift.h>
  9. #import "KMOCLanguage.h"
  10. @interface KMEmailSubWindowController ()
  11. @property (nonatomic,assign) IBOutlet NSTextField *textLabel;
  12. @property (nonatomic,assign) IBOutlet NSTextField *textField;
  13. @property (nonatomic,assign) IBOutlet NSButton *button;
  14. @property (nonatomic,assign) IBOutlet NSProgressIndicator *indicator;
  15. @end
  16. @implementation KMEmailSubWindowController
  17. #pragma mark - Init Methods
  18. - (instancetype)init {
  19. if (self = [super initWithWindowNibName:@"KMEmailSubWindowController"]) {
  20. }
  21. return self;
  22. }
  23. #pragma mark - Window Methods
  24. - (void)windowDidLoad {
  25. [super windowDidLoad];
  26. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  27. [self.window setBackgroundColor:[NSColor whiteColor]];
  28. [self.window setMovableByWindowBackground:YES];
  29. self.textLabel.stringValue = KMLocalizedString(@"Subscribe to get the latest news and special offers!", nil);
  30. self.textField.placeholderString = KMLocalizedString(@"Enter your email", nil);
  31. self.button.title = KMLocalizedString(@"Subscribe Now", nil);
  32. self.button.wantsLayer = YES;
  33. self.button.layer.masksToBounds = YES;
  34. self.button.layer.cornerRadius = 2;
  35. self.button.layer.backgroundColor = [NSColor colorWithRed:46.0/255.0 green:114.0/255.0 blue:230.0/255.0 alpha:1.0].CGColor;
  36. [self.button setTitleColorWithColor:[NSColor whiteColor] font:nil];
  37. }
  38. #pragma mark - Button Actions
  39. - (IBAction)buttonAction:(id)sender {
  40. if (![self isValidateEmail:self.textField.stringValue]) {
  41. NSAlert *alert = [[NSAlert alloc] init];
  42. [alert setAlertStyle:NSAlertStyleCritical];
  43. [alert setMessageText:@""];
  44. [alert setInformativeText:KMLocalizedString(@"Please enter valid email", nil)];
  45. [alert addButtonWithTitle:KMLocalizedString(@"OK", nil)];
  46. [alert runModal];
  47. return;
  48. }
  49. self.button.enabled = NO;
  50. self.textField.enabled = NO;
  51. self.indicator.hidden = NO;
  52. [self.indicator startAnimation:nil];
  53. [self subscriptionWithEmail:self.textField.stringValue completionHandler:^(NSError *error) {
  54. self.button.enabled = YES;
  55. self.textField.enabled = YES;
  56. self.indicator.hidden = YES;
  57. [self.indicator stopAnimation:nil];
  58. if (!error) {
  59. [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"KMEmailSubscriptionShowKey"];
  60. [[NSUserDefaults standardUserDefaults] synchronize];
  61. [self.window close];
  62. }
  63. }];
  64. }
  65. #pragma mark - Private Methods
  66. - (BOOL)isValidateEmail:(NSString *)email {
  67. NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
  68. NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailRegex];
  69. return [emailTest evaluateWithObject:email];
  70. }
  71. - (void)subscriptionWithEmail:(NSString *)email completionHandler:(void (^)(NSError *error))handler {
  72. NSString *string = @"https://store.pdfreaderpro.com/api/member/subscribe";
  73. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:string]];
  74. [request setHTTPMethod:@"POST"];
  75. [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  76. NSDictionary *body = @{@"member" : @{@"email" : email}};
  77. [request setHTTPBody:[NSJSONSerialization dataWithJSONObject:body options:NSJSONWritingPrettyPrinted error:nil]];
  78. NSURLSession *session = [NSURLSession sharedSession];
  79. NSURLSessionDataTask *task = [session dataTaskWithRequest:request
  80. completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
  81. if (!error) {
  82. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data
  83. options:NSJSONReadingMutableContainers error:nil];
  84. NSDictionary *dataDic = dic[@"member"];
  85. if (dataDic) {
  86. } else {
  87. error = [NSError errorWithDomain:@"" code:0 userInfo:dic];
  88. }
  89. }
  90. dispatch_async(dispatch_get_main_queue(), ^{
  91. if (handler) {
  92. handler(error);
  93. }
  94. });
  95. }];
  96. [task resume];
  97. }
  98. #pragma mark - Public Methods
  99. + (BOOL)isAllowsShow {
  100. if ([[NSUserDefaults standardUserDefaults] objectForKey:@"KMEmailSubscriptionShowKey"]) {
  101. return NO;
  102. }
  103. return YES;
  104. }
  105. + (KMEmailSubWindowController *)windowController {
  106. static KMEmailSubWindowController *singleton = nil;
  107. static dispatch_once_t pred;
  108. dispatch_once(&pred, ^{
  109. singleton = [[super allocWithZone:NULL] init];
  110. });
  111. return singleton;
  112. }
  113. + (instancetype)allocWithZone:(struct _NSZone *)zone {
  114. return [self windowController];
  115. }
  116. @end