@ -21,7 +21,7 @@ class OnboardingSearchController: NSViewController {
@IBOutlet private var accessoryLabel : NSTextField !
@IBOutlet private var accessoryLabel : NSTextField !
@IBOutlet var undoButton : NSButton !
@IBOutlet var undoButton : NSButton !
private var searchResultsDataSource : SearchDataSource !
private var searchResultsDataSource : SearchDataSource ?
private var dataTask : URLSessionDataTask ? = . none
private var dataTask : URLSessionDataTask ? = . none
private var themeDidChangeNotification : NSObjectProtocol ?
private var themeDidChangeNotification : NSObjectProtocol ?
@ -81,17 +81,19 @@ class OnboardingSearchController: NSViewController {
@objc func doubleClickAction ( _ tableView : NSTableView ) {
@objc func doubleClickAction ( _ tableView : NSTableView ) {
[ accessoryLabel ] . forEach { $0 ? . isHidden = false }
[ accessoryLabel ] . forEach { $0 ? . isHidden = false }
if tableView . selectedRow >= 0 , tableView . selectedRow < searchResultsDataSource . resultsCount ( ) {
if tableView . selectedRow >= 0 , tableView . selectedRow < ( searchResultsDataSource ? . resultsCount ( ) ? ? 0 ) {
let selectedType = searchResultsDataSource . placeForRow ( resultsTableView . selectedRow )
let selectedType = searchResultsDataSource ? . placeForRow ( resultsTableView . selectedRow )
switch selectedType {
switch selectedType {
case . city :
case . city :
if let filteredGoogleResult = searchResultsDataSource . retrieveFilteredResultFromGoogleAPI ( resultsTableView . selectedRow ) {
if let filteredGoogleResult = searchResultsDataSource ? . retrieveFilteredResultFromGoogleAPI ( resultsTableView . selectedRow ) {
addTimezoneToDefaults ( filteredGoogleResult )
addTimezoneToDefaults ( filteredGoogleResult )
}
}
return
return
case . timezone :
case . timezone :
cleanupAfterInstallingTimezone ( )
cleanupAfterInstallingTimezone ( )
return
return
case . none :
return
}
}
}
}
}
}
@ -100,28 +102,28 @@ class OnboardingSearchController: NSViewController {
let data = TimezoneData ( )
let data = TimezoneData ( )
data . setLabel ( CLEmptyString )
data . setLabel ( CLEmptyString )
let currentSelection = searchResultsDataSource . retrieveSelectedTimezone ( resultsTableView . selectedRow )
if let currentSelection = searchResultsDataSource ? . retrieveSelectedTimezone ( resultsTableView . selectedRow ) {
let metaInfo = metadata ( for : currentSelection )
let metaInfo = metadata ( for : currentSelection )
data . timezoneID = metaInfo . 0. name
data . timezoneID = metaInfo . 0. name
data . formattedAddress = metaInfo . 1. formattedName
data . formattedAddress = metaInfo . 1. formattedName
data . selectionType = . timezone
data . selectionType = . timezone
data . isSystemTimezone = metaInfo . 0. name = = NSTimeZone . system . identifier
data . isSystemTimezone = metaInfo . 0. name = = NSTimeZone . system . identifier
let operationObject = TimezoneDataOperations ( with : data )
let operationObject = TimezoneDataOperations ( with : data , store : DataStore . shared ( ) )
operationObject . saveObject ( )
operationObject . saveObject ( )
searchResultsDataSource . cleanupFilterArray ( )
searchResultsDataSource ? . cleanupFilterArray ( )
searchResultsDataSource . timezoneFilteredArray = [ ]
searchResultsDataSource ? . timezoneFilteredArray = [ ]
searchResultsDataSource . calculateChangesets ( )
searchResultsDataSource ? . calculateChangesets ( )
searchBar . stringValue = CLEmptyString
searchBar . stringValue = CLEmptyString
accessoryLabel . stringValue = " Added \( metaInfo . 1. formattedName ) . "
accessoryLabel . stringValue = " Added \( metaInfo . 1. formattedName ) . "
undoButton . isHidden = false
undoButton . isHidden = false
setupLabelHidingTimer ( )
setupLabelHidingTimer ( )
resultsTableView . reloadData ( )
resultsTableView . reloadData ( )
resultsTableView . isHidden = true
resultsTableView . isHidden = true
}
}
}
private func metadata ( for selection : TimezoneMetadata ) -> ( NSTimeZone , TimezoneMetadata ) {
private func metadata ( for selection : TimezoneMetadata ) -> ( NSTimeZone , TimezoneMetadata ) {
@ -194,7 +196,7 @@ class OnboardingSearchController: NSViewController {
private func fetchTimezone ( for latitude : Double , and longitude : Double , _ dataObject : TimezoneData ) {
private func fetchTimezone ( for latitude : Double , and longitude : Double , _ dataObject : TimezoneData ) {
if NetworkManager . isConnected ( ) = = false || ProcessInfo . processInfo . arguments . contains ( " mockTimezoneDown " ) {
if NetworkManager . isConnected ( ) = = false || ProcessInfo . processInfo . arguments . contains ( " mockTimezoneDown " ) {
setInfoLabel ( PreferencesConstants . noInternetConnectivityError )
setInfoLabel ( PreferencesConstants . noInternetConnectivityError )
searchResultsDataSource . cleanupFilterArray ( )
searchResultsDataSource ? . cleanupFilterArray ( )
resultsTableView . reloadData ( )
resultsTableView . reloadData ( )
return
return
}
}
@ -215,7 +217,7 @@ class OnboardingSearchController: NSViewController {
}
}
if error = = nil , let json = response , let response = json . decodeTimezone ( ) {
if error = = nil , let json = response , let response = json . decodeTimezone ( ) {
if self . resultsTableView . selectedRow >= 0 , self . resultsTableView . selectedRow < self . searchResultsDataSource . resultsCount ( ) {
if self . resultsTableView . selectedRow >= 0 , self . resultsTableView . selectedRow < ( self . searchResultsDataSource ? . resultsCount ( ) ) ? ? 0 {
var filteredAddress = " Error "
var filteredAddress = " Error "
if let address = dataObject . formattedAddress {
if let address = dataObject . formattedAddress {
@ -312,7 +314,7 @@ class OnboardingSearchController: NSViewController {
@objc func actualSearch ( ) {
@objc func actualSearch ( ) {
func setupForError ( ) {
func setupForError ( ) {
searchResultsDataSource . calculateChangesets ( )
searchResultsDataSource ? . calculateChangesets ( )
resultsTableView . isHidden = true
resultsTableView . isHidden = true
}
}
@ -345,12 +347,12 @@ class OnboardingSearchController: NSViewController {
return
return
}
}
self . searchResultsDataSource . cleanupFilterArray ( )
self . searchResultsDataSource ? . cleanupFilterArray ( )
self . searchResultsDataSource . timezoneFilteredArray = [ ]
self . searchResultsDataSource ? . timezoneFilteredArray = [ ]
if let errorPresent = error {
if let errorPresent = error {
self . findLocalSearchResultsForTimezones ( )
self . findLocalSearchResultsForTimezones ( )
if self . searchResultsDataSource . timezoneFilteredArray . count = = 0 {
if self . searchResultsDataSource ? . timezoneFilteredArray . count = = 0 {
self . presentErrorMessage ( errorPresent . localizedDescription )
self . presentErrorMessage ( errorPresent . localizedDescription )
setupForError ( )
setupForError ( )
return
return
@ -391,12 +393,12 @@ class OnboardingSearchController: NSViewController {
private func findLocalSearchResultsForTimezones ( ) {
private func findLocalSearchResultsForTimezones ( ) {
let lowercasedSearchString = searchBar . stringValue . lowercased ( )
let lowercasedSearchString = searchBar . stringValue . lowercased ( )
searchResultsDataSource . searchTimezones ( lowercasedSearchString )
searchResultsDataSource ? . searchTimezones ( lowercasedSearchString )
}
}
private func prepareUIForPresentingResults ( ) {
private func prepareUIForPresentingResults ( ) {
setInfoLabel ( CLEmptyString )
setInfoLabel ( CLEmptyString )
if searchResultsDataSource . calculateChangesets ( ) {
if let dataSource = searchResultsDataSource , d ataSource . calculateChangesets ( ) {
resultsTableView . isHidden = false
resultsTableView . isHidden = false
resultsTableView . reloadData ( )
resultsTableView . reloadData ( )
}
}
@ -421,13 +423,13 @@ class OnboardingSearchController: NSViewController {
return TimezoneData ( with : totalPackage )
return TimezoneData ( with : totalPackage )
}
}
searchResultsDataSource . setFilteredArrayValue ( finalTimezones )
searchResultsDataSource ? . setFilteredArrayValue ( finalTimezones )
}
}
private func resetSearchView ( ) {
private func resetSearchView ( ) {
searchResultsDataSource . cleanupFilterArray ( )
searchResultsDataSource ? . cleanupFilterArray ( )
searchResultsDataSource . timezoneFilteredArray = [ ]
searchResultsDataSource ? . timezoneFilteredArray = [ ]
searchResultsDataSource . calculateChangesets ( )
searchResultsDataSource ? . calculateChangesets ( )
resultsTableView . reloadData ( )
resultsTableView . reloadData ( )
searchBar . stringValue = CLEmptyString
searchBar . stringValue = CLEmptyString
searchBar . placeholderString = " Press Enter to Search "
searchBar . placeholderString = " Press Enter to Search "
@ -441,15 +443,15 @@ class OnboardingSearchController: NSViewController {
extension OnboardingSearchController : NSTableViewDataSource {
extension OnboardingSearchController : NSTableViewDataSource {
func numberOfRows ( in _ : NSTableView ) -> Int {
func numberOfRows ( in _ : NSTableView ) -> Int {
return searchResultsDataSource != nil ? searchResultsDataSource . resultsCount ( ) : 0
return searchResultsDataSource ? . resultsCount ( ) ? ? 0
}
}
func tableView ( _ tableView : NSTableView , viewFor _ : NSTableColumn ? , row : Int ) -> NSView ? {
func tableView ( _ tableView : NSTableView , viewFor _ : NSTableColumn ? , row : Int ) -> NSView ? {
if let result = tableView . makeView ( withIdentifier : NSUserInterfaceItemIdentifier ( rawValue : " resultCellView " ) , owner : self ) as ? ResultTableViewCell ,
if let result = tableView . makeView ( withIdentifier : NSUserInterfaceItemIdentifier ( rawValue : " resultCellView " ) , owner : self ) as ? ResultTableViewCell ,
row >= 0 ,
row >= 0 ,
row < searchResultsDataSource . resultsCount ( )
row < ( searchResultsDataSource ? . resultsCount ( ) ? ? 0 )
{
{
let currentSelection = searchResultsDataSource . retrieveResult ( row )
let currentSelection = searchResultsDataSource ? . retrieveResult ( row )
if let timezone = currentSelection as ? TimezoneMetadata {
if let timezone = currentSelection as ? TimezoneMetadata {
result . result . stringValue = " \( timezone . formattedName ) "
result . result . stringValue = " \( timezone . formattedName ) "
} else if let location = currentSelection as ? TimezoneData {
} else if let location = currentSelection as ? TimezoneData {
@ -466,7 +468,7 @@ extension OnboardingSearchController: NSTableViewDataSource {
extension OnboardingSearchController : NSTableViewDelegate {
extension OnboardingSearchController : NSTableViewDelegate {
func tableView ( _ : NSTableView , heightOfRow row : Int ) -> CGFloat {
func tableView ( _ : NSTableView , heightOfRow row : Int ) -> CGFloat {
if row = = 0 , searchResultsDataSource . resultsCount ( ) = = 0 {
if row = = 0 , searchResultsDataSource ? . resultsCount ( ) = = 0 {
return 30
return 30
}
}
@ -474,7 +476,7 @@ extension OnboardingSearchController: NSTableViewDelegate {
}
}
func tableView ( _ : NSTableView , shouldSelectRow row : Int ) -> Bool {
func tableView ( _ : NSTableView , shouldSelectRow row : Int ) -> Bool {
return searchResultsDataSource . resultsCount ( ) = = 0 ? row != 0 : true
return searchResultsDataSource ? . resultsCount ( ) = = 0 ? row != 0 : true
}
}
func tableView ( _ : NSTableView , rowViewForRow _ : Int ) -> NSTableRowView ? {
func tableView ( _ : NSTableView , rowViewForRow _ : Int ) -> NSTableRowView ? {