//
// N e w S e s s i o n V i e w C o n t r o l l e r . s w i f t
// R S w i t c h
//
// C r e a t e d b y h r b r m s t r o n 9 / 5 / 1 9 .
// C o p y r i g h t © 2 0 1 9 B o b R u d i s . A l l r i g h t s r e s e r v e d .
//
import Cocoa
extension String {
var isValidURL : Bool {
let detector = try ! NSDataDetector ( types : NSTextCheckingResult . CheckingType . link . rawValue )
if let match = detector . firstMatch ( in : self , options : [ ] , range : NSRange ( location : 0 , length : self . utf16 . count ) ) {
// i t i s a l i n k , i f t h e m a t c h c o v e r s t h e w h o l e s t r i n g
return match . range . length = = self . utf16 . count
} else {
return false
}
}
}
class NewSessionViewController : NSViewController {
let appDelegate = NSApplication . shared . delegate as ! AppDelegate
@IBOutlet weak var nickname : NSTextField !
@IBOutlet weak var serverURL : NSTextField !
@IBOutlet weak var okButton : NSButton !
@IBAction func okPressed ( _ sender : Any ) {
appDelegate . sess . newSession ( url : serverURL . stringValue , title : nickname . stringValue )
self . view . window ? . windowController ? . close ( )
}
@IBAction func cancelPressed ( _ sender : Any ) {
self . view . window ? . windowController ? . close ( )
}
override func viewWillAppear ( ) {
nickname . stringValue = " "
serverURL . stringValue = " https:// "
super . viewDidAppear ( )
}
override func viewDidLoad ( ) {
super . viewDidLoad ( )
nickname . delegate = self
serverURL . delegate = self
okButton . isEnabled = false
// D o v i e w s e t u p h e r e .
}
}
extension NewSessionViewController : NSTextFieldDelegate {
func controlTextDidEndEditing ( _ notification : Notification ) {
let nick = nickname . stringValue
let sURL = serverURL . stringValue
let currNames = appDelegate . sess . sessions ! . map {
$0 . menuTitle
}
let nickUnique = ! ( currNames . firstIndex ( of : nick ) != nil )
okButton . isEnabled = ( ( nick . count > 0 ) && nickUnique && sURL . isValidURL )
}
}