commit
8eee8767d1
22 changed files with 3458 additions and 0 deletions
@ -0,0 +1,77 @@
|
||||
.DS_Store |
||||
|
||||
### Swift ### |
||||
# Xcode |
||||
# |
||||
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore |
||||
|
||||
## Build generated |
||||
build/ |
||||
DerivedData/ |
||||
|
||||
## Various settings |
||||
*.pbxuser |
||||
!default.pbxuser |
||||
*.mode1v3 |
||||
!default.mode1v3 |
||||
*.mode2v3 |
||||
!default.mode2v3 |
||||
*.perspectivev3 |
||||
!default.perspectivev3 |
||||
xcuserdata/ |
||||
|
||||
## Other |
||||
*.moved-aside |
||||
*.xccheckout |
||||
*.xcscmblueprint |
||||
|
||||
## Obj-C/Swift specific |
||||
*.hmap |
||||
*.ipa |
||||
*.dSYM.zip |
||||
*.dSYM |
||||
|
||||
## Playgrounds |
||||
timeline.xctimeline |
||||
playground.xcworkspace |
||||
|
||||
# Swift Package Manager |
||||
# |
||||
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. |
||||
# Packages/ |
||||
# Package.pins |
||||
.build/ |
||||
|
||||
# CocoaPods - Refactored to standalone file |
||||
|
||||
# Carthage - Refactored to standalone file |
||||
|
||||
# fastlane |
||||
# |
||||
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the |
||||
# screenshots whenever they are needed. |
||||
# For more information about the recommended setup visit: |
||||
# https://docs.fastlane.tools/best-practices/source-control/#source-control |
||||
|
||||
fastlane/report.xml |
||||
fastlane/Preview.html |
||||
fastlane/screenshots |
||||
fastlane/test_output |
||||
|
||||
### Xcode ### |
||||
# Xcode |
||||
# |
||||
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore |
||||
|
||||
## Build generated |
||||
|
||||
## Various settings |
||||
|
||||
## Other |
||||
|
||||
### Xcode Patch ### |
||||
*.xcodeproj/* |
||||
!*.xcodeproj/project.pbxproj |
||||
!*.xcodeproj/xcshareddata/ |
||||
!*.xcworkspace/contents.xcworkspacedata |
||||
/*.gcno |
@ -0,0 +1,468 @@
|
||||
// !$*UTF8*$! |
||||
{ |
||||
archiveVersion = 1; |
||||
classes = { |
||||
}; |
||||
objectVersion = 50; |
||||
objects = { |
||||
|
||||
/* Begin PBXBuildFile section */ |
||||
D60C863923CA2DD100C9DB8E /* ServerConnectWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D60C863723CA2DD100C9DB8E /* ServerConnectWindowController.swift */; }; |
||||
D60C863A23CA2DD100C9DB8E /* ServerConnectWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D60C863823CA2DD100C9DB8E /* ServerConnectWindowController.xib */; }; |
||||
D60C863F23CA2E2100C9DB8E /* ServerConnectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D60C863D23CA2E2100C9DB8E /* ServerConnectViewController.swift */; }; |
||||
D60C864023CA2E2100C9DB8E /* ServerConnectViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D60C863E23CA2E2100C9DB8E /* ServerConnectViewController.xib */; }; |
||||
D63CDEBE23C837DC0012D658 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63CDEBD23C837DC0012D658 /* AppDelegate.swift */; }; |
||||
D63CDEC023C837DD0012D658 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D63CDEBF23C837DD0012D658 /* Assets.xcassets */; }; |
||||
D63CDEC323C837DD0012D658 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = D63CDEC123C837DD0012D658 /* MainMenu.xib */; }; |
||||
D63CDF1F23C837F10012D658 /* CLibMongoC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1623C837F10012D658 /* CLibMongoC.framework */; }; |
||||
D63CDF2023C837F10012D658 /* CLibMongoC.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1623C837F10012D658 /* CLibMongoC.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2123C837F10012D658 /* CNIOAtomics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1723C837F10012D658 /* CNIOAtomics.framework */; }; |
||||
D63CDF2223C837F10012D658 /* CNIOAtomics.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1723C837F10012D658 /* CNIOAtomics.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2323C837F10012D658 /* CNIODarwin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1823C837F10012D658 /* CNIODarwin.framework */; }; |
||||
D63CDF2423C837F10012D658 /* CNIODarwin.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1823C837F10012D658 /* CNIODarwin.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2523C837F10012D658 /* CNIOLinux.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1923C837F10012D658 /* CNIOLinux.framework */; }; |
||||
D63CDF2623C837F10012D658 /* CNIOLinux.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1923C837F10012D658 /* CNIOLinux.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2723C837F10012D658 /* CNIOSHA1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1A23C837F10012D658 /* CNIOSHA1.framework */; }; |
||||
D63CDF2823C837F10012D658 /* CNIOSHA1.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1A23C837F10012D658 /* CNIOSHA1.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2923C837F10012D658 /* MongoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1B23C837F10012D658 /* MongoSwift.framework */; }; |
||||
D63CDF2A23C837F10012D658 /* MongoSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1B23C837F10012D658 /* MongoSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2B23C837F10012D658 /* MongoSwiftSync.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1C23C837F10012D658 /* MongoSwiftSync.framework */; }; |
||||
D63CDF2C23C837F10012D658 /* MongoSwiftSync.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1C23C837F10012D658 /* MongoSwiftSync.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2D23C837F10012D658 /* NIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1D23C837F10012D658 /* NIO.framework */; }; |
||||
D63CDF2E23C837F10012D658 /* NIO.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1D23C837F10012D658 /* NIO.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF2F23C837F10012D658 /* NIOConcurrencyHelpers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1E23C837F10012D658 /* NIOConcurrencyHelpers.framework */; }; |
||||
D63CDF3023C837F10012D658 /* NIOConcurrencyHelpers.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D63CDF1E23C837F10012D658 /* NIOConcurrencyHelpers.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
||||
D63CDF3723C8381A0012D658 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63CDF3323C838190012D658 /* Node.swift */; }; |
||||
D63CDF3823C8381A0012D658 /* MongoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63CDF3423C838190012D658 /* MongoController.swift */; }; |
||||
D63CDF3C23C838470012D658 /* DatabaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63CDF3A23C838470012D658 /* DatabaseWindowController.swift */; }; |
||||
D63CDF3D23C838470012D658 /* DatabaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D63CDF3B23C838470012D658 /* DatabaseWindowController.xib */; }; |
||||
D63CDF4023C839010012D658 /* QueryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63CDF3E23C839010012D658 /* QueryViewController.swift */; }; |
||||
D63CDF4123C839010012D658 /* QueryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D63CDF3F23C839010012D658 /* QueryViewController.xib */; }; |
||||
D63CDF4423C970C50012D658 /* DatabaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63CDF4223C970C50012D658 /* DatabaseViewController.swift */; }; |
||||
D63CDF4523C970C50012D658 /* DatabaseViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D63CDF4323C970C50012D658 /* DatabaseViewController.xib */; }; |
||||
/* End PBXBuildFile section */ |
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */ |
||||
D63CDF3123C837F10012D658 /* Embed Frameworks */ = { |
||||
isa = PBXCopyFilesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
dstPath = ""; |
||||
dstSubfolderSpec = 10; |
||||
files = ( |
||||
D63CDF2823C837F10012D658 /* CNIOSHA1.framework in Embed Frameworks */, |
||||
D63CDF2623C837F10012D658 /* CNIOLinux.framework in Embed Frameworks */, |
||||
D63CDF2423C837F10012D658 /* CNIODarwin.framework in Embed Frameworks */, |
||||
D63CDF2A23C837F10012D658 /* MongoSwift.framework in Embed Frameworks */, |
||||
D63CDF2223C837F10012D658 /* CNIOAtomics.framework in Embed Frameworks */, |
||||
D63CDF2023C837F10012D658 /* CLibMongoC.framework in Embed Frameworks */, |
||||
D63CDF2C23C837F10012D658 /* MongoSwiftSync.framework in Embed Frameworks */, |
||||
D63CDF3023C837F10012D658 /* NIOConcurrencyHelpers.framework in Embed Frameworks */, |
||||
D63CDF2E23C837F10012D658 /* NIO.framework in Embed Frameworks */, |
||||
); |
||||
name = "Embed Frameworks"; |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXCopyFilesBuildPhase section */ |
||||
|
||||
/* Begin PBXFileReference section */ |
||||
D60C863723CA2DD100C9DB8E /* ServerConnectWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConnectWindowController.swift; sourceTree = "<group>"; }; |
||||
D60C863823CA2DD100C9DB8E /* ServerConnectWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ServerConnectWindowController.xib; sourceTree = "<group>"; }; |
||||
D60C863D23CA2E2100C9DB8E /* ServerConnectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConnectViewController.swift; sourceTree = "<group>"; }; |
||||
D60C863E23CA2E2100C9DB8E /* ServerConnectViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ServerConnectViewController.xib; sourceTree = "<group>"; }; |
||||
D63CDEBA23C837DC0012D658 /* MongoView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MongoView.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDEBD23C837DC0012D658 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; |
||||
D63CDEBF23C837DD0012D658 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; |
||||
D63CDEC223C837DD0012D658 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; }; |
||||
D63CDEC423C837DD0012D658 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
||||
D63CDEC523C837DD0012D658 /* MongoView.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = MongoView.entitlements; sourceTree = "<group>"; }; |
||||
D63CDF1623C837F10012D658 /* CLibMongoC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CLibMongoC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1723C837F10012D658 /* CNIOAtomics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNIOAtomics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1823C837F10012D658 /* CNIODarwin.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNIODarwin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1923C837F10012D658 /* CNIOLinux.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNIOLinux.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1A23C837F10012D658 /* CNIOSHA1.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNIOSHA1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1B23C837F10012D658 /* MongoSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MongoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1C23C837F10012D658 /* MongoSwiftSync.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MongoSwiftSync.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1D23C837F10012D658 /* NIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = NIO.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF1E23C837F10012D658 /* NIOConcurrencyHelpers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = NIOConcurrencyHelpers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||
D63CDF3323C838190012D658 /* Node.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Node.swift; sourceTree = "<group>"; }; |
||||
D63CDF3423C838190012D658 /* MongoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MongoController.swift; sourceTree = "<group>"; }; |
||||
D63CDF3A23C838470012D658 /* DatabaseWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseWindowController.swift; sourceTree = "<group>"; }; |
||||
D63CDF3B23C838470012D658 /* DatabaseWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabaseWindowController.xib; sourceTree = "<group>"; }; |
||||
D63CDF3E23C839010012D658 /* QueryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryViewController.swift; sourceTree = "<group>"; }; |
||||
D63CDF3F23C839010012D658 /* QueryViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = QueryViewController.xib; sourceTree = "<group>"; }; |
||||
D63CDF4223C970C50012D658 /* DatabaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseViewController.swift; sourceTree = "<group>"; }; |
||||
D63CDF4323C970C50012D658 /* DatabaseViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DatabaseViewController.xib; sourceTree = "<group>"; }; |
||||
/* End PBXFileReference section */ |
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */ |
||||
D63CDEB723C837DC0012D658 /* Frameworks */ = { |
||||
isa = PBXFrameworksBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
D63CDF2723C837F10012D658 /* CNIOSHA1.framework in Frameworks */, |
||||
D63CDF2523C837F10012D658 /* CNIOLinux.framework in Frameworks */, |
||||
D63CDF2323C837F10012D658 /* CNIODarwin.framework in Frameworks */, |
||||
D63CDF2923C837F10012D658 /* MongoSwift.framework in Frameworks */, |
||||
D63CDF2123C837F10012D658 /* CNIOAtomics.framework in Frameworks */, |
||||
D63CDF1F23C837F10012D658 /* CLibMongoC.framework in Frameworks */, |
||||
D63CDF2B23C837F10012D658 /* MongoSwiftSync.framework in Frameworks */, |
||||
D63CDF2F23C837F10012D658 /* NIOConcurrencyHelpers.framework in Frameworks */, |
||||
D63CDF2D23C837F10012D658 /* NIO.framework in Frameworks */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXFrameworksBuildPhase section */ |
||||
|
||||
/* Begin PBXGroup section */ |
||||
D60C863B23CA2DD600C9DB8E /* Windows */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
D60C863723CA2DD100C9DB8E /* ServerConnectWindowController.swift */, |
||||
D60C863823CA2DD100C9DB8E /* ServerConnectWindowController.xib */, |
||||
D63CDF3A23C838470012D658 /* DatabaseWindowController.swift */, |
||||
D63CDF3B23C838470012D658 /* DatabaseWindowController.xib */, |
||||
); |
||||
path = Windows; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
D60C863C23CA2DDD00C9DB8E /* View Controllers */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
D60C863D23CA2E2100C9DB8E /* ServerConnectViewController.swift */, |
||||
D60C863E23CA2E2100C9DB8E /* ServerConnectViewController.xib */, |
||||
D63CDF4223C970C50012D658 /* DatabaseViewController.swift */, |
||||
D63CDF4323C970C50012D658 /* DatabaseViewController.xib */, |
||||
D63CDF3E23C839010012D658 /* QueryViewController.swift */, |
||||
D63CDF3F23C839010012D658 /* QueryViewController.xib */, |
||||
); |
||||
path = "View Controllers"; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
D63CDEB123C837DC0012D658 = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
D63CDEBC23C837DC0012D658 /* MongoView */, |
||||
D63CDEBB23C837DC0012D658 /* Products */, |
||||
D63CDF1523C837F10012D658 /* Frameworks */, |
||||
); |
||||
sourceTree = "<group>"; |
||||
}; |
||||
D63CDEBB23C837DC0012D658 /* Products */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
D63CDEBA23C837DC0012D658 /* MongoView.app */, |
||||
); |
||||
name = Products; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
D63CDEBC23C837DC0012D658 /* MongoView */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
D63CDEBD23C837DC0012D658 /* AppDelegate.swift */, |
||||
D63CDF3423C838190012D658 /* MongoController.swift */, |
||||
D63CDF3323C838190012D658 /* Node.swift */, |
||||
D60C863B23CA2DD600C9DB8E /* Windows */, |
||||
D60C863C23CA2DDD00C9DB8E /* View Controllers */, |
||||
D63CDEBF23C837DD0012D658 /* Assets.xcassets */, |
||||
D63CDEC123C837DD0012D658 /* MainMenu.xib */, |
||||
D63CDEC423C837DD0012D658 /* Info.plist */, |
||||
D63CDEC523C837DD0012D658 /* MongoView.entitlements */, |
||||
); |
||||
path = MongoView; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
D63CDF1523C837F10012D658 /* Frameworks */ = { |
||||
isa = PBXGroup; |
||||
children = ( |
||||
D63CDF1623C837F10012D658 /* CLibMongoC.framework */, |
||||
D63CDF1723C837F10012D658 /* CNIOAtomics.framework */, |
||||
D63CDF1823C837F10012D658 /* CNIODarwin.framework */, |
||||
D63CDF1923C837F10012D658 /* CNIOLinux.framework */, |
||||
D63CDF1A23C837F10012D658 /* CNIOSHA1.framework */, |
||||
D63CDF1B23C837F10012D658 /* MongoSwift.framework */, |
||||
D63CDF1C23C837F10012D658 /* MongoSwiftSync.framework */, |
||||
D63CDF1D23C837F10012D658 /* NIO.framework */, |
||||
D63CDF1E23C837F10012D658 /* NIOConcurrencyHelpers.framework */, |
||||
); |
||||
name = Frameworks; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
/* End PBXGroup section */ |
||||
|
||||
/* Begin PBXNativeTarget section */ |
||||
D63CDEB923C837DC0012D658 /* MongoView */ = { |
||||
isa = PBXNativeTarget; |
||||
buildConfigurationList = D63CDEC823C837DD0012D658 /* Build configuration list for PBXNativeTarget "MongoView" */; |
||||
buildPhases = ( |
||||
D63CDEB623C837DC0012D658 /* Sources */, |
||||
D63CDEB723C837DC0012D658 /* Frameworks */, |
||||
D63CDEB823C837DC0012D658 /* Resources */, |
||||
D63CDF3123C837F10012D658 /* Embed Frameworks */, |
||||
); |
||||
buildRules = ( |
||||
); |
||||
dependencies = ( |
||||
); |
||||
name = MongoView; |
||||
productName = MongoView; |
||||
productReference = D63CDEBA23C837DC0012D658 /* MongoView.app */; |
||||
productType = "com.apple.product-type.application"; |
||||
}; |
||||
/* End PBXNativeTarget section */ |
||||
|
||||
/* Begin PBXProject section */ |
||||
D63CDEB223C837DC0012D658 /* Project object */ = { |
||||
isa = PBXProject; |
||||
attributes = { |
||||
LastSwiftUpdateCheck = 1130; |
||||
LastUpgradeCheck = 1130; |
||||
ORGANIZATIONNAME = Shadowfacts; |
||||
TargetAttributes = { |
||||
D63CDEB923C837DC0012D658 = { |
||||
CreatedOnToolsVersion = 11.3; |
||||
}; |
||||
}; |
||||
}; |
||||
buildConfigurationList = D63CDEB523C837DC0012D658 /* Build configuration list for PBXProject "MongoView" */; |
||||
compatibilityVersion = "Xcode 9.3"; |
||||
developmentRegion = en; |
||||
hasScannedForEncodings = 0; |
||||
knownRegions = ( |
||||
en, |
||||
Base, |
||||
); |
||||
mainGroup = D63CDEB123C837DC0012D658; |
||||
productRefGroup = D63CDEBB23C837DC0012D658 /* Products */; |
||||
projectDirPath = ""; |
||||
projectRoot = ""; |
||||
targets = ( |
||||
D63CDEB923C837DC0012D658 /* MongoView */, |
||||
); |
||||
}; |
||||
/* End PBXProject section */ |
||||
|
||||
/* Begin PBXResourcesBuildPhase section */ |
||||
D63CDEB823C837DC0012D658 /* Resources */ = { |
||||
isa = PBXResourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
D60C864023CA2E2100C9DB8E /* ServerConnectViewController.xib in Resources */, |
||||
D63CDEC023C837DD0012D658 /* Assets.xcassets in Resources */, |
||||
D60C863A23CA2DD100C9DB8E /* ServerConnectWindowController.xib in Resources */, |
||||
D63CDF4523C970C50012D658 /* DatabaseViewController.xib in Resources */, |
||||
D63CDF3D23C838470012D658 /* DatabaseWindowController.xib in Resources */, |
||||
D63CDEC323C837DD0012D658 /* MainMenu.xib in Resources */, |
||||
D63CDF4123C839010012D658 /* QueryViewController.xib in Resources */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXResourcesBuildPhase section */ |
||||
|
||||
/* Begin PBXSourcesBuildPhase section */ |
||||
D63CDEB623C837DC0012D658 /* Sources */ = { |
||||
isa = PBXSourcesBuildPhase; |
||||
buildActionMask = 2147483647; |
||||
files = ( |
||||
D63CDEBE23C837DC0012D658 /* AppDelegate.swift in Sources */, |
||||
D63CDF3823C8381A0012D658 /* MongoController.swift in Sources */, |
||||
D60C863923CA2DD100C9DB8E /* ServerConnectWindowController.swift in Sources */, |
||||
D63CDF3723C8381A0012D658 /* Node.swift in Sources */, |
||||
D60C863F23CA2E2100C9DB8E /* ServerConnectViewController.swift in Sources */, |
||||
D63CDF4423C970C50012D658 /* DatabaseViewController.swift in Sources */, |
||||
D63CDF3C23C838470012D658 /* DatabaseWindowController.swift in Sources */, |
||||
D63CDF4023C839010012D658 /* QueryViewController.swift in Sources */, |
||||
); |
||||
runOnlyForDeploymentPostprocessing = 0; |
||||
}; |
||||
/* End PBXSourcesBuildPhase section */ |
||||
|
||||
/* Begin PBXVariantGroup section */ |
||||
D63CDEC123C837DD0012D658 /* MainMenu.xib */ = { |
||||
isa = PBXVariantGroup; |
||||
children = ( |
||||
D63CDEC223C837DD0012D658 /* Base */, |
||||
); |
||||
name = MainMenu.xib; |
||||
sourceTree = "<group>"; |
||||
}; |
||||
/* End PBXVariantGroup section */ |
||||
|
||||
/* Begin XCBuildConfiguration section */ |
||||
D63CDEC623C837DD0012D658 /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ALWAYS_SEARCH_USER_PATHS = NO; |
||||
CLANG_ANALYZER_NONNULL = YES; |
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; |
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; |
||||
CLANG_CXX_LIBRARY = "libc++"; |
||||
CLANG_ENABLE_MODULES = YES; |
||||
CLANG_ENABLE_OBJC_ARC = YES; |
||||
CLANG_ENABLE_OBJC_WEAK = YES; |
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; |
||||
CLANG_WARN_BOOL_CONVERSION = YES; |
||||
CLANG_WARN_COMMA = YES; |
||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; |
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; |
||||
CLANG_WARN_EMPTY_BODY = YES; |
||||
CLANG_WARN_ENUM_CONVERSION = YES; |
||||
CLANG_WARN_INFINITE_RECURSION = YES; |
||||
CLANG_WARN_INT_CONVERSION = YES; |
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; |
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; |
||||
CLANG_WARN_STRICT_PROTOTYPES = YES; |
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES; |
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; |
||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||
COPY_PHASE_STRIP = NO; |
||||
DEBUG_INFORMATION_FORMAT = dwarf; |
||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||
ENABLE_TESTABILITY = YES; |
||||
GCC_C_LANGUAGE_STANDARD = gnu11; |
||||
GCC_DYNAMIC_NO_PIC = NO; |
||||
GCC_NO_COMMON_BLOCKS = YES; |
||||
GCC_OPTIMIZATION_LEVEL = 0; |
||||
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||
"DEBUG=1", |
||||
"$(inherited)", |
||||
); |
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||
GCC_WARN_UNUSED_FUNCTION = YES; |
||||
GCC_WARN_UNUSED_VARIABLE = YES; |
||||
MACOSX_DEPLOYMENT_TARGET = 10.15; |
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; |
||||
MTL_FAST_MATH = YES; |
||||
ONLY_ACTIVE_ARCH = YES; |
||||
SDKROOT = macosx; |
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; |
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
D63CDEC723C837DD0012D658 /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ALWAYS_SEARCH_USER_PATHS = NO; |
||||
CLANG_ANALYZER_NONNULL = YES; |
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; |
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; |
||||
CLANG_CXX_LIBRARY = "libc++"; |
||||
CLANG_ENABLE_MODULES = YES; |
||||
CLANG_ENABLE_OBJC_ARC = YES; |
||||
CLANG_ENABLE_OBJC_WEAK = YES; |
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; |
||||
CLANG_WARN_BOOL_CONVERSION = YES; |
||||
CLANG_WARN_COMMA = YES; |
||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; |
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; |
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES; |
||||
CLANG_WARN_EMPTY_BODY = YES; |
||||
CLANG_WARN_ENUM_CONVERSION = YES; |
||||
CLANG_WARN_INFINITE_RECURSION = YES; |
||||
CLANG_WARN_INT_CONVERSION = YES; |
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; |
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; |
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; |
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; |
||||
CLANG_WARN_STRICT_PROTOTYPES = YES; |
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES; |
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; |
||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
||||
COPY_PHASE_STRIP = NO; |
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
||||
ENABLE_NS_ASSERTIONS = NO; |
||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||
GCC_C_LANGUAGE_STANDARD = gnu11; |
||||
GCC_NO_COMMON_BLOCKS = YES; |
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; |
||||
GCC_WARN_UNDECLARED_SELECTOR = YES; |
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; |
||||
GCC_WARN_UNUSED_FUNCTION = YES; |
||||
GCC_WARN_UNUSED_VARIABLE = YES; |
||||
MACOSX_DEPLOYMENT_TARGET = 10.15; |
||||
MTL_ENABLE_DEBUG_INFO = NO; |
||||
MTL_FAST_MATH = YES; |
||||
SDKROOT = macosx; |
||||
SWIFT_COMPILATION_MODE = wholemodule; |
||||
SWIFT_OPTIMIZATION_LEVEL = "-O"; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
D63CDEC923C837DD0012D658 /* Debug */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||
CODE_SIGN_ENTITLEMENTS = MongoView/MongoView.entitlements; |
||||
CODE_SIGN_STYLE = Automatic; |
||||
COMBINE_HIDPI_IMAGES = YES; |
||||
DEVELOPMENT_TEAM = HGYVAQA9FW; |
||||
ENABLE_HARDENED_RUNTIME = YES; |
||||
INFOPLIST_FILE = MongoView/Info.plist; |
||||
LD_RUNPATH_SEARCH_PATHS = ( |
||||
"$(inherited)", |
||||
"@executable_path/../Frameworks", |
||||
); |
||||
PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.MongoView; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
SWIFT_VERSION = 5.0; |
||||
}; |
||||
name = Debug; |
||||
}; |
||||
D63CDECA23C837DD0012D658 /* Release */ = { |
||||
isa = XCBuildConfiguration; |
||||
buildSettings = { |
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||
CODE_SIGN_ENTITLEMENTS = MongoView/MongoView.entitlements; |
||||
CODE_SIGN_STYLE = Automatic; |
||||
COMBINE_HIDPI_IMAGES = YES; |
||||
DEVELOPMENT_TEAM = HGYVAQA9FW; |
||||
ENABLE_HARDENED_RUNTIME = YES; |
||||
INFOPLIST_FILE = MongoView/Info.plist; |
||||
LD_RUNPATH_SEARCH_PATHS = ( |
||||
"$(inherited)", |
||||
"@executable_path/../Frameworks", |
||||
); |
||||
PRODUCT_BUNDLE_IDENTIFIER = net.shadowfacts.MongoView; |
||||
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||
SWIFT_VERSION = 5.0; |
||||
}; |
||||
name = Release; |
||||
}; |
||||
/* End XCBuildConfiguration section */ |
||||
|
||||
/* Begin XCConfigurationList section */ |
||||
D63CDEB523C837DC0012D658 /* Build configuration list for PBXProject "MongoView" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
D63CDEC623C837DD0012D658 /* Debug */, |
||||
D63CDEC723C837DD0012D658 /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
D63CDEC823C837DD0012D658 /* Build configuration list for PBXNativeTarget "MongoView" */ = { |
||||
isa = XCConfigurationList; |
||||
buildConfigurations = ( |
||||
D63CDEC923C837DD0012D658 /* Debug */, |
||||
D63CDECA23C837DD0012D658 /* Release */, |
||||
); |
||||
defaultConfigurationIsVisible = 0; |
||||
defaultConfigurationName = Release; |
||||
}; |
||||
/* End XCConfigurationList section */ |
||||
}; |
||||
rootObject = D63CDEB223C837DC0012D658 /* Project object */; |
||||
} |
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<Workspace |
||||
version = "1.0"> |
||||
<FileRef |
||||
location = "container:MongoView.xcodeproj"> |
||||
</FileRef> |
||||
<FileRef |
||||
location = "group:../mongo-swift-driver/MongoSwift.xcodeproj"> |
||||
</FileRef> |
||||
</Workspace> |
@ -0,0 +1,8 @@
|
||||
<?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>IDEDidComputeMac32BitWarning</key> |
||||
<true/> |
||||
</dict> |
||||
</plist> |
@ -0,0 +1,74 @@
|
||||
// |
||||
// AppDelegate.swift |
||||
// MongoView |
||||
// |
||||
// Created by Shadowfacts on 1/9/20. |
||||
// Copyright ยฉ 2020 Shadowfacts. All rights reserved. |
||||
// |
||||
|
||||
import Cocoa |
||||
|
||||
@NSApplicationMain |
||||
class AppDelegate: NSObject, NSApplicationDelegate { |
||||
|
||||
var windowControllers = [DatabaseWindowController]() |
||||
|
||||
var serverConnectWindowController: ServerConnectWindowController? |
||||
|
||||
func applicationDidFinishLaunching(_ aNotification: Notification) { |
||||
let wc = DatabaseWindowController() |
||||
windowControllers.append(wc) |
||||
wc.showWindow(nil) |
||||
} |
||||
|
||||
func applicationWillTerminate(_ aNotification: Notification) { |
||||
} |
||||
|
||||
func newWindow(mongoController: MongoController?, collection: DatabaseCollection? = nil, addToTabGroup: Bool = true) { |
||||
let wc = DatabaseWindowController() |
||||
wc.mongoController = mongoController |
||||
wc.initialCollection = collection |
||||
windowControllers.append(wc) |
||||
|
||||
if addToTabGroup, |
||||
let tabGroup = windowControllers.first(where: { $0.window!.isKeyWindow })?.window?.tabGroup { |
||||
tabGroup.addWindow(wc.window!) |
||||
tabGroup.selectedWindow = wc.window! |
||||
} else { |
||||
wc.showWindow(nil) |
||||
} |
||||
} |
||||
|
||||
@IBAction func newTab(_ sender: Any) { |
||||
let mongoController = windowControllers.first { $0.window!.isKeyWindow }?.mongoController |
||||
newWindow(mongoController: mongoController) |
||||
} |
||||
|
||||
@IBAction func connectToServer(_ sender: Any) { |
||||
guard serverConnectWindowController == nil else { return } |
||||
|
||||
let wc = ServerConnectWindowController() |
||||
wc.delegate = self |
||||
serverConnectWindowController = wc |
||||
wc.showWindow(nil) |
||||
} |
||||
|
||||
} |
||||
|
||||
extension AppDelegate: NSMenuItemValidation { |
||||
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool { |
||||
if menuItem.action == #selector(connectToServer(_:)) { |
||||
return serverConnectWindowController == nil |
||||
} |
||||
return true |
||||
} |
||||
} |
||||
|
||||
extension AppDelegate: ServerConnectViewControllerDelegate { |
||||
func connectToServer(mongoController: MongoController) { |
||||
serverConnectWindowController!.close() |
||||
serverConnectWindowController = nil |
||||
|
||||
newWindow(mongoController: mongoController, addToTabGroup: false) |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
{ |
||||
"images" : [ |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "16x16", |
||||
"scale" : "1x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "16x16", |
||||
"scale" : "2x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "32x32", |
||||
"scale" : "1x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "32x32", |
||||
"scale" : "2x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "128x128", |
||||
"scale" : "1x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "128x128", |
||||
"scale" : "2x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "256x256", |
||||
"scale" : "1x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "256x256", |
||||
"scale" : "2x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "512x512", |
||||
"scale" : "1x" |
||||
}, |
||||
{ |
||||
"idiom" : "mac", |
||||
"size" : "512x512", |
||||
"scale" : "2x" |
||||
} |
||||
], |
||||
"info" : { |
||||
"version" : 1, |
||||
"author" : "xcode" |
||||
} |
||||
} |
@ -0,0 +1,6 @@
|
||||
{ |
||||
"info" : { |
||||
"version" : 1, |
||||
"author" : "xcode" |
||||
} |
||||
} |
@ -0,0 +1,449 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15702" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> |
||||
<dependencies> |
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15702"/> |
||||
</dependencies> |
||||
<objects> |
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication"> |
||||
<connections> |
||||
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/> |
||||
</connections> |
||||
</customObject> |
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> |
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/> |
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="MongoView" customModuleProvider="target"/> |
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/> |
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6"> |
||||
<items> |
||||
<menuItem title="MongoView" id="1Xt-HY-uBw"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="MongoView" systemMenu="apple" id="uQy-DD-JDr"> |
||||
<items> |
||||
<menuItem title="About MongoView" id="5kV-Vb-QxS"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/> |
||||
<menuItem title="Preferencesโฆ" keyEquivalent="," id="BOF-NM-1cW"/> |
||||
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/> |
||||
<menuItem title="Services" id="NMo-om-nkz"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/> |
||||
<menuItem title="Hide MongoView" keyEquivalent="h" id="Olw-nP-bQN"> |
||||
<connections> |
||||
<action selector="hide:" target="-1" id="PnN-Uc-m68"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO"> |
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Show All" id="Kd2-mp-pUS"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/> |
||||
<menuItem title="Quit MongoView" keyEquivalent="q" id="4sb-4s-VLi"> |
||||
<connections> |
||||
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="File" id="dMs-cI-mzQ"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="File" id="bib-Uj-vzu"> |
||||
<items> |
||||
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl"> |
||||
<connections> |
||||
<action selector="newDocument:" target="-1" id="4Si-XN-c54"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="New Tab" keyEquivalent="t" id="9AK-Fk-TxU"> |
||||
<connections> |
||||
<action selector="newTab:" target="Voe-Tx-rLC" id="JyK-8N-xQT"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Openโฆ" keyEquivalent="o" id="IAo-SY-fd9"> |
||||
<connections> |
||||
<action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Open Recent" id="tXI-mr-wws"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ"> |
||||
<items> |
||||
<menuItem title="Clear Menu" id="vNY-rz-j42"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/> |
||||
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG"> |
||||
<connections> |
||||
<action selector="performClose:" target="-1" id="HmO-Ls-i7Q"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Saveโฆ" keyEquivalent="s" id="pxx-59-PXV"> |
||||
<connections> |
||||
<action selector="saveDocument:" target="-1" id="teZ-XB-qJY"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Save Asโฆ" keyEquivalent="S" id="Bw7-FT-i3A"> |
||||
<connections> |
||||
<action selector="saveDocumentAs:" target="-1" id="mDf-zr-I0C"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H"> |
||||
<connections> |
||||
<action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/> |
||||
<menuItem title="Page Setupโฆ" keyEquivalent="P" id="qIS-W8-SiK"> |
||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="runPageLayout:" target="-1" id="Din-rz-gC5"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Printโฆ" keyEquivalent="p" id="aTl-1u-JFS"> |
||||
<connections> |
||||
<action selector="print:" target="-1" id="qaZ-4w-aoO"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Edit" id="5QF-Oa-p0T"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Edit" id="W48-6f-4Dl"> |
||||
<items> |
||||
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg"> |
||||
<connections> |
||||
<action selector="undo:" target="-1" id="M6e-cu-g7V"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam"> |
||||
<connections> |
||||
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/> |
||||
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG"> |
||||
<connections> |
||||
<action selector="cut:" target="-1" id="YJe-68-I9s"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU"> |
||||
<connections> |
||||
<action selector="copy:" target="-1" id="G1f-GL-Joy"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL"> |
||||
<connections> |
||||
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk"> |
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Delete" id="pa3-QI-u2k"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m"> |
||||
<connections> |
||||
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/> |
||||
<menuItem title="Find" id="4EN-yA-p0u"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Find" id="1b7-l0-nxx"> |
||||
<items> |
||||
<menuItem title="Findโฆ" tag="1" keyEquivalent="f" id="Xz5-n4-O0W"> |
||||
<connections> |
||||
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Find and Replaceโฆ" tag="12" keyEquivalent="f" id="YEy-JH-Tfz"> |
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye"> |
||||
<connections> |
||||
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV"> |
||||
<connections> |
||||
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt"> |
||||
<connections> |
||||
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd"> |
||||
<connections> |
||||
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg"> |
||||
<items> |
||||
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI"> |
||||
<connections> |
||||
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7"> |
||||
<connections> |
||||
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/> |
||||
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Substitutions" id="9ic-FL-obx"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr"> |
||||
<items> |
||||
<menuItem title="Show Substitutions" id="z6F-FW-3nz"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/> |
||||
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Smart Quotes" id="hQb-2v-fYv"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Smart Dashes" id="rgM-f4-ycn"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Smart Links" id="cwL-P1-jid"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Data Detectors" id="tRr-pd-1PS"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Text Replacement" id="HFQ-gK-NFA"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Transformations" id="2oI-Rn-ZJC"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Transformations" id="c8a-y6-VQd"> |
||||
<items> |
||||
<menuItem title="Make Upper Case" id="vmV-6d-7jI"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Make Lower Case" id="d9M-CD-aMd"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Capitalize" id="UEZ-Bs-lqG"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Speech" id="xrE-MZ-jX0"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Speech" id="3rS-ZA-NoH"> |
||||
<items> |
||||
<menuItem title="Start Speaking" id="Ynk-f8-cLZ"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Stop Speaking" id="Oyz-dy-DGm"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Server" id="QfS-bt-Xt7"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Server" id="TDC-RU-bf6"> |
||||
<items> |
||||
<menuItem title="Connect..." keyEquivalent="k" id="Prs-yv-Qil"> |
||||
<connections> |
||||
<action selector="connectToServer:" target="Voe-Tx-rLC" id="bWE-BN-9ci"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Database" id="CFg-qm-4GG"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Database" id="nD3-Xo-LUZ"> |
||||
<items> |
||||
<menuItem title="Run Query" id="RSP-nH-a1I"> |
||||
<string key="keyEquivalent" base64-UTF8="YES"> |
||||
DQ |
||||
</string> |
||||
<connections> |
||||
<action selector="runQuery:" target="-1" id="jLo-qu-WjN"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="View" id="H8h-7b-M4v"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="View" id="HyV-fh-RgO"> |
||||
<items> |
||||
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5"> |
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="toggleToolbarShown:" target="-1" id="BXY-wc-z0C"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Customize Toolbarโฆ" id="1UK-8n-QPP"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="runToolbarCustomizationPalette:" target="-1" id="pQI-g3-MTW"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/> |
||||
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE"> |
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="toggleSidebar:" target="-1" id="iwa-gc-5KM"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa"> |
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/> |
||||
<connections> |
||||
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Window" id="aUF-d1-5bR"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo"> |
||||
<items> |
||||
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV"> |
||||
<connections> |
||||
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem title="Zoom" id="R4o-n2-Eq4"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/> |
||||
</connections> |
||||
</menuItem> |
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/> |
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<connections> |
||||
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
<menuItem title="Help" id="wpr-3q-Mcd"> |
||||
<modifierMask key="keyEquivalentModifierMask"/> |
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ"> |
||||
<items> |
||||
<menuItem title="MongoView Help" keyEquivalent="?" id="FKE-Sm-Kum"> |
||||
<connections> |
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/> |
||||
</connections> |
||||
</menuItem> |
||||
</items> |
||||
</menu> |
||||
</menuItem> |
||||
</items> |
||||
<point key="canvasLocation" x="141" y="154"/> |
||||
</menu> |
||||
</objects> |
||||
</document> |
@ -0,0 +1,36 @@
|
||||
<?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>CFBundleDevelopmentRegion</key> |
||||
<string>$(DEVELOPMENT_LANGUAGE)</string> |
||||
<key>CFBundleExecutable</key> |
||||
<string>$(EXECUTABLE_NAME)</string> |
||||
<key>CFBundleIconFile</key> |
||||
<string></string> |
||||
<key>CFBundleIdentifier</key> |
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
||||
<key>CFBundleInfoDictionaryVersion</key> |
||||
<string>6.0</string> |
||||
<key>CFBundleName</key> |
||||
<string>$(PRODUCT_NAME)</string> |
||||
<key>CFBundlePackageType</key> |
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> |
||||
<key>CFBundleShortVersionString</key> |
||||
<string>1.0</string> |
||||
<key>CFBundleVersion</key> |
||||
<string>1</string> |
||||
<key>LSMinimumSystemVersion</key> |
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string> |
||||
<key>NSHumanReadableCopyright</key> |
||||
<string>Copyright ยฉ 2020 Shadowfacts. All rights reserved.</string> |
||||
<key>NSMainNibFile</key> |
||||
<string>MainMenu</string> |
||||
<key>NSPrincipalClass</key> |
||||
<string>NSApplication</string> |
||||
<key>NSSupportsAutomaticTermination</key> |
||||
<true/> |
||||
<key>NSSupportsSuddenTermination</key> |
||||
<true/> |
||||
</dict> |
||||
</plist> |
@ -0,0 +1,37 @@
|
||||
// |
||||
// MongoController.swift |
||||
// MongoView |
||||
// |
||||
// Created by Shadowfacts on 1/8/20. |
||||
// Copyright ยฉ 2020 Shadowfacts. All rights reserved. |
||||
// |
||||
|
||||
import Foundation |
||||
import MongoSwift |
||||
import NIO |
||||
|
||||
class MongoController { |
||||
let connectionString: String |
||||
|
||||
var group: EventLoopGroup! |
||||
|
||||
var client: MongoClient! |
||||
|
||||
init(connectionString: String) { |
||||
self.connectionString = connectionString |
||||
} |
||||
|
||||
deinit { |
||||
try! group.syncShutdownGracefully() |
||||
cleanupMongoSwift() |
||||
} |
||||
|
||||
func setup() { |
||||
print("setting up mongo") |
||||
|
||||
group = MultiThreadedEventLoopGroup(numberOfThreads: 1) |
||||
|
||||
client = try! MongoClient(connectionString, using: group) |
||||
} |
||||
|
||||
} |
@ -0,0 +1,12 @@
|
||||
<?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.files.user-selected.read-only</key> |
||||
<true/> |
||||
<key>com.apple.security.network.client</key> |
||||
<true/> |
||||
</dict> |
||||
</plist> |
@ -0,0 +1,146 @@
|
||||
// |
||||
// Node.swift |
||||
// MongoView |
||||
// |
||||
// Created by Shadowfacts on 1/9/20. |
||||
// Copyright ยฉ 2020 Shadowfacts. All rights reserved. |
||||
// |
||||
|
||||
import Foundation |
||||
import MongoSwift |
||||
|
||||
class Node { |
||||
let key: Key? |
||||
let value: BSON |
||||
|
||||
lazy private(set) var children: [Node] = { |
||||
switch value { |
||||
case let .array(array): |
||||
return array.enumerated().map { (index, val) in |
||||
Node(key: .index(index), value: val) |
||||
} |
||||
case let .document(doc): |
||||
return doc.map { (key, val) in |
||||
Node(key: .name(key), value: val) |
||||
} |
||||
default: |
||||
return [] |
||||
} |
||||
}() |
||||
|
||||
var numberOfChildren: Int { |
||||
children.count |
||||
} |
||||
|
||||
var hasChildren: Bool { |
||||
numberOfChildren > 0 |
||||
} |
||||
|
||||
init(key: Key? = nil, value: BSON) { |
||||
self.key = key |
||||
self.value = value |
||||
} |
||||
|
||||
convenience init(document: Document) { |
||||
if case let .objectId(id) = document["_id"] { |
||||
self.init(key: .objectId(id), value: .document(document)) |
||||
} else { |
||||
self.init(key: nil, value: .document(document)) |
||||
} |
||||
} |
||||
} |
||||
|
||||
extension Node { |
||||
enum Key { |
||||
case index(Int) |
||||
case name(String) |
||||
case objectId(ObjectId) |
||||
} |
||||
} |
||||
|
||||
extension Node { |
||||
static let dateFormatter: DateFormatter = { |
||||
let formatter = DateFormatter() |
||||
formatter.locale = .current |
||||
formatter.setLocalizedDateFormatFromTemplate("yyyy-MM-dd HH:mm:ss ZZ") |
||||
return formatter |
||||
}() |
||||
|
||||
var keyString: String { |
||||
switch key { |
||||
case nil: |
||||
return "" |
||||
case let .index(index): |
||||
return index.description |
||||
case let .name(name): |
||||
return name |
||||
case let .objectId(id): |
||||
return id.description |
||||
} |
||||
} |
||||
|
||||
var valueString: String { |
||||
switch value { |
||||
case let .double(value): |
||||
return value.description |
||||
case let .string(value): |
||||
return value |
||||
case let .document(doc): |
||||
return "(\(doc.count) field\(doc.count == 1 ? "" : "s"))" |
||||
case let .array(array): |
||||
return "(\(array.count) element\(array.count == 1 ? "" : "s"))" |
||||
case let .binary(value): |
||||
switch Binary.Subtype(rawValue: value.subtype) { |
||||
case nil: |
||||
return "(unknown binary data)" |
||||
case .generic: |
||||
return "(generic binary data)" |
||||
case .function: |
||||
return "(function binary data)" |
||||
case .binaryDeprecated: |
||||
return "(binary data)" |
||||
case .uuidDeprecated: |
||||
fallthrough |
||||
case .uuid: |
||||
return try! UUID(from: value).description |
||||
case .md5: |
||||
return "(MD5 binary data)" |
||||
case .userDefined: |
||||
return "(user defined binary data)" |
||||
} |
||||
case .undefined: |
||||
return "undefined" |
||||
case let .objectId(value): |
||||
return value.description |
||||
case let .bool(value): |
||||
return value.description |
||||
case let .datetime(value): |
||||
return value.description |
||||
case .null: |
||||
return "null" |
||||
case let .regex(value): |
||||
return try! NSRegularExpression(from: value).description |
||||
case let .dbPointer(value): |
||||
return "\(value.ref)(\(value.id))" |
||||
case let .symbol(value): |
||||
return value.description |
||||
case let .code(value): |
||||
return value.code |
||||
case let .codeWithScope(value): |
||||
return value.code |
||||
case let .int32(value): |
||||
return value.description |
||||
case let .timestamp(value): |
||||
let date = Date(timeIntervalSince1970: TimeInterval(value.timestamp)) |
||||
return Node.dateFormatter.string(from: date) |
||||
case let .int64(value): |
||||
return value.description |
||||
case let .decimal128(value): |
||||
return value.description |
||||
case .minKey: |
||||
return "(min key)" |
||||
case .maxKey: |
||||
return "(max key)" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,214 @@
|
||||
// |
||||
// DatabaseViewController.swift |
||||
// MongoView |
||||
// |
||||
// Created by Shadowfacts on 1/10/20. |
||||
// Copyright ยฉ 2020 Shadowfacts. All rights reserved. |
||||
// |
||||
|
||||
import Cocoa |
||||
import MongoSwift |
||||
import NIO |
||||
|
||||
struct DatabaseCollections { |
||||
let database: String |
||||
let collections: [String] |
||||
} |
||||
|
||||
struct DatabaseCollection { |
||||
let database: String |
||||
let name: String |
||||
} |
||||
|
||||
class DatabaseViewController: NSViewController { |
||||
|
||||
@IBOutlet weak var collectionsOutlineView: NSOutlineView! |
||||
@IBOutlet weak var detailContainerView: NSView! |
||||
|
||||
let mongoController: MongoController |
||||
|
||||
private var databaseCollections: [DatabaseCollections] = [] |
||||
private var selectedCollection: DatabaseCollection? |
||||
|
||||
private var placeholderLabel: NSTextField? |
||||
private var queryViewController: QueryViewController? |
||||
|
||||
init(mongoController: MongoController) { |
||||
self.mongoController = mongoController |
||||
|
||||
super.init(nibName: "DatabaseViewController", bundle: .main) |
||||
} |
||||
|
||||
required init?(coder: NSCoder) { |
||||
fatalError("init(coder:) has not been implemented") |
||||
} |
||||
|
||||
override func viewDidLoad() { |
||||
super.viewDidLoad() |
||||
|
||||
mongoController.client.listDatabaseNames().flatMap { (databaseNames) -> EventLoopFuture<[DatabaseCollections]> in |
||||
let futures = databaseNames.map { (name) in |
||||
self.mongoController.client.db(name).listCollectionNames().map { (collectionNames) in |
||||
DatabaseCollections(database: name, collections: collectionNames) |
||||
} |
||||
} |
||||
return EventLoopFuture.whenAllSucceed(futures, on: futures.first!.eventLoop) |
||||
}.whenComplete { [weak self] (res) in |
||||
guard let self = self else { return } |
||||
|
||||
switch res { |
||||
case let .success(databaseCollections): |
||||
self.databaseCollections = databaseCollections |
||||
DispatchQueue.main.async { |
||||
self.collectionsOutlineView.reloadData() |
||||
} |
||||
|
||||
case let .failure(error): |
||||
fatalError("error getting database names: \(error)") |
||||
} |
||||
} |
||||
|
||||
collectionsOutlineView.dataSource = self |
||||
collectionsOutlineView.delegate = self |
||||
|
||||
collectionsOutlineView.target = self |
||||
collectionsOutlineView.doubleAction = #selector(cellDoubleClicked) |
||||
|
||||
updateDetailView() |
||||
} |
||||
|
||||
func showCollection(_ collection: DatabaseCollection) { |
||||
selectedCollection = collection |
||||
updateDetailView() |
||||
} |
||||
|
||||
private func updateDetailView() { |
||||
if let collection = selectedCollection { |
||||
if let placeholderLabel = placeholderLabel { |
||||
placeholderLabel.removeFromSuperview() |
||||
} |
||||
if let oldQueryViewController = self.queryViewController { |
||||
oldQueryViewController.view.removeFromSuperview() |
||||
oldQueryViewController.removeFromParent() |
||||
} |
||||
|
||||
let queryViewController = QueryViewController(mongoController: mongoController, collection: collection) |
||||
self.queryViewController = queryViewController |
||||
queryViewController.view.translatesAutoresizingMaskIntoConstraints = false |
||||
addChild(queryViewController) |
||||
detailContainerView.addSubview(queryViewController.view) |
||||
NSLayoutConstraint.activate([ |
||||
queryViewController.view.leadingAnchor.constraint(equalTo: detailContainerView.leadingAnchor), |
||||
queryViewController.view.trailingAnchor.constraint(equalTo: detailContainerView.trailingAnchor), |
||||
queryViewController.view.topAnchor.constraint(equalTo: detailContainerView.topAnchor), |
||||
queryViewController.view.bottomAnchor.constraint(equalTo: detailContainerView.bottomAnchor) |
||||
]) |
||||
|
||||
self.title = queryViewController.title |
||||
} else { |
||||
if let queryViewController = queryViewController { |
||||
queryViewController.view.removeFromSuperview() |
||||
queryViewController.removeFromParent() |
||||
} |
||||
|
||||
if self.placeholderLabel == nil { |
||||
let label = NSTextField(labelWithString: "Select a collection to begin") |
||||
self.placeholderLabel = label |
||||
label.translatesAutoresizingMaskIntoConstraints = false |
||||
detailContainerView.addSubview(label) |
||||
NSLayoutConstraint.activate([ |
||||
label.centerXAnchor.constraint(equalTo: detailContainerView.centerXAnchor), |
||||
label.centerYAnchor.constraint(equalTo: detailContainerView.centerYAnchor) |
||||
]) |
||||
|
||||
self.title = "No Query" |
||||
< |