summaryrefslogtreecommitdiff
path: root/mDNSResponder/mDNSMacOSX/SettingsBundle/BonjourSettingsController.m
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSMacOSX/SettingsBundle/BonjourSettingsController.m')
-rw-r--r--mDNSResponder/mDNSMacOSX/SettingsBundle/BonjourSettingsController.m143
1 files changed, 143 insertions, 0 deletions
diff --git a/mDNSResponder/mDNSMacOSX/SettingsBundle/BonjourSettingsController.m b/mDNSResponder/mDNSMacOSX/SettingsBundle/BonjourSettingsController.m
new file mode 100644
index 00000000..86e4ae7a
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/SettingsBundle/BonjourSettingsController.m
@@ -0,0 +1,143 @@
+/*
+ *
+ * Copyright (c) 2016 Apple Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "BonjourSettingsController.h"
+#import "HostnameController.h"
+#import "BonjourSCStore.h"
+#import "CNBrowseDomainsController.h"
+#import <AssertMacros.h>
+
+#define LocalizedStringFromMyBundle(key, comment) \
+ NSLocalizedStringFromTableInBundle(key, @"Localizable", [NSBundle bundleForClass: [self class]], comment)
+
+@interface BonjourSettingsController ()
+
+@property (strong) NSString * bonjourHostname;
+@property (strong) NSArray * browseDomainsA;
+
+@end
+
+@implementation BonjourSettingsController
+
+- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+ if (self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil])
+ {
+ [self commonInit];
+ }
+ return(self);
+}
+
+- (void)commonInit
+{
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+ [super viewWillAppear: animated];
+ [self readPreferences];
+ [self reloadSpecifiers];
+}
+
+- (id) getDomainCount:(PSSpecifier *)specifier
+{
+ (void)specifier; // Unused
+ return [NSNumber numberWithInteger: [_browseDomainsA filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: @"(%K == %@)", (NSString *)SC_DYNDNS_ENABLED_KEY, @YES]].count].stringValue;
+}
+
+- (id) getHostname:(PSSpecifier *)specifier
+{
+ (void)specifier; // Unused
+ return _bonjourHostname.length ? _bonjourHostname : LocalizedStringFromMyBundle(@"_bonjour.hostname.unset", nil);
+}
+
+- (NSArray *)specifiers
+{
+ if (!_specifiers) {
+ PSSpecifier * specifier;
+ NSMutableArray * specifiers = [NSMutableArray array];
+
+ specifier = [PSSpecifier groupSpecifierWithName: LocalizedStringFromMyBundle(@"_bonjour.hostname.groupname", nil)];
+ [specifiers addObject: specifier];
+ specifier = [PSSpecifier preferenceSpecifierNamed: LocalizedStringFromMyBundle(@"_bonjour.hostname.name", nil)
+ target: self
+ set: nil
+ get: @selector(getHostname:)
+ detail: [HostnameController class]
+ cell: PSLinkListCell
+ edit: nil];
+ [specifier setProperty: @"hostnameID"
+ forKey: PSIDKey];
+ [specifiers addObject: specifier];
+
+ specifier = [PSSpecifier groupSpecifierWithName: LocalizedStringFromMyBundle(@"_bonjour.browse.groupname", nil)];
+ [specifiers addObject: specifier];
+ specifier = [PSSpecifier preferenceSpecifierNamed: LocalizedStringFromMyBundle(@"_bonjour.browse.name", nil)
+ target: self
+ set: nil
+ get: @selector(getDomainCount:)
+ detail: [CNBrowseDomainsController class]
+ cell: PSLinkListCell
+ edit: nil];
+ [specifier setProperty: @"browseID"
+ forKey: PSIDKey];
+ [specifiers addObject: specifier];
+
+ _specifiers = specifiers;
+ }
+ return _specifiers;
+}
+
+-(void)readPreferences
+{
+ self.browseDomainsA = [BonjourSCStore objectForKey: (NSString *)SC_DYNDNS_BROWSEDOMAINS_KEY];
+
+ NSArray * hostArray;
+ hostArray = [BonjourSCStore objectForKey: (NSString *)SC_DYNDNS_HOSTNAMES_KEY];
+ if (hostArray && [hostArray count] > 0)
+ {
+ self.bonjourHostname = hostArray[0][(NSString *)SC_DYNDNS_DOMAIN_KEY];
+ }
+ else self.bonjourHostname = nil;
+
+ if (!_browseDomainsA) self.browseDomainsA = [NSMutableArray array];
+ if (!_bonjourHostname) self.bonjourHostname = [NSString string];
+}
+
+#pragma mark - TableView Delegates
+
+- (void)listItemSelected:(NSIndexPath *)indexPath //sender is NSIndexPath of selection
+{
+ if (indexPath.section == 0)
+ {
+ HostnameController * c = [[HostnameController alloc] initWithStyle: UITableViewStyleGrouped];
+ c.bonjourHostname = _bonjourHostname;
+ c.title = LocalizedStringFromMyBundle(@"_bonjour.hostname.name", nil);
+ [self.navigationController pushViewController: c animated: YES];
+ }
+ else if (indexPath.section == 1)
+ {
+ CNBrowseDomainsController * c = [[CNBrowseDomainsController alloc] initWithStyle: UITableViewStyleGrouped];
+ c.browseDomainsA = _browseDomainsA;
+ c.title = LocalizedStringFromMyBundle(@"_bonjour.browse.name", nil);
+ [self.navigationController pushViewController: c animated: YES];
+ }
+
+ [_table deselectRowAtIndexPath: indexPath animated: YES];
+}
+
+@end