From aa33de26c9482f2428dd576d08c94a90e11f1dfd Mon Sep 17 00:00:00 2001 From: Gerrit Linnemann Date: Wed, 14 Dec 2016 08:29:15 +0100 Subject: [PATCH] Project construct --- OTRS-Watch.xcodeproj/project.pbxproj | 554 ++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 24023 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 39 + .../xcschemes/OTRS-Watch.xcscheme | 111 +++ .../xcschemes/xcschememanagement.plist | 32 + OTRS-Watch/AppDelegate.swift | 26 + .../AppIcon.appiconset/Contents.json | 58 ++ OTRS-Watch/Base.lproj/Main.storyboard | 828 ++++++++++++++++++ OTRS-Watch/Constants.swift | 28 + OTRS-Watch/Info.plist | 43 + .../Model/Extension/TicketExtension.swift | 107 +++ OTRS-Watch/Model/Ticket.swift | 29 + OTRS-Watch/OTRS.swift | 111 +++ OTRS-Watch/ViewController.swift | 60 ++ OTRS-WatchTests/Info.plist | 22 + OTRS-WatchTests/OTRS_WatchTests.swift | 36 + OTRS-WatchUITests/Info.plist | 22 + OTRS-WatchUITests/OTRS_WatchUITests.swift | 36 + 19 files changed, 2149 insertions(+) create mode 100644 OTRS-Watch.xcodeproj/project.pbxproj create mode 100644 OTRS-Watch.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/OTRS-Watch.xcscheme create mode 100644 OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 OTRS-Watch/AppDelegate.swift create mode 100644 OTRS-Watch/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 OTRS-Watch/Base.lproj/Main.storyboard create mode 100644 OTRS-Watch/Constants.swift create mode 100644 OTRS-Watch/Info.plist create mode 100644 OTRS-Watch/Model/Extension/TicketExtension.swift create mode 100644 OTRS-Watch/Model/Ticket.swift create mode 100644 OTRS-Watch/OTRS.swift create mode 100644 OTRS-Watch/ViewController.swift create mode 100644 OTRS-WatchTests/Info.plist create mode 100644 OTRS-WatchTests/OTRS_WatchTests.swift create mode 100644 OTRS-WatchUITests/Info.plist create mode 100644 OTRS-WatchUITests/OTRS_WatchUITests.swift diff --git a/OTRS-Watch.xcodeproj/project.pbxproj b/OTRS-Watch.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6f4a859 --- /dev/null +++ b/OTRS-Watch.xcodeproj/project.pbxproj @@ -0,0 +1,554 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 854A87B01DF6BD9A00904B3E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854A87AF1DF6BD9A00904B3E /* AppDelegate.swift */; }; + 854A87B21DF6BD9A00904B3E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854A87B11DF6BD9A00904B3E /* ViewController.swift */; }; + 854A87B41DF6BD9A00904B3E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 854A87B31DF6BD9A00904B3E /* Assets.xcassets */; }; + 854A87B71DF6BD9A00904B3E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 854A87B51DF6BD9A00904B3E /* Main.storyboard */; }; + 854A87C21DF6BD9A00904B3E /* OTRS_WatchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854A87C11DF6BD9A00904B3E /* OTRS_WatchTests.swift */; }; + 854A87CD1DF6BD9A00904B3E /* OTRS_WatchUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854A87CC1DF6BD9A00904B3E /* OTRS_WatchUITests.swift */; }; + 854A87DB1DF6C22C00904B3E /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854A87DA1DF6C22C00904B3E /* Constants.swift */; }; + 854A87DD1DF6DC7500904B3E /* OTRS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854A87DC1DF6DC7500904B3E /* OTRS.swift */; }; + 857EB22C1DF974F500CCA941 /* Ticket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857EB22B1DF974F500CCA941 /* Ticket.swift */; }; + 857EB22F1DF9845200CCA941 /* TicketExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857EB22E1DF9845200CCA941 /* TicketExtension.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 854A87BE1DF6BD9A00904B3E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 854A87A41DF6BD9900904B3E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 854A87AB1DF6BD9900904B3E; + remoteInfo = "OTRS-Watch"; + }; + 854A87C91DF6BD9A00904B3E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 854A87A41DF6BD9900904B3E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 854A87AB1DF6BD9900904B3E; + remoteInfo = "OTRS-Watch"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 854A87AC1DF6BD9A00904B3E /* OTRS-Watch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OTRS-Watch.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 854A87AF1DF6BD9A00904B3E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 854A87B11DF6BD9A00904B3E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 854A87B31DF6BD9A00904B3E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 854A87B61DF6BD9A00904B3E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 854A87B81DF6BD9A00904B3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 854A87BD1DF6BD9A00904B3E /* OTRS-WatchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OTRS-WatchTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 854A87C11DF6BD9A00904B3E /* OTRS_WatchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTRS_WatchTests.swift; sourceTree = ""; }; + 854A87C31DF6BD9A00904B3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 854A87C81DF6BD9A00904B3E /* OTRS-WatchUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "OTRS-WatchUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 854A87CC1DF6BD9A00904B3E /* OTRS_WatchUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTRS_WatchUITests.swift; sourceTree = ""; }; + 854A87CE1DF6BD9A00904B3E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 854A87DA1DF6C22C00904B3E /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 854A87DC1DF6DC7500904B3E /* OTRS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OTRS.swift; sourceTree = ""; }; + 857EB22B1DF974F500CCA941 /* Ticket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Ticket.swift; path = Model/Ticket.swift; sourceTree = ""; }; + 857EB22E1DF9845200CCA941 /* TicketExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TicketExtension.swift; path = Model/Extension/TicketExtension.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 854A87A91DF6BD9900904B3E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 854A87BA1DF6BD9A00904B3E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 854A87C51DF6BD9A00904B3E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 854A87A31DF6BD9900904B3E = { + isa = PBXGroup; + children = ( + 854A87AE1DF6BD9A00904B3E /* OTRS-Watch */, + 854A87C01DF6BD9A00904B3E /* OTRS-WatchTests */, + 854A87CB1DF6BD9A00904B3E /* OTRS-WatchUITests */, + 854A87AD1DF6BD9A00904B3E /* Products */, + ); + sourceTree = ""; + }; + 854A87AD1DF6BD9A00904B3E /* Products */ = { + isa = PBXGroup; + children = ( + 854A87AC1DF6BD9A00904B3E /* OTRS-Watch.app */, + 854A87BD1DF6BD9A00904B3E /* OTRS-WatchTests.xctest */, + 854A87C81DF6BD9A00904B3E /* OTRS-WatchUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 854A87AE1DF6BD9A00904B3E /* OTRS-Watch */ = { + isa = PBXGroup; + children = ( + 857EB22A1DF9748B00CCA941 /* Model */, + 854A87AF1DF6BD9A00904B3E /* AppDelegate.swift */, + 854A87B11DF6BD9A00904B3E /* ViewController.swift */, + 854A87B31DF6BD9A00904B3E /* Assets.xcassets */, + 854A87B51DF6BD9A00904B3E /* Main.storyboard */, + 854A87B81DF6BD9A00904B3E /* Info.plist */, + 854A87DA1DF6C22C00904B3E /* Constants.swift */, + 854A87DC1DF6DC7500904B3E /* OTRS.swift */, + ); + path = "OTRS-Watch"; + sourceTree = ""; + }; + 854A87C01DF6BD9A00904B3E /* OTRS-WatchTests */ = { + isa = PBXGroup; + children = ( + 854A87C11DF6BD9A00904B3E /* OTRS_WatchTests.swift */, + 854A87C31DF6BD9A00904B3E /* Info.plist */, + ); + path = "OTRS-WatchTests"; + sourceTree = ""; + }; + 854A87CB1DF6BD9A00904B3E /* OTRS-WatchUITests */ = { + isa = PBXGroup; + children = ( + 854A87CC1DF6BD9A00904B3E /* OTRS_WatchUITests.swift */, + 854A87CE1DF6BD9A00904B3E /* Info.plist */, + ); + path = "OTRS-WatchUITests"; + sourceTree = ""; + }; + 857EB22A1DF9748B00CCA941 /* Model */ = { + isa = PBXGroup; + children = ( + 857EB22D1DF9843300CCA941 /* Extension */, + 857EB22B1DF974F500CCA941 /* Ticket.swift */, + ); + name = Model; + sourceTree = ""; + }; + 857EB22D1DF9843300CCA941 /* Extension */ = { + isa = PBXGroup; + children = ( + 857EB22E1DF9845200CCA941 /* TicketExtension.swift */, + ); + name = Extension; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 854A87AB1DF6BD9900904B3E /* OTRS-Watch */ = { + isa = PBXNativeTarget; + buildConfigurationList = 854A87D11DF6BD9A00904B3E /* Build configuration list for PBXNativeTarget "OTRS-Watch" */; + buildPhases = ( + 854A87A81DF6BD9900904B3E /* Sources */, + 854A87A91DF6BD9900904B3E /* Frameworks */, + 854A87AA1DF6BD9900904B3E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "OTRS-Watch"; + productName = "OTRS-Watch"; + productReference = 854A87AC1DF6BD9A00904B3E /* OTRS-Watch.app */; + productType = "com.apple.product-type.application"; + }; + 854A87BC1DF6BD9A00904B3E /* OTRS-WatchTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 854A87D41DF6BD9A00904B3E /* Build configuration list for PBXNativeTarget "OTRS-WatchTests" */; + buildPhases = ( + 854A87B91DF6BD9A00904B3E /* Sources */, + 854A87BA1DF6BD9A00904B3E /* Frameworks */, + 854A87BB1DF6BD9A00904B3E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 854A87BF1DF6BD9A00904B3E /* PBXTargetDependency */, + ); + name = "OTRS-WatchTests"; + productName = "OTRS-WatchTests"; + productReference = 854A87BD1DF6BD9A00904B3E /* OTRS-WatchTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 854A87C71DF6BD9A00904B3E /* OTRS-WatchUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 854A87D71DF6BD9A00904B3E /* Build configuration list for PBXNativeTarget "OTRS-WatchUITests" */; + buildPhases = ( + 854A87C41DF6BD9A00904B3E /* Sources */, + 854A87C51DF6BD9A00904B3E /* Frameworks */, + 854A87C61DF6BD9A00904B3E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 854A87CA1DF6BD9A00904B3E /* PBXTargetDependency */, + ); + name = "OTRS-WatchUITests"; + productName = "OTRS-WatchUITests"; + productReference = 854A87C81DF6BD9A00904B3E /* OTRS-WatchUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 854A87A41DF6BD9900904B3E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0810; + LastUpgradeCheck = 0810; + ORGANIZATIONNAME = "Adawim UG (haftungsbeschränkt)"; + TargetAttributes = { + 854A87AB1DF6BD9900904B3E = { + CreatedOnToolsVersion = 8.1; + ProvisioningStyle = Automatic; + }; + 854A87BC1DF6BD9A00904B3E = { + CreatedOnToolsVersion = 8.1; + ProvisioningStyle = Automatic; + TestTargetID = 854A87AB1DF6BD9900904B3E; + }; + 854A87C71DF6BD9A00904B3E = { + CreatedOnToolsVersion = 8.1; + ProvisioningStyle = Automatic; + TestTargetID = 854A87AB1DF6BD9900904B3E; + }; + }; + }; + buildConfigurationList = 854A87A71DF6BD9900904B3E /* Build configuration list for PBXProject "OTRS-Watch" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 854A87A31DF6BD9900904B3E; + productRefGroup = 854A87AD1DF6BD9A00904B3E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 854A87AB1DF6BD9900904B3E /* OTRS-Watch */, + 854A87BC1DF6BD9A00904B3E /* OTRS-WatchTests */, + 854A87C71DF6BD9A00904B3E /* OTRS-WatchUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 854A87AA1DF6BD9900904B3E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 854A87B41DF6BD9A00904B3E /* Assets.xcassets in Resources */, + 854A87B71DF6BD9A00904B3E /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 854A87BB1DF6BD9A00904B3E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 854A87C61DF6BD9A00904B3E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 854A87A81DF6BD9900904B3E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 854A87B21DF6BD9A00904B3E /* ViewController.swift in Sources */, + 857EB22F1DF9845200CCA941 /* TicketExtension.swift in Sources */, + 854A87DD1DF6DC7500904B3E /* OTRS.swift in Sources */, + 857EB22C1DF974F500CCA941 /* Ticket.swift in Sources */, + 854A87B01DF6BD9A00904B3E /* AppDelegate.swift in Sources */, + 854A87DB1DF6C22C00904B3E /* Constants.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 854A87B91DF6BD9A00904B3E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 854A87C21DF6BD9A00904B3E /* OTRS_WatchTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 854A87C41DF6BD9A00904B3E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 854A87CD1DF6BD9A00904B3E /* OTRS_WatchUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 854A87BF1DF6BD9A00904B3E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 854A87AB1DF6BD9900904B3E /* OTRS-Watch */; + targetProxy = 854A87BE1DF6BD9A00904B3E /* PBXContainerItemProxy */; + }; + 854A87CA1DF6BD9A00904B3E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 854A87AB1DF6BD9900904B3E /* OTRS-Watch */; + targetProxy = 854A87C91DF6BD9A00904B3E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 854A87B51DF6BD9A00904B3E /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 854A87B61DF6BD9A00904B3E /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 854A87CF1DF6BD9A00904B3E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 854A87D01DF6BD9A00904B3E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + }; + name = Release; + }; + 854A87D21DF6BD9A00904B3E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "OTRS-Watch/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "de.adawim.ticket.OTRS-Watch"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Debug; + }; + 854A87D31DF6BD9A00904B3E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "OTRS-Watch/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "de.adawim.ticket.OTRS-Watch"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + }; + name = Release; + }; + 854A87D51DF6BD9A00904B3E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "OTRS-WatchTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "de.adawim.ticket.OTRS-WatchTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/OTRS-Watch.app/Contents/MacOS/OTRS-Watch"; + }; + name = Debug; + }; + 854A87D61DF6BD9A00904B3E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "OTRS-WatchTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "de.adawim.ticket.OTRS-WatchTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/OTRS-Watch.app/Contents/MacOS/OTRS-Watch"; + }; + name = Release; + }; + 854A87D81DF6BD9A00904B3E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "OTRS-WatchUITests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "de.adawim.ticket.OTRS-WatchUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "OTRS-Watch"; + }; + name = Debug; + }; + 854A87D91DF6BD9A00904B3E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = "OTRS-WatchUITests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "de.adawim.ticket.OTRS-WatchUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + TEST_TARGET_NAME = "OTRS-Watch"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 854A87A71DF6BD9900904B3E /* Build configuration list for PBXProject "OTRS-Watch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 854A87CF1DF6BD9A00904B3E /* Debug */, + 854A87D01DF6BD9A00904B3E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 854A87D11DF6BD9A00904B3E /* Build configuration list for PBXNativeTarget "OTRS-Watch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 854A87D21DF6BD9A00904B3E /* Debug */, + 854A87D31DF6BD9A00904B3E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 854A87D41DF6BD9A00904B3E /* Build configuration list for PBXNativeTarget "OTRS-WatchTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 854A87D51DF6BD9A00904B3E /* Debug */, + 854A87D61DF6BD9A00904B3E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 854A87D71DF6BD9A00904B3E /* Build configuration list for PBXNativeTarget "OTRS-WatchUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 854A87D81DF6BD9A00904B3E /* Debug */, + 854A87D91DF6BD9A00904B3E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 854A87A41DF6BD9900904B3E /* Project object */; +} diff --git a/OTRS-Watch.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OTRS-Watch.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..44dff15 --- /dev/null +++ b/OTRS-Watch.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate b/OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..3db95dd89c903f02c968bef4fcceec912377e2fc GIT binary patch literal 24023 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 YtADCKSN%tSaF3Gy + + + + + + + + + + + + diff --git a/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/OTRS-Watch.xcscheme b/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/OTRS-Watch.xcscheme new file mode 100644 index 0000000..0cc0118 --- /dev/null +++ b/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/OTRS-Watch.xcscheme @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/xcschememanagement.plist b/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..feca70e --- /dev/null +++ b/OTRS-Watch.xcodeproj/xcuserdata/linnemann.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + OTRS-Watch.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 854A87AB1DF6BD9900904B3E + + primary + + + 854A87BC1DF6BD9A00904B3E + + primary + + + 854A87C71DF6BD9A00904B3E + + primary + + + + + diff --git a/OTRS-Watch/AppDelegate.swift b/OTRS-Watch/AppDelegate.swift new file mode 100644 index 0000000..c0cb309 --- /dev/null +++ b/OTRS-Watch/AppDelegate.swift @@ -0,0 +1,26 @@ +// +// AppDelegate.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 06.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Cocoa + +@NSApplicationMain +class AppDelegate: NSObject, NSApplicationDelegate { + + + + func applicationDidFinishLaunching(_ aNotification: Notification) { + // Insert code here to initialize your application + } + + func applicationWillTerminate(_ aNotification: Notification) { + // Insert code here to tear down your application + } + + +} + diff --git a/OTRS-Watch/Assets.xcassets/AppIcon.appiconset/Contents.json b/OTRS-Watch/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2db2b1c --- /dev/null +++ b/OTRS-Watch/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -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" + } +} \ No newline at end of file diff --git a/OTRS-Watch/Base.lproj/Main.storyboard b/OTRS-Watch/Base.lproj/Main.storyboard new file mode 100644 index 0000000..8052c1d --- /dev/null +++ b/OTRS-Watch/Base.lproj/Main.storyboard @@ -0,0 +1,828 @@ + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OTRS-Watch/Constants.swift b/OTRS-Watch/Constants.swift new file mode 100644 index 0000000..ca72669 --- /dev/null +++ b/OTRS-Watch/Constants.swift @@ -0,0 +1,28 @@ +// +// Constants.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 06.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Foundation + +struct Constants { + + struct SERVICE { + static let URL = "http://saeweb01.sae.intra/web/ws/v1/user/permission/" + } + + struct USER_SETTINGS { + + struct CREDENTIALS { + static let USER = "user::setting::login" + static let PASSWORD = "user::setting::password" + } + + struct OTRS { + static let QUEUE = "user::setting::otrs::queue" + } + } +} diff --git a/OTRS-Watch/Info.plist b/OTRS-Watch/Info.plist new file mode 100644 index 0000000..2137e91 --- /dev/null +++ b/OTRS-Watch/Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. + NSMainStoryboardFile + Main + NSAppTransportSecurity + + NSExceptionDomains + + saeotrs01.sae.intra + + NSExceptionAllowsInsecureHTTPLoads + + + + + NSPrincipalClass + NSApplication + + diff --git a/OTRS-Watch/Model/Extension/TicketExtension.swift b/OTRS-Watch/Model/Extension/TicketExtension.swift new file mode 100644 index 0000000..ac89535 --- /dev/null +++ b/OTRS-Watch/Model/Extension/TicketExtension.swift @@ -0,0 +1,107 @@ +// +// Ticket.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 08.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Foundation + +enum SerializationError: Error { + case missing(String) + case invalid(String, Any) +} + +extension Ticket { + + init(source: Dictionary) throws { + + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" + + + // extract ticket id + guard let ticketID_ = source["TicketID"] as? String else { + throw SerializationError.missing("TicketID") + } + + // extract ticket number + guard let ticketNumber_ = source["TicketNumber"] as? String else { + throw SerializationError.missing("TicketNumber") + } + + // extract title + guard let title_ = source["Title"] as? String else { + throw SerializationError.missing("Title") + } + + // extract owner + guard let owner_ = source["Owner"] as? String else { + throw SerializationError.missing("Owner") + } + + // extract customer ID + guard let customerID_ = source["CustomerID"] as? String else { + throw SerializationError.missing("CustomerID") + } + + // extract customer user ID + guard let customerUserID_ = source["CustomerUserID"] as? String else { + throw SerializationError.missing("CustomerUserID") + } + + // extract priority + guard let priority_ = source["Priority"] as? String else { + throw SerializationError.missing("Priority") + } + + // extract queue + guard let queue_ = source["Queue"] as? String else { + throw SerializationError.missing("Queue") + } + + // extract queue ID + guard let queueID_ = source["QueueID"] as? String else { + throw SerializationError.missing("QueueID") + } + + // extract state + guard let stateJSON = source["State"] as? String else { + throw SerializationError.missing("State") + } + let state_:State = State(rawValue: stateJSON)! + + // extract created, e.g. 2016-11-24 11:30:11 + guard let createdJSON = source["Created"] as? String else { + throw SerializationError.missing("Created") + } + + // extract changed, e.g. 2016-11-24 13:33:01 + guard let changedJSON = source["Changed"] as? String else { + throw SerializationError.missing("Changed") + } + + + self.id = ticketID_ + self.ticketNumber = ticketNumber_ + self.title = title_ + self.owner = owner_ + self.customerID = customerID_ + self.customerUserID = customerUserID_ + self.priority = priority_ + self.queue = queue_ + self.queueID = queueID_ + self.state = state_ + if let created:Date = dateFormatter.date(from: createdJSON) { + self.created = created + } else { + self.created = Date.init() + } + if let changed:Date = dateFormatter.date(from: changedJSON) { + self.changed = changed + } else { + self.changed = Date.init() + } + } +} diff --git a/OTRS-Watch/Model/Ticket.swift b/OTRS-Watch/Model/Ticket.swift new file mode 100644 index 0000000..a02f9e4 --- /dev/null +++ b/OTRS-Watch/Model/Ticket.swift @@ -0,0 +1,29 @@ +// +// Ticket.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 08.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Foundation + +struct Ticket { + + enum State:String { + case new, open + } + + let id:String + let ticketNumber:String + let title:String + let created:Date + let changed:Date + let owner:String + let customerID:String + let customerUserID:String + let priority:String + let queue:String + let queueID:String + let state:State +} diff --git a/OTRS-Watch/OTRS.swift b/OTRS-Watch/OTRS.swift new file mode 100644 index 0000000..a7a1f46 --- /dev/null +++ b/OTRS-Watch/OTRS.swift @@ -0,0 +1,111 @@ +// +// OTRS.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 06.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Foundation + +class OTRS { + + var url : String; + var username : String; + var password : String; + + + //MARK: init + + init(url_:String, username_:String, password_:String) { + self.url = url_ + self.username = username_ + self.password = password_ + } + + + //MARK: REST + + func get(forQue:Int) { + + let config = URLSessionConfiguration.default // Session configuration + let session = URLSession(configuration: config) // Load configuration into session + let url = URL(string: buildURLForGettingNew(queID: forQue)) + + let task = session.dataTask(with: url!, completionHandler: { + (data, response, error) in + + if error != nil { + print(error!.localizedDescription) + } else { + do { + if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] { + // work with json ... + //print(json) + + for object in json { + let ticketIDs = object.value as! Array + //print(ticketIDs) + + for ticketID in ticketIDs { + if let tID:Int = Int(ticketID) { + self.fetch(ticket: tID) + } + } + } + } + } catch { + print("Error in JSONSerialization") + } + } + }) + + task.resume() + } + + func fetch(ticket:Int) { + let config = URLSessionConfiguration.default // Session configuration + let session = URLSession(configuration: config) // Load configuration into session + let url = URL(string: buildURLForGettingTicketInfo(ticketID: ticket)) + + let task = session.dataTask(with: url!, completionHandler: { // see: https://developer.apple.com/swift/blog/?id=37 + (data, response, error) in + + if error != nil { + print(error!.localizedDescription) + } else { + do { + let dictionary = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String : AnyObject] + let ticketData : Dictionary = dictionary["Ticket"]?.firstObject as! [String : AnyObject] + let ticket = try Ticket(source: ticketData) + print(ticket) + } catch SerializationError.missing(let marker) { + print("Error in JSONSerialization for ticket #\(ticket) at \"\(marker)\"") + } catch { + print("Error in JSONSerialization for ticket #\(ticket): \(error)") + } + } + }) + + task.resume() + } + + + //MARK: Build urls + + private func buildURLForGettingNew(queID:Int) -> String { + return buildURLForGettingListByState(forState: "new", queID: queID) + } + + private func buildURLForGettingOpen(queID:Int) -> String { + return buildURLForGettingListByState(forState: "open", queID: queID) + } + + private func buildURLForGettingListByState(forState:String, queID:Int) -> String { + return "http://saeotrs01.sae.intra/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket?UserLogin=\(self.username)&Password=\(self.password)&QueueIDs=\(queID)&States=\(forState)" + } + + private func buildURLForGettingTicketInfo(ticketID:Int) -> String { + return "http://saeotrs01.sae.intra/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket/\(ticketID)?UserLogin=\(self.username)&Password=\(self.password)" + } +} diff --git a/OTRS-Watch/ViewController.swift b/OTRS-Watch/ViewController.swift new file mode 100644 index 0000000..76a972b --- /dev/null +++ b/OTRS-Watch/ViewController.swift @@ -0,0 +1,60 @@ +// +// ViewController.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 06.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Cocoa + +class ViewController: NSViewController { + + @IBOutlet weak var txtUsername: NSTextField! + @IBOutlet weak var txtPassword: NSSecureTextField! + @IBOutlet weak var txtQueue: NSTextField! + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + + if UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.CREDENTIALS.USER) != nil { + txtUsername.stringValue = UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.CREDENTIALS.USER)! + } + + if UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.CREDENTIALS.PASSWORD) != nil { + txtPassword.stringValue = UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.CREDENTIALS.PASSWORD)! + } + + if UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.OTRS.QUEUE) != nil { + txtQueue.stringValue = UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.OTRS.QUEUE)! + } + + reload() + } + + override var representedObject: Any? { + didSet { + // Update the view, if already loaded. + } + } + + @IBAction func saveSettingsAction(_ sender: NSButton) { + UserDefaults.standard.setValue(txtUsername.stringValue, forKey: Constants.USER_SETTINGS.CREDENTIALS.USER) + + UserDefaults.standard.setValue(txtPassword.stringValue, forKey: Constants.USER_SETTINGS.CREDENTIALS.PASSWORD) + + UserDefaults.standard.setValue(txtQueue.stringValue, forKey: Constants.USER_SETTINGS.OTRS.QUEUE) + + reload() + } + + private func reload() { + let otrs = OTRS(url_: "", username_: txtUsername.stringValue, password_: txtPassword.stringValue) + if let que:Int = Int(txtQueue.stringValue) { + otrs.get(forQue: que) + } + } +} + diff --git a/OTRS-WatchTests/Info.plist b/OTRS-WatchTests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/OTRS-WatchTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/OTRS-WatchTests/OTRS_WatchTests.swift b/OTRS-WatchTests/OTRS_WatchTests.swift new file mode 100644 index 0000000..34ef6e2 --- /dev/null +++ b/OTRS-WatchTests/OTRS_WatchTests.swift @@ -0,0 +1,36 @@ +// +// OTRS_WatchTests.swift +// OTRS-WatchTests +// +// Created by Gerrit Linnemann on 06.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import XCTest +@testable import OTRS_Watch + +class OTRS_WatchTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/OTRS-WatchUITests/Info.plist b/OTRS-WatchUITests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/OTRS-WatchUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/OTRS-WatchUITests/OTRS_WatchUITests.swift b/OTRS-WatchUITests/OTRS_WatchUITests.swift new file mode 100644 index 0000000..4e45a38 --- /dev/null +++ b/OTRS-WatchUITests/OTRS_WatchUITests.swift @@ -0,0 +1,36 @@ +// +// OTRS_WatchUITests.swift +// OTRS-WatchUITests +// +// Created by Gerrit Linnemann on 06.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import XCTest + +class OTRS_WatchUITests: XCTestCase { + + override func setUp() { + super.setUp() + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + XCUIApplication().launch() + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + +}