From 84138a8b499c541aac1b4a7e7c95c6ae54f4ac35 Mon Sep 17 00:00:00 2001 From: Gerrit Linnemann Date: Wed, 14 Dec 2016 14:50:21 +0100 Subject: [PATCH] Table --- OTRS-Watch.xcodeproj/project.pbxproj | 12 +++ .../UserInterfaceState.xcuserstate | Bin 24023 -> 24632 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 12 +-- OTRS-Watch/Base.lproj/Main.storyboard | 102 +++++++++++++++++- OTRS-Watch/Constants.swift | 12 +++ .../Extension/ViewControllerExtension.swift | 52 +++++++++ OTRS-Watch/OTRS.swift | 22 +++- OTRS-Watch/ViewController.swift | 34 ++++++ 8 files changed, 234 insertions(+), 12 deletions(-) create mode 100644 OTRS-Watch/Extension/ViewControllerExtension.swift diff --git a/OTRS-Watch.xcodeproj/project.pbxproj b/OTRS-Watch.xcodeproj/project.pbxproj index 6f4a859..7e4df79 100644 --- a/OTRS-Watch.xcodeproj/project.pbxproj +++ b/OTRS-Watch.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 8505EACF1E01441F002A0BFB /* ViewControllerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8505EACE1E01441F002A0BFB /* ViewControllerExtension.swift */; }; 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 */; }; @@ -37,6 +38,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 8505EACE1E01441F002A0BFB /* ViewControllerExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewControllerExtension.swift; path = Extension/ViewControllerExtension.swift; sourceTree = ""; }; 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 = ""; }; @@ -80,6 +82,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 8505EAD01E014486002A0BFB /* Extension */ = { + isa = PBXGroup; + children = ( + 8505EACE1E01441F002A0BFB /* ViewControllerExtension.swift */, + ); + name = Extension; + sourceTree = ""; + }; 854A87A31DF6BD9900904B3E = { isa = PBXGroup; children = ( @@ -103,6 +113,7 @@ 854A87AE1DF6BD9A00904B3E /* OTRS-Watch */ = { isa = PBXGroup; children = ( + 8505EAD01E014486002A0BFB /* Extension */, 857EB22A1DF9748B00CCA941 /* Model */, 854A87AF1DF6BD9A00904B3E /* AppDelegate.swift */, 854A87B11DF6BD9A00904B3E /* ViewController.swift */, @@ -285,6 +296,7 @@ files = ( 854A87B21DF6BD9A00904B3E /* ViewController.swift in Sources */, 857EB22F1DF9845200CCA941 /* TicketExtension.swift in Sources */, + 8505EACF1E01441F002A0BFB /* ViewControllerExtension.swift in Sources */, 854A87DD1DF6DC7500904B3E /* OTRS.swift in Sources */, 857EB22C1DF974F500CCA941 /* Ticket.swift in Sources */, 854A87B01DF6BD9A00904B3E /* AppDelegate.swift in Sources */, diff --git a/OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate b/OTRS-Watch.xcodeproj/project.xcworkspace/xcuserdata/linnemann.xcuserdatad/UserInterfaceState.xcuserstate index 3db95dd89c903f02c968bef4fcceec912377e2fc..2374a5b2bfaedb064d5566e7d5691d229ed03606 100644 GIT binary patch delta 13488 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 qcZ%7`#+N)o!RR0geeS4h% delta 12894 zcmaJn2UwF=*YABNVJAQa0TQyW2%sQ>3&lM^MNur^*5=+;tJbR3sI_juS+}_A z);g zG9U-RKn*k?97F&ehy{rt73hHhq=QV*6y$(h&;qmsZ9x~%6?6mLK@ZRul!1O=02l&> zf??nb@TCn*0Fyy2SO8XoHDE2M1M9$gumNlY+rS=h02~BAgCpP!I1A2!^WXxw3a)|Q zz#rfyxCQEC$l}x2jsg#~F zQ0Y_#)s)JiT2ig34pc{~m@1+AQsvYDY7jNTMtwnzrDjmyQ!}Yq)NE=FwU}B$Ev0^- zR#K~|I%*xYp4vbiqmEN2sFTzw>NItRI!m3S&Qlkti_~T68udGMllqH#NIjw+Q!i

#6GeRbSQ7}p- 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 @@ -26,11 +26,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "OTRS-Watch/OTRS.swift" - timestampString = "502893913.377215" + timestampString = "503411749.778027" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "53" - endingLineNumber = "53" + startingLineNumber = "56" + endingLineNumber = "56" landmarkName = "get(forQue:)" landmarkType = "7"> diff --git a/OTRS-Watch/Base.lproj/Main.storyboard b/OTRS-Watch/Base.lproj/Main.storyboard index 8052c1d..e4840e4 100644 --- a/OTRS-Watch/Base.lproj/Main.storyboard +++ b/OTRS-Watch/Base.lproj/Main.storyboard @@ -709,6 +709,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -812,6 +911,7 @@ + @@ -819,7 +919,7 @@ - + diff --git a/OTRS-Watch/Constants.swift b/OTRS-Watch/Constants.swift index ca72669..9c5b77b 100644 --- a/OTRS-Watch/Constants.swift +++ b/OTRS-Watch/Constants.swift @@ -25,4 +25,16 @@ struct Constants { static let QUEUE = "user::setting::otrs::queue" } } + + struct NOTIFICATION { + + struct TICKET { + + struct LIST { + static let UPDATED = "nf::ticket::list::updated" + } + + static let IN = "nf::ticket::in" + } + } } diff --git a/OTRS-Watch/Extension/ViewControllerExtension.swift b/OTRS-Watch/Extension/ViewControllerExtension.swift new file mode 100644 index 0000000..6ead55f --- /dev/null +++ b/OTRS-Watch/Extension/ViewControllerExtension.swift @@ -0,0 +1,52 @@ +// +// ViewControllerExtension.swift +// OTRS-Watch +// +// Created by Gerrit Linnemann on 14.12.16. +// Copyright © 2016 Adawim UG (haftungsbeschränkt). All rights reserved. +// + +import Cocoa + +extension ViewController: NSTableViewDataSource, NSTableViewDelegate { + + fileprivate enum CellIdentifiers { + static let OTRSTicketNumber = "OTRSTicketNumber" + static let OTRSTicketDetails = "OTRSTicketDetails" + } + + func numberOfRows(in tableView: NSTableView) -> Int { + return self.ticketDictionary.count + } + + func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { + + var image: NSImage? + var text: String = "" + var cellIdentifier: String = "" + + print("row: \(row)") + + guard let item = ticketDictionary.first else { + return nil + } + + if tableColumn == self.ticketTableView.tableColumns[0] { + cellIdentifier = CellIdentifiers.OTRSTicketNumber + image = nil + text = item.value.ticketNumber + } else if tableColumn == self.ticketTableView.tableColumns[1] { + cellIdentifier = CellIdentifiers.OTRSTicketDetails + image = nil + text = item.value.title + } + + if let cell = tableView.make(withIdentifier: cellIdentifier, owner: nil) as? NSTableCellView { + cell.textField?.stringValue = text + cell.imageView?.image = image ?? nil + return cell + } + + return nil + } +} diff --git a/OTRS-Watch/OTRS.swift b/OTRS-Watch/OTRS.swift index a7a1f46..552095b 100644 --- a/OTRS-Watch/OTRS.swift +++ b/OTRS-Watch/OTRS.swift @@ -43,16 +43,24 @@ class OTRS { // work with json ... //print(json) + var cnt = 0; + 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) + self.fetch(ticket: tID, session: session) + cnt = cnt+1; } } } + + let nc = NotificationCenter.default + nc.post(name:Notification.Name(rawValue:Constants.NOTIFICATION.TICKET.LIST.UPDATED), + object: nil, + userInfo: ["count":cnt]) } } catch { print("Error in JSONSerialization") @@ -63,9 +71,7 @@ class OTRS { task.resume() } - func fetch(ticket:Int) { - let config = URLSessionConfiguration.default // Session configuration - let session = URLSession(configuration: config) // Load configuration into session + func fetch(ticket:Int, session:URLSession) { let url = URL(string: buildURLForGettingTicketInfo(ticketID: ticket)) let task = session.dataTask(with: url!, completionHandler: { // see: https://developer.apple.com/swift/blog/?id=37 @@ -78,7 +84,13 @@ class OTRS { 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) + //print(ticket) + + let nc = NotificationCenter.default + nc.post(name:Notification.Name(rawValue:Constants.NOTIFICATION.TICKET.IN), + object: nil, + userInfo: ["message":ticket.id, "ticket":ticket]) + } catch SerializationError.missing(let marker) { print("Error in JSONSerialization for ticket #\(ticket) at \"\(marker)\"") } catch { diff --git a/OTRS-Watch/ViewController.swift b/OTRS-Watch/ViewController.swift index 76a972b..f75de83 100644 --- a/OTRS-Watch/ViewController.swift +++ b/OTRS-Watch/ViewController.swift @@ -13,9 +13,15 @@ class ViewController: NSViewController { @IBOutlet weak var txtUsername: NSTextField! @IBOutlet weak var txtPassword: NSSecureTextField! @IBOutlet weak var txtQueue: NSTextField! + @IBOutlet weak var ticketTableView: NSTableView! + + var ticketDictionary: Dictionary = [:] override func viewDidLoad() { super.viewDidLoad() + + ticketTableView.delegate = self + ticketTableView.dataSource = self // Do any additional setup after loading the view. @@ -31,6 +37,15 @@ class ViewController: NSViewController { txtQueue.stringValue = UserDefaults.standard.string(forKey: Constants.USER_SETTINGS.OTRS.QUEUE)! } + let nc = NotificationCenter.default + nc.addObserver(forName:Notification.Name(rawValue:Constants.NOTIFICATION.TICKET.IN), + object:nil, queue:nil, + using:catchNewIncomingTicket) + nc.addObserver(forName:Notification.Name(rawValue:Constants.NOTIFICATION.TICKET.LIST.UPDATED), + object:nil, queue:nil, + using:catchTicketsUpdated) + + reload() } @@ -56,5 +71,24 @@ class ViewController: NSViewController { otrs.get(forQue: que) } } + + // MARK: Notification + + func catchNewIncomingTicket(notification:Notification) -> Void { + + guard let userInfo = notification.userInfo, + let message:String = userInfo["message"] as? String, + let ticket:Ticket = userInfo["ticket"] as? Ticket else { + return + } + + self.ticketDictionary.updateValue(ticket, forKey: message) + + reload() + } + + func catchTicketsUpdated(notification:Notification) -> Void { + + } }