mirror of
https://github.com/Codeux-Software/Textual.git
synced 2026-06-16 13:24:32 +00:00
Delete App Store build scheme
Deletes all iCloud related code as well
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
|
||||
// The main project of Textual, its extensions, and its XPC services
|
||||
// all inherit one of these configuration files to allow them to
|
||||
// selectively disable code based on which features are enabled.
|
||||
|
||||
// These macros that are used to disable and enable the inclusion
|
||||
// of certain segments of code. Toggling one of these flags does not
|
||||
// guarantee that the toggled feature will work. These only toggle the code.
|
||||
// Not add additional resource files that the code may be dependent on.
|
||||
// To add new feature flags, modify UpdateFeatureFlags.sh
|
||||
|
||||
TEXTUAL_BUILT_INSIDE_SANDBOX=1
|
||||
TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION=1
|
||||
TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT=1
|
||||
TEXTUAL_BUILT_FOR_APP_STORE_DISTRIBUTION=1
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
#include "../Common/Foundation.xcconfig"
|
||||
#include "Textual.xcconfig"
|
||||
#include "../Common/Textual App.xcconfig"
|
||||
|
||||
CODE_SIGN_ENTITLEMENTS = ${PROJECT_DIR}/Configurations/Sandbox/App Store.entitlements
|
||||
|
||||
TEXTUAL_PRODUCT_NAME = Textual 7
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
#include "../Common/Foundation.xcconfig"
|
||||
#include "Textual.xcconfig"
|
||||
#include "../Common/Textual Extensions.xcconfig"
|
||||
@@ -1,13 +0,0 @@
|
||||
|
||||
#include "../Common/Textual.xcconfig"
|
||||
#include "Enabled Features.xcconfig"
|
||||
|
||||
TEXTUAL_PRODUCT_NAME = Textual
|
||||
|
||||
TEXTUAL_BUNDLE_IDENTIFIER = com.codeux.apps.textual-mas
|
||||
TEXTUAL_GROUP_CONTAINER_IDENTIFIER = 8482Q6EPL6.com.codeux.irc.textual
|
||||
TEXTUAL_BUILD_SCHEME_TOKEN = appstore
|
||||
|
||||
TEXTUAL_EXTENSION_BUILD_SCHEME = Release
|
||||
TEXTUAL_FRAMEWORK_BUILD_SCHEME = Release
|
||||
TEXTUAL_XPC_SERVICE_BUILD_SCHEME = Release (App Store)
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
#include "../Common/Foundation.xcconfig"
|
||||
#include "Textual.xcconfig"
|
||||
#include "../Common/XPC Service - ICL Extensions.xcconfig"
|
||||
@@ -1,5 +0,0 @@
|
||||
|
||||
#include "XPC Services.xcconfig"
|
||||
#include "../Common/XPC Service - ICL.xcconfig"
|
||||
|
||||
ICL_EXTENSION_BUILD_SCHEME = Release
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
#include "../Common/Foundation.xcconfig"
|
||||
#include "Textual.xcconfig"
|
||||
#include "../Common/XPC Services.xcconfig"
|
||||
@@ -11,7 +11,6 @@ echo "
|
||||
featureNames=("TEXTUAL_BUILT_INSIDE_SANDBOX"
|
||||
"TEXTUAL_BUILT_WITH_SPARKLE_ENABLED"
|
||||
"TEXTUAL_BUILT_WITH_LICENSE_MANAGER"
|
||||
"TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT"
|
||||
"TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION"
|
||||
"TEXTUAL_BUILT_FOR_APP_STORE_DISTRIBUTION"
|
||||
"TEXTUAL_BUILT_AS_UNIVERSAL_BINARY")
|
||||
|
||||
@@ -8,11 +8,7 @@ cd "${TEXTUAL_WORKSPACE_TEMP_DIR}/"
|
||||
# This will be the Info.plist file manipulated with the version
|
||||
# information that is generated below.
|
||||
|
||||
if [ "${TEXTUAL_BUILD_SCHEME_TOKEN}" == "appstore" ]; then
|
||||
infoPlistSource="${PROJECT_DIR}/Resources/Property Lists/Application Properties/InfoAppStore.plist"
|
||||
else
|
||||
infoPlistSource="${PROJECT_DIR}/Resources/Property Lists/Application Properties/Info.plist"
|
||||
fi
|
||||
infoPlistSource="${PROJECT_DIR}/Resources/Property Lists/Application Properties/Info.plist"
|
||||
|
||||
infoPlistTarget="${TEXTUAL_WORKSPACE_TEMP_DIR}/Info.plist"
|
||||
|
||||
|
||||
@@ -58,7 +58,6 @@
|
||||
#import "IRCWorldPrivate.h"
|
||||
#import "TPCApplicationInfoPrivate.h"
|
||||
#import "TPCPreferencesLocalPrivate.h"
|
||||
#import "TPCPreferencesCloudSyncPrivate.h"
|
||||
#import "TPCPreferencesUserDefaults.h"
|
||||
#import "TPCResourceManagerPrivate.h"
|
||||
#import "TPCThemeControllerPrivate.h"
|
||||
@@ -158,12 +157,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (void)applicationWakeStepOne
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
/* Cloud files are synced regardless of user preference
|
||||
so we still have to initialize it at some point. */
|
||||
[sharedCloudManager() prepareInitialState];
|
||||
#endif
|
||||
|
||||
self.world = [IRCWorld new];
|
||||
}
|
||||
|
||||
@@ -410,19 +403,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
BOOL condition2 = (TVCLogControllerHistoricLogSharedInstance().isSaving == NO &&
|
||||
self.terminateHistoricLogSaveFinished);
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
/* iCloud is syncing */
|
||||
BOOL condition3 = sharedCloudManager().isTerminated;
|
||||
#else
|
||||
BOOL condition3 = YES;
|
||||
#endif
|
||||
|
||||
LogToConsoleTerminationProgress("Conditions: %@ %@ %@",
|
||||
StringFromBOOL(condition1),
|
||||
StringFromBOOL(condition2),
|
||||
StringFromBOOL(condition3));
|
||||
StringFromBOOL(condition2));
|
||||
|
||||
return (condition1 && condition2 && condition3);
|
||||
return (condition1 && condition2);
|
||||
}
|
||||
|
||||
- (void)performApplicationTerminationStepOne
|
||||
@@ -461,10 +447,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
[TVCLogControllerInlineMediaSharedInstance() prepareForApplicationTermination];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[sharedCloudManager() prepareForApplicationTermination];
|
||||
#endif
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION == 1
|
||||
[sharedEncryptionManager() prepareForApplicationTermination];
|
||||
#endif
|
||||
@@ -494,8 +476,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/* We want certain things to 100% happen before the app completely closes.
|
||||
This block that is performed below loops until all these actions are completed.
|
||||
Notable actions: gracefully leaving IRC, saving historic logs, and closing
|
||||
down iCloud syncing (if applicable). */
|
||||
Notable actions: gracefully leaving IRC, saving historic logs, etc. */
|
||||
XRPerformBlockAsynchronouslyOnGlobalQueueWithPriority(^{
|
||||
do {
|
||||
/* We wait until this value reaches zero so that
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
#import "IRCISupportInfo.h"
|
||||
#import "IRCUser.h"
|
||||
#import "IRCWorldPrivate.h"
|
||||
#import "IRCWorldPrivateCloudExtension.h"
|
||||
#import "TVCBasicTableView.h"
|
||||
#import "TVCLogController.h"
|
||||
#import "TVCLogViewPrivate.h"
|
||||
@@ -77,7 +76,6 @@
|
||||
#import "TDCServerPropertiesSheetPrivate.h"
|
||||
#import "TDCWelcomeSheetPrivate.h"
|
||||
#import "TPCPathInfoPrivate.h"
|
||||
#import "TPCPreferencesCloudSyncExtension.h"
|
||||
#import "TPCPreferencesImportExport.h"
|
||||
#import "TPCPreferencesLocalPrivate.h"
|
||||
#import "TPCPreferencesReload.h"
|
||||
@@ -1597,45 +1595,16 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *suppressionText = nil;
|
||||
|
||||
BOOL suppressionResult = NO;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
BOOL deleteFromCloudCheckboxShown = NO;
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud]) {
|
||||
if (u.config.excludedFromCloudSyncing == NO) {
|
||||
deleteFromCloudCheckboxShown = YES;
|
||||
|
||||
suppressionText = TXTLS(@"Prompts[5zs-h0]");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOL result = [TDCAlert modalAlertWithMessage:TXTLS(@"Prompts[etl-ss]")
|
||||
title:TXTLS(@"Prompts[0kz-wd]")
|
||||
defaultButton:TXTLS(@"Prompts[mvh-ms]")
|
||||
alternateButton:TXTLS(@"Prompts[99q-gg]")
|
||||
suppressionKey:nil
|
||||
suppressionText:suppressionText
|
||||
suppressionResponse:&suppressionResult];
|
||||
alternateButton:TXTLS(@"Prompts[99q-gg]")];
|
||||
|
||||
if (result == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if (deleteFromCloudCheckboxShown && suppressionResult == NO) {
|
||||
[worldController() destroyClient:u skipCloud:NO];
|
||||
} else {
|
||||
#endif
|
||||
|
||||
[worldController() destroyClient:u skipCloud:YES];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
}
|
||||
#endif
|
||||
[worldController() destroyClient:u];
|
||||
|
||||
[worldController() save];
|
||||
}
|
||||
@@ -2478,7 +2447,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@(MTMMHelpPrivacyPolicy) : @"https://help.codeux.com/textual/Privacy-Policy.kb",
|
||||
@(MTMMHelpFrequentlyAskedQuestions) : @"https://help.codeux.com/textual/Frequently-Asked-Questions.kb",
|
||||
@(MTMMHelpKBMenuKnowledgeBaseHome) : @"https://help.codeux.com/textual/home.kb",
|
||||
@(MTMMHelpKBMenuUsingICloudWithApp) : @"https://help.codeux.com/textual/iCloud-Syncing.kb",
|
||||
@(MTMMHelpKBMenuChatEncryption) : @"https://help.codeux.com/textual/Off-the-Record-Messaging.kb",
|
||||
@(MTMMHelpKBMenuCommandReference) : @"https://help.codeux.com/textual/Command-Reference.kb",
|
||||
@(MTMMHelpKBMenuFeatureRequests) : @"https://help.codeux.com/textual/Support.kb",
|
||||
@@ -2496,11 +2464,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[TLOpenLink openWithString:link inBackground:NO];
|
||||
}
|
||||
|
||||
- (void)openMacAppStoreWebpage:(id)sender
|
||||
{
|
||||
[TLOpenLink openWithString:@"https://www.textualapp.com/mac-app-store" inBackground:NO];
|
||||
}
|
||||
|
||||
- (void)openStandaloneStoreWebpage:(id)sender
|
||||
{
|
||||
[TLOpenLink openWithString:@"https://www.textualapp.com/standalone-store" inBackground:NO];
|
||||
@@ -3547,13 +3510,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[worldController() save];
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (void)serverPropertiesSheet:(TDCServerPropertiesSheet *)sender removeClientFromCloud:(NSString *)clientId
|
||||
{
|
||||
[worldController() cloud_addClientToListOfDeletedClients:clientId];
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)serverPropertiesSheetWillClose:(TDCServerPropertiesSheet *)sender
|
||||
{
|
||||
[windowController() removeWindowFromWindowList:sender];
|
||||
@@ -3843,11 +3799,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[menuController() openStandaloneStoreWebpage:sender];
|
||||
}
|
||||
|
||||
- (void)openMacAppStoreWebpage:(id)sender
|
||||
{
|
||||
[menuController() openMacAppStoreWebpage:sender];
|
||||
}
|
||||
|
||||
- (void)manageLicense:(id)sender
|
||||
{
|
||||
[menuController() manageLicense:sender];
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
#import "TXMasterController.h"
|
||||
#import "TXMenuController.h"
|
||||
#import "TXWindowControllerPrivate.h"
|
||||
#import "TPCPreferencesCloudSync.h"
|
||||
#import "TPCThemeController.h"
|
||||
#import "THOPluginManagerPrivate.h"
|
||||
#import "IRCWorld.h"
|
||||
@@ -76,10 +75,6 @@ NSString * const TXErrorDomain = @"TextualErrorDomain";
|
||||
|
||||
_defineSharedInstance(sharedAppearance, TXAppearance, new)
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
_defineSharedInstance(sharedCloudSyncManager, TPCPreferencesCloudSync, new)
|
||||
#endif
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION == 1
|
||||
_defineSharedInstance(sharedEncryptionManager, TLOEncryptionManager, new)
|
||||
#endif
|
||||
|
||||
-5
@@ -78,11 +78,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[menuController() openStandaloneStoreWebpage:nil];
|
||||
}
|
||||
|
||||
+ (void)openMacAppStore
|
||||
{
|
||||
[menuController() openMacAppStoreWebpage:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
||||
|
||||
@@ -143,11 +143,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[TDCLicenseUpgradeCommonActions purchaseUpgradeForLicense:sender.licenseKey];
|
||||
}
|
||||
|
||||
- (void)upgradeEligibilitySheetPurchaseMacAppStore:(TDCLicenseUpgradeEligibilitySheet *)sender
|
||||
{
|
||||
[TDCLicenseUpgradeCommonActions openMacAppStore];
|
||||
}
|
||||
|
||||
- (void)upgradeEligibilitySheetPurchaseStandalone:(TDCLicenseUpgradeEligibilitySheet *)sender
|
||||
{
|
||||
[TDCLicenseUpgradeCommonActions openStandaloneStore];
|
||||
|
||||
-6
@@ -62,7 +62,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (IBAction)actionActivateLicense:(id)sender;
|
||||
- (IBAction)actionPurchaseUpgrade:(id)sender;
|
||||
- (IBAction)actionPurchaseStandalone:(id)sender;
|
||||
- (IBAction)actionPurchaseMacAppStore:(id)sender;
|
||||
- (IBAction)actionClose:(id)sender;
|
||||
@end
|
||||
|
||||
@@ -321,11 +320,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[self.delegate upgradeEligibilitySheetPurchaseUpgrade:self];
|
||||
}
|
||||
|
||||
- (void)actionPurchaseMacAppStore:(id)sender
|
||||
{
|
||||
[self.delegate upgradeEligibilitySheetPurchaseMacAppStore:self];
|
||||
}
|
||||
|
||||
- (void)actionPurchaseStandalone:(id)sender
|
||||
{
|
||||
[self.delegate upgradeEligibilitySheetPurchaseStandalone:self];
|
||||
|
||||
@@ -36,16 +36,10 @@
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
#warning TODO: Radio groups that are manually set need to be updated when iCloud syncs.
|
||||
#endif
|
||||
|
||||
#import "NSViewHelper.h"
|
||||
#import "TXMasterController.h"
|
||||
#import "TXMenuController.h"
|
||||
#import "TPCPathInfoPrivate.h"
|
||||
#import "TPCPreferencesCloudSyncPrivate.h"
|
||||
#import "TPCPreferencesCloudSyncExtensionPrivate.h"
|
||||
#import "TPCPreferencesLocalPrivate.h"
|
||||
#import "TPCPreferencesReload.h"
|
||||
#import "TPCPreferencesUserDefaults.h"
|
||||
@@ -149,9 +143,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, strong) IBOutlet NSView *contentViewOffRecordMessaging;
|
||||
#endif
|
||||
|
||||
@property (nonatomic, strong) IBOutlet NSView *contentViewICloud;
|
||||
@property (nonatomic, strong) IBOutlet NSView *contentViewHiddenPreferences;
|
||||
|
||||
@property (nonatomic, weak) IBOutlet NSButton *checkForUpdatesDontCheck;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *checkForUpdatesAutomaticallyCheck;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *checkForUpdatesAutomaticallyDownload;
|
||||
@@ -175,8 +167,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (IBAction)onChangedCheckForUpdates:(id)sender;
|
||||
- (IBAction)onChangedCheckForBetaUpdates:(id)sender;
|
||||
- (IBAction)onChangedChannelViewArrangement:(id)sender;
|
||||
- (IBAction)onChangedCloudSyncingServices:(id)sender;
|
||||
- (IBAction)onChangedCloudSyncingServicesServersOnly:(id)sender;
|
||||
- (IBAction)onChangedDisableNicknameColorHashing:(id)sender;
|
||||
- (IBAction)onChangedForwardNoticeTo:(id)sender;
|
||||
- (IBAction)onChangedHighlightLogging:(id)sender;
|
||||
@@ -196,13 +186,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (IBAction)onChangedUserListModeSortOrder:(id)sender;
|
||||
- (IBAction)onFileTransferDownloadDestinationFolderChanged:(id)sender;
|
||||
- (IBAction)onFileTransferIPAddressDetectionMethodChanged:(id)sender;
|
||||
- (IBAction)onManageICloudButtonClicked:(id)sender; // changed
|
||||
- (IBAction)onModifyUserStyleSheetRules:(id)sender;
|
||||
- (IBAction)onOpenPathToCloudFolder:(id)sender;
|
||||
- (IBAction)onOpenPathToScripts:(id)sender;
|
||||
- (IBAction)onOpenPathToTheme:(id)sender; // changed
|
||||
- (IBAction)onPrefPaneSelected:(id)sender;
|
||||
- (IBAction)onPurgeOfCloudDataRequested:(id)sender;
|
||||
- (IBAction)onResetServerListUnreadBadgeColorsToDefault:(id)sender;
|
||||
- (IBAction)onResetUserListModeColorsToDefaults:(id)sender;
|
||||
- (IBAction)onSelectNewFont:(id)sender;
|
||||
@@ -288,17 +275,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
];
|
||||
|
||||
[RZNotificationCenter() addObserver:self
|
||||
selector:@selector(onCloudSyncControllerDidChangeThemeName:)
|
||||
selector:@selector(onThemeListDidChange:)
|
||||
name:TPCThemeControllerThemeListDidChangeNotification
|
||||
object:nil];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[RZNotificationCenter() addObserver:self
|
||||
selector:@selector(onCloudSyncControllerDidChangeThemeName:)
|
||||
name:TPCPreferencesCloudSyncDidChangeThemeNameNotification
|
||||
object:nil];
|
||||
#endif
|
||||
|
||||
[RZNotificationCenter() addObserver:self
|
||||
selector:@selector(onThemeWillReload:)
|
||||
name:TVCMainWindowWillReloadThemeNotification
|
||||
@@ -309,12 +289,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
name:TVCMainWindowDidReloadThemeNotification
|
||||
object:nil];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 0
|
||||
/* Hide "Share data between devices" when iCloud support is not enabled. */
|
||||
[self.contentViewGeneralStackView setVisibilityPriority:NSStackViewVisibilityPriorityNotVisible
|
||||
forView:self.contentViewGeneralShareDataView];
|
||||
#endif
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_SPARKLE_ENABLED == 0
|
||||
/* Hide preferences for updates when support is not enabled. */
|
||||
[self.contentViewGeneralStackView setVisibilityPriority:NSStackViewVisibilityPriorityNotVisible
|
||||
@@ -806,22 +780,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[TPCPreferences setLogToDisk:logTranscript];
|
||||
}
|
||||
|
||||
- (BOOL)syncPreferencesToTheCloud
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
return [TPCPreferences syncPreferencesToTheCloud];
|
||||
#else
|
||||
return NO;
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)setSyncPreferencesToTheCloud:(BOOL)syncPreferencesToTheCloud
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[TPCPreferences setSyncPreferencesToTheCloud:syncPreferencesToTheCloud];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (BOOL)inlineMediaLimitToBasics
|
||||
{
|
||||
return [TPCPreferences inlineMediaLimitToBasics];
|
||||
@@ -924,29 +882,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
#pragma mark -
|
||||
#pragma mark File Transfer Destination Folder Popup
|
||||
|
||||
- (BOOL)panel:(id)sender validateURL:(NSURL *)url error:(NSError **)outError
|
||||
{
|
||||
NSString *cloudPath = [[TPCPathInfo userHome] stringByAppendingPathComponent:@"/Library/Mobile Documents/"];
|
||||
|
||||
if ([url.path hasPrefix:cloudPath]) {
|
||||
if (outError) {
|
||||
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
|
||||
|
||||
userInfo[NSURLErrorKey] = url;
|
||||
|
||||
userInfo[NSLocalizedDescriptionKey] = TXTLS(@"TDCPreferencesController[x3n-to]");
|
||||
|
||||
userInfo[NSLocalizedRecoverySuggestionErrorKey] = TXTLS(@"TDCPreferencesController[gz8-dt]");
|
||||
|
||||
*outError = [NSError errorWithDomain:TXErrorDomain code:27984 userInfo:userInfo];
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)updateFileTransferDownloadDestinationFolder
|
||||
{
|
||||
TDCFileTransferDialog *transferController = [TXSharedApplication sharedFileTransferDialog];
|
||||
@@ -977,8 +912,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
if (self.fileTransferDownloadDestinationButton.selectedTag == 2) {
|
||||
NSOpenPanel *d = [NSOpenPanel openPanel];
|
||||
|
||||
d.delegate = (id)self;
|
||||
|
||||
d.allowsMultipleSelection = NO;
|
||||
d.canChooseDirectories = YES;
|
||||
d.canChooseFiles = NO;
|
||||
@@ -1052,8 +985,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
if (self.transcriptFolderButton.selectedTag == 2) {
|
||||
NSOpenPanel *d = [NSOpenPanel openPanel];
|
||||
|
||||
d.delegate = (id)self;
|
||||
|
||||
d.allowsMultipleSelection = NO;
|
||||
d.canChooseDirectories = YES;
|
||||
d.canChooseFiles = NO;
|
||||
@@ -1469,16 +1400,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[RZUserDefaults() setObject:nil forKey:@"User List Mode Badge Colors -> +v"];
|
||||
[RZUserDefaults() setObject:nil forKey:@"User List Mode Badge Colors -> no mode"];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> +y"];
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> +q"];
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> +a"];
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> +o"];
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> +h"];
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> +v"];
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"User List Mode Badge Colors -> no mode"];
|
||||
#endif
|
||||
|
||||
[self onChangedUserListModeColor:nil];
|
||||
}
|
||||
|
||||
@@ -1490,10 +1411,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
[self didChangeValueForKey:@"serverListUnreadCountBadgeHighlightColor"];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[sharedCloudManager() removeObjectForKeyNextUpstreamSync:@"Server List Unread Message Count Badge Colors -> Highlight"];
|
||||
#endif
|
||||
|
||||
[self onChangedServerListUnreadBadgeColor:sender];
|
||||
}
|
||||
|
||||
@@ -1603,90 +1520,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[TPCPreferences performReloadAction:TPCPreferencesReloadActionScrollbackVisibleLimit];
|
||||
}
|
||||
|
||||
- (void)onOpenPathToCloudFolder:(id)sender
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[TPCPathInfo openApplicationUbiquitousContainer];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)onOpenPathToScripts:(id)sender
|
||||
{
|
||||
[RZWorkspace() openURL:[TPCPathInfo groupContainerApplicationSupportURL]];
|
||||
}
|
||||
|
||||
- (void)onManageICloudButtonClicked:(id)sender
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[self firstPane:self.contentViewICloud selectedItem:_toolbarItemIndexAdvanced];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)onChangedCloudSyncingServices:(id)sender
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
[sharedCloudManager() resetDataToSync];
|
||||
} else {
|
||||
[RZUbiquitousKeyValueStore() synchronize];
|
||||
|
||||
[sharedCloudManager() syncEverythingNextSync];
|
||||
|
||||
[sharedCloudManager() synchronizeFromCloud];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)onChangedCloudSyncingServicesServersOnly:(id)sender
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloudLimitedToServers]) {
|
||||
return;
|
||||
}
|
||||
|
||||
[RZUbiquitousKeyValueStore() synchronize];
|
||||
|
||||
[sharedCloudManager() synchronizeFromCloud];
|
||||
#endif
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (void)onPurgeOfCloudDataRequestedCallback:(TDCAlertResponse)returnCode
|
||||
{
|
||||
if (returnCode != TDCAlertResponseDefault) {
|
||||
return;
|
||||
}
|
||||
|
||||
[sharedCloudManager() purgeDataStoredWithCloud];
|
||||
|
||||
NSError *deleteThemesError = nil;
|
||||
|
||||
if ([RZFileManager() removeItemAtPath:[TPCPathInfo cloudCustomThemes] error:&deleteThemesError] == NO) {
|
||||
LogToConsoleError("Delete Error: %@",
|
||||
deleteThemesError.localizedDescription);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)onPurgeOfCloudDataRequested:(id)sender
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[TDCAlert alertSheetWithWindow:[NSApp keyWindow]
|
||||
body:TXTLS(@"TDCPreferencesController[t8v-w8]")
|
||||
title:TXTLS(@"TDCPreferencesController[r62-4k]")
|
||||
defaultButton:TXTLS(@"Prompts[mvh-ms]")
|
||||
alternateButton:TXTLS(@"Prompts[99q-gg]")
|
||||
otherButton:nil
|
||||
completionBlock:^(TDCAlertResponse buttonClicked, BOOL suppressed, id underlyingAlert) {
|
||||
[self onPurgeOfCloudDataRequestedCallback:buttonClicked];
|
||||
}];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)openPathToThemesCallback:(TDCAlertResponse)returnCode withOriginalAlert:(NSAlert *)originalAlert
|
||||
{
|
||||
NSParameterAssert(originalAlert != nil);
|
||||
@@ -1702,19 +1540,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
if (returnCode == TDCAlertResponseOther) {
|
||||
[originalAlert.window orderOut:nil];
|
||||
|
||||
BOOL copyingToCloud = NO;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if (sharedCloudManager().ubiquitousContainerIsAvailable) {
|
||||
copyingToCloud = YES;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (copyingToCloud) {
|
||||
[themeController() copyActiveThemeToDestinationLocation:TPCThemeStorageLocationCloud reloadOnCopy:YES openOnCopy:YES];
|
||||
} else {
|
||||
[themeController() copyActiveThemeToDestinationLocation:TPCThemeStorageLocationCustom reloadOnCopy:YES openOnCopy:YES];
|
||||
}
|
||||
[themeController() copyActiveThemeToDestinationLocation:TPCThemeStorageLocationCustom reloadOnCopy:YES openOnCopy:YES];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1744,10 +1570,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[RZWorkspace() openURL:fileURL];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Cloud Work
|
||||
|
||||
- (void)onCloudSyncControllerDidChangeThemeName:(NSNotification *)aNote
|
||||
- (void)onThemeListDidChange:(NSNotification *)aNote
|
||||
{
|
||||
[self updateThemeSelection];
|
||||
}
|
||||
|
||||
@@ -116,7 +116,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, weak) IBOutlet NSButton *editAddressBookEntryButton;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *editChannelButton;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *editHighlightButton;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *excludedFromCloudSyncingCheck;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *hideAutojoinDelayedWarningsCheck;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *performDisconnectOnPongTimerCheck;
|
||||
@property (nonatomic, weak) IBOutlet NSButton *pongTimerCheck;
|
||||
@@ -175,17 +174,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, copy, nullable) NSString *lastServerAddressValue;
|
||||
@property (nonatomic, copy, nullable) IRCServer *previousPrimaryServer;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@property (nonatomic, assign) BOOL requestRemovalFromCloudOnClose;
|
||||
#endif
|
||||
|
||||
- (IBAction)proxyTypeChanged:(id)sender;
|
||||
- (IBAction)toggleAdvancedEncodings:(id)sender;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (IBAction)toggleCloudSyncExclusion:(id)sender;
|
||||
#endif
|
||||
|
||||
- (IBAction)addChannel:(id)sender;
|
||||
- (IBAction)editChannel:(id)sender;
|
||||
- (IBAction)deleteChannel:(id)sender;
|
||||
@@ -709,14 +700,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[self.delegate serverPropertiesSheet:self onOk:[self.config copy]];
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if (self.requestRemovalFromCloudOnClose) {
|
||||
if ([self.delegate respondsToSelector:@selector(serverPropertiesSheet:removeClientFromCloud:)]) {
|
||||
[self.delegate serverPropertiesSheet:self removeClientFromCloud:self.clientId];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
[super ok:nil];
|
||||
}
|
||||
|
||||
@@ -909,10 +892,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
self.autoReconnectCheck.state = self.config.autoReconnect;
|
||||
self.autoDisconnectOnSleepCheck.state = self.config.autoSleepModeDisconnect;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
self.excludedFromCloudSyncingCheck.state = self.config.excludedFromCloudSyncing;
|
||||
#endif
|
||||
|
||||
/* ZNC Bouncer */
|
||||
self.zncIgnoreConfiguredAutojoinCheck.state = self.config.zncIgnoreConfiguredAutojoin;
|
||||
self.zncIgnorePlaybackNotificationsCheck.state = self.config.zncIgnorePlaybackNotifications;
|
||||
@@ -1073,10 +1052,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
self.config.autoReconnect = (self.autoReconnectCheck.state == NSControlStateValueOn);
|
||||
self.config.autoSleepModeDisconnect = (self.autoDisconnectOnSleepCheck.state == NSControlStateValueOn);
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
self.config.excludedFromCloudSyncing = (self.excludedFromCloudSyncingCheck.state == NSControlStateValueOn);
|
||||
#endif
|
||||
|
||||
/* ZNC Bouncer */
|
||||
self.config.zncIgnoreConfiguredAutojoin = (self.zncIgnoreConfiguredAutojoinCheck.state == NSControlStateValueOn);
|
||||
self.config.zncIgnorePlaybackNotifications = (self.zncIgnorePlaybackNotificationsCheck.state == NSControlStateValueOn);
|
||||
@@ -1469,38 +1444,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[self.fallbackEncodingButton selectItemWithTitle:fallbackEncoding];
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (void)toggleCloudSyncExclusion:(id)sender
|
||||
{
|
||||
if (self.clientId == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.excludedFromCloudSyncingCheck.state == NSControlStateValueOn)
|
||||
{
|
||||
NSWindow *window = self.sheet;
|
||||
|
||||
[TDCAlert alertSheetWithWindow:window
|
||||
body:TXTLS(@"TDCServerPropertiesSheet[sqc-nw]")
|
||||
title:TXTLS(@"TDCServerPropertiesSheet[x08-ko]")
|
||||
defaultButton:TXTLS(@"Prompts[mvh-ms]")
|
||||
alternateButton:TXTLS(@"Prompts[99q-gg]")
|
||||
otherButton:nil
|
||||
completionBlock:^(TDCAlertResponse buttonClicked, BOOL suppressed, id underlyingAlert) {
|
||||
if (buttonClicked == TDCAlertResponseAlternate) {
|
||||
self.requestRemovalFromCloudOnClose = NO;
|
||||
} else {
|
||||
self.requestRemovalFromCloudOnClose = YES;
|
||||
}
|
||||
}];
|
||||
}
|
||||
else // state == NSControlStateValueOn
|
||||
{
|
||||
self.requestRemovalFromCloudOnClose = NO;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)preferredInternetProtocolChanged:(id)sender
|
||||
{
|
||||
TEXTUAL_IGNORE_DEPRECATION_BEGIN
|
||||
|
||||
@@ -51,11 +51,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (readonly) BOOL autoReconnect;
|
||||
@property (readonly) BOOL autoSleepModeDisconnect;
|
||||
@property (readonly) BOOL autojoinWaitsForNickServ;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@property (readonly) BOOL excludedFromCloudSyncing;
|
||||
#endif
|
||||
|
||||
@property (readonly) BOOL hideAutojoinDelayedWarnings;
|
||||
@property (readonly) BOOL hideNetworkUnavailabilityNotices;
|
||||
@property (readonly) BOOL performDisconnectOnPongTimer;
|
||||
@@ -117,11 +112,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, assign, readwrite) BOOL autoReconnect;
|
||||
@property (nonatomic, assign, readwrite) BOOL autoSleepModeDisconnect;
|
||||
@property (nonatomic, assign, readwrite) BOOL autojoinWaitsForNickServ;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@property (nonatomic, assign, readwrite) BOOL excludedFromCloudSyncing;
|
||||
#endif
|
||||
|
||||
@property (nonatomic, assign, readwrite) BOOL hideAutojoinDelayedWarnings;
|
||||
@property (nonatomic, assign, readwrite) BOOL hideNetworkUnavailabilityNotices;
|
||||
@property (nonatomic, assign, readwrite) BOOL performDisconnectOnPongTimer;
|
||||
|
||||
@@ -47,11 +47,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
BOOL _autoSleepModeDisconnect;
|
||||
BOOL _autojoinWaitsForNickServ;
|
||||
BOOL _connectionPrefersIPv4;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
BOOL _excludedFromCloudSyncing;
|
||||
#endif
|
||||
|
||||
BOOL _hideAutojoinDelayedWarnings;
|
||||
BOOL _hideNetworkUnavailabilityNotices;
|
||||
BOOL _performDisconnectOnPongTimer;
|
||||
|
||||
@@ -58,7 +58,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (void)updateConfig:(IRCChannelConfig *)config fireChangedNotification:(BOOL)fireChangedNotification updateStoredChannelList:(BOOL)updateStoredChannelList;
|
||||
|
||||
- (NSDictionary<NSString *, id> *)configurationDictionary;
|
||||
- (NSDictionary<NSString *, id> *)configurationDictionaryForCloud;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION == 1
|
||||
- (void)noteEncryptionStateDidChange;
|
||||
|
||||
@@ -67,10 +67,7 @@ enum {
|
||||
- (void)updateConfig:(IRCClientConfig *)config;
|
||||
- (void)updateConfig:(IRCClientConfig *)config updateSelection:(BOOL)updateSelection;
|
||||
|
||||
- (void)updateConfigFromTheCloud:(IRCClientConfig *)config;
|
||||
|
||||
- (NSDictionary<NSString *, id> *)configurationDictionary;
|
||||
- (NSDictionary<NSString *, id> *)configurationDictionaryForCloud;
|
||||
|
||||
- (void)addChannel:(IRCChannel *)channel;
|
||||
- (void)addChannel:(IRCChannel *)channel atPosition:(NSUInteger)position;
|
||||
|
||||
@@ -67,7 +67,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (IRCChannel *)createPrivateMessage:(NSString *)nickname onClient:(IRCClient *)client asType:(IRCChannelType)type;
|
||||
|
||||
- (void)destroyClient:(IRCClient *)client skipCloud:(BOOL)skipCloud;
|
||||
- (void)destroyClient:(IRCClient *)client;
|
||||
|
||||
- (void)destroyChannel:(IRCChannel *)channel reload:(BOOL)reload;
|
||||
- (void)destroyChannel:(IRCChannel *)channel reload:(BOOL)reload part:(BOOL)partChannel;
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "IRCWorld.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
TEXTUAL_EXTERN NSString * const IRCWorldControllerCloudClientItemDefaultsKeyPrefix;
|
||||
TEXTUAL_EXTERN NSString * const IRCWorldControllerCloudListOfDeletedClientsDefaultsKey;
|
||||
|
||||
@interface IRCWorld (IRCWorldCloudExtension)
|
||||
- (NSDictionary<NSString *, id> *)cloud_clientConfigurations;
|
||||
|
||||
- (void)cloud_destroyClient:(IRCClient *)client;
|
||||
|
||||
- (void)cloud_addClientToListOfDeletedClients:(NSString *)clientId;
|
||||
- (void)cloud_removeClientFromListOfDeletedClients:(NSString *)clientId;
|
||||
|
||||
- (void)cloud_processDeletedClientsList:(NSArray<NSString *> *)deletedClients;
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -44,7 +44,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
+ (void)purchaseUpgradeForLicense:(NSString *)licenseKey;
|
||||
+ (void)learnMore;
|
||||
+ (void)openStandaloneStore;
|
||||
+ (void)openMacAppStore;
|
||||
@end
|
||||
#endif
|
||||
|
||||
|
||||
@@ -65,7 +65,6 @@ typedef NS_ENUM(NSUInteger, TLOLicenseUpgradeEligibility) {
|
||||
- (void)upgradeEligibilitySheetContactSupport:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
- (void)upgradeEligibilitySheetActivateLicense:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
- (void)upgradeEligibilitySheetPurchaseUpgrade:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
- (void)upgradeEligibilitySheetPurchaseMacAppStore:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
- (void)upgradeEligibilitySheetPurchaseStandalone:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
- (void)upgradeEligibilitySheetChanged:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
- (void)upgradeEligibilitySheetWillClose:(TDCLicenseUpgradeEligibilitySheet *)sender;
|
||||
|
||||
@@ -77,10 +77,6 @@ typedef NS_ENUM(NSUInteger, TDCServerPropertiesSheetSelection) {
|
||||
|
||||
- (void)serverPropertiesSheet:(TDCServerPropertiesSheet *)sender onOk:(IRCClientConfig *)config;
|
||||
- (void)serverPropertiesSheetWillClose:(TDCServerPropertiesSheet *)sender;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (void)serverPropertiesSheet:(TDCServerPropertiesSheet *)sender removeClientFromCloud:(NSString *)clientId;
|
||||
#endif
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "TPCPreferencesCloudSyncExtension.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@interface TPCPreferences (TPCPreferencesCloudSyncPrivate)
|
||||
+ (void)setSyncPreferencesToTheCloud:(BOOL)syncPreferencesToTheCloud;
|
||||
|
||||
+ (void)fixThemeNameMissingDuringSync;
|
||||
+ (void)fixThemeFontNameMissingDuringSync;
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,61 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "TPCPreferencesCloudSync.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@interface TPCPreferencesCloudSync ()
|
||||
- (BOOL)isTerminated;
|
||||
|
||||
- (void)setValue:(nullable id)value forKey:(NSString *)key;
|
||||
|
||||
- (void)removeObjectForKey:(NSString *)key;
|
||||
- (void)removeObjectForKeyNextUpstreamSync:(NSString *)key;
|
||||
|
||||
- (void)resetDataToSync;
|
||||
|
||||
- (void)syncEverythingNextSync;
|
||||
|
||||
- (void)synchronizeFromCloud;
|
||||
|
||||
- (void)purgeDataStoredWithCloud;
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -43,9 +43,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
+ (void)import:(id)object withKey:(NSString *)key;
|
||||
|
||||
+ (void)importContentsOfDictionary:(NSDictionary<NSString *, id> *)aDict;
|
||||
+ (void)importClientConfiguration:(NSDictionary<NSString *, id> *)config isImportedFromCloud:(BOOL)isImportedFromCloud;
|
||||
|
||||
+ (NSDictionary<NSString *, id> *)exportedPreferencesDictionaryForCloud;
|
||||
+ (void)importClientConfiguration:(NSDictionary<NSString *, id> *)config;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -46,13 +46,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (void)load;
|
||||
- (void)reload;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
/* We should probably do this internally by monitoring for
|
||||
a notification that access to the cloud container changed,
|
||||
but I don't want to touch the iCloud code. It's gross. */
|
||||
- (void)reloadThemeMonitoring;
|
||||
#endif
|
||||
|
||||
- (void)recreateTemporaryCopyOfThemeIfNecessary;
|
||||
|
||||
- (void)copyActiveThemeToDestinationLocation:(TPCThemeStorageLocation)destinationLocation reloadOnCopy:(BOOL)reloadOnCopy openOnCopy:(BOOL)openOnCopy;
|
||||
|
||||
@@ -88,7 +88,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (IBAction)manageLicense:(id)sender;
|
||||
|
||||
- (IBAction)openStandaloneStoreWebpage:(id)sender;
|
||||
- (IBAction)openMacAppStoreWebpage:(id)sender;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -44,7 +44,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
#define sharedNotificationController() [TXSharedApplication sharedNotificationController]
|
||||
|
||||
#define sharedPluginManager() [TXSharedApplication sharedPluginManager]
|
||||
#define sharedCloudManager() [TXSharedApplication sharedCloudSyncManager]
|
||||
|
||||
@class OELReachability;
|
||||
@class THOPluginManager;
|
||||
@@ -53,10 +52,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@class TVCLogControllerPrintingOperationQueue;
|
||||
@class TXWindowController;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@class TPCPreferencesCloudSync;
|
||||
#endif
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION == 1
|
||||
@class TLOEncryptionManager;
|
||||
#endif
|
||||
@@ -66,10 +61,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
#endif
|
||||
|
||||
@interface TXSharedApplication ()
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
+ (TPCPreferencesCloudSync *)sharedCloudSyncManager;
|
||||
#endif
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ADVANCED_ENCRYPTION == 1
|
||||
+ (TLOEncryptionManager *)sharedEncryptionManager;
|
||||
#endif
|
||||
|
||||
@@ -117,18 +117,4 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (readonly, class, copy, nullable) NSURL *userPreferencesURL;
|
||||
@end
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@interface TPCPathInfo (TPCPathInfoCloudExtension)
|
||||
@property (readonly, class, copy, nullable) NSString *applicationUbiquitousContainer;
|
||||
@property (readonly, class, copy, nullable) NSURL *applicationUbiquitousContainerURL;
|
||||
|
||||
+ (void)openApplicationUbiquitousContainer;
|
||||
|
||||
@property (readonly, class, copy, nullable) NSString *cloudCustomThemes;
|
||||
@property (readonly, class, copy, nullable) NSURL *cloudCustomThemesURL;
|
||||
|
||||
+ (void)openCloudCustomThemes;
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@interface TPCPreferencesCloudSync : NSObject
|
||||
- (nullable id)valueForKey:(NSString *)key;
|
||||
|
||||
@property (readonly, copy, nullable) NSURL *ubiquitousContainerURL;
|
||||
@property (readonly, copy, nullable) NSString *ubiquitousContainerPath;
|
||||
|
||||
@property (readonly) BOOL ubiquitousContainerIsAvailable;
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,55 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "TPCPreferences.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
TEXTUAL_EXTERN NSString * const TPCPreferencesCloudSyncServicesEnabledDefaultsKey;
|
||||
TEXTUAL_EXTERN NSString * const TPCPreferencesCloudSyncServicesLimitedToServersDefaultsKey;
|
||||
|
||||
TEXTUAL_EXTERN NSNotificationName const TPCPreferencesCloudSyncDidChangeThemeFontNotification;
|
||||
TEXTUAL_EXTERN NSNotificationName const TPCPreferencesCloudSyncDidChangeThemeNameNotification;
|
||||
|
||||
@interface TPCPreferences (TPCPreferencesCloudSync)
|
||||
+ (BOOL)syncPreferencesToTheCloud;
|
||||
+ (BOOL)syncPreferencesToTheCloudLimitedToServers;
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -53,8 +53,7 @@ typedef NS_ENUM(NSUInteger, TPCThemeAppearanceType) {
|
||||
typedef NS_ENUM(NSUInteger, TPCThemeStorageLocation) {
|
||||
TPCThemeStorageLocationUnknown = 0,
|
||||
TPCThemeStorageLocationBundle,
|
||||
TPCThemeStorageLocationCustom,
|
||||
TPCThemeStorageLocationCloud
|
||||
TPCThemeStorageLocationCustom
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSUInteger, TPCThemeSettingsNicknameColorStyle) {
|
||||
|
||||
@@ -40,9 +40,6 @@
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
TEXTUAL_EXTERN NSString * const TPCThemeControllerCloudThemeNameBasicPrefix;
|
||||
TEXTUAL_EXTERN NSString * const TPCThemeControllerCloudThemeNameCompletePrefix;
|
||||
|
||||
TEXTUAL_EXTERN NSString * const TPCThemeControllerCustomThemeNameBasicPrefix;
|
||||
TEXTUAL_EXTERN NSString * const TPCThemeControllerCustomThemeNameCompletePrefix;
|
||||
|
||||
|
||||
@@ -221,8 +221,6 @@ enum
|
||||
MTMMHelpKnowledgeBaseMenu = 905, // "Knowledge Base"
|
||||
MTMMHelpKBMenuKnowledgeBaseHome = 9050000, // "Knowledge Base Home"
|
||||
MTMMHelpKBMenuKnowledgeBaseHomeSeparator = 9050001, // "-"
|
||||
MTMMHelpKBMenuUsingICloudWithApp = 9050002, // "Using iCloud with Textual"
|
||||
MTMMHelpKBMenuUsingICloudWithAppSeparator = 9050003, // "-"
|
||||
MTMMHelpKBMenuChatEncryption = 9050004, // "Chat Encryption"
|
||||
MTMMHelpKBMenuCommandReference = 9050005, // "Command Reference"
|
||||
MTMMHelpKBMenuFeatureRequests = 9050006, // "Feature Requests"
|
||||
@@ -447,8 +445,7 @@ enum
|
||||
- (IBAction)onNextHighlight:(id)sender;
|
||||
- (IBAction)onPreviousHighlight:(id)sender;
|
||||
|
||||
- (IBAction)openStandaloneStoreWebpage:(id)sender;
|
||||
- (IBAction)openMacAppStoreWebpage:(id)sender;
|
||||
- (IBAction)openStandaloneStoreWebpage:(id)sender;;
|
||||
|
||||
- (IBAction)openChannelLogs:(id)sender;
|
||||
- (IBAction)openLogLocation:(id)sender;
|
||||
|
||||
@@ -100,8 +100,6 @@
|
||||
/* Preferences */
|
||||
#import "TPCApplicationInfo.h"
|
||||
#import "TPCPathInfo.h"
|
||||
#import "TPCPreferencesCloudSync.h"
|
||||
#import "TPCPreferencesCloudSyncExtension.h"
|
||||
#import "TPCPreferencesImportExport.h"
|
||||
#import "TPCPreferencesLocal.h"
|
||||
#import "TPCPreferencesReload.h"
|
||||
|
||||
@@ -158,11 +158,6 @@ NSString * const IRCChannelConfigurationWasUpdatedNotification = @"IRCChannelCon
|
||||
return [self.config dictionaryValue];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)configurationDictionaryForCloud
|
||||
{
|
||||
return [self.config dictionaryValueForCloud];
|
||||
}
|
||||
|
||||
- (id)copyWithZone:(nullable NSZone *)zone
|
||||
{
|
||||
/* Implement this method to allow channel to be
|
||||
|
||||
@@ -189,20 +189,20 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (NSDictionary<NSString *, id> *)dictionaryValue
|
||||
{
|
||||
return [self _dictionaryValueForCopyOperation:NO isCloudDictionary:NO];
|
||||
return [self _dictionaryValueForCopyOperation:NO];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)dictionaryValueForCloud
|
||||
{
|
||||
return [self _dictionaryValueForCopyOperation:NO isCloudDictionary:YES];
|
||||
return [self _dictionaryValueForCopyOperation:NO];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)dictionaryValueForCopy
|
||||
{
|
||||
return [self _dictionaryValueForCopyOperation:YES isCloudDictionary:NO];
|
||||
return [self _dictionaryValueForCopyOperation:YES];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)_dictionaryValueForCopyOperation:(BOOL)isCopyOperation isCloudDictionary:(BOOL)isCloudDictionary
|
||||
- (NSDictionary<NSString *, id> *)_dictionaryValueForCopyOperation:(BOOL)isCopyOperation
|
||||
{
|
||||
NSMutableDictionary<NSString *, id> *dic = [NSMutableDictionary dictionary];
|
||||
|
||||
|
||||
@@ -85,7 +85,6 @@
|
||||
#import "GCDAsyncSocketExtensions.h"
|
||||
#import "TPCApplicationInfo.h"
|
||||
#import "TPCPathInfo.h"
|
||||
#import "TPCPreferencesCloudSyncExtension.h"
|
||||
#import "TPCPreferencesLocalPrivate.h"
|
||||
#import "TPCPreferencesUserDefaults.h"
|
||||
#import "TPCResourceManager.h"
|
||||
@@ -153,7 +152,6 @@
|
||||
#import "IRCUserPrivate.h"
|
||||
#import "IRCUserRelationsPrivate.h"
|
||||
#import "IRCWorldPrivate.h"
|
||||
#import "IRCWorldPrivateCloudExtension.h"
|
||||
#import "IRCClientPrivate.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
@@ -410,40 +408,12 @@ NSString * const IRCClientUserNicknameChangedNotification = @"IRCClientUserNickn
|
||||
[self cancelPerformRequests];
|
||||
}
|
||||
|
||||
- (void)updateConfigFromTheCloud:(IRCClientConfig *)config
|
||||
{
|
||||
NSParameterAssert(config != nil);
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
IRCClientConfig *currentConfig = self.config;
|
||||
#endif
|
||||
|
||||
[self updateConfig:config updateSelection:YES importingFromCloud:YES];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.config.excludedFromCloudSyncing != currentConfig.excludedFromCloudSyncing &&
|
||||
self.config.excludedFromCloudSyncing == NO)
|
||||
{
|
||||
[worldController() cloud_removeClientFromListOfDeletedClients:self.uniqueIdentifier];
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)updateConfig:(IRCClientConfig *)config
|
||||
{
|
||||
[self updateConfig:config updateSelection:YES];
|
||||
}
|
||||
|
||||
- (void)updateConfig:(IRCClientConfig *)config updateSelection:(BOOL)updateSelection
|
||||
{
|
||||
[self updateConfig:config updateSelection:updateSelection importingFromCloud:NO];
|
||||
}
|
||||
|
||||
- (void)updateConfig:(IRCClientConfig *)config updateSelection:(BOOL)updateSelection importingFromCloud:(BOOL)importingFromCloud
|
||||
{
|
||||
NSParameterAssert(config != nil);
|
||||
|
||||
@@ -463,16 +433,7 @@ NSString * const IRCClientUserNicknameChangedNotification = @"IRCClientUserNickn
|
||||
return;
|
||||
}
|
||||
|
||||
/* Populate new configuration */
|
||||
/* Some configuration properties (such as -identityClientSideCertificate) cannot be synced
|
||||
between devices. So that this property is not lost when importing a configuration from
|
||||
iCloud that is missing it, the configurations are merged, instead of copying.
|
||||
This process has overhead which means its only used for cloud imports. */
|
||||
if (importingFromCloud) {
|
||||
self.config = [IRCClientConfig newConfigByMerging:currentConfig with:config];
|
||||
} else {
|
||||
self.config = config;
|
||||
}
|
||||
self.config = config;
|
||||
|
||||
/* Update channel list */
|
||||
{
|
||||
@@ -684,13 +645,6 @@ NSString * const IRCClientUserNicknameChangedNotification = @"IRCClientUserNickn
|
||||
return [self.config dictionaryValue];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)configurationDictionaryForCloud
|
||||
{
|
||||
[self updateStoredConfiguration];
|
||||
|
||||
return [self.config dictionaryValueForCloud];
|
||||
}
|
||||
|
||||
- (void)prepareForApplicationTermination
|
||||
{
|
||||
self.isTerminating = YES;
|
||||
@@ -4034,11 +3988,6 @@ NSString * const IRCClientUserNicknameChangedNotification = @"IRCClientUserNickn
|
||||
NSString *buildScheme = [TPCApplicationInfo applicationBuildScheme];
|
||||
|
||||
NSString *downloadSource = @""; // Assume standalone by default
|
||||
|
||||
if ([buildScheme isEqualToString:@"appstore"]) {
|
||||
downloadSource = TXTLS(@"IRC[9fp-8h]");
|
||||
}
|
||||
|
||||
NSString *buildType = @""; // Assume universal binary by default
|
||||
|
||||
#if TEXTUAL_BUILT_AS_UNIVERSAL_BINARY == 0
|
||||
|
||||
@@ -85,7 +85,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
defaults[@"cachedLastServerTimeCapabilityReceivedAtTimestamp"] = @(0);
|
||||
defaults[@"cipherSuites"] = @(RCMCipherSuiteCollectionDefault);
|
||||
defaults[@"connectionName"] = TXTLS(@"BasicLanguage[vfu-c0]");
|
||||
defaults[@"excludedFromCloudSyncing"] = @(NO);
|
||||
defaults[@"fallbackEncoding"] = @(TXDefaultFallbackStringEncoding);
|
||||
defaults[@"floodControlDelayTimerInterval"] = @(IRCConnectionConfigFloodControlDefaultDelayInterval);
|
||||
defaults[@"floodControlMaximumMessages"] = @(IRCConnectionConfigFloodControlDefaultMessageCount);
|
||||
@@ -288,11 +287,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[defaultsMutable assignBoolTo:&self->_autoReconnect forKey:@"autoReconnect"];
|
||||
[defaultsMutable assignBoolTo:&self->_autoSleepModeDisconnect forKey:@"autoSleepModeDisconnect"];
|
||||
[defaultsMutable assignBoolTo:&self->_autojoinWaitsForNickServ forKey:@"autojoinWaitsForNickServ"];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[defaultsMutable assignBoolTo:&self->_excludedFromCloudSyncing forKey:@"excludedFromCloudSyncing"];
|
||||
#endif
|
||||
|
||||
[defaultsMutable assignBoolTo:&self->_hideAutojoinDelayedWarnings forKey:@"hideAutojoinDelayedWarnings"];
|
||||
[defaultsMutable assignBoolTo:&self->_hideNetworkUnavailabilityNotices forKey:@"hideNetworkUnavailabilityNotices"];
|
||||
[defaultsMutable assignBoolTo:&self->_performDisconnectOnPongTimer forKey:@"performDisconnectOnPongTimer"];
|
||||
@@ -679,20 +673,20 @@ TEXTUAL_IGNORE_DEPRECATION_END
|
||||
|
||||
- (NSDictionary<NSString *, id> *)dictionaryValue
|
||||
{
|
||||
return [self _dictionaryValueForCopyOperation:NO isCloudDictionary:NO];
|
||||
return [self _dictionaryValueForCopyOperation:NO];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)dictionaryValueForCloud
|
||||
{
|
||||
return [self _dictionaryValueForCopyOperation:NO isCloudDictionary:YES];
|
||||
return [self _dictionaryValueForCopyOperation:NO];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)dictionaryValueForCopy
|
||||
{
|
||||
return [self _dictionaryValueForCopyOperation:YES isCloudDictionary:NO];
|
||||
return [self _dictionaryValueForCopyOperation:YES];
|
||||
}
|
||||
|
||||
- (NSDictionary<NSString *, id> *)_dictionaryValueForCopyOperation:(BOOL)isCopyOperation isCloudDictionary:(BOOL)isCloudDictionary
|
||||
- (NSDictionary<NSString *, id> *)_dictionaryValueForCopyOperation:(BOOL)isCopyOperation
|
||||
{
|
||||
NSMutableDictionary<NSString *, id> *dic = [NSMutableDictionary dictionary];
|
||||
|
||||
@@ -715,11 +709,6 @@ TEXTUAL_IGNORE_DEPRECATION_END
|
||||
[dic setBool:self.autoReconnect forKey:@"autoReconnect"];
|
||||
[dic setBool:self.autoSleepModeDisconnect forKey:@"autoSleepModeDisconnect"];
|
||||
[dic setBool:self.autojoinWaitsForNickServ forKey:@"autojoinWaitsForNickServ"];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[dic setBool:self.excludedFromCloudSyncing forKey:@"excludedFromCloudSyncing"];
|
||||
#endif
|
||||
|
||||
[dic setBool:self.hideAutojoinDelayedWarnings forKey:@"hideAutojoinDelayedWarnings"];
|
||||
[dic setBool:self.hideNetworkUnavailabilityNotices forKey:@"hideNetworkUnavailabilityNotices"];
|
||||
[dic setBool:self.performDisconnectOnPongTimer forKey:@"performDisconnectOnPongTimer"];
|
||||
@@ -747,13 +736,11 @@ TEXTUAL_IGNORE_DEPRECATION_END
|
||||
|
||||
/* These are items that cannot be synced over iCloud because they access data specific to
|
||||
this device or only contain state information which is not useful to other devices. */
|
||||
if (isCloudDictionary == NO) {
|
||||
[dic maybeSetObject:self.identityClientSideCertificate forKey:@"identityClientSideCertificate"];
|
||||
[dic maybeSetObject:self.identityClientSideCertificate forKey:@"identityClientSideCertificate"];
|
||||
|
||||
[dic setBool:self.sidebarItemExpanded forKey:@"sidebarItemExpanded"];
|
||||
[dic setBool:self.sidebarItemExpanded forKey:@"sidebarItemExpanded"];
|
||||
|
||||
[dic setDouble:self.lastMessageServerTime forKey:@"cachedLastServerTimeCapabilityReceivedAtTimestamp"];
|
||||
}
|
||||
[dic setDouble:self.lastMessageServerTime forKey:@"cachedLastServerTimeCapabilityReceivedAtTimestamp"];
|
||||
|
||||
/* Deprecated */
|
||||
/* These values are inserted here for backwards compatibility
|
||||
@@ -1014,11 +1001,6 @@ TEXTUAL_IGNORE_DEPRECATION_END
|
||||
@dynamic cipherSuites;
|
||||
@dynamic connectionName;
|
||||
@dynamic connectionPrefersIPv4;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@dynamic excludedFromCloudSyncing;
|
||||
#endif
|
||||
|
||||
@dynamic fallbackEncoding;
|
||||
@dynamic floodControlDelayTimerInterval;
|
||||
@dynamic floodControlMaximumMessages;
|
||||
@@ -1103,15 +1085,6 @@ TEXTUAL_IGNORE_DEPRECATION_END
|
||||
TEXTUAL_DEPRECATED_WARNING
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (void)setExcludedFromCloudSyncing:(BOOL)excludedFromCloudSyncing
|
||||
{
|
||||
if (self->_excludedFromCloudSyncing != excludedFromCloudSyncing) {
|
||||
self->_excludedFromCloudSyncing = excludedFromCloudSyncing;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)setHideAutojoinDelayedWarnings:(BOOL)hideAutojoinDelayedWarnings
|
||||
{
|
||||
if (self->_hideAutojoinDelayedWarnings != hideAutojoinDelayedWarnings) {
|
||||
|
||||
@@ -66,15 +66,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
acknowledgements — Open acknowledgements file
|
||||
activate-license — Activate a license key
|
||||
application-support-folder — Open the Application Support folder
|
||||
appstore-page — Open our Mac App Store page
|
||||
contributors — Open contributors file
|
||||
custom-scripts-folder – Open the custom scripts storage location folder
|
||||
custom-style-folder — Open the custom style storage location folder
|
||||
custom-styles-folder — Open the custom style storage location folder
|
||||
diagnostic-reports-folder — System diagnostic reports folder
|
||||
goto — Navigate to an item
|
||||
icloud-style-folder — Open the custom style storage location folder on iCloud
|
||||
icloud-styles-folder — Open the custom style storage location folder on iCloud
|
||||
knowledge-base — Open the homepage of our knowledge base
|
||||
newsletter — Open the subscription page for the newsletter
|
||||
support-channel — Connect to the #textual channel
|
||||
@@ -97,10 +94,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
#endif
|
||||
|
||||
else if ([action isEqualToString:@"appstore-page"])
|
||||
{
|
||||
[menuController() openMacAppStoreWebpage:nil];
|
||||
}
|
||||
else if ([action isEqualToString:@"application-support-folder"])
|
||||
{
|
||||
[RZWorkspace() openURL:[TPCPathInfo groupContainerApplicationSupportURL]];
|
||||
@@ -131,13 +124,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
[menuController() navigateToTreeItemAtURL:url];
|
||||
}
|
||||
else if ([action isEqualToString:@"icloud-style-folder"] ||
|
||||
[action isEqualToString:@"icloud-styles-folder"])
|
||||
{
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
[TPCPathInfo openCloudCustomThemes];
|
||||
#endif
|
||||
}
|
||||
else if ([action isEqualToString:@"knowledge-base"])
|
||||
{
|
||||
[TLOpenLink openWithString:@"https://help.codeux.com/textual/" inBackground:NO];
|
||||
|
||||
@@ -52,7 +52,6 @@
|
||||
#import "IRCServer.h"
|
||||
#import "IRCTreeItemPrivate.h"
|
||||
#import "IRCWorldPrivate.h"
|
||||
#import "IRCWorldPrivateCloudExtension.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@@ -659,11 +658,6 @@ NSString * const IRCWorldWillDestroyChannelNotification = @"IRCWorldWillDestroyC
|
||||
}
|
||||
|
||||
- (void)destroyClient:(IRCClient *)client
|
||||
{
|
||||
[self destroyClient:client skipCloud:NO];
|
||||
}
|
||||
|
||||
- (void)destroyClient:(IRCClient *)client skipCloud:(BOOL)skipCloud
|
||||
{
|
||||
NSParameterAssert(client != nil);
|
||||
|
||||
@@ -674,7 +668,7 @@ NSString * const IRCWorldWillDestroyChannelNotification = @"IRCWorldWillDestroyC
|
||||
__weak IRCClient *weakClient = client;
|
||||
|
||||
client.disconnectCallback = ^{
|
||||
[weakSelf destroyClient:weakClient skipCloud:skipCloud];
|
||||
[weakSelf destroyClient:weakClient];
|
||||
};
|
||||
|
||||
[client quit];
|
||||
@@ -688,12 +682,6 @@ NSString * const IRCWorldWillDestroyChannelNotification = @"IRCWorldWillDestroyC
|
||||
|
||||
[client prepareForPermanentDestruction];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if (skipCloud == NO) {
|
||||
[self cloud_destroyClient:client];
|
||||
}
|
||||
#endif
|
||||
|
||||
@try {
|
||||
[mainWindowServerList() removeItemFromList:client];
|
||||
}
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "TPCPreferencesCloudSyncExtension.h"
|
||||
#import "TPCPreferencesCloudSyncPrivate.h"
|
||||
#import "IRCClientConfig.h"
|
||||
#import "IRCClientPrivate.h"
|
||||
#import "IRCWorldPrivate.h"
|
||||
#import "IRCWorldPrivateCloudExtension.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
NSString * const IRCWorldControllerCloudListOfDeletedClientsDefaultsKey = @"World Controller -> Cloud Deleted Clients";
|
||||
NSString * const IRCWorldControllerCloudClientItemDefaultsKeyPrefix = @"World Controller -> Cloud Synced Client -> ";
|
||||
|
||||
@implementation IRCWorld (IRCWorldCloudExtension)
|
||||
|
||||
- (NSDictionary<NSString *, id> *)cloud_clientConfigurations
|
||||
{
|
||||
NSMutableDictionary<NSString *, id> *dic = [NSMutableDictionary dictionary];
|
||||
|
||||
for (IRCClient *u in self.clientList) {
|
||||
if (u.config.excludedFromCloudSyncing) {
|
||||
continue;
|
||||
}
|
||||
|
||||
NSDictionary *dictionaryValue = [u configurationDictionaryForCloud];
|
||||
|
||||
NSString *dictionaryKey = [IRCWorldControllerCloudClientItemDefaultsKeyPrefix stringByAppendingString:u.uniqueIdentifier];
|
||||
|
||||
dic[dictionaryKey] = dictionaryValue;
|
||||
}
|
||||
|
||||
return [dic copy];
|
||||
}
|
||||
|
||||
- (void)cloud_destroyClient:(IRCClient *)client
|
||||
{
|
||||
NSParameterAssert(client != nil);
|
||||
|
||||
if (client.config.excludedFromCloudSyncing) {
|
||||
return;
|
||||
}
|
||||
|
||||
[self cloud_addClientToListOfDeletedClients:client.uniqueIdentifier];
|
||||
|
||||
[self cloud_removeClientConfigurationCloudEntry:client.uniqueIdentifier];
|
||||
}
|
||||
|
||||
- (void)cloud_addClientToListOfDeletedClients:(NSString *)clientId
|
||||
{
|
||||
NSParameterAssert(clientId != nil);
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray *deletedClients = [sharedCloudManager() valueForKey:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey];
|
||||
|
||||
if (deletedClients == nil) {
|
||||
deletedClients = @[clientId];
|
||||
} else {
|
||||
if ([deletedClients containsObject:clientId]) {
|
||||
return;
|
||||
}
|
||||
|
||||
deletedClients = [deletedClients arrayByAddingObject:clientId];
|
||||
}
|
||||
|
||||
[sharedCloudManager() setValue:deletedClients forKey:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey];
|
||||
}
|
||||
|
||||
/* If a client set locally was set to not be synced from the cloud, but its UUID appears as a
|
||||
deleted item from another client, then remove that UUID from the deleted clients list if that
|
||||
client is again set to sync to the cloud. */
|
||||
- (void)cloud_removeClientFromListOfDeletedClients:(NSString *)clientId
|
||||
{
|
||||
NSParameterAssert(clientId != nil);
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSArray *deletedClients = [sharedCloudManager() valueForKey:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey];
|
||||
|
||||
if (deletedClients) {
|
||||
NSUInteger clientIndex = [deletedClients indexOfObject:clientId];
|
||||
|
||||
if (clientIndex == NSNotFound) {
|
||||
return;
|
||||
}
|
||||
|
||||
deletedClients = [deletedClients arrayByRemovingObjectAtIndex:clientIndex];
|
||||
|
||||
[sharedCloudManager() setValue:deletedClients forKey:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)cloud_removeClientConfigurationCloudEntry:(NSString *)clientId
|
||||
{
|
||||
NSParameterAssert(clientId != nil);
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *prefKey = [IRCWorldControllerCloudClientItemDefaultsKeyPrefix stringByAppendingString:clientId];
|
||||
|
||||
[sharedCloudManager() removeObjectForKey:prefKey];
|
||||
}
|
||||
|
||||
- (void)cloud_processDeletedClientsList:(NSArray<NSString *> *)deletedClients
|
||||
{
|
||||
NSParameterAssert(deletedClients != nil);
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
[deletedClients enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
|
||||
IRCClient *u = [self findClientWithId:object];
|
||||
|
||||
if (u && u.config.excludedFromCloudSyncing == NO) {
|
||||
[self destroyClient:u skipCloud:YES];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -40,7 +40,6 @@
|
||||
#import "TDCAlert.h"
|
||||
#import "TLOLocalization.h"
|
||||
#import "TPCPreferencesLocal.h"
|
||||
#import "TPCPreferencesCloudSyncPrivate.h"
|
||||
#import "TPCPreferencesUserDefaults.h"
|
||||
#import "TPCPathInfoPrivate.h"
|
||||
|
||||
@@ -558,83 +557,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark iCloud
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
@implementation TPCPathInfo (TPCPathInfoCloudExtension)
|
||||
|
||||
+ (nullable NSString *)applicationUbiquitousContainer
|
||||
{
|
||||
return sharedCloudManager().ubiquitousContainerPath;
|
||||
}
|
||||
|
||||
+ (nullable NSURL *)applicationUbiquitousContainerURL
|
||||
{
|
||||
return sharedCloudManager().ubiquitousContainerURL;
|
||||
}
|
||||
|
||||
+ (nullable NSString *)cloudCustomThemes
|
||||
{
|
||||
NSURL *sourceURL = self.cloudCustomThemesURL;
|
||||
|
||||
if (sourceURL == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
return sourceURL.path;
|
||||
}
|
||||
|
||||
+ (nullable NSURL *)cloudCustomThemesURL
|
||||
{
|
||||
NSURL *sourceURL = self.applicationUbiquitousContainerURL;
|
||||
|
||||
if (sourceURL == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSURL *baseURL = [sourceURL URLByAppendingPathComponent:@"/Documents/Styles/"];
|
||||
|
||||
[self _createDirectoryAtURL:baseURL];
|
||||
|
||||
return baseURL;
|
||||
}
|
||||
|
||||
+ (void)_openCloudPathOrErrorIfUnavailable:(NSString *)path
|
||||
{
|
||||
NSParameterAssert(path != nil);
|
||||
|
||||
if (sharedCloudManager().ubiquitousContainerIsAvailable == NO) {
|
||||
[TDCAlert alertSheetWithWindow:[NSApp keyWindow]
|
||||
body:TXTLS(@"Prompts[wjn-f1]")
|
||||
title:TXTLS(@"Prompts[rn7-08]")
|
||||
defaultButton:TXTLS(@"Prompts[68u-z9]")
|
||||
alternateButton:nil
|
||||
otherButton:nil];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
[RZWorkspace() openFile:path];
|
||||
}
|
||||
|
||||
+ (void)openApplicationUbiquitousContainer
|
||||
{
|
||||
NSString *sourcePath = self.applicationUbiquitousContainer;
|
||||
|
||||
[self _openCloudPathOrErrorIfUnavailable:sourcePath];
|
||||
}
|
||||
|
||||
+ (void)openCloudCustomThemes
|
||||
{
|
||||
NSString *sourcePath = self.cloudCustomThemes;
|
||||
|
||||
[self _openCloudPathOrErrorIfUnavailable:sourcePath];
|
||||
}
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Transcript URL
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#import "IRCClientConfig.h"
|
||||
#import "IRCClientPrivate.h"
|
||||
#import "IRCWorldPrivate.h"
|
||||
#import "IRCWorldPrivateCloudExtension.h"
|
||||
#import "TXMasterController.h"
|
||||
#import "TDCAlert.h"
|
||||
#import "TLOLocalization.h"
|
||||
@@ -194,7 +193,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}
|
||||
|
||||
[object enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
|
||||
[self importClientConfiguration:object isImportedFromCloud:NO];
|
||||
[self importClientConfiguration:object];
|
||||
}];
|
||||
}
|
||||
else if ([key isEqualToString:@"World Controller"])
|
||||
@@ -209,22 +208,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[self import:clientList withKey:IRCWorldClientListDefaultsKey];
|
||||
}
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
else if ([key hasPrefix:IRCWorldControllerCloudClientItemDefaultsKeyPrefix] ||
|
||||
[key hasPrefix:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey])
|
||||
{
|
||||
; // Ignore key...
|
||||
}
|
||||
#endif
|
||||
|
||||
else
|
||||
{
|
||||
[RZUserDefaults() setObject:object forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)importClientConfiguration:(NSDictionary<NSString *, id> *)config isImportedFromCloud:(BOOL)isImportedFromCloud
|
||||
+ (void)importClientConfiguration:(NSDictionary<NSString *, id> *)config
|
||||
{
|
||||
NSParameterAssert(config != nil);
|
||||
|
||||
@@ -232,20 +222,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
IRCClient *client = [worldController() findClientWithId:clientConfig.uniqueIdentifier];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if (isImportedFromCloud) {
|
||||
if (client && client.config.excludedFromCloudSyncing) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (client) {
|
||||
if (isImportedFromCloud) {
|
||||
[client updateConfigFromTheCloud:clientConfig];
|
||||
} else {
|
||||
[client updateConfig:clientConfig];
|
||||
}
|
||||
[client updateConfig:clientConfig];
|
||||
} else {
|
||||
[worldController() createClientWithConfig:clientConfig reload:YES];
|
||||
}
|
||||
@@ -271,11 +249,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[TPCPreferencesUserDefaults keyIsObsolete:key]);
|
||||
}
|
||||
|
||||
+ (NSDictionary<NSString *, id> *)exportedPreferencesDictionaryForCloud
|
||||
{
|
||||
return [self exportedPreferencesDictionary:YES filterDefaults:NO];
|
||||
}
|
||||
|
||||
+ (NSDictionary<NSString *, id> *)exportedPreferencesDictionary
|
||||
{
|
||||
return [self exportedPreferencesDictionary:YES filterDefaults:YES];
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
#import "TDCProgressIndicatorSheetPrivate.h"
|
||||
#import "TLOLocalization.h"
|
||||
#import "TPCPathInfo.h"
|
||||
#import "TPCPreferencesCloudSync.h"
|
||||
#import "TPCPreferencesLocalPrivate.h"
|
||||
#import "TPCPreferencesReload.h"
|
||||
#import "TPCResourceManager.h"
|
||||
@@ -53,9 +52,6 @@
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSString * const TPCThemeControllerCloudThemeNameBasicPrefix = @"cloud";
|
||||
NSString * const TPCThemeControllerCloudThemeNameCompletePrefix = @"cloud:";
|
||||
|
||||
NSString * const TPCThemeControllerCustomThemeNameBasicPrefix = @"user";
|
||||
NSString * const TPCThemeControllerCustomThemeNameCompletePrefix = @"user:";
|
||||
|
||||
@@ -89,7 +85,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
@property (nonatomic, strong, nullable) TPCThemeControllerCopyOperation *currentCopyOperation;
|
||||
@property (nonatomic, strong) TPCThemeControllerThemeListMutable bundledThemes;
|
||||
@property (nonatomic, strong) TPCThemeControllerThemeListMutable customThemes;
|
||||
@property (nonatomic, strong) TPCThemeControllerThemeListMutable cloudThemes;
|
||||
@property (nonatomic, strong) XRFileSystemMonitor *themeMonitor;
|
||||
@end
|
||||
|
||||
@@ -113,7 +108,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
self.bundledThemes = [NSMutableDictionary dictionary];
|
||||
self.customThemes = [NSMutableDictionary dictionary];
|
||||
self.cloudThemes = [NSMutableDictionary dictionary];
|
||||
|
||||
[self populateThemes];
|
||||
|
||||
@@ -300,12 +294,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
return nil;
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if ([RZFileManager() isUbiquitousItemAtURLDownloaded:url] == NO) {
|
||||
return nil;
|
||||
}
|
||||
#endif
|
||||
|
||||
theme = [[TPCTheme alloc] initWithURL:url inStorageLocation:storageLocation];
|
||||
|
||||
[self addTheme:theme withFilename:name storageLocation:storageLocation];
|
||||
@@ -408,14 +396,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
return [TPCPathInfo customThemes];
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
case TPCThemeStorageLocationCloud:
|
||||
{
|
||||
return [TPCPathInfo cloudCustomThemes];
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
{
|
||||
break;
|
||||
@@ -438,14 +418,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
return self.customThemes;
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
case TPCThemeStorageLocationCloud:
|
||||
{
|
||||
return self.cloudThemes;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
{
|
||||
break;
|
||||
@@ -477,7 +449,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
};
|
||||
|
||||
_addStorageLocation(TPCThemeStorageLocationCustom);
|
||||
_addStorageLocation(TPCThemeStorageLocationCloud);
|
||||
|
||||
__weak TPCThemeController *weakSelf = self;
|
||||
|
||||
@@ -504,15 +475,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
self.themeMonitor = nil;
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
- (void)reloadThemeMonitoring
|
||||
{
|
||||
[self stopMonitoringThemes];
|
||||
|
||||
[self startMonitoringThemes];
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)reactToMonitoringEvents:(NSArray<XRFileSystemEvent *> *)events
|
||||
{
|
||||
NSParameterAssert(events != nil);
|
||||
@@ -603,7 +565,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
[self populateThemesFromStorageLocation:TPCThemeStorageLocationBundle];
|
||||
[self populateThemesFromStorageLocation:TPCThemeStorageLocationCustom];
|
||||
[self populateThemesFromStorageLocation:TPCThemeStorageLocationCloud];
|
||||
}
|
||||
|
||||
- (void)populateThemesFromStorageLocation:(TPCThemeStorageLocation)storageLocation
|
||||
@@ -701,10 +662,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
_mapByName(TPCThemeStorageLocationBundle);
|
||||
_mapByName(TPCThemeStorageLocationCustom);
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
_mapByName(TPCThemeStorageLocationCloud);
|
||||
#endif
|
||||
|
||||
/* Create sorted list of themes */
|
||||
NSArray *themeNamesSorted = themesMappedByName.sortedDictionaryKeys;
|
||||
|
||||
@@ -1064,67 +1021,11 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
} // theme source bundled
|
||||
|
||||
else if ([themeSource isEqualToString:TPCThemeControllerCustomThemeNameBasicPrefix])
|
||||
{
|
||||
/* Even if the current theme is custom and is valid, we still will validate whether
|
||||
a cloud variant of it exists and if it does, prefer that over the custom. */
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
NSString *cloudTheme = [self.class buildFilename:themeName forStorageLocation:TPCThemeStorageLocationCloud];
|
||||
|
||||
if ([self themeExists:cloudTheme]) {
|
||||
/* If the theme exists in the cloud, then we go to that. */
|
||||
if ( suggestedThemeName) {
|
||||
*suggestedThemeName = cloudTheme;
|
||||
|
||||
keyChanged = YES;
|
||||
}
|
||||
} else { // theme exists
|
||||
#endif
|
||||
|
||||
/* If there is no cloud theme, then we continue validation. */
|
||||
if ([self themeExists:validatedTheme] == NO) {
|
||||
NSString *bundledTheme = [self.class buildFilename:themeName forStorageLocation:TPCThemeStorageLocationBundle];
|
||||
|
||||
if ([self themeExists:bundledTheme]) {
|
||||
/* Use a bundled theme with the same name if available. */
|
||||
if ( suggestedThemeName) {
|
||||
*suggestedThemeName = bundledTheme;
|
||||
|
||||
keyChanged = YES;
|
||||
}
|
||||
} else {
|
||||
/* Revert back to the default theme if no recovery is possible. */
|
||||
if ( suggestedThemeName) {
|
||||
*suggestedThemeName = [TPCPreferences themeNameDefault];
|
||||
|
||||
keyChanged = YES;
|
||||
}
|
||||
} // bundled theme exists
|
||||
} // preferred theme exists
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
} // cloud theme exists
|
||||
#endif
|
||||
|
||||
} // theme source custom
|
||||
|
||||
else if ([themeSource isEqualToString:TPCThemeControllerCloudThemeNameBasicPrefix])
|
||||
{
|
||||
if ([self themeExists:validatedTheme] == NO) {
|
||||
/* If the current theme stored in the cloud is not valid, then we try to revert
|
||||
to a custom one or a bundled one depending which one is available. */
|
||||
NSString *customTheme = [self.class buildFilename:themeName forStorageLocation:TPCThemeStorageLocationCustom];
|
||||
|
||||
NSString *bundledTheme = [self.class buildFilename:themeName forStorageLocation:TPCThemeStorageLocationBundle];
|
||||
|
||||
if ([self themeExists:customTheme]) {
|
||||
/* Use a custom theme with the same name if available. */
|
||||
if ( suggestedThemeName) {
|
||||
*suggestedThemeName = customTheme;
|
||||
|
||||
keyChanged = YES;
|
||||
}
|
||||
} else if ([self themeExists:bundledTheme]) {
|
||||
if ([self themeExists:bundledTheme]) {
|
||||
/* Use a bundled theme with the same name if available. */
|
||||
if ( suggestedThemeName) {
|
||||
*suggestedThemeName = bundledTheme;
|
||||
@@ -1138,9 +1039,9 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
|
||||
keyChanged = YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
} // theme source
|
||||
} // bundled theme exists
|
||||
} // preferred theme exists
|
||||
} // theme source custom
|
||||
|
||||
return (keyChanged == NO);
|
||||
}
|
||||
@@ -1184,10 +1085,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
return [TPCThemeControllerCustomThemeNameCompletePrefix stringByAppendingString:name];
|
||||
}
|
||||
case TPCThemeStorageLocationCloud:
|
||||
{
|
||||
return [TPCThemeControllerCloudThemeNameCompletePrefix stringByAppendingString:name];
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
@@ -1208,10 +1105,6 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
return TXTLS(@"BasicLanguage[bm2-4p]");
|
||||
}
|
||||
case TPCThemeStorageLocationCloud:
|
||||
{
|
||||
return TXTLS(@"BasicLanguage[aqy-6c]");
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
@@ -1225,8 +1118,7 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
NSParameterAssert(source != nil);
|
||||
|
||||
if ([source hasPrefix:TPCThemeControllerCloudThemeNameCompletePrefix] == NO &&
|
||||
[source hasPrefix:TPCThemeControllerCustomThemeNameCompletePrefix] == NO &&
|
||||
if ([source hasPrefix:TPCThemeControllerCustomThemeNameCompletePrefix] == NO &&
|
||||
[source hasPrefix:TPCThemeControllerBundledThemeNameCompletePrefix] == NO)
|
||||
{
|
||||
return nil;
|
||||
@@ -1241,8 +1133,7 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
NSParameterAssert(source != nil);
|
||||
|
||||
if ([source hasPrefix:TPCThemeControllerCloudThemeNameCompletePrefix] == NO &&
|
||||
[source hasPrefix:TPCThemeControllerCustomThemeNameCompletePrefix] == NO &&
|
||||
if ([source hasPrefix:TPCThemeControllerCustomThemeNameCompletePrefix] == NO &&
|
||||
[source hasPrefix:TPCThemeControllerBundledThemeNameCompletePrefix] == NO)
|
||||
{
|
||||
return nil;
|
||||
@@ -1263,9 +1154,7 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
{
|
||||
NSParameterAssert(themeName != nil);
|
||||
|
||||
if ([themeName hasPrefix:TPCThemeControllerCloudThemeNameCompletePrefix]) {
|
||||
return TPCThemeStorageLocationCloud;
|
||||
} else if ([themeName hasPrefix:TPCThemeControllerCustomThemeNameCompletePrefix]) {
|
||||
if ([themeName hasPrefix:TPCThemeControllerCustomThemeNameCompletePrefix]) {
|
||||
return TPCThemeStorageLocationCustom;
|
||||
} else if ([themeName hasPrefix:TPCThemeControllerBundledThemeNameCompletePrefix]) {
|
||||
return TPCThemeStorageLocationBundle;
|
||||
@@ -1349,102 +1238,24 @@ typedef NSMutableDictionary <NSString *, TPCTheme *> *TPCThemeControllerThemeLi
|
||||
|
||||
NSURL *destinationURL = [NSURL fileURLWithPath:self.pathBeingCopiedTo isDirectory:YES];
|
||||
|
||||
#define _cancelOperationAndReturn [self cancelOperation]; \
|
||||
\
|
||||
return;
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
if (self.destinationLocation == TPCThemeStorageLocationCloud)
|
||||
if ([RZFileManager() replaceItemAtURL:destinationURL
|
||||
withItemAtURL:sourceURL
|
||||
moveToDestination:NO
|
||||
moveDestinationToTrash:YES] == NO)
|
||||
{
|
||||
/* When copying to iCloud, we copy the style to a temporary folder then
|
||||
have OS X handle the transfer of said folder to iCloud on our behalf. */
|
||||
if ([RZFileManager() fileExistsAtURL:destinationURL]) {
|
||||
NSError *trashItemError = nil;
|
||||
[self cancelOperation];
|
||||
|
||||
if ([RZFileManager() trashItemAtURL:destinationURL resultingItemURL:NULL error:&trashItemError]) {
|
||||
LogToConsoleInfo("A copy of the theme being copied already exists at the destination path. This copy has been moved to the trash.");
|
||||
} else {
|
||||
LogToConsoleError("Failed to trash destination: '%@': %@",
|
||||
destinationURL.path, trashItemError.localizedDescription);
|
||||
|
||||
_cancelOperationAndReturn
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy to temporary location */
|
||||
NSURL *fakeDestinationURL = [[TPCPathInfo applicationTemporaryURL] URLByAppendingPathComponent:[NSString stringWithUUID]];
|
||||
|
||||
NSError *copyFileError = nil;
|
||||
|
||||
if ([RZFileManager() copyItemAtURL:sourceURL toURL:fakeDestinationURL error:©FileError] == NO) {
|
||||
LogToConsoleError("Failed to perform copy: '%@' -> '%@': %@",
|
||||
sourceURL.path, fakeDestinationURL.path, copyFileError.localizedDescription);
|
||||
|
||||
_cancelOperationAndReturn
|
||||
}
|
||||
|
||||
/* Move item to iCloud */
|
||||
NSError *setUbiquitousError = nil;
|
||||
|
||||
if ([RZFileManager() setUbiquitous:YES itemAtURL:fakeDestinationURL destinationURL:destinationURL error:&setUbiquitousError] == NO) {
|
||||
LogToConsoleError("Failed to set item as ubiquitous: '%@': %@",
|
||||
fakeDestinationURL.path, setUbiquitousError.localizedDescription);
|
||||
|
||||
_cancelOperationAndReturn
|
||||
}
|
||||
|
||||
/* Once the operation is completed, we can try to delete the temporary folder. */
|
||||
/* As the folder is only a temporary one, we don't care if this process errors out. */
|
||||
[RZFileManager() removeItemAtURL:fakeDestinationURL error:NULL];
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif
|
||||
|
||||
if ([RZFileManager() replaceItemAtURL:destinationURL
|
||||
withItemAtURL:sourceURL
|
||||
moveToDestination:NO
|
||||
moveDestinationToTrash:YES] == NO)
|
||||
{
|
||||
_cancelOperationAndReturn
|
||||
}
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
}
|
||||
#endif
|
||||
|
||||
[self completeOperation];
|
||||
|
||||
#undef _cancelOperationAndReturn
|
||||
|
||||
}
|
||||
|
||||
- (void)_defineDestinationPath
|
||||
{
|
||||
NSString *destinationPath = nil;
|
||||
|
||||
if (self.destinationLocation == TPCThemeStorageLocationCustom)
|
||||
{
|
||||
destinationPath = [TPCPathInfo customThemes];
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
}
|
||||
else if (self.destinationLocation == TPCThemeStorageLocationCloud)
|
||||
{
|
||||
/* If the destination was set for the cloud, but the cloud is not available,
|
||||
then we update our destinationLocation property so that the theme controller
|
||||
actually will know where to look for the new theme. */
|
||||
if (sharedCloudManager().ubiquitousContainerIsAvailable == NO) {
|
||||
self.destinationLocation = TPCThemeStorageLocationCustom;
|
||||
|
||||
destinationPath = [TPCPathInfo customThemes];
|
||||
} else {
|
||||
destinationPath = [TPCPathInfo cloudCustomThemes];
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
destinationPath = [TPCPathInfo customThemes];
|
||||
destinationPath = [destinationPath stringByAppendingPathComponent:self.themeName];
|
||||
|
||||
/* Cast as nonnull to make static analyzer happy */
|
||||
|
||||
@@ -1,831 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2018 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "TXMasterController.h"
|
||||
#import "IRCWorldPrivateCloudExtension.h"
|
||||
#import "TPCThemeControllerPrivate.h"
|
||||
#import "TPCPreferencesCloudSyncExtensionPrivate.h"
|
||||
#import "TPCPreferencesLocal.h"
|
||||
#import "TPCPreferencesImportExportPrivate.h"
|
||||
#import "TPCPreferencesReload.h"
|
||||
#import "TPCPreferencesUserDefaults.h"
|
||||
#import "TPCPreferencesCloudSyncPrivate.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
/* Internal cloud work is divided into two timers. Important work such as
|
||||
syncing upstream to the cloud is put on a per-minute timer. This timer
|
||||
also checks if a theme stored in the temporary store now exists. */
|
||||
/* The second timer is ten-minute (roughly) based and handles less important
|
||||
tasks. When this comment was written, it only handled the checking of
|
||||
whether fonts exist, but it could be changed to include more later. */
|
||||
#define _localKeysUpstreamSyncTimerInterval_1 60.0 // 1 minute
|
||||
#define _localKeysUpstreamSyncTimerInterval_2 630.0 // 10 minutes, 30 seconds
|
||||
|
||||
@interface TPCPreferencesCloudSync ()
|
||||
@property (nonatomic, strong, nullable) id ubiquityIdentityToken;
|
||||
@property (nonatomic, assign) BOOL pushAllLocalKeysNextSync;
|
||||
@property (nonatomic, strong) dispatch_queue_t workerQueue;
|
||||
@property (nonatomic, strong) NSTimer *cloudOneMinuteSyncTimer;
|
||||
@property (nonatomic, strong) NSTimer *cloudTenMinuteSyncTimer;
|
||||
@property (nonatomic, copy, nullable, readwrite) NSURL *ubiquitousContainerURL;
|
||||
@property (nonatomic, strong) NSMutableArray<NSString *> *keysToSync;
|
||||
@property (nonatomic, strong) NSMutableArray<NSString *> *keysToRemove;
|
||||
@property (nonatomic, copy) NSArray<NSString *> *remoteKeysBeingSynced;
|
||||
@property (nonatomic, assign, readwrite) BOOL isTerminated;
|
||||
@property (nonatomic, assign) BOOL isSyncingLocalKeysDownstream;
|
||||
@property (nonatomic, assign) BOOL isSyncingLocalKeysUpstream;
|
||||
@property (nonatomic, assign) BOOL hasUncommittedDataStoredInCloud;
|
||||
@end
|
||||
|
||||
@implementation TPCPreferencesCloudSync
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Public API
|
||||
|
||||
- (void)setValue:(nullable id)value forKey:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
NSString *keyHashed = key.md5;
|
||||
|
||||
if (value == nil) {
|
||||
[RZUbiquitousKeyValueStore() removeObjectForKey:keyHashed];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
NSDictionary *valueDic = @{
|
||||
@"key" : key,
|
||||
@"value" : value
|
||||
};
|
||||
|
||||
[RZUbiquitousKeyValueStore() setObject:valueDic forKey:keyHashed];
|
||||
}
|
||||
|
||||
- (nullable id)valueForKey:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
NSString *keyHashed = key.md5;
|
||||
|
||||
return [self valueForHashedKey:keyHashed unhashedKey:NULL];
|
||||
}
|
||||
|
||||
- (nullable id)valueForHashedKey:(NSString *)hashedKey unhashedKey:(NSString * _Nullable * _Nullable)unhashedKey /* @private */
|
||||
{
|
||||
NSParameterAssert(hashedKey != nil);
|
||||
|
||||
id dictObject = [RZUbiquitousKeyValueStore() objectForKey:hashedKey];
|
||||
|
||||
NSObjectIsKindOfClassAssertReturn(dictObject, NSDictionary, nil)
|
||||
|
||||
id keyValue = dictObject[@"key"];
|
||||
|
||||
if (keyValue == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
id objectValue = dictObject[@"value"];
|
||||
|
||||
if (objectValue == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
if ( unhashedKey) {
|
||||
*unhashedKey = keyValue;
|
||||
}
|
||||
|
||||
return objectValue;
|
||||
}
|
||||
|
||||
- (void)removeObjectForKey:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
NSString *keyHashed = key.md5;
|
||||
|
||||
[RZUbiquitousKeyValueStore() removeObjectForKey:keyHashed];
|
||||
}
|
||||
|
||||
- (void)removeObjectForKeyNextUpstreamSync:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
[self.keysToRemove addObject:key];
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark URL Management
|
||||
|
||||
- (void)setupUbiquitousContainerPath
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
NSURL *containerURL = [RZFileManager() URLForUbiquityContainerIdentifier:nil];
|
||||
|
||||
if (containerURL) {
|
||||
self.ubiquitousContainerURL = containerURL;
|
||||
} else {
|
||||
self.ubiquitousContainerURL = nil;
|
||||
|
||||
LogToConsoleInfo("iCloud access is not available.");
|
||||
}
|
||||
|
||||
[themeController() reloadThemeMonitoring];
|
||||
});
|
||||
}
|
||||
|
||||
- (nullable NSString *)ubiquitousContainerPath
|
||||
{
|
||||
return (self.ubiquitousContainerURL).path;
|
||||
}
|
||||
|
||||
- (BOOL)ubiquitousContainerIsAvailable
|
||||
{
|
||||
return (self.ubiquitousContainerURL != nil);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Cloud Sync Management
|
||||
|
||||
- (void)synchronizeToCloud
|
||||
{
|
||||
[self syncPreferencesToCloud];
|
||||
}
|
||||
|
||||
- (void)synchronizeFromCloud
|
||||
{
|
||||
[self syncPreferencesFromCloud:nil];
|
||||
}
|
||||
|
||||
- (void)performTenMinuteTimeBasedMaintenance
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
[TPCPreferences fixThemeFontNameMissingDuringSync];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)performOneMinuteTimeBasedMaintenance
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
[self synchronizeToCloud];
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
[TPCPreferences fixThemeNameMissingDuringSync];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)syncPreferencesToCloud
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
/* Only perform sync if there is something to sync */
|
||||
if (self.pushAllLocalKeysNextSync == NO && (self.keysToRemove).count == 0 && (self.keysToSync).count == 0) {
|
||||
LogToConsoleDebug("iCloud: Upstream sync cancelled because nothing has changed");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.isSyncingLocalKeysDownstream) {
|
||||
LogToConsoleDebug("iCloud: Upstream sync cancelled because a downstream sync is in progress");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.isSyncingLocalKeysUpstream) {
|
||||
LogToConsoleDebug("iCloud: Upstream sync cancelled because an upstream sync is in progress");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.hasUncommittedDataStoredInCloud) {
|
||||
LogToConsoleDebug("iCloud: Upstream sync cancelled because there is uncommitted data remaining in the cloud");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
LogToConsoleDebug("iCloud: Beginning sync upstream");
|
||||
|
||||
self.isSyncingLocalKeysUpstream = YES;
|
||||
|
||||
/* Compare to the remote */
|
||||
NSDictionary *remoteValues = RZUbiquitousKeyValueStore().dictionaryRepresentation;
|
||||
|
||||
/* Gather dictionary representation of all local preferences */
|
||||
NSMutableDictionary<NSString *, id> *changedValues = [NSMutableDictionary dictionary];
|
||||
|
||||
if (self.pushAllLocalKeysNextSync) {
|
||||
self.pushAllLocalKeysNextSync = NO;
|
||||
|
||||
NSDictionary *exportedPreferences = [TPCPreferencesImportExport exportedPreferencesDictionaryForCloud];
|
||||
|
||||
[changedValues addEntriesFromDictionary:exportedPreferences];
|
||||
} else {
|
||||
for (NSString *key in self.keysToSync) {
|
||||
id object = [RZUserDefaults() objectForKey:key];
|
||||
|
||||
if (object) {
|
||||
changedValues[key] = object;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove keys to sync even if we are syncing all */
|
||||
[self.keysToSync removeAllObjects];
|
||||
|
||||
/* If one of the values changed is our world controller, then we
|
||||
intercept that key and replace it with a few special values. */
|
||||
if ([changedValues containsKey:IRCWorldClientListDefaultsKey]) {
|
||||
[changedValues removeObjectForKey:IRCWorldClientListDefaultsKey];
|
||||
|
||||
NSDictionary *clientDict = [worldController() cloud_clientConfigurations];
|
||||
|
||||
[changedValues addEntriesFromDictionary:clientDict];
|
||||
}
|
||||
|
||||
/* Remove any keys that were marked for removal */
|
||||
for (NSString *key in self.keysToRemove) {
|
||||
LogToConsoleDebug("Key (%@) is being removed from iCloud as it was marked to be", key);
|
||||
|
||||
[self removeObjectForKey:key];
|
||||
|
||||
[changedValues removeObjectForKey:key];
|
||||
};
|
||||
|
||||
[self.keysToRemove removeAllObjects];
|
||||
|
||||
/* Get a copy of our defaults */
|
||||
static NSDictionary<NSString *, NSString *> *defaults = nil;
|
||||
|
||||
if (defaults == nil) {
|
||||
defaults = [TPCPreferences defaultPreferences];
|
||||
}
|
||||
|
||||
/* Set the remote dictionary */
|
||||
[changedValues enumerateKeysAndObjectsUsingBlock:^(id key, id objectValue, BOOL *stop) {
|
||||
/* Special save conditions */
|
||||
if ([self keyIsNotPermittedInCloud:key]) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([key isEqualToString:TPCPreferencesThemeNameDefaultsKey]) {
|
||||
BOOL missingTheme = [RZUserDefaults() boolForKey:TPCPreferencesThemeNameMissingLocallyDefaultsKey];
|
||||
|
||||
if (missingTheme) {
|
||||
return;
|
||||
}
|
||||
} else if ([key isEqualToString:TPCPreferencesThemeFontNameDefaultsKey]) {
|
||||
BOOL fontMissing = [RZUserDefaults() boolForKey:TPCPreferencesThemeFontNameMissingLocallyDefaultsKey];
|
||||
|
||||
if (fontMissing) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* If the key does not already exist in the cloud, then we check
|
||||
if its value matches the default value maintained internally. If
|
||||
it has not changed from the default, why are we saving it? */
|
||||
id defaultsValue = defaults[key];
|
||||
|
||||
id remoteValue = remoteValues[key];
|
||||
|
||||
if (defaultsValue != nil && remoteValue == nil) {
|
||||
if ([defaultsValue isEqual:objectValue]) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Save value */
|
||||
[self setValue:objectValue forKey:key];
|
||||
}];
|
||||
|
||||
[RZUbiquitousKeyValueStore() synchronize];
|
||||
|
||||
self.isSyncingLocalKeysUpstream = NO;
|
||||
|
||||
LogToConsoleDebug("iCloud: Completing sync upstream");
|
||||
});
|
||||
}
|
||||
|
||||
- (void)syncPreferencesFromCloud:(NSArray<NSString *> *)keysChangedHashed
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
LogToConsoleDebug("iCloud: Beginning sync downstream");
|
||||
|
||||
self.isSyncingLocalKeysDownstream = YES;
|
||||
|
||||
if (keysChangedHashed == nil || keysChangedHashed.count == 0) {
|
||||
NSDictionary *upstreamValues = RZUbiquitousKeyValueStore().dictionaryRepresentation;
|
||||
|
||||
self.remoteKeysBeingSynced = upstreamValues.allKeys;
|
||||
} else {
|
||||
self.remoteKeysBeingSynced = keysChangedHashed;
|
||||
}
|
||||
|
||||
/* See the code of syncPreferencesToCloud: for an explanation of how these keys are hashed. */
|
||||
NSMutableArray<NSDictionary *> *clientsImported = [NSMutableArray array];
|
||||
|
||||
NSMutableArray<NSString *> *keysChanged = [NSMutableArray array];
|
||||
NSMutableArray<NSString *> *keysToRemove = [NSMutableArray array];
|
||||
|
||||
NSArray<NSString *> *listOfDeletedClients = nil;
|
||||
|
||||
for (NSString *hashedKey in self.remoteKeysBeingSynced) {
|
||||
NSString *unhashedKey = nil;
|
||||
|
||||
id unhashedValue = [self valueForHashedKey:hashedKey unhashedKey:&unhashedKey];
|
||||
|
||||
/* Maybe remove certain keys from the local defaults store */
|
||||
if (unhashedKey == nil || unhashedValue == nil) {
|
||||
unhashedKey = [self unhashedKeyFromHashedKey:hashedKey];
|
||||
|
||||
LogToConsoleDebug("Hashed key (%@) is missing a value or key name. Possible key name: %@", hashedKey, unhashedKey);
|
||||
|
||||
if (unhashedKey) {
|
||||
LogToConsoleDebug("Asking for permission to remove key (%@) from local defaults store", unhashedKey);
|
||||
|
||||
if ([self keyIsNotPermittedFromCloud:unhashedKey]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ([self keyIsPermittedToBeRemovedThroughCloud:unhashedKey]) {
|
||||
[keysToRemove addObject:unhashedKey];
|
||||
|
||||
[keysChanged addObject:unhashedKey];
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ([self keyIsNotPermittedFromCloud:unhashedKey]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Compare the local to the new */
|
||||
/* This is for when we are going through the entire dictionary */
|
||||
id localValue = [RZUserDefaults() objectForKey:unhashedKey];
|
||||
|
||||
if (localValue && [localValue isEqual:unhashedValue]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Set it to the new dictionary */
|
||||
if ([unhashedKey isEqualToString:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey])
|
||||
{
|
||||
if ([unhashedValue isKindOfClass:[NSArray class]] == NO) {
|
||||
continue;
|
||||
}
|
||||
|
||||
listOfDeletedClients = unhashedValue;
|
||||
}
|
||||
else if ([unhashedKey hasPrefix:IRCWorldControllerCloudClientItemDefaultsKeyPrefix])
|
||||
{
|
||||
if ([unhashedValue isKindOfClass:[NSDictionary class]] == NO) {
|
||||
continue;
|
||||
}
|
||||
|
||||
[clientsImported addObject:unhashedValue];
|
||||
}
|
||||
else
|
||||
{
|
||||
[keysChanged addObject:unhashedKey];
|
||||
|
||||
[TPCPreferencesImportExport import:unhashedValue withKey:unhashedKey];
|
||||
}
|
||||
}
|
||||
|
||||
/* Perform reload */
|
||||
XRPerformBlockAsynchronouslyOnMainQueue(^{
|
||||
if (listOfDeletedClients.count > 0) {
|
||||
[worldController() cloud_processDeletedClientsList:listOfDeletedClients];
|
||||
}
|
||||
|
||||
for (NSString *key in keysToRemove) {
|
||||
[RZUserDefaults() removeObjectForKey:key];
|
||||
}
|
||||
|
||||
if (keysChanged.count > 0) {
|
||||
[TPCPreferences performReloadActionForKeys:keysChanged];
|
||||
}
|
||||
|
||||
for (NSDictionary *client in clientsImported) {
|
||||
[TPCPreferencesImportExport importClientConfiguration:client isImportedFromCloud:YES];
|
||||
}
|
||||
});
|
||||
|
||||
self.hasUncommittedDataStoredInCloud = NO;
|
||||
|
||||
self.isSyncingLocalKeysDownstream = NO;
|
||||
|
||||
self.remoteKeysBeingSynced = nil;
|
||||
|
||||
LogToConsoleDebug("iCloud: Completing sync downstream");
|
||||
});
|
||||
}
|
||||
|
||||
- (void)resetDataToSync
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
self.pushAllLocalKeysNextSync = NO;
|
||||
|
||||
[self.keysToRemove removeAllObjects];
|
||||
[self.keysToSync removeAllObjects];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)syncEverythingNextSync
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
self.pushAllLocalKeysNextSync = YES;
|
||||
}
|
||||
|
||||
- (void)purgeDataStoredWithCloud
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
[RZUbiquitousKeyValueStore() synchronize];
|
||||
|
||||
NSDictionary *remoteValues = RZUbiquitousKeyValueStore().dictionaryRepresentation;
|
||||
|
||||
[remoteValues enumerateKeysAndObjectsUsingBlock:^(NSString *key, id object, BOOL *stop) {
|
||||
[RZUbiquitousKeyValueStore() removeObjectForKey:key];
|
||||
}];
|
||||
|
||||
[RZUserDefaults() removeObjectForKey:TPCPreferencesThemeFontNameMissingLocallyDefaultsKey];
|
||||
|
||||
[RZUserDefaults() removeObjectForKey:TPCPreferencesThemeNameMissingLocallyDefaultsKey];
|
||||
|
||||
self.pushAllLocalKeysNextSync = YES;
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Key Conditions
|
||||
|
||||
- (BOOL)keyIsNotPermittedInCloud:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloudLimitedToServers]) {
|
||||
return ([key hasPrefix:IRCWorldControllerCloudClientItemDefaultsKeyPrefix] == NO);
|
||||
}
|
||||
|
||||
return ([key isEqualToString:@"World Controller"] ||
|
||||
[key isEqualToString:IRCWorldClientListDefaultsKey] ||
|
||||
[key isEqualToString:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesCloudSyncServicesEnabledDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesCloudSyncServicesLimitedToServersDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesThemeNameMissingLocallyDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesThemeFontNameMissingLocallyDefaultsKey]);
|
||||
}
|
||||
|
||||
- (BOOL)keyIsNotPermittedFromCloud:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloudLimitedToServers]) {
|
||||
return ([self keyIsRelatedToSavedServerState:key] == NO);
|
||||
}
|
||||
|
||||
return ([key isEqualToString:@"World Controller"] ||
|
||||
[key isEqualToString:IRCWorldClientListDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesCloudSyncServicesEnabledDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesCloudSyncServicesLimitedToServersDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesThemeNameMissingLocallyDefaultsKey] ||
|
||||
[key isEqualToString:TPCPreferencesThemeFontNameMissingLocallyDefaultsKey]);
|
||||
}
|
||||
|
||||
- (BOOL)keyIsRelatedToSavedServerState:(NSString *)key
|
||||
{
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
return ([key isEqualToString:IRCWorldControllerCloudListOfDeletedClientsDefaultsKey] ||
|
||||
[key hasPrefix:IRCWorldControllerCloudClientItemDefaultsKeyPrefix]);
|
||||
}
|
||||
|
||||
- (nullable NSString *)unhashedKeyFromHashedKey:(NSString *)hashedKey
|
||||
{
|
||||
/* This method only lists specific keys that we need to know which cannot
|
||||
be viewed directly by asking for the key-value entry in iCloud. */
|
||||
/* It was at the point that I wrote this method that I realized how
|
||||
fucking stupid Textual's implementation of iCloud is. */
|
||||
NSParameterAssert(hashedKey != nil);
|
||||
|
||||
static NSDictionary<NSString *, NSString *> *cachedValues = nil;
|
||||
|
||||
static dispatch_once_t onceToken;
|
||||
|
||||
dispatch_once(&onceToken, ^{
|
||||
cachedValues = @{
|
||||
@"eb2dc862342c6c653e29d7363f6d421e" : @"User List Mode Badge Colors -> +y",
|
||||
@"0d6b24b13a7e43211762da51815b2064" : @"User List Mode Badge Colors -> +q",
|
||||
@"74f61fa09dce30a57fd7c1331cd99ddb" : @"User List Mode Badge Colors -> +a",
|
||||
@"1ceffaa7b5291aa3b15e7e229a50e272" : @"User List Mode Badge Colors -> +o",
|
||||
@"4f8e8414604e9ccb757d980991d576a1" : @"User List Mode Badge Colors -> +h",
|
||||
@"76248ae19d477d639cb821f1e0a6dae2" : @"User List Mode Badge Colors -> +v",
|
||||
@"2a95c3cfc017173e986e24d536d517a4" : @"User List Mode Badge Colors -> no mode",
|
||||
@"051baac72009cc4914d1815916e1ed49" : @"Server List Unread Message Count Badge Colors -> Highlight"
|
||||
};
|
||||
});
|
||||
|
||||
return cachedValues[hashedKey];
|
||||
}
|
||||
|
||||
- (BOOL)keyIsPermittedToBeRemovedThroughCloud:(NSString *)key
|
||||
{
|
||||
/* List of keys that when synced downstream are allowed to be removed
|
||||
from NSUserDefaults if they no longer exist in the cloud. */
|
||||
NSParameterAssert(key != nil);
|
||||
|
||||
return ([key isEqualToString:@"User List Mode Badge Colors -> +y"] ||
|
||||
[key isEqualToString:@"User List Mode Badge Colors -> +q"] ||
|
||||
[key isEqualToString:@"User List Mode Badge Colors -> +a"] ||
|
||||
[key isEqualToString:@"User List Mode Badge Colors -> +o"] ||
|
||||
[key isEqualToString:@"User List Mode Badge Colors -> +h"] ||
|
||||
[key isEqualToString:@"User List Mode Badge Colors -> +v"] ||
|
||||
[key isEqualToString:@"User List Mode Badge Colors -> no mode"] ||
|
||||
[key isEqualToString:@"Server List Unread Message Count Badge Colors -> Highlight"]);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Notifications
|
||||
|
||||
- (void)syncPreferenceFromCloudNotification:(NSNotification *)aNote
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSInteger syncReason =
|
||||
[aNote.userInfo integerForKey:NSUbiquitousKeyValueStoreChangeReasonKey];
|
||||
|
||||
if (syncReason == NSUbiquitousKeyValueStoreQuotaViolationChange) {
|
||||
[self cloudStorageLimitExceeded];
|
||||
} else if (syncReason == NSUbiquitousKeyValueStoreServerChange ||
|
||||
syncReason == NSUbiquitousKeyValueStoreInitialSyncChange)
|
||||
{
|
||||
self.hasUncommittedDataStoredInCloud = YES;
|
||||
|
||||
NSArray<NSString *> *keysChangedHashed =
|
||||
[aNote.userInfo arrayForKey:NSUbiquitousKeyValueStoreChangedKeysKey];
|
||||
|
||||
[self syncPreferencesFromCloud:keysChangedHashed];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)localKeysDidChangeNotification:(NSNotification *)aNote
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([TPCPreferences syncPreferencesToTheCloud] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
NSString *changedKey = aNote.userInfo[@"changedKey"];
|
||||
|
||||
if (changedKey == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If the key changed is in the list of the keys being imported at
|
||||
// this time, then the key probably changed because we imported it.
|
||||
if ([self.remoteKeysBeingSynced containsObject:changedKey]) {
|
||||
return;
|
||||
}
|
||||
|
||||
[self.keysToRemove removeObject:changedKey];
|
||||
|
||||
[self.keysToSync addObject:changedKey];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)cloudStorageLimitExceeded
|
||||
{
|
||||
LogToConsoleError("The cloud storage limit was exceeded");
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Session Management
|
||||
|
||||
- (void)iCloudAccountAvailabilityChanged:(NSNotification *)aNote
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
id newToken = RZFileManager().cloudUbiquityIdentityToken;
|
||||
|
||||
id oldToken = self.ubiquityIdentityToken;
|
||||
|
||||
if (newToken && newToken != oldToken) {
|
||||
self.pushAllLocalKeysNextSync = YES;
|
||||
}
|
||||
|
||||
self.ubiquityIdentityToken = newToken;
|
||||
|
||||
[self setupUbiquitousContainerPath];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Initialization
|
||||
|
||||
- (void)prepareInitialState
|
||||
{
|
||||
LogToConsoleDebug("iCloud: Beginning session");
|
||||
|
||||
self.workerQueue =
|
||||
XRCreateDispatchQueueWithPriority("Textual.TPCPreferencesCloudSync.iCloudSyncDispatchQueue", DISPATCH_QUEUE_SERIAL, QOS_CLASS_BACKGROUND);
|
||||
|
||||
self.ubiquityIdentityToken = RZFileManager().cloudUbiquityIdentityToken;
|
||||
|
||||
[self setupUbiquitousContainerPath];
|
||||
|
||||
self.keysToRemove = [NSMutableArray array];
|
||||
self.keysToSync = [NSMutableArray array];
|
||||
|
||||
[RZNotificationCenter() addObserver:self
|
||||
selector:@selector(localKeysDidChangeNotification:)
|
||||
name:TPCPreferencesUserDefaultsDidChangeNotification
|
||||
object:nil];
|
||||
|
||||
[RZNotificationCenter() addObserver:self
|
||||
selector:@selector(iCloudAccountAvailabilityChanged:)
|
||||
name:NSUbiquityIdentityDidChangeNotification
|
||||
object:nil];
|
||||
|
||||
NSTimer *syncTimer1 = [NSTimer scheduledTimerWithTimeInterval:_localKeysUpstreamSyncTimerInterval_1
|
||||
target:self
|
||||
selector:@selector(performOneMinuteTimeBasedMaintenance)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
|
||||
self.cloudOneMinuteSyncTimer = syncTimer1;
|
||||
|
||||
NSTimer *syncTimer2 = [NSTimer scheduledTimerWithTimeInterval:_localKeysUpstreamSyncTimerInterval_2
|
||||
target:self
|
||||
selector:@selector(performTenMinuteTimeBasedMaintenance)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
|
||||
self.cloudTenMinuteSyncTimer = syncTimer2;
|
||||
|
||||
[RZNotificationCenter() addObserver:self
|
||||
selector:@selector(syncPreferenceFromCloudNotification:)
|
||||
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
|
||||
object:nil];
|
||||
|
||||
[RZUbiquitousKeyValueStore() synchronize];
|
||||
}
|
||||
|
||||
- (void)prepareForApplicationTermination
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* The cloud session is closed from within the worker queue so that
|
||||
any operations that aren't already finished will have time to do so. */
|
||||
XRPerformBlockAsynchronouslyOnQueue(self.workerQueue, ^{
|
||||
[self _closeCloudSyncSession];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)_closeCloudSyncSession
|
||||
{
|
||||
if (self.isTerminated) {
|
||||
return;
|
||||
}
|
||||
|
||||
LogToConsoleDebug("iCloud: Closing session");
|
||||
|
||||
if ( self.cloudOneMinuteSyncTimer) {
|
||||
[self.cloudOneMinuteSyncTimer invalidate];
|
||||
self.cloudOneMinuteSyncTimer = nil;
|
||||
}
|
||||
|
||||
if ( self.cloudTenMinuteSyncTimer) {
|
||||
[self.cloudTenMinuteSyncTimer invalidate];
|
||||
self.cloudTenMinuteSyncTimer = nil;
|
||||
}
|
||||
|
||||
[RZNotificationCenter() removeObserver:self];
|
||||
|
||||
if (self.workerQueue) {
|
||||
self.workerQueue = nil;
|
||||
}
|
||||
|
||||
self.pushAllLocalKeysNextSync = NO;
|
||||
|
||||
self.keysToRemove = nil;
|
||||
self.keysToSync = nil;
|
||||
|
||||
self.remoteKeysBeingSynced = nil;
|
||||
|
||||
self.isSyncingLocalKeysDownstream = NO;
|
||||
self.isSyncingLocalKeysUpstream = NO;
|
||||
|
||||
self.ubiquityIdentityToken = nil;
|
||||
|
||||
self.ubiquitousContainerURL = nil;
|
||||
|
||||
self.isTerminated = YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,138 +0,0 @@
|
||||
/* *********************************************************************
|
||||
* _____ _ _
|
||||
* |_ _|____ _| |_ _ _ __ _| |
|
||||
* | |/ _ \ \/ / __| | | |/ _` | |
|
||||
* | | __/> <| |_| |_| | (_| | |
|
||||
* |_|\___/_/\_\\__|\__,_|\__,_|_|
|
||||
*
|
||||
* Copyright (c) 2010 - 2020 Codeux Software, LLC & respective contributors.
|
||||
* Please see Acknowledgements.pdf for additional information.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Textual, "Codeux Software, LLC", nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
#import "TPCThemeController.h"
|
||||
#import "TPCPreferencesCloudSyncPrivate.h"
|
||||
#import "TPCPreferencesLocalPrivate.h"
|
||||
#import "TPCPreferencesReload.h"
|
||||
#import "TPCPreferencesUserDefaults.h"
|
||||
#import "TPCPreferencesCloudSyncExtensionPrivate.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
#if TEXTUAL_BUILT_WITH_ICLOUD_SUPPORT == 1
|
||||
#pragma mark -
|
||||
#pragma mark Public
|
||||
|
||||
@implementation TPCPreferences (TPCPreferencesCloudSync)
|
||||
|
||||
NSString * const TPCPreferencesCloudSyncServicesEnabledDefaultsKey = @"SyncPreferencesToTheCloud";
|
||||
NSString * const TPCPreferencesCloudSyncServicesLimitedToServersDefaultsKey = @"SyncPreferencesToTheCloudLimitedToServers";
|
||||
|
||||
NSString * const TPCPreferencesCloudSyncDidChangeThemeFontNotification = @"TPCPreferencesCloudSyncDidChangeThemeFontNotification";
|
||||
NSString * const TPCPreferencesCloudSyncDidChangeThemeNameNotification = @"TPCPreferencesCloudSyncDidChangeThemeNameNotification";
|
||||
|
||||
+ (BOOL)syncPreferencesToTheCloud
|
||||
{
|
||||
return [RZUserDefaults() boolForKey:TPCPreferencesCloudSyncServicesEnabledDefaultsKey];
|
||||
}
|
||||
|
||||
+ (BOOL)syncPreferencesToTheCloudLimitedToServers
|
||||
{
|
||||
return [RZUserDefaults() boolForKey:TPCPreferencesCloudSyncServicesLimitedToServersDefaultsKey];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Private
|
||||
|
||||
@implementation TPCPreferences (TPCPreferencesCloudSyncPrivate)
|
||||
|
||||
+ (void)setSyncPreferencesToTheCloud:(BOOL)syncPreferencesToTheCloud
|
||||
{
|
||||
return [RZUserDefaults() setBool:syncPreferencesToTheCloud forKey:TPCPreferencesCloudSyncServicesEnabledDefaultsKey];
|
||||
}
|
||||
|
||||
+ (void)fixThemeNameMissingDuringSync
|
||||
{
|
||||
BOOL missingTheme = [RZUserDefaults() boolForKey:TPCPreferencesThemeNameMissingLocallyDefaultsKey];
|
||||
|
||||
if (missingTheme == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *remoteValue = [sharedCloudManager() valueForKey:TPCPreferencesThemeNameDefaultsKey];
|
||||
|
||||
NSString *localValue = [TPCPreferences themeName];
|
||||
|
||||
if (remoteValue == nil || [localValue isEqualToString:remoteValue]) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([themeController() themeExists:remoteValue] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
[TPCPreferences setThemeName:remoteValue]; // Will reset the BOOL
|
||||
|
||||
[TPCPreferences performReloadAction:TPCPreferencesReloadActionStyle];
|
||||
|
||||
[RZNotificationCenter() postNotificationName:TPCPreferencesCloudSyncDidChangeThemeNameNotification object:nil];
|
||||
}
|
||||
|
||||
+ (void)fixThemeFontNameMissingDuringSync
|
||||
{
|
||||
BOOL fontMissing = [RZUserDefaults() boolForKey:TPCPreferencesThemeFontNameMissingLocallyDefaultsKey];
|
||||
|
||||
if (fontMissing == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *remoteValue = [sharedCloudManager() valueForKey:TPCPreferencesThemeFontNameDefaultsKey];
|
||||
|
||||
NSString *localValue = [TPCPreferences themeChannelViewFontName];
|
||||
|
||||
if (remoteValue == nil || [localValue isEqualToString:remoteValue]) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ([NSFont fontIsAvailable:remoteValue] == NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
[TPCPreferences setThemeChannelViewFontName:remoteValue]; // Will remove the BOOL
|
||||
|
||||
[TPCPreferences performReloadAction:TPCPreferencesReloadActionStyle];
|
||||
|
||||
[RZNotificationCenter() postNotificationName:TPCPreferencesCloudSyncDidChangeThemeFontNotification object:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.developer.icloud-container-identifiers</key>
|
||||
<array>
|
||||
<string>iCloud.com.codeux.apps.textual-mas</string>
|
||||
</array>
|
||||
<key>com.apple.developer.icloud-services</key>
|
||||
<array>
|
||||
<string>CloudDocuments</string>
|
||||
</array>
|
||||
<key>com.apple.developer.ubiquity-container-identifiers</key>
|
||||
<array>
|
||||
<string>iCloud.com.codeux.apps.textual-mas</string>
|
||||
</array>
|
||||
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
|
||||
<string>8482Q6EPL6.com.codeux.apps.textual-mas</string>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>8482Q6EPL6.com.codeux.irc.textual</string>
|
||||
</array>
|
||||
<key>com.apple.security.automation.apple-events</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.bookmarks.app-scope</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.downloads.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.server</key>
|
||||
<true/>
|
||||
<key>com.apple.security.print</key>
|
||||
<true/>
|
||||
<key>com.apple.security.temporary-exception.apple-events</key>
|
||||
<array>
|
||||
<string>com.apple.itunes</string>
|
||||
<string>com.apple.safari</string>
|
||||
</array>
|
||||
<key>com.apple.security.temporary-exception.shared-preference.read-only</key>
|
||||
<array>
|
||||
<string>com.codeux.apps.textual</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -77,7 +77,6 @@
|
||||
|
||||
"7lm-bq" = "Built-in";
|
||||
"bm2-4p" = "Custom";
|
||||
"aqy-6c" = "Custom — iCloud Drive";
|
||||
|
||||
"fo8-1h" = "Fill out this field";
|
||||
|
||||
|
||||
@@ -165,7 +165,6 @@ Surround \002<token>\002 with double quotes (\") if it contains a space.";
|
||||
/* /myversion/ command */
|
||||
"pqj-1y" = "I am using %@";
|
||||
"ccb-ur" = "%1$@ %2$@ (Build %3$@)%4$@%5$@";
|
||||
"9fp-8h" = " (Mac App Store)";
|
||||
"b8p-44" = " as classic binary on an %@ Mac.";
|
||||
|
||||
/* /timer/ command */
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
|
||||
"0kz-wd" = "Do you want to delete the selection?";
|
||||
"etl-ss" = "There is no undo and all data related to this server, except for logs, will be erased.";
|
||||
"5zs-h0" = "Only delete server on this device";
|
||||
|
||||
"3l6-3z" = "You have clicked a link that will connect you to “%1$@“ and join the channel %2$@";
|
||||
"mx1-qz" = "The connection named “%1$@“ is already configured to connect to this server address.
|
||||
@@ -186,8 +185,5 @@ Information encrypted using: %2$@";
|
||||
"2jq-t5" = "%1$@ with the cipher suite: %2$@";
|
||||
"8ou-pu" = "%1$@ with the cipher suite: %2$@ (deprecated)";
|
||||
|
||||
"rn7-08" = "Unable to access iCloud";
|
||||
"wjn-f1" = "Make sure you're logged in and that “iCloud Drive” or “Documents & Data” is enabled.";
|
||||
|
||||
"ujw-64" = "The “Inspect Element” feature of WebKit2 cannot be accessed on this version of macOS.";
|
||||
"kig-m1" = "Disable WebKit2 or upgrade to a newer version of macOS.";
|
||||
|
||||
@@ -35,9 +35,6 @@
|
||||
*
|
||||
*********************************************************************** */
|
||||
|
||||
"r62-4k" = "Are you sure you want to delete everything uploaded to iCloud by Textual?";
|
||||
"t8v-w8" = "This action will not effect the configuration of this device or others.";
|
||||
|
||||
"70s-c6" = "No Log Location Selected";
|
||||
"721-ie" = "No Location Selected";
|
||||
|
||||
@@ -55,6 +52,3 @@ Click “Edit Style” to add your own style sheet rules. This feature can also
|
||||
"77t-de" = "• Nickname Format";
|
||||
"ddh-hr" = "• Timestamp Format";
|
||||
"we8-i8" = "• Channel View Font";
|
||||
|
||||
"x3n-to" = "Please choose a location other than iCloud Drive to save data to";
|
||||
"gz8-dt" = "";
|
||||
|
||||
@@ -39,10 +39,6 @@
|
||||
"f7o-x4" = "User Ignore";
|
||||
"b0g-0x" = "User Tracking";
|
||||
|
||||
/* Server properties iCloud options */
|
||||
"x08-ko" = "Do you want to remove this server from devices it has been shared with?";
|
||||
"sqc-nw" = "";
|
||||
|
||||
/* Server specific highlight entry things */
|
||||
"61f-6b" = "All Channels";
|
||||
"qcc-b4" = "Exclude";
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.social-networking</string>
|
||||
<key>LSRequiresNativeExecution</key>
|
||||
<false/>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>TXTL</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Textual IRC Client</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>7.2.2</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>7.2.2</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2010 - 2023 Codeux Software, LLC. All rights reserved.</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>applicationIcon.icns</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>TXCMainMenu</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>11.0</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>TXApplication</string>
|
||||
<key>NSContactsUsageDescription</key>
|
||||
<string>Textual accesses contacts to automatically populate certain forms with your name and/or e-mail address. Access to this information is not required.</string>
|
||||
<key>NSAppleScriptEnabled</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>scpt</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Textual IRC Client Script</string>
|
||||
<key>CFBundleTypeOSTypes</key>
|
||||
<array>
|
||||
<string>****</string>
|
||||
</array>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>LSTypeIsPackage</key>
|
||||
<integer>0</integer>
|
||||
<key>NSDocumentClass</key>
|
||||
<string>TPCResourceManagerDocumentTypeImporter</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>CFBundleTypeExtensions</key>
|
||||
<array>
|
||||
<string>bundle</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Textual IRC Client Extension</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>LSTypeIsPackage</key>
|
||||
<integer>1</integer>
|
||||
<key>NSDocumentClass</key>
|
||||
<string>TPCResourceManagerDocumentTypeImporter</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>NSUbiquitousContainers</key>
|
||||
<dict>
|
||||
<key>iCloud.com.codeux.apps.textual-mas</key>
|
||||
<dict>
|
||||
<key>NSUbiquitousContainerIsDocumentScopePublic</key>
|
||||
<true/>
|
||||
<key>NSUbiquitousContainerName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>NSUbiquitousContainerSupportedFolderLevels</key>
|
||||
<string>Any</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>CFBundleURLIconFile</key>
|
||||
<string>application</string>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>Internet Relay Chat</string>
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>irc</string>
|
||||
<string>ircs</string>
|
||||
<string>textual</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -236,10 +236,6 @@
|
||||
<integer>0</integer>
|
||||
<key>SwipeMinimumLength</key>
|
||||
<integer>30</integer>
|
||||
<key>SyncPreferencesToTheCloud</key>
|
||||
<false/>
|
||||
<key>SyncPreferencesToTheCloudLimitedToServers</key>
|
||||
<false/>
|
||||
<key>Tab Completion -> Completion Suffix Cut Forward Until Space</key>
|
||||
<false/>
|
||||
<key>Tab Completion -> Do Not Use Whitespace for Missing Completion Suffix</key>
|
||||
|
||||
+1
-6
@@ -1,10 +1,5 @@
|
||||
|
||||
If you are using a copy of Textual downloaded through the Mac
|
||||
App Store, then custom scripts can be installed in the folder:
|
||||
|
||||
"~/Library/Application Scripts/com.codeux.apps.textual-mas/"
|
||||
|
||||
Otherwise, custom scripts can be installed in the folder:
|
||||
Custom scripts can be installed in the folder:
|
||||
|
||||
"~/Library/Application Scripts/com.codeux.apps.textual/"
|
||||
|
||||
|
||||
+39
-56
@@ -1,8 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17503.1" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23077.2" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17503.1"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23077.2"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
@@ -18,56 +17,43 @@
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="s7V-Ks-YGu" userLabel="Eligibility Check - Not">
|
||||
<windowStyleMask key="styleMask" titled="YES"/>
|
||||
<rect key="contentRect" x="128" y="143" width="370" height="260"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1440"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||
<view key="contentView" id="zmB-R2-bXm">
|
||||
<rect key="frame" x="0.0" y="0.0" width="370" height="260"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="370" height="209"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eX9-9T-nFn">
|
||||
<rect key="frame" x="91" y="216" width="188" height="24"/>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eX9-9T-nFn">
|
||||
<rect key="frame" x="91" y="165" width="188" height="24"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="You are not eligible." id="oiB-Uh-16m">
|
||||
<font key="font" metaFont="systemBold" size="20"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="86o-pP-6Hi">
|
||||
<rect key="frame" x="42" y="169" width="286" height="32"/>
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="86o-pP-6Hi">
|
||||
<rect key="frame" x="42" y="118" width="286" height="32"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Unfortunately, you are not eligible for a free or discounted upgrade." id="axq-6T-VR5">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kly-4d-CEl">
|
||||
<rect key="frame" x="40" y="59" width="290" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="Nqr-CV-KB4"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="smallSquare" title="Purchase in Mac App Store" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="4On-qj-WpA">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system" size="15"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="actionPurchaseMacAppStore:" target="-2" id="zsS-Ki-6qp"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Ln-qj-Yq8">
|
||||
<rect key="frame" x="40" y="110" width="290" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="95Y-b1-mQ6"/>
|
||||
<constraint firstAttribute="width" constant="290" id="Qdg-yS-3I1"/>
|
||||
</constraints>
|
||||
<rect key="frame" x="40" y="59" width="290" height="40"/>
|
||||
<buttonCell key="cell" type="smallSquare" title="Purchase in Codeux Software Store" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="cbV-gz-k63">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system" size="15"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="95Y-b1-mQ6"/>
|
||||
<constraint firstAttribute="width" constant="290" id="Qdg-yS-3I1"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="actionPurchaseStandalone:" target="-2" id="mAQ-mY-NVy"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aEw-pj-DLf">
|
||||
<rect key="frame" x="150" y="13" width="70" height="32"/>
|
||||
<rect key="frame" x="151" y="13" width="69" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Close" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="YZx-ou-Quq">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -82,17 +68,14 @@ Gw
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="86o-pP-6Hi" firstAttribute="top" secondItem="eX9-9T-nFn" secondAttribute="bottom" constant="15" id="3Tz-Zv-TwS"/>
|
||||
<constraint firstItem="kly-4d-CEl" firstAttribute="trailing" secondItem="0Ln-qj-Yq8" secondAttribute="trailing" id="Eg8-U9-E7I"/>
|
||||
<constraint firstItem="aEw-pj-DLf" firstAttribute="centerX" secondItem="zmB-R2-bXm" secondAttribute="centerX" id="Hwr-CQ-GPg"/>
|
||||
<constraint firstItem="86o-pP-6Hi" firstAttribute="leading" secondItem="zmB-R2-bXm" secondAttribute="leading" constant="44" id="L2Y-de-Tvu"/>
|
||||
<constraint firstItem="0Ln-qj-Yq8" firstAttribute="top" secondItem="86o-pP-6Hi" secondAttribute="bottom" constant="20" id="MN6-ai-PDT"/>
|
||||
<constraint firstAttribute="bottom" secondItem="aEw-pj-DLf" secondAttribute="bottom" constant="20" id="Qcu-ML-BJW"/>
|
||||
<constraint firstItem="aEw-pj-DLf" firstAttribute="top" secondItem="kly-4d-CEl" secondAttribute="bottom" constant="20" id="RLO-Hn-t2Q"/>
|
||||
<constraint firstItem="eX9-9T-nFn" firstAttribute="centerX" secondItem="zmB-R2-bXm" secondAttribute="centerX" id="SlH-Zp-lew"/>
|
||||
<constraint firstItem="kly-4d-CEl" firstAttribute="leading" secondItem="0Ln-qj-Yq8" secondAttribute="leading" id="WWP-ae-rEX"/>
|
||||
<constraint firstItem="eX9-9T-nFn" firstAttribute="top" secondItem="zmB-R2-bXm" secondAttribute="top" constant="20" id="ndK-Ox-HJg"/>
|
||||
<constraint firstItem="aEw-pj-DLf" firstAttribute="top" secondItem="0Ln-qj-Yq8" secondAttribute="bottom" constant="20" id="phM-Re-3vP"/>
|
||||
<constraint firstItem="86o-pP-6Hi" firstAttribute="centerX" secondItem="zmB-R2-bXm" secondAttribute="centerX" id="u7r-Br-f5x"/>
|
||||
<constraint firstItem="kly-4d-CEl" firstAttribute="centerX" secondItem="zmB-R2-bXm" secondAttribute="centerX" id="xUU-b0-fXY"/>
|
||||
<constraint firstItem="0Ln-qj-Yq8" firstAttribute="centerX" secondItem="zmB-R2-bXm" secondAttribute="centerX" id="zox-Pc-vQa"/>
|
||||
</constraints>
|
||||
</view>
|
||||
@@ -104,12 +87,12 @@ Gw
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="Vqb-So-6Ho" userLabel="Eligibility Check - Reduced">
|
||||
<windowStyleMask key="styleMask" titled="YES"/>
|
||||
<rect key="contentRect" x="128" y="143" width="380" height="298"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1440"/>
|
||||
<view key="contentView" id="MHB-dt-yu8">
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="290"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||
<view key="contentView" misplaced="YES" id="MHB-dt-yu8">
|
||||
<rect key="frame" x="0.0" y="0.0" width="380" height="298"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Oi-4c-Yln">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Oi-4c-Yln">
|
||||
<rect key="frame" x="57" y="246" width="267" height="24"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Your upgrade is discounted!" id="4LA-tc-vdW">
|
||||
<font key="font" metaFont="systemBold" size="20"/>
|
||||
@@ -117,7 +100,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="svY-JN-wRd">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="svY-JN-wRd">
|
||||
<rect key="frame" x="22" y="119" width="336" height="112"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="1V5-vh-2id">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -131,7 +114,7 @@ When your order is finished being processed, click the “Activate Textual“ bu
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="W1h-Tu-uqZ">
|
||||
<rect key="frame" x="155" y="13" width="70" height="32"/>
|
||||
<rect key="frame" x="156" y="13" width="69" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Close" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="zYo-FM-XDl">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -145,28 +128,28 @@ Gw
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mIg-BY-n6R">
|
||||
<rect key="frame" x="20" y="59" width="168" height="41"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="168" id="gpP-f5-X4S"/>
|
||||
<constraint firstAttribute="height" constant="39" id="pmZ-lK-JMG"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="smallSquare" title="Purchase Upgrade" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Psq-Ta-ai7">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system" size="15"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="168" id="gpP-f5-X4S"/>
|
||||
<constraint firstAttribute="height" constant="39" id="pmZ-lK-JMG"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="actionPurchaseUpgrade:" target="-2" id="fjD-RU-thi"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iK4-4C-6gn">
|
||||
<rect key="frame" x="192" y="59" width="168" height="41"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="39" id="daB-pF-r0B"/>
|
||||
<constraint firstAttribute="width" constant="168" id="rPj-Hi-kCN"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="smallSquare" title="Activate Textual" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="oDA-Wn-QrS">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system" size="15"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="39" id="daB-pF-r0B"/>
|
||||
<constraint firstAttribute="width" constant="168" id="rPj-Hi-kCN"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="actionActivateLicense:" target="-2" id="JQM-0j-h3l"/>
|
||||
</connections>
|
||||
@@ -195,12 +178,12 @@ Gw
|
||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="NMV-Qs-7lz" userLabel="Eligibility Check - Free">
|
||||
<windowStyleMask key="styleMask" titled="YES"/>
|
||||
<rect key="contentRect" x="128" y="143" width="420" height="230"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1440"/>
|
||||
<view key="contentView" id="TsN-yE-dfp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="420" height="225"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
|
||||
<view key="contentView" misplaced="YES" id="TsN-yE-dfp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="420" height="230"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="USW-SV-QEO">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="USW-SV-QEO">
|
||||
<rect key="frame" x="110" y="181" width="200" height="24"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Your upgrade is free!" id="swW-rG-FFU">
|
||||
<font key="font" metaFont="systemBold" size="20"/>
|
||||
@@ -208,7 +191,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="PUt-g1-NNM">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="PUt-g1-NNM">
|
||||
<rect key="frame" x="49" y="118" width="322" height="48"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="T1q-Ug-ZcD">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -220,7 +203,7 @@ Click the “Activate Textual“ button to continue.</string>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="X2Q-y1-pP6">
|
||||
<rect key="frame" x="175" y="13" width="70" height="32"/>
|
||||
<rect key="frame" x="176" y="13" width="69" height="32"/>
|
||||
<buttonCell key="cell" type="push" title="Close" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="IhF-mk-CHo">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -234,14 +217,14 @@ Gw
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VXG-Ri-gpe">
|
||||
<rect key="frame" x="128" y="59" width="165" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="qmY-Qh-SWX"/>
|
||||
<constraint firstAttribute="width" constant="165" id="uU3-fo-KWI"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="smallSquare" title="Activate Textual" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="OZr-al-Gi8">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="systemBold" size="15"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="qmY-Qh-SWX"/>
|
||||
<constraint firstAttribute="width" constant="165" id="uU3-fo-KWI"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="actionActivateLicense:" target="-2" id="ffc-z4-rzc"/>
|
||||
</connections>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -63,7 +63,6 @@
|
||||
<outlet property="editAddressBookEntryButton" destination="1844" id="LTq-3U-HnM"/>
|
||||
<outlet property="editChannelButton" destination="1795" id="1949"/>
|
||||
<outlet property="editHighlightButton" destination="2448" id="2476"/>
|
||||
<outlet property="excludedFromCloudSyncingCheck" destination="dLD-ut-ncd" id="aCB-R6-pq3"/>
|
||||
<outlet property="fallbackEncodingButton" destination="1685" id="2275"/>
|
||||
<outlet property="floodControlDelayTimerSlider" destination="O6l-eN-3Uc" id="l2j-Kb-PsN"/>
|
||||
<outlet property="floodControlMessageCountSlider" destination="RXW-HB-aEa" id="whf-jb-XgS"/>
|
||||
@@ -115,7 +114,7 @@
|
||||
<rect key="frame" x="10" y="10" width="156" height="330"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="c7A-uX-FoM">
|
||||
<rect key="frame" x="1" y="1" width="154" height="328"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" tableStyle="fullWidth" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="19" rowSizeStyle="automatic" usesAutomaticRowHeights="YES" viewBased="YES" floatsGroupRows="NO" indentationPerLevel="15" outlineTableColumn="9ke-X4-49Z" id="Uj0-Wm-eox" customClass="TVCContentNavigationOutlineView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="154" height="328"/>
|
||||
@@ -137,9 +136,9 @@
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView translatesAutoresizingMaskIntoConstraints="NO" id="yDz-eI-nqa">
|
||||
<rect key="frame" x="1" y="1" width="152" height="19"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="152" height="19"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="L6D-B7-wWc">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="L6D-B7-wWc">
|
||||
<rect key="frame" x="0.0" y="2" width="152" height="15"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="VCb-YR-fs2">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -269,7 +268,7 @@ Gw
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="uAb-uY-dJ9" column="4RY-Yh-h0w" id="vk7-v2-TLn">
|
||||
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1538">
|
||||
<textField key="contentView" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1538">
|
||||
<rect key="frame" x="-2" y="112" width="117" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Connection Name:" id="1559">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -279,7 +278,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="uAb-uY-dJ9" column="kwW-4Q-r7S" id="xlG-iw-qu0">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1539" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1539" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="121" y="108" width="239" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="9j5-dY-0rN"/>
|
||||
@@ -295,7 +294,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="hUK-uO-DWz" column="4RY-Yh-h0w" id="NPD-Vl-B1D">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1540">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1540">
|
||||
<rect key="frame" x="-2" y="76" width="117" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Server Address:" id="1557">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -305,7 +304,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="hUK-uO-DWz" column="kwW-4Q-r7S" id="ZvZ-NZ-lR2">
|
||||
<comboBox key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1548" customClass="TVCValidatedComboBox">
|
||||
<comboBox key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1548" customClass="TVCValidatedComboBox">
|
||||
<rect key="frame" x="120" y="70" width="243" height="25"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="6ls-al-2Lu"/>
|
||||
@@ -321,7 +320,7 @@ Gw
|
||||
</comboBox>
|
||||
</gridCell>
|
||||
<gridCell row="akK-h8-k22" column="4RY-Yh-h0w" id="Eny-p2-RoM">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1542">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1542">
|
||||
<rect key="frame" x="-2" y="40" width="117" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Port:" id="1555">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -334,7 +333,7 @@ Gw
|
||||
<stackView key="contentView" distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="A6k-ee-dum">
|
||||
<rect key="frame" x="121" y="36" width="239" height="22"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1541" customClass="TVCValidatedTextField">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1541" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="0.0" y="0.0" width="60" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="60" id="PuT-pr-arX"/>
|
||||
@@ -376,7 +375,7 @@ Gw
|
||||
</stackView>
|
||||
</gridCell>
|
||||
<gridCell row="FhT-p4-Yz2" column="4RY-Yh-h0w" id="h1R-6C-hYu">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1544">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1544">
|
||||
<rect key="frame" x="-2" y="4" width="117" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Server Password:" id="1553">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -386,7 +385,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="FhT-p4-Yz2" column="kwW-4Q-r7S" id="3cc-iU-xNw">
|
||||
<textField key="contentView" toolTip="Password to be sent using the PASS command. This is NOT your password for NickServ." verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1543" customClass="NSSecureTextField">
|
||||
<textField key="contentView" toolTip="Password to be sent using the PASS command. This is NOT your password for NickServ." focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1543" customClass="NSSecureTextField">
|
||||
<rect key="frame" x="121" y="0.0" width="239" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="KsP-sC-2yd"/>
|
||||
@@ -405,65 +404,39 @@ Gw
|
||||
</gridCells>
|
||||
</gridView>
|
||||
<stackView distribution="equalSpacing" orientation="vertical" alignment="leading" spacing="6" verticalStackHuggingPriority="750" verticalHuggingPriority="750" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Z7k-zB-mgb">
|
||||
<rect key="frame" x="113" y="47" width="295" height="82"/>
|
||||
<rect key="frame" x="116" y="69" width="288" height="60"/>
|
||||
<subviews>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="1531">
|
||||
<rect key="frame" x="-2" y="65" width="201" height="18"/>
|
||||
<rect key="frame" x="-2" y="43" width="201" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Connect when Textual opens" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="1536">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="1532">
|
||||
<rect key="frame" x="-2" y="43" width="229" height="18"/>
|
||||
<rect key="frame" x="-2" y="21" width="229" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Perform reconnect on disconnect" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="1535">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="2250">
|
||||
<rect key="frame" x="-2" y="21" width="290" height="18"/>
|
||||
<rect key="frame" x="-2" y="-1" width="290" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Perform reconnect when waking from sleep" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="2251">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="dLD-ut-ncd">
|
||||
<rect key="frame" x="-2" y="-1" width="297" height="18"/>
|
||||
<buttonCell key="cell" type="check" title="Do not share with other devices using iCloud" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="eql-rS-Io2">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="toggleCloudSyncExclusion:" target="-2" id="LNF-gc-rmb"/>
|
||||
<binding destination="iuc-Sg-eeB" name="hidden" keyPath="values.SyncPreferencesToTheCloud" id="n3y-63-lzE">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="iuc-Sg-eeB" name="hidden2" keyPath="values.System -> Built with iCloud Support" previousBinding="n3y-63-lzE" id="phe-S6-jQH">
|
||||
<dictionary key="options">
|
||||
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||
<integer key="NSNoSelectionPlaceholder" value="-1"/>
|
||||
<integer key="NSNotApplicablePlaceholder" value="-1"/>
|
||||
<integer key="NSNullPlaceholder" value="-1"/>
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<visibilityPriorities>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
</visibilityPriorities>
|
||||
<customSpacing>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
</customSpacing>
|
||||
</stackView>
|
||||
</subviews>
|
||||
@@ -492,7 +465,7 @@ Gw
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="Zcw-cx-v0b" column="Lbn-2W-5bD" id="0yd-CU-QAD">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1596">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1596">
|
||||
<rect key="frame" x="-2" y="76" width="144" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Nickname:" id="1618">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -502,7 +475,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="Zcw-cx-v0b" column="w3Z-Ld-gYr" id="CPp-os-0C3">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1595" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1595" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="148" y="72" width="212" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="8E0-IE-YRt"/>
|
||||
@@ -519,7 +492,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="O4O-Ig-L5p" column="Lbn-2W-5bD" id="gAl-oa-fGd">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2336">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2336">
|
||||
<rect key="frame" x="-2" y="40" width="144" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Away Nickname:" id="2341">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -529,7 +502,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="O4O-Ig-L5p" column="w3Z-Ld-gYr" id="kkb-Ih-JRo">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2335" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2335" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="148" y="36" width="212" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="zpG-Ug-YZW"/>
|
||||
@@ -545,7 +518,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="H9A-aR-nQi" column="Lbn-2W-5bD" id="p1Q-6y-hrB">
|
||||
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1603">
|
||||
<textField key="contentView" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1603">
|
||||
<rect key="frame" x="-2" y="4" width="144" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Alternative Nicknames:" id="1611">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -555,7 +528,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="H9A-aR-nQi" column="w3Z-Ld-gYr" id="oh0-Rt-XDV">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1602" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1602" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="148" y="0.0" width="212" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="uTp-8Y-0uU"/>
|
||||
@@ -572,7 +545,7 @@ Gw
|
||||
</gridCell>
|
||||
</gridCells>
|
||||
</gridView>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1601" customClass="NSSecureTextField">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1601" customClass="NSSecureTextField">
|
||||
<rect key="frame" x="228" y="98" width="212" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="gox-5X-KFr"/>
|
||||
@@ -586,7 +559,7 @@ Gw
|
||||
<accessibilityConnection property="title" destination="1623" id="9pE-K8-oT9"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1623">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1623">
|
||||
<rect key="frame" x="100" y="102" width="122" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Personal Password:" id="1626">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -617,7 +590,7 @@ Gw
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="A3c-XH-Q30">
|
||||
<rect key="frame" x="100" y="234" width="320" height="5"/>
|
||||
</box>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1604">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1604">
|
||||
<rect key="frame" x="226" y="249" width="166" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" title="This field is space separated" id="1610">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -640,7 +613,7 @@ Gw
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="hv7-1e-ySA" column="s8y-m2-ky8" id="ODW-v7-wHU">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1598">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1598">
|
||||
<rect key="frame" x="-2" y="40" width="144" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Username:" id="1616">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -650,7 +623,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="hv7-1e-ySA" column="UoC-5W-n5F" id="cWe-EP-PjO">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1597" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1597" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="148" y="36" width="212" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="uho-Mt-WUG"/>
|
||||
@@ -666,7 +639,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="DVI-Kz-YNY" column="s8y-m2-ky8" id="8cf-Vq-00Y">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1600">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1600">
|
||||
<rect key="frame" x="-2" y="4" width="144" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Real name:" id="1614">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -676,7 +649,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="DVI-Kz-YNY" column="UoC-5W-n5F" id="Rhp-1d-fOQ">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1599" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1599" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="148" y="0.0" width="212" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="nEL-Vg-sf4"/>
|
||||
@@ -729,7 +702,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1627" userLabel="Messages View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="520" height="300"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1656">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1656">
|
||||
<rect key="frame" x="33" y="224" width="132" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Part & Quit Message:" id="1668">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -737,7 +710,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1671">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1671">
|
||||
<rect key="frame" x="33" y="125" width="193" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Computer Sleep Quit Message:" id="1674">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -745,7 +718,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2290" customClass="TVCValidatedTextField">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2290" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="35" y="159" width="450" height="57"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="57" id="rHd-qc-Mnq"/>
|
||||
@@ -759,7 +732,7 @@ Gw
|
||||
<accessibilityConnection property="title" destination="1656" id="9XF-4w-7xl"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2294" customClass="TVCValidatedTextField">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2294" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="35" y="60" width="450" height="57"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="57" id="cao-zF-kqD"/>
|
||||
@@ -805,7 +778,7 @@ Gw
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="HQO-PZ-kkO" column="x37-9J-r9J" id="ORJ-7a-we5">
|
||||
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1687">
|
||||
<textField key="contentView" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1687">
|
||||
<rect key="frame" x="-2" y="35" width="65" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Encoding:" id="1690">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -828,7 +801,7 @@ Gw
|
||||
</popUpButton>
|
||||
</gridCell>
|
||||
<gridCell row="ZX4-Aw-6qI" column="x37-9J-r9J" id="y4D-Wl-eCA">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1686">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1686">
|
||||
<rect key="frame" x="-2" y="3" width="65" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Fallback:" id="1691">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -877,7 +850,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="2542" userLabel="ZNC View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="520" height="300"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2590">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2590">
|
||||
<rect key="frame" x="84" y="133" width="352" height="30"/>
|
||||
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Do not show notification bubbles or play sounds for messages that are part of the playback buffer." id="2591">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -909,7 +882,7 @@ Gw
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="JCf-aC-VgE">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="JCf-aC-VgE">
|
||||
<rect key="frame" x="84" y="86" width="252" height="15"/>
|
||||
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="This option requires the “playback” module." id="DES-Fw-k4c">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -973,7 +946,7 @@ Gw
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2599">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2599">
|
||||
<rect key="frame" x="120" y="20" width="281" height="14"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" title="These options target version 1.2 of ZNC and later." id="2600">
|
||||
<font key="font" metaFont="smallSystemBold"/>
|
||||
@@ -1284,7 +1257,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1817" userLabel="Ignores View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="520" height="300"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2358">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2358">
|
||||
<rect key="frame" x="52" y="259" width="223" height="16"/>
|
||||
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Ignore or track the following people:" id="2359">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1322,7 +1295,7 @@ Gw
|
||||
<rect key="frame" x="54" y="54" width="412" height="197"/>
|
||||
<clipView key="contentView" id="wXW-Pe-W5j">
|
||||
<rect key="frame" x="1" y="1" width="410" height="195"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" headerView="NHj-wb-YWi" id="1851" customClass="TVCBasicTableView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="410" height="167"/>
|
||||
@@ -1426,7 +1399,7 @@ Gw
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="fNI-3k-yzt">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="fNI-3k-yzt">
|
||||
<rect key="frame" x="313" y="254" width="152" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" alignment="right" title="This field is line separated" id="Mnf-Uj-ov2">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1466,7 +1439,7 @@ Gw
|
||||
<accessibilityConnection property="title" destination="1881" id="LJb-a8-u9c"/>
|
||||
</connections>
|
||||
</scrollView>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1881">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1881">
|
||||
<rect key="frame" x="55" y="254" width="199" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" title="Perform commands on connect:" id="1882">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1511,7 +1484,7 @@ Gw
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="Wux-ui-Afe" column="UfM-t2-7vL" id="utt-iw-5Mt">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1897">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1897">
|
||||
<rect key="frame" x="-2" y="112" width="70" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Address:" id="1920">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1521,7 +1494,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="Wux-ui-Afe" column="GOB-Ox-jHY" id="Yfy-2w-str">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1901" customClass="TVCValidatedTextField">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1901" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="74" y="108" width="246" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="CHb-rL-Cpx"/>
|
||||
@@ -1537,7 +1510,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="wAW-qX-GTz" column="UfM-t2-7vL" id="ECM-tm-H1X">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1898">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1898">
|
||||
<rect key="frame" x="-2" y="76" width="70" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Port:" id="1919">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1550,7 +1523,7 @@ Gw
|
||||
<stackView key="contentView" distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fud-jH-umc">
|
||||
<rect key="frame" x="74" y="72" width="246" height="22"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="84A-gQ-HPC" customClass="TVCValidatedTextField">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="84A-gQ-HPC" customClass="TVCValidatedTextField">
|
||||
<rect key="frame" x="0.0" y="0.0" width="60" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="3T9-ia-fvT"/>
|
||||
@@ -1583,7 +1556,7 @@ Gw
|
||||
</stackView>
|
||||
</gridCell>
|
||||
<gridCell row="Onw-AC-h2l" column="UfM-t2-7vL" id="SPp-ui-RaR">
|
||||
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1900">
|
||||
<textField key="contentView" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1900">
|
||||
<rect key="frame" x="-2" y="40" width="70" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Username:" id="1917">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1593,7 +1566,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="Onw-AC-h2l" column="GOB-Ox-jHY" id="RwZ-xF-727">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1904">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1904">
|
||||
<rect key="frame" x="74" y="36" width="246" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="jly-CJ-SHw"/>
|
||||
@@ -1609,7 +1582,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="cWB-GJ-DxE" column="UfM-t2-7vL" id="0Qw-1o-Faf">
|
||||
<textField key="contentView" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1899">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1899">
|
||||
<rect key="frame" x="-2" y="4" width="70" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Password:" id="1918">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1619,7 +1592,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="cWB-GJ-DxE" column="GOB-Ox-jHY" id="e8B-zt-fSc">
|
||||
<secureTextField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1902">
|
||||
<secureTextField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1902">
|
||||
<rect key="frame" x="74" y="0.0" width="246" height="22"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="EPx-uC-UQ3"/>
|
||||
@@ -1651,7 +1624,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="yql-kd-PP5">
|
||||
<rect key="frame" x="0.0" y="73" width="520" height="176"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="P8N-qI-sG7">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="P8N-qI-sG7">
|
||||
<rect key="frame" x="78" y="76" width="364" height="48"/>
|
||||
<textFieldCell key="cell" controlSize="mini" selectable="YES" sendsActionOnEndEditing="YES" id="voS-R3-3c7">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1671,7 +1644,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="GFp-Qd-4ck">
|
||||
<rect key="frame" x="0.0" y="73" width="520" height="176"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="fFG-yi-lT4">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="fFG-yi-lT4">
|
||||
<rect key="frame" x="78" y="86" width="364" height="48"/>
|
||||
<textFieldCell key="cell" controlSize="mini" selectable="YES" sendsActionOnEndEditing="YES" id="R86-j6-hCz">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1703,7 +1676,7 @@ Gw
|
||||
<stackView distribution="fill" orientation="horizontal" alignment="firstBaseline" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Uxd-YG-qsq">
|
||||
<rect key="frame" x="118" y="269" width="284" height="20"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1896">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1896">
|
||||
<rect key="frame" x="-2" y="3" width="91" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Type of Proxy:" id="1921">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1743,7 +1716,7 @@ Gw
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
</customSpacing>
|
||||
</stackView>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1978">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="1978">
|
||||
<rect key="frame" x="211" y="249" width="236" height="15"/>
|
||||
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="This option requires a reconnect to apply" id="1979">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1755,7 +1728,7 @@ Gw
|
||||
<rect key="frame" x="48" y="30" width="424" height="43"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Of6-s1-mF9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="424" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textView editable="NO" drawsBackground="NO" importsGraphics="NO" verticallyResizable="YES" findStyle="panel" id="hIR-WT-lAK">
|
||||
<rect key="frame" x="0.0" y="42" width="424" height="43"/>
|
||||
@@ -1856,7 +1829,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="2078" userLabel="Flood Control">
|
||||
<rect key="frame" x="0.0" y="0.0" width="520" height="300"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1gq-lL-Ur6">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1gq-lL-Ur6">
|
||||
<rect key="frame" x="93" y="35" width="335" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" title="The options presented above require a reconnect to apply." id="MJ0-IQ-dNi">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1864,7 +1837,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="CGo-eo-J2e">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="CGo-eo-J2e">
|
||||
<rect key="frame" x="33" y="249" width="376" height="16"/>
|
||||
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" title="Do not send more than X number of commands in Y seconds." id="XQt-eN-ufQ">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1872,7 +1845,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="rXs-B6-ItZ">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="rXs-B6-ItZ">
|
||||
<rect key="frame" x="400" y="124" width="85" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" alignment="right" title="Current Value:" id="U5o-dB-jmW">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1887,7 +1860,7 @@ Gw
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="w11-kJ-IPr">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="w11-kJ-IPr">
|
||||
<rect key="frame" x="402" y="181" width="85" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" alignment="right" title="Current Value:" id="eMt-al-rqd">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1902,7 +1875,7 @@ Gw
|
||||
</binding>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Itb-Ee-5gX">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Itb-Ee-5gX">
|
||||
<rect key="frame" x="45" y="124" width="142" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Y: Number of seconds:" id="Jay-s8-9Xn">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -1913,7 +1886,7 @@ Gw
|
||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="7" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bJz-Am-LvT">
|
||||
<rect key="frame" x="47" y="96" width="436" height="20"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9b4-kF-7N0">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9b4-kF-7N0">
|
||||
<rect key="frame" x="-2" y="3" width="10" height="15"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="1" id="zP6-2E-iaW">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1932,7 +1905,7 @@ Gw
|
||||
<binding destination="-2" name="value" keyPath="self.floodControlDelayTimerSliderTempValue" id="ICJ-8T-e2n"/>
|
||||
</connections>
|
||||
</slider>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pDB-qm-dyE">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pDB-qm-dyE">
|
||||
<rect key="frame" x="418" y="3" width="20" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="60" id="9bE-uW-eqe">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1955,7 +1928,7 @@ Gw
|
||||
<stackView distribution="fill" orientation="horizontal" alignment="centerY" horizontalStackHuggingPriority="250" verticalStackHuggingPriority="250" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lqs-Qy-WoE">
|
||||
<rect key="frame" x="47" y="153" width="438" height="20"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kGJ-aW-aWu">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kGJ-aW-aWu">
|
||||
<rect key="frame" x="-2" y="3" width="10" height="15"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="1" id="ZNS-JS-fS4">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1974,7 +1947,7 @@ Gw
|
||||
<binding destination="-2" name="value" keyPath="self.floodControlMessageCountSliderTempValue" id="5Wa-WZ-Qhz"/>
|
||||
</connections>
|
||||
</slider>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sAt-Ob-XHX">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="sAt-Ob-XHX">
|
||||
<rect key="frame" x="420" y="3" width="20" height="15"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="60" id="y5u-45-pvs">
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
@@ -1994,7 +1967,7 @@ Gw
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
</customSpacing>
|
||||
</stackView>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Af-cs-B5g">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Af-cs-B5g">
|
||||
<rect key="frame" x="45" y="181" width="159" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="X: Number of commands:" id="jHb-Iz-2jU">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2072,7 +2045,7 @@ Gw
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
</customSpacing>
|
||||
</stackView>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="46W-2g-sYj">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="46W-2g-sYj">
|
||||
<rect key="frame" x="33" y="71" width="88" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Cipher suites:" id="Qfh-rz-IdC">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2108,7 +2081,7 @@ Gw
|
||||
<action selector="preferredCipherSuitesViewList:" target="-2" id="UQs-lq-m95"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T3E-ox-F6h">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T3E-ox-F6h">
|
||||
<rect key="frame" x="33" y="216" width="96" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Connect using:" id="B8q-jl-QtB">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2185,7 +2158,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Ti4-Q4-cYX" userLabel="CertFP View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="520" height="300"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zU1-IR-zpt">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zU1-IR-zpt">
|
||||
<rect key="frame" x="33" y="249" width="339" height="16"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Select a certificate to send when you connect securely." id="rIl-yx-VEH">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2244,7 +2217,7 @@ Gw
|
||||
</columns>
|
||||
<gridCells>
|
||||
<gridCell row="y0w-uO-wey" column="mzu-pc-PbB" id="bNC-ND-dl8">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vOo-Hg-7M0">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vOo-Hg-7M0">
|
||||
<rect key="frame" x="-2" y="132" width="141" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Certificate Name:" usesSingleLineMode="YES" id="pxF-PC-Aax">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2254,7 +2227,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="y0w-uO-wey" column="bSr-v0-1FE" id="rAb-fO-YcL">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nly-3d-FIq">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nly-3d-FIq">
|
||||
<rect key="frame" x="143" y="132" width="279" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" title="Label" usesSingleLineMode="YES" id="bvj-Qr-Ebk">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2268,7 +2241,7 @@ Gw
|
||||
</gridCell>
|
||||
<gridCell row="y0w-uO-wey" column="70M-PD-rGb" id="0lV-42-QBZ"/>
|
||||
<gridCell row="LVM-ri-oUP" column="mzu-pc-PbB" id="Pre-xR-cqo">
|
||||
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eya-pw-9DN">
|
||||
<textField key="contentView" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eya-pw-9DN">
|
||||
<rect key="frame" x="-2" y="87" width="141" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="SHA-512 Fingerprint:" usesSingleLineMode="YES" id="dJe-xa-bmY">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2278,7 +2251,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="LVM-ri-oUP" column="bSr-v0-1FE" id="7JN-IO-EJT">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Ou1-Bl-kz1">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Ou1-Bl-kz1">
|
||||
<rect key="frame" x="143" y="87" width="279" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" title="Label" usesSingleLineMode="YES" id="Cy6-oh-U2a">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2304,7 +2277,7 @@ Gw
|
||||
</button>
|
||||
</gridCell>
|
||||
<gridCell row="mRF-0R-krg" column="mzu-pc-PbB" id="fOI-GS-UCM">
|
||||
<textField key="contentView" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fdC-a6-iNA">
|
||||
<textField key="contentView" focusRingType="none" horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fdC-a6-iNA">
|
||||
<rect key="frame" x="-2" y="59" width="141" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="SHA-2 Fingerprint:" usesSingleLineMode="YES" id="jhF-Ix-th5">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2314,7 +2287,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="mRF-0R-krg" column="bSr-v0-1FE" id="QPa-gG-WYl">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2ie-9H-xb2">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2ie-9H-xb2">
|
||||
<rect key="frame" x="143" y="59" width="279" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" title="Label" usesSingleLineMode="YES" id="Gbb-jh-4mY">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2340,7 +2313,7 @@ Gw
|
||||
</button>
|
||||
</gridCell>
|
||||
<gridCell row="1CG-bD-ulB" column="mzu-pc-PbB" id="IU7-Q5-HCF">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="h8M-bR-Uth">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="h8M-bR-Uth">
|
||||
<rect key="frame" x="-2" y="31" width="141" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="SHA-1 Fingerprint:" usesSingleLineMode="YES" id="O13-rx-ewF">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2350,7 +2323,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="1CG-bD-ulB" column="bSr-v0-1FE" id="04Y-ei-D2h">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nFm-83-7HQ">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="nFm-83-7HQ">
|
||||
<rect key="frame" x="143" y="31" width="279" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" title="Label" usesSingleLineMode="YES" id="Sia-Zk-rSR">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2376,7 +2349,7 @@ Gw
|
||||
</button>
|
||||
</gridCell>
|
||||
<gridCell row="DDA-TD-JgL" column="mzu-pc-PbB" id="Is8-DS-Eu3">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Fm4-76-q5h">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Fm4-76-q5h">
|
||||
<rect key="frame" x="-2" y="3" width="141" height="16"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="MD5 Fingerprint:" usesSingleLineMode="YES" id="Mmj-Ja-V8x">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2386,7 +2359,7 @@ Gw
|
||||
</textField>
|
||||
</gridCell>
|
||||
<gridCell row="DDA-TD-JgL" column="bSr-v0-1FE" id="abJ-zN-WA0">
|
||||
<textField key="contentView" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Grr-p8-MOF">
|
||||
<textField key="contentView" focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Grr-p8-MOF">
|
||||
<rect key="frame" x="143" y="3" width="279" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" sendsActionOnEndEditing="YES" alignment="left" title="Label" usesSingleLineMode="YES" id="MCd-Ig-Szi">
|
||||
<font key="font" metaFont="system"/>
|
||||
@@ -2447,7 +2420,7 @@ Gw
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="O3J-xl-nwg" userLabel="Redundancy">
|
||||
<rect key="frame" x="0.0" y="0.0" width="520" height="300"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="I5e-l8-5t3">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="I5e-l8-5t3">
|
||||
<rect key="frame" x="33" y="217" width="454" height="48"/>
|
||||
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="SnQ-4b-NG2">
|
||||
<font key="font" metaFont="system"/>
|
||||
|
||||
@@ -1008,13 +1008,6 @@ CQ
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" tag="9050001" id="VTu-dA-PTE"/>
|
||||
<menuItem title="Using iCloud with Textual" tag="9050002" id="aO8-3y-WHh">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="openHelpMenuItem:" target="267" id="woi-33-SkS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" tag="9050003" id="Lpo-5n-kp3"/>
|
||||
<menuItem title="Chat Encryption" tag="9050004" id="w1H-u0-OYW">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -21,9 +21,6 @@
|
||||
4C46A15B20EC6F3100094EA4 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C46A15C20EC6F3100094EA4 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C46A16020EC6F3100094EA4 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C46A16320EC6F3100094EA4 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C46A16420EC6F3100094EA4 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C46A16820EC6F3100094EA4 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C46A16C20EC6F3100094EA4 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C46A16D20EC6F3100094EA4 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4C46A16E20EC6F3100094EA4 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -135,7 +132,6 @@
|
||||
4C46A15820EC6F3100094EA4 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C46A16120EC6F3100094EA4 /* App Store Release */,
|
||||
4C46A16A20EC6F3100094EA4 /* Common */,
|
||||
4C46A17D20EC6F3100094EA4 /* Debug */,
|
||||
4C46A15920EC6F3100094EA4 /* Standard Release */,
|
||||
@@ -154,16 +150,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C46A16120EC6F3100094EA4 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C46A16820EC6F3100094EA4 /* Enabled Features.xcconfig */,
|
||||
4C46A16420EC6F3100094EA4 /* Textual Extensions.xcconfig */,
|
||||
4C46A16320EC6F3100094EA4 /* Textual.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C46A16A20EC6F3100094EA4 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -325,7 +311,6 @@
|
||||
};
|
||||
4CCD21E41FA41DE20056F5FE /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4C46A16420EC6F3100094EA4 /* Textual Extensions.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
|
||||
@@ -23,9 +23,6 @@
|
||||
4C1D108820EBF3C000E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D108920EBF3C000E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D108D20EBF3C000E72D80 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D109120EBF3C000E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D109220EBF3C000E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D109620EBF3C000E72D80 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D109B20EBF3C000E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D109C20EBF3C000E72D80 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D109D20EBF3C000E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -108,7 +105,6 @@
|
||||
4C1D108420EBF3C000E72D80 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C1D108E20EBF3C000E72D80 /* App Store Release */,
|
||||
4C1D109820EBF3C000E72D80 /* Common */,
|
||||
4C1D10AD20EBF3C000E72D80 /* Debug */,
|
||||
4C1D108520EBF3C000E72D80 /* Standard Release */,
|
||||
@@ -127,16 +123,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1D108E20EBF3C000E72D80 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C1D109620EBF3C000E72D80 /* Enabled Features.xcconfig */,
|
||||
4C1D109220EBF3C000E72D80 /* Textual Extensions.xcconfig */,
|
||||
4C1D109120EBF3C000E72D80 /* Textual.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1D109820EBF3C000E72D80 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -384,7 +370,6 @@
|
||||
};
|
||||
4CCD21EE1FA41E390056F5FE /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4C1D109220EBF3C000E72D80 /* Textual Extensions.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
4C1D10E820EBF45200E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D10E920EBF45200E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D10ED20EBF45200E72D80 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D10F120EBF45200E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D10F220EBF45200E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D10F620EBF45200E72D80 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D10FB20EBF45200E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D10FC20EBF45200E72D80 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D10FD20EBF45200E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -93,7 +90,6 @@
|
||||
4C1D10E420EBF45200E72D80 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C1D10EE20EBF45200E72D80 /* App Store Release */,
|
||||
4C1D10F820EBF45200E72D80 /* Common */,
|
||||
4C1D110D20EBF45200E72D80 /* Debug */,
|
||||
4C1D10E520EBF45200E72D80 /* Standard Release */,
|
||||
@@ -112,16 +108,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1D10EE20EBF45200E72D80 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C1D10F620EBF45200E72D80 /* Enabled Features.xcconfig */,
|
||||
4C1D10F220EBF45200E72D80 /* Textual Extensions.xcconfig */,
|
||||
4C1D10F120EBF45200E72D80 /* Textual.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1D10F820EBF45200E72D80 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -330,7 +316,6 @@
|
||||
};
|
||||
4C9580121FA41EA700F18BC8 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4C1D10F220EBF45200E72D80 /* Textual Extensions.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
|
||||
@@ -29,9 +29,6 @@
|
||||
4CE1439920EBF551000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1439A20EBF551000E01C9 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1439E20EBF551000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE143A220EBF551000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE143A320EBF551000E01C9 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE143A720EBF551000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE143AC20EBF551000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE143AD20EBF551000E01C9 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE143AE20EBF551000E01C9 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -145,7 +142,6 @@
|
||||
4CE1439520EBF551000E01C9 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1439F20EBF551000E01C9 /* App Store Release */,
|
||||
4CE143A920EBF551000E01C9 /* Common */,
|
||||
4CE143BE20EBF551000E01C9 /* Debug */,
|
||||
4CE1439620EBF551000E01C9 /* Standard Release */,
|
||||
@@ -164,16 +160,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE1439F20EBF551000E01C9 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE143A720EBF551000E01C9 /* Enabled Features.xcconfig */,
|
||||
4CE143A320EBF551000E01C9 /* Textual Extensions.xcconfig */,
|
||||
4CE143A220EBF551000E01C9 /* Textual.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE143A920EBF551000E01C9 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -338,7 +324,6 @@
|
||||
};
|
||||
4C95801E1FA41F6D00F18BC8 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4CE143A320EBF551000E01C9 /* Textual Extensions.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
|
||||
@@ -21,9 +21,6 @@
|
||||
4CE1433920EBF4F3000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1433A20EBF4F3000E01C9 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1433E20EBF4F3000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1434220EBF4F3000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1434320EBF4F3000E01C9 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1434720EBF4F3000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1434C20EBF4F3000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1434D20EBF4F3000E01C9 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1434E20EBF4F3000E01C9 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -124,7 +121,6 @@
|
||||
4CE1433520EBF4F3000E01C9 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1433F20EBF4F3000E01C9 /* App Store Release */,
|
||||
4CE1434920EBF4F3000E01C9 /* Common */,
|
||||
4CE1435E20EBF4F3000E01C9 /* Debug */,
|
||||
4CE1433620EBF4F3000E01C9 /* Standard Release */,
|
||||
@@ -143,16 +139,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE1433F20EBF4F3000E01C9 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1434720EBF4F3000E01C9 /* Enabled Features.xcconfig */,
|
||||
4CE1434320EBF4F3000E01C9 /* Textual Extensions.xcconfig */,
|
||||
4CE1434220EBF4F3000E01C9 /* Textual.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE1434920EBF4F3000E01C9 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -306,7 +292,6 @@
|
||||
};
|
||||
4C9580181FA41EE300F18BC8 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4CE1434320EBF4F3000E01C9 /* Textual Extensions.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
4C1D102820EBF29F00E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D102920EBF29F00E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D102D20EBF29F00E72D80 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D103120EBF29F00E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D103220EBF29F00E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D103620EBF29F00E72D80 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D103B20EBF29F00E72D80 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4C1D103C20EBF29F00E72D80 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4C1D103D20EBF29F00E72D80 /* Textual Extensions.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Textual Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -94,7 +91,6 @@
|
||||
4C1D102420EBF29F00E72D80 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C1D102E20EBF29F00E72D80 /* App Store Release */,
|
||||
4C1D103820EBF29F00E72D80 /* Common */,
|
||||
4C1D104D20EBF29F00E72D80 /* Debug */,
|
||||
4C1D102520EBF29F00E72D80 /* Standard Release */,
|
||||
@@ -113,16 +109,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1D102E20EBF29F00E72D80 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C1D103620EBF29F00E72D80 /* Enabled Features.xcconfig */,
|
||||
4C1D103220EBF29F00E72D80 /* Textual Extensions.xcconfig */,
|
||||
4C1D103120EBF29F00E72D80 /* Textual.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4C1D103820EBF29F00E72D80 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -310,7 +296,6 @@
|
||||
};
|
||||
4C95802A1FA4204000F18BC8 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4C1D103220EBF29F00E72D80 /* Textual Extensions.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>8482Q6EPL6.com.codeux.irc.textual</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
+1
-37
@@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 53;
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@@ -43,9 +43,6 @@
|
||||
4CE145EB20EC0F7F000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE145EE20EC0F7F000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145F020EC0F7F000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145F420EC0F7F000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE145F720EC0F7F000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145F920EC0F7F000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145FE20EC0F7F000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE145FF20EC0F7F000E01C9 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1460220EC0F7F000E01C9 /* Foundation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Foundation.xcconfig; sourceTree = "<group>"; };
|
||||
@@ -57,7 +54,6 @@
|
||||
4CE1461320EC0F7F000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1461620EC0F7F000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1461820EC0F7F000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1461B20EC0FAF000E01C9 /* App Store.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "App Store.entitlements"; sourceTree = "<group>"; };
|
||||
4CE1461C20EC0FAF000E01C9 /* Release.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@@ -250,7 +246,6 @@
|
||||
4CE145E720EC0F7F000E01C9 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE145F120EC0F7F000E01C9 /* App Store Release */,
|
||||
4CE145FB20EC0F7F000E01C9 /* Common */,
|
||||
4CE1461020EC0F7F000E01C9 /* Debug */,
|
||||
4CE145E820EC0F7F000E01C9 /* Standard Release */,
|
||||
@@ -269,16 +264,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE145F120EC0F7F000E01C9 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE145F920EC0F7F000E01C9 /* Enabled Features.xcconfig */,
|
||||
4CE145F420EC0F7F000E01C9 /* Textual.xcconfig */,
|
||||
4CE145F720EC0F7F000E01C9 /* XPC Services.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE145FB20EC0F7F000E01C9 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -314,7 +299,6 @@
|
||||
4CE1461920EC0F7F000E01C9 /* Sandbox */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1461B20EC0FAF000E01C9 /* App Store.entitlements */,
|
||||
4CE1461C20EC0FAF000E01C9 /* Release.entitlements */,
|
||||
);
|
||||
name = Sandbox;
|
||||
@@ -441,24 +425,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
4C761BED1E15751C00A505B7 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4CE145F720EC0F7F000E01C9 /* XPC Services.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
};
|
||||
4C761BEE1E15751C00A505B7 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = "${PROJECT_DIR}/Configurations/Sandbox/App Store.entitlements";
|
||||
GCC_PREFIX_HEADER = "${SRCROOT}/Classes/Headers/Private/HSLHistoricLogPCHPrivate.h";
|
||||
INFOPLIST_FILE = "Resources/Property Lists/Info.plist";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.codeux.app-utilities.Textual-ScrollbackHistoryManager";
|
||||
PRODUCT_NAME = "Scrollback History Manager";
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@@ -467,7 +433,6 @@
|
||||
buildConfigurations = (
|
||||
4C442C921E13B3D200B187F4 /* Debug */,
|
||||
4C442C931E13B3D200B187F4 /* Release */,
|
||||
4C761BED1E15751C00A505B7 /* Release (App Store) */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
@@ -477,7 +442,6 @@
|
||||
buildConfigurations = (
|
||||
4C442C951E13B3D200B187F4 /* Debug */,
|
||||
4C442C961E13B3D200B187F4 /* Release */,
|
||||
4C761BEE1E15751C00A505B7 /* Release (App Store) */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>8482Q6EPL6.com.codeux.irc.textual</string>
|
||||
</array>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
+1
-40
@@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 53;
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@@ -78,9 +78,6 @@
|
||||
4CE143F920EBF5DB000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE143FC20EBF5DB000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE143FE20EBF5DB000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1440220EBF5DB000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1440520EBF5DB000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1440720EBF5DB000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1440C20EBF5DB000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1440D20EBF5DB000E01C9 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1441020EBF5DB000E01C9 /* Foundation.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Foundation.xcconfig; sourceTree = "<group>"; };
|
||||
@@ -94,7 +91,6 @@
|
||||
4CE1442620EBF5DB000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1445520EBF641000E01C9 /* Network.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Network.framework; path = System/Library/Frameworks/Network.framework; sourceTree = SDKROOT; };
|
||||
4CE1448120EC0209000E01C9 /* Release.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||
4CE1448220EC020A000E01C9 /* App Store.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "App Store.entitlements"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -384,7 +380,6 @@
|
||||
4CE143F520EBF5DB000E01C9 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE143FF20EBF5DB000E01C9 /* App Store Release */,
|
||||
4CE1440920EBF5DB000E01C9 /* Common */,
|
||||
4CE1441E20EBF5DB000E01C9 /* Debug */,
|
||||
4CE143F620EBF5DB000E01C9 /* Standard Release */,
|
||||
@@ -403,16 +398,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE143FF20EBF5DB000E01C9 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1440720EBF5DB000E01C9 /* Enabled Features.xcconfig */,
|
||||
4CE1440220EBF5DB000E01C9 /* Textual.xcconfig */,
|
||||
4CE1440520EBF5DB000E01C9 /* XPC Services.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE1440920EBF5DB000E01C9 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -448,7 +433,6 @@
|
||||
4CE1442720EBF5DB000E01C9 /* Sandbox */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1448220EC020A000E01C9 /* App Store.entitlements */,
|
||||
4CE1448120EC0209000E01C9 /* Release.entitlements */,
|
||||
);
|
||||
name = Sandbox;
|
||||
@@ -611,27 +595,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
4C1406641F11965A00C73D53 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4CE1440520EBF5DB000E01C9 /* XPC Services.xcconfig */;
|
||||
buildSettings = {
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "${PROJECT_DIR}/Classes/Headers/Private/SwiftBridgingHeaderPrivate.h";
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
};
|
||||
4C1406651F11965A00C73D53 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "${PROJECT_DIR}/Configurations/Sandbox/App Store.entitlements";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_PREFIX_HEADER = "${PROJECT_DIR}/Classes/Headers/Private/RCMProcessPCHPrivate.h";
|
||||
INFOPLIST_FILE = "Resources/Property Lists/Info.plist";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.codeux.app-utilities.Textual-IRCConnectionHost";
|
||||
PRODUCT_NAME = "IRC Connection Host";
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@@ -640,7 +603,6 @@
|
||||
buildConfigurations = (
|
||||
4C14064C1F11942B00C73D53 /* Debug */,
|
||||
4C14064D1F11942B00C73D53 /* Release */,
|
||||
4C1406641F11965A00C73D53 /* Release (App Store) */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
@@ -650,7 +612,6 @@
|
||||
buildConfigurations = (
|
||||
4C14064F1F11942B00C73D53 /* Debug */,
|
||||
4C1406501F11942B00C73D53 /* Release */,
|
||||
4C1406651F11965A00C73D53 /* Release (App Store) */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key>
|
||||
<true/>
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>8482Q6EPL6.com.codeux.irc.textual</string>
|
||||
</array>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.network.client</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
-14
@@ -75,9 +75,6 @@
|
||||
4CE145B220EC0D5A000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE145B620EC0D5A000E01C9 /* XPC Service - ICL Extensions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "XPC Service - ICL Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145B720EC0D5A000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145BB20EC0D5A000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE145BF20EC0D5A000E01C9 /* XPC Service - ICL Extensions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "XPC Service - ICL Extensions.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145C020EC0D5A000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145C520EC0D5A000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE145C620EC0D5A000E01C9 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE145C920EC0D5A000E01C9 /* Foundation.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Foundation.xcconfig; sourceTree = "<group>"; };
|
||||
@@ -435,7 +432,6 @@
|
||||
4CE145AE20EC0D5A000E01C9 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE145B820EC0D5A000E01C9 /* App Store Release */,
|
||||
4CE145C220EC0D5A000E01C9 /* Common */,
|
||||
4CE145D720EC0D5A000E01C9 /* Debug */,
|
||||
4CE145AF20EC0D5A000E01C9 /* Standard Release */,
|
||||
@@ -454,16 +450,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE145B820EC0D5A000E01C9 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE145C020EC0D5A000E01C9 /* Enabled Features.xcconfig */,
|
||||
4CE145BB20EC0D5A000E01C9 /* Textual.xcconfig */,
|
||||
4CE145BF20EC0D5A000E01C9 /* XPC Service - ICL Extensions.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE145C220EC0D5A000E01C9 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
||||
@@ -160,10 +160,6 @@
|
||||
4CE1448920EC02A3000E01C9 /* XPC Service - ICL.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Service - ICL.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1448A20EC02A3000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1448C20EC02A3000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1449020EC02A3000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1449220EC02A3000E01C9 /* XPC Service - ICL.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Service - ICL.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1449320EC02A3000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1449520EC02A3000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1449A20EC02A3000E01C9 /* Textual.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Textual.xcconfig; sourceTree = "<group>"; };
|
||||
4CE1449B20EC02A3000E01C9 /* Preserve Symbols.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Preserve Symbols.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE1449D20EC02A3000E01C9 /* XPC Service - ICL.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Service - ICL.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -178,7 +174,6 @@
|
||||
4CE144B120EC02A3000E01C9 /* XPC Service - ICL.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Service - ICL.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE144B220EC02A3000E01C9 /* XPC Services.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "XPC Services.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE144B420EC02A3000E01C9 /* Enabled Features.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Enabled Features.xcconfig"; sourceTree = "<group>"; };
|
||||
4CE144E320EC02BD000E01C9 /* App Store.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "App Store.entitlements"; sourceTree = "<group>"; };
|
||||
4CE144E420EC02BD000E01C9 /* Release.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||
4CE144E520EC0381000E01C9 /* ICLInlineContentProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ICLInlineContentProtocol.h; path = Classes/Headers/Private/ICLInlineContentProtocol.h; sourceTree = SOURCE_ROOT; };
|
||||
4CE58BA91F8A5F8500493E7C /* GRMustache.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GRMustache.framework; path = "../../Frameworks/Static Libraries/Libraries/GRMustache.framework"; sourceTree = SOURCE_ROOT; };
|
||||
@@ -454,7 +449,6 @@
|
||||
4CE1448320EC02A3000E01C9 /* Build */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1448D20EC02A3000E01C9 /* App Store Release */,
|
||||
4CE1449720EC02A3000E01C9 /* Common */,
|
||||
4CE144AC20EC02A3000E01C9 /* Debug */,
|
||||
4CE1448420EC02A3000E01C9 /* Standard Release */,
|
||||
@@ -474,17 +468,6 @@
|
||||
path = "Standard Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE1448D20EC02A3000E01C9 /* App Store Release */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE1449520EC02A3000E01C9 /* Enabled Features.xcconfig */,
|
||||
4CE1449020EC02A3000E01C9 /* Textual.xcconfig */,
|
||||
4CE1449220EC02A3000E01C9 /* XPC Service - ICL.xcconfig */,
|
||||
4CE1449320EC02A3000E01C9 /* XPC Services.xcconfig */,
|
||||
);
|
||||
path = "App Store Release";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
4CE1449720EC02A3000E01C9 /* Common */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -523,7 +506,6 @@
|
||||
4CE144B520EC02A3000E01C9 /* Sandbox */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4CE144E320EC02BD000E01C9 /* App Store.entitlements */,
|
||||
4CE144E420EC02BD000E01C9 /* Release.entitlements */,
|
||||
);
|
||||
name = Sandbox;
|
||||
@@ -714,24 +696,6 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
4C1406641F11965A00C73D53 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4CE1449220EC02A3000E01C9 /* XPC Service - ICL.xcconfig */;
|
||||
buildSettings = {
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
};
|
||||
4C1406651F11965A00C73D53 /* Release (App Store) */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_ENTITLEMENTS = "${PROJECT_DIR}/Configurations/Sandbox/App Store.entitlements";
|
||||
GCC_PREFIX_HEADER = "${PROJECT_DIR}/Classes/Headers/Private/ICLProcessPCHPrivate.h";
|
||||
INFOPLIST_FILE = "Resources/Property Lists/Info.plist";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.codeux.app-utilities.Textual-InlineContentLoader";
|
||||
PRODUCT_NAME = "Inline Content Loader";
|
||||
};
|
||||
name = "Release (App Store)";
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
@@ -740,7 +704,6 @@
|
||||
buildConfigurations = (
|
||||
4C14064C1F11942B00C73D53 /* Debug */,
|
||||
4C14064D1F11942B00C73D53 /* Release */,
|
||||
4C1406641F11965A00C73D53 /* Release (App Store) */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
@@ -750,7 +713,6 @@
|
||||
buildConfigurations = (
|
||||
4C14064F1F11942B00C73D53 /* Debug */,
|
||||
4C1406501F11942B00C73D53 /* Release */,
|
||||
4C1406651F11965A00C73D53 /* Release (App Store) */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
|
||||
Reference in New Issue
Block a user