Browse Source

Tests and formatting.

pull/113/head
Abhishek 3 years ago
parent
commit
642303d138
  1. 4
      Clocker/Clocker.xcodeproj/project.pbxproj
  2. 8
      Clocker/ClockerUnitTests/AppDelegateTests.swift
  3. 3
      Clocker/ClockerUnitTests/ClockerUnitTests.swift
  4. 2
      Clocker/ClockerUnitTests/DateFormatterManagerTests.swift
  5. 39
      Clocker/ClockerUnitTests/ReviewControllerTests.swift
  6. 139
      Clocker/ClockerUnitTests/SearchDataSourceTests.swift
  7. 2
      Clocker/ClockerUnitTests/ThemerTests.swift
  8. 6
      Clocker/CoreLoggerKit/Package.swift
  9. 2
      Clocker/CoreLoggerKit/Tests/CoreLoggerKitTests/CoreLoggerKitTests.swift
  10. 2
      Clocker/CoreLoggerKit/Tests/CoreLoggerKitTests/XCTestManifests.swift
  11. 8
      Clocker/CoreModelKit/Package.swift
  12. 2
      Clocker/CoreModelKit/Sources/CoreModelKit/TimezoneData.swift
  13. 2
      Clocker/CoreModelKit/Tests/CoreModelKitTests/XCTestManifests.swift
  14. 6
      Clocker/Events and Reminders/CalendarHandler.swift
  15. 3
      Clocker/Events and Reminders/RemindersHandler.swift
  16. 10
      Clocker/Menu Bar/StatusContainerView.swift
  17. 3
      Clocker/Menu Bar/StatusItemHandler.swift
  18. 8
      Clocker/Menu Bar/StatusItemView.swift
  19. 7
      Clocker/Onboarding/OnboardingSearchController.swift
  20. 4
      Clocker/Overall App/ConfigExport.swift
  21. 1
      Clocker/Overall App/DateFormatterManager.swift
  22. 3
      Clocker/Overall App/Themer.swift
  23. 2
      Clocker/Panel/Data Layer/TimezoneDataOperations.swift
  24. 10
      Clocker/Panel/Notes Popover/NotesPopover.swift
  25. 2
      Clocker/Panel/Notes Popover/TextViewWithPlaceholder.swift
  26. 5
      Clocker/Panel/PanelController.swift
  27. 33
      Clocker/Panel/ParentPanelController.swift
  28. 2
      Clocker/Panel/UI/PanelTableView.swift
  29. 6
      Clocker/Panel/UI/TimezoneCellView.swift
  30. 3
      Clocker/Panel/Upcoming Events/UpcomingEventViewItem.swift
  31. 2
      Clocker/Preferences/About/PointingHandCursorButton.swift
  32. 5
      Clocker/Preferences/App Feedback/AppFeedbackWindowController.swift
  33. 5
      Clocker/Preferences/Appearance/AppearanceViewController.swift
  34. 8
      Clocker/Preferences/Calendar/CalendarViewController.swift
  35. 7
      Clocker/Preferences/General/PreferencesDataSource.swift
  36. 12
      Clocker/Preferences/General/PreferencesViewController.swift
  37. 42
      Clocker/Preferences/General/SearchDataSource.swift
  38. 15
      Clocker/Preferences/Menu Bar/StatusContainerView.swift
  39. 5
      Clocker/Preferences/Menu Bar/StatusItemHandler.swift
  40. 8
      Clocker/Preferences/Menu Bar/StatusItemView.swift
  41. 8
      Clocker/Preferences/Menu Bar/UpcomingEventStatusItemView.swift
  42. 6
      Clocker/StartupKit/Package.swift

4
Clocker/Clocker.xcodeproj/project.pbxproj

@ -53,6 +53,7 @@
35584D1427EF8EB5006E3EAD /* ThemerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35584D1327EF8EB5006E3EAD /* ThemerTests.swift */; };
35584D1827F0B019006E3EAD /* DateFormatterManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35584D1727F0B019006E3EAD /* DateFormatterManagerTests.swift */; };
35584D1A27F0B64E006E3EAD /* AppDelegateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35584D1927F0B64E006E3EAD /* AppDelegateTests.swift */; };
35621CFC27F66C1900926D5C /* SearchDataSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35621CFB27F66C1900926D5C /* SearchDataSourceTests.swift */; };
357391872507277500D30819 /* TimeMarkerViewItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 357391852507277500D30819 /* TimeMarkerViewItem.swift */; };
357391882507277500D30819 /* HourMarkerViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 357391862507277500D30819 /* HourMarkerViewItem.xib */; };
3579765E2680208C009DDA6E /* ParentPanelController+ModernSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3579765D2680208C009DDA6E /* ParentPanelController+ModernSlider.swift */; };
@ -291,6 +292,7 @@
35584D1327EF8EB5006E3EAD /* ThemerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemerTests.swift; sourceTree = "<group>"; };
35584D1727F0B019006E3EAD /* DateFormatterManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatterManagerTests.swift; sourceTree = "<group>"; };
35584D1927F0B64E006E3EAD /* AppDelegateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegateTests.swift; sourceTree = "<group>"; };
35621CFB27F66C1900926D5C /* SearchDataSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchDataSourceTests.swift; sourceTree = "<group>"; };
3569A44E25441F320087E254 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
357391852507277500D30819 /* TimeMarkerViewItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeMarkerViewItem.swift; sourceTree = "<group>"; };
357391862507277500D30819 /* HourMarkerViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HourMarkerViewItem.xib; sourceTree = "<group>"; };
@ -890,6 +892,7 @@
35584D1727F0B019006E3EAD /* DateFormatterManagerTests.swift */,
35584D1927F0B64E006E3EAD /* AppDelegateTests.swift */,
35D23E3627F27E2E00C6DD55 /* ReviewControllerTests.swift */,
35621CFB27F66C1900926D5C /* SearchDataSourceTests.swift */,
);
path = ClockerUnitTests;
sourceTree = "<group>";
@ -1279,6 +1282,7 @@
35D23E3727F27E2E00C6DD55 /* ReviewControllerTests.swift in Sources */,
35584D1A27F0B64E006E3EAD /* AppDelegateTests.swift in Sources */,
9A0385BB269E3434003B5E72 /* StandardMenubarHandlerTests.swift in Sources */,
35621CFC27F66C1900926D5C /* SearchDataSourceTests.swift in Sources */,
35584D1827F0B019006E3EAD /* DateFormatterManagerTests.swift in Sources */,
C20839CA21515C1E00C86589 /* ClockerUnitTests.swift in Sources */,
);

8
Clocker/ClockerUnitTests/AppDelegateTests.swift

@ -1,12 +1,11 @@
// Copyright © 2015 Abhishek Banthia
import XCTest
import CoreModelKit
import XCTest
@testable import Clocker
class AppDelegateTests: XCTestCase {
func testStatusItemIsInitialized() throws {
let subject = NSApplication.shared.delegate as? AppDelegate
let statusHandler = subject?.statusItemForPanel()
@ -49,7 +48,7 @@ class AppDelegateTests: XCTestCase {
subject?.setupFloatingWindow(true)
let floatingWindow = NSApplication.shared.windows.first { window in
if ((window.windowController as? FloatingWindowController) != nil) {
if (window.windowController as? FloatingWindowController) != nil {
return true
}
return false
@ -61,7 +60,7 @@ class AppDelegateTests: XCTestCase {
subject?.setupFloatingWindow(false)
let closedFloatingWindow = NSApplication.shared.windows.first { window in
if ((window.windowController as? FloatingWindowController) != nil) {
if (window.windowController as? FloatingWindowController) != nil {
return true
}
return false
@ -150,5 +149,4 @@ class AppDelegateTests: XCTestCase {
XCTAssertNotEqual(hasActiveGetter, PanelController.shared().hasActivePanel)
}
}

3
Clocker/ClockerUnitTests/ClockerUnitTests.swift

@ -401,7 +401,6 @@ class ClockerUnitTests: XCTestCase {
XCTAssertEqual(stringWithComma.filteredName(), "Mumbai")
XCTAssertEqual(stringWithoutComma.filteredName(), "Mumbai")
XCTAssertEqual(emptyString.filteredName(), "")
}
func testToasty() {
@ -413,7 +412,7 @@ class ClockerUnitTests: XCTestCase {
let result = XCTWaiter.wait(for: [expectation], timeout: 1.5) // Set 2 seconds here for a little leeway
if result == XCTWaiter.Result.timedOut {
XCTAssertTrue(view.subviews.isEmpty)
}
}
}
func testPointingHandButton() {

2
Clocker/ClockerUnitTests/DateFormatterManagerTests.swift

@ -5,7 +5,6 @@ import XCTest
@testable import Clocker
class DateFormatterManagerTests: XCTestCase {
func testRegularDateFormatter() throws {
let subject = DateFormatterManager.dateFormatter(with: .medium, for: "UTC")
XCTAssertEqual(subject.dateStyle, .medium)
@ -32,5 +31,4 @@ class DateFormatterManagerTests: XCTestCase {
XCTAssertEqual(subject.timeZone.identifier, "America/Los_Angeles")
XCTAssertEqual(subject.dateFormat, "hh:mm:ss")
}
}

39
Clocker/ClockerUnitTests/ReviewControllerTests.swift

@ -1,7 +1,7 @@
// Copyright © 2015 Abhishek Banthia
import XCTest
@testable import Clocker
import XCTest
class ReviewControllerTests: XCTestCase {
func testDebuggingMode() throws {
@ -48,8 +48,8 @@ class ReviewControllerTests: XCTestCase {
// Explicitly set preview mode to false
ReviewController.setPreviewMode(false)
XCTAssertNil(mockDefaults.object(forKey:"last-prompt"))
XCTAssertNil(mockDefaults.object(forKey:"last-version"))
XCTAssertNil(mockDefaults.object(forKey: "last-prompt"))
XCTAssertNil(mockDefaults.object(forKey: "last-version"))
XCTAssertTrue(ReviewController.canPrompt())
}
@ -64,12 +64,12 @@ class ReviewControllerTests: XCTestCase {
let minInstall = Date().subtract(dateChunk)
let promptChunk = TimeChunk(seconds: 0,
minutes: 0,
hours: 0,
days: 60,
weeks: 0,
months: 0,
years: 0)
minutes: 0,
hours: 0,
days: 60,
weeks: 0,
months: 0,
years: 0)
let lastPromptDate = Date().subtract(promptChunk)
guard let mockDefaults = UserDefaults(suiteName: "com.test.Clocker3") else {
@ -96,12 +96,12 @@ class ReviewControllerTests: XCTestCase {
let minInstall = Date().subtract(dateChunk)
let promptChunk = TimeChunk(seconds: 0,
minutes: 0,
hours: 0,
days: 91,
weeks: 0,
months: 0,
years: 0)
minutes: 0,
hours: 0,
days: 91,
weeks: 0,
months: 0,
years: 0)
let lastPromptDate = Date().subtract(promptChunk)
guard let mockDefaults = UserDefaults(suiteName: "com.test.Clocker4") else {
@ -115,8 +115,8 @@ class ReviewControllerTests: XCTestCase {
// Explicitly set preview mode to false
ReviewController.setPreviewMode(false)
XCTAssertNotNil(mockDefaults.object(forKey:"last-prompt"))
XCTAssertNotNil(mockDefaults.object(forKey:"last-version"))
XCTAssertNotNil(mockDefaults.object(forKey: "last-prompt"))
XCTAssertNotNil(mockDefaults.object(forKey: "last-version"))
XCTAssertTrue(ReviewController.canPrompt())
}
@ -126,8 +126,7 @@ class ReviewControllerTests: XCTestCase {
}
ReviewController.applicationDidLaunch(mockDefaults)
ReviewController.prompt()
XCTAssertNotNil(mockDefaults.object(forKey:"last-prompt"))
XCTAssertNotNil(mockDefaults.object(forKey:"last-version"))
XCTAssertNotNil(mockDefaults.object(forKey: "last-prompt"))
XCTAssertNotNil(mockDefaults.object(forKey: "last-version"))
}
}

139
Clocker/ClockerUnitTests/SearchDataSourceTests.swift

@ -0,0 +1,139 @@
// Copyright © 2015 Abhishek Banthia
import CoreModelKit
import XCTest
@testable import Clocker
class SearchDataSourceTests: XCTestCase {
private var subject: SearchDataSource!
private func setupSubject(searchText: String = "") {
let mockSearchField = NSSearchField()
mockSearchField.stringValue = searchText
subject = SearchDataSource(with: mockSearchField, location: .preferences)
}
private func setupMockData() {
subject.searchTimezones("los")
XCTAssertTrue(subject.calculateChangesets())
let mockTimezone = TimezoneData()
mockTimezone.timezoneID = "PST"
mockTimezone.formattedAddress = "Los Angeles"
subject.setFilteredArrayValue([mockTimezone])
subject.searchTimezones("los")
XCTAssertTrue(subject.calculateChangesets())
}
override func tearDownWithError() throws {
subject = nil
try super.tearDownWithError()
}
func testSearchTimezones() {
setupSubject(searchText: "")
// Test capitalized string
subject.searchTimezones("MUMBAI")
XCTAssert(subject.timezoneFilteredArray.isEmpty == false)
// Test sentence-cased string
subject.searchTimezones("Delhi")
XCTAssert(subject.timezoneFilteredArray.isEmpty == false)
// Test lower-cased string
subject.searchTimezones("california")
XCTAssert(subject.timezoneFilteredArray.isEmpty == false)
}
func testCalculateChangesets() {
setupSubject(searchText: "los")
setupMockData()
subject.cleanupFilterArray()
subject.searchTimezones("los")
XCTAssertTrue(subject.calculateChangesets())
}
func testRetrieveResult() throws {
setupSubject(searchText: "los")
setupMockData()
// 0 will translate to a city search result
let result1 = subject.retrieveResult(0)
let unwrap = try XCTUnwrap(result1)
if let metadata = unwrap as? CoreModelKit.TimezoneData {
XCTAssert(metadata.timezoneID == "PST")
}
// 1 will translate to a timezone search result
let result2 = subject.retrieveResult(1)
let unwrap2 = try XCTUnwrap(result2)
if let metadata = unwrap2 as? TimezoneMetadata {
XCTAssert(metadata.timezone.name == "America/Tijuana")
}
// Test placeForRow
let rowType = subject.placeForRow(0)
XCTAssert(rowType == .city)
let rowType1 = subject.placeForRow(1)
XCTAssert(rowType1 == .timezone)
// Test count
XCTAssertEqual(subject.resultsCount(), 4)
// Test retrieveFilteredResultFromGoogleAPI
let firstResult = try XCTUnwrap(subject.retrieveFilteredResultFromGoogleAPI(0))
XCTAssert(firstResult.timezoneID == "PST")
// filteredArray should only have a count of 1
XCTAssertNil(subject.retrieveFilteredResultFromGoogleAPI(1))
}
func testTableViewDataSourceMethods() {
let mockTableView = NSTableView(frame: CGRect.zero)
setupSubject(searchText: "los")
setupMockData()
let resultsCount = subject.numberOfRows(in: mockTableView)
XCTAssert(resultsCount == 4)
XCTAssert(subject.tableView(mockTableView, heightOfRow: 0) == 30)
}
func testRetrieveSelectedTimezone() {
setupSubject(searchText: "los")
setupMockData()
let result = subject.retrieveSelectedTimezone(0)
XCTAssert(result.timezone.abbreviation == "PDT")
}
func testRetrieveSelectedTimezoneWithEmptySearchField() {
// Setup subject with an empty search field
setupSubject(searchText: CLEmptyString)
subject.searchTimezones("los")
XCTAssertFalse(subject.calculateChangesets())
let mockTimezone = TimezoneData()
mockTimezone.timezoneID = "PST"
mockTimezone.formattedAddress = "Los Angeles"
subject.setFilteredArrayValue([mockTimezone])
subject.searchTimezones("los")
XCTAssertFalse(subject.calculateChangesets())
let result = subject.retrieveSelectedTimezone(1)
XCTAssert(result.timezone.abbreviation == "GMT")
}
func testRetrieveSelectedTimezoneWithEmptySearchFieldWithoutSearchResults() {
// Setup subject with an empty search field
setupSubject(searchText: "los")
setupMockData()
subject.cleanupFilterArray()
let result = subject.retrieveResult(0)
XCTAssertNil(result)
}
}

2
Clocker/ClockerUnitTests/ThemerTests.swift

@ -122,7 +122,7 @@ class ThemerTests: XCTestCase {
func testSystemTheme() throws {
let currentSystemTheme =
UserDefaults.standard.string(forKey: CLAppleInterfaceStyleKey)?.lowercased().contains("dark") ?? false ? Themer.Theme.dark : Themer.Theme.light
UserDefaults.standard.string(forKey: CLAppleInterfaceStyleKey)?.lowercased().contains("dark") ?? false ? Themer.Theme.dark : Themer.Theme.light
let subject = Themer(index: 2) // 2 is for system theme
let expectedSliderKnobColor = currentSystemTheme == .light ? NSColor(deviceRed: 255.0, green: 255.0, blue: 255, alpha: 0.9) : NSColor(deviceRed: 0.0, green: 0.0, blue: 0, alpha: 0.9)
let expectedSliderRightColor = currentSystemTheme == .dark ? NSColor.white : NSColor.gray

6
Clocker/CoreLoggerKit/Package.swift

@ -6,13 +6,13 @@ import PackageDescription
let package = Package(
name: "CoreLoggerKit",
platforms: [
.macOS(.v10_12)
.macOS(.v10_12),
],
products: [
.library(
name: "CoreLoggerKit",
targets: ["CoreLoggerKit"]
)
),
],
dependencies: [],
targets: [
@ -23,6 +23,6 @@ let package = Package(
.testTarget(
name: "CoreLoggerKitTests",
dependencies: ["CoreLoggerKit"]
)
),
]
)

2
Clocker/CoreLoggerKit/Tests/CoreLoggerKitTests/CoreLoggerKitTests.swift

@ -3,6 +3,6 @@ import XCTest
final class CoreLoggerKitTests: XCTestCase {
static var allTests = [
("testExample", testExample)
("testExample", testExample),
]
}

2
Clocker/CoreLoggerKit/Tests/CoreLoggerKitTests/XCTestManifests.swift

@ -3,7 +3,7 @@ import XCTest
#if !canImport(ObjectiveC)
public func allTests() -> [XCTestCaseEntry] {
return [
testCase(CoreLoggerKitTests.allTests)
testCase(CoreLoggerKitTests.allTests),
]
}
#endif

8
Clocker/CoreModelKit/Package.swift

@ -6,19 +6,19 @@ import PackageDescription
let package = Package(
name: "CoreModelKit",
platforms: [
.macOS(.v10_12)
.macOS(.v10_12),
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "CoreModelKit",
targets: ["CoreModelKit"]
)
),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.package(path: "../CoreLoggerKit/")
.package(path: "../CoreLoggerKit/"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
@ -30,6 +30,6 @@ let package = Package(
.testTarget(
name: "CoreModelKitTests",
dependencies: ["CoreModelKit", "CoreLoggerKit"]
)
),
]
)

2
Clocker/CoreModelKit/Sources/CoreModelKit/TimezoneData.swift

@ -66,7 +66,7 @@ public class TimezoneData: NSObject, NSCoding {
// Suffix
NSNumber(integerLiteral: 9): DateFormat.twelveHourWithoutSuffix,
NSNumber(integerLiteral: 10): DateFormat.twelveHourWithoutSuffixAndSeconds,
NSNumber(integerLiteral: 11): DateFormat.epochTime
NSNumber(integerLiteral: 11): DateFormat.epochTime,
]
public var customLabel: String?

2
Clocker/CoreModelKit/Tests/CoreModelKitTests/XCTestManifests.swift

@ -3,7 +3,7 @@ import XCTest
#if !canImport(ObjectiveC)
public func allTests() -> [XCTestCaseEntry] {
return [
testCase(CoreModelKitTests.allTests)
testCase(CoreModelKitTests.allTests),
]
}
#endif

6
Clocker/Events and Reminders/CalendarHandler.swift

@ -391,7 +391,8 @@ extension EventCenter {
// Check for Zoom links
if actualLink.contains("zoom.us/j/")
|| actualLink.contains("zoom.us/s/")
|| actualLink.contains("zoom.us/w/") {
|| actualLink.contains("zoom.us/w/")
{
// Create a Zoom App link
let workspace = NSWorkspace.shared
if workspace.urlForApplication(toOpen: URL(string: "zoommtg://")!) != nil {
@ -417,7 +418,8 @@ extension EventCenter {
|| actualLink.contains("public.senfcall.de")
|| actualLink.contains("youcanbook.me/zoom/")
|| actualLink.contains("workplace.com/groupcall")
|| actualLink.contains("bluejeans.com/") {
|| actualLink.contains("bluejeans.com/")
{
if let meetingLink = result.url {
return meetingLink
}

3
Clocker/Events and Reminders/RemindersHandler.swift

@ -51,7 +51,8 @@ extension EventCenter {
timezone: String,
alertIndex: Int,
reminderDate: Date,
additionalNotes: String?) -> Bool {
additionalNotes: String?) -> Bool
{
initializeStoreIfNeccesary()
if reminderAccessNotDetermined() || reminderAccessDenied() {

10
Clocker/Menu Bar/StatusContainerView.swift

@ -31,10 +31,12 @@ func compactWidth(for timezone: TimezoneData) -> Int {
if timeFormat == DateFormat.twelveHour
|| timeFormat == DateFormat.twelveHourWithSeconds
|| timeFormat == DateFormat.twelveHourWithZero
|| timeFormat == DateFormat.twelveHourWithSeconds {
|| timeFormat == DateFormat.twelveHourWithSeconds
{
totalWidth += 20
} else if timeFormat == DateFormat.twentyFourHour
|| timeFormat == DateFormat.twentyFourHourWithSeconds {
|| timeFormat == DateFormat.twentyFourHourWithSeconds
{
totalWidth += 0
}
@ -75,7 +77,7 @@ class StatusContainerView: NSView {
let timeBasedAttributes = [
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
func containerWidth(for timezones: [Data]) -> CGFloat {
@ -134,7 +136,7 @@ class StatusContainerView: NSView {
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
let operation = TimezoneDataOperations(with: timezone)

3
Clocker/Menu Bar/StatusItemHandler.swift

@ -112,7 +112,8 @@ class StatusItemHandler: NSObject {
userNotificationsDidChangeNotif = center.addObserver(forName: UserDefaults.didChangeNotification,
object: self,
queue: mainQueue) { _ in
queue: mainQueue)
{ _ in
self.setupStatusItem()
}
}

8
Clocker/Menu Bar/StatusItemView.swift

@ -49,7 +49,7 @@ class StatusItemView: NSView {
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return attributes
}
@ -61,7 +61,7 @@ class StatusItemView: NSView {
NSAttributedString.Key.font: NSFont.boldSystemFont(ofSize: 10),
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return textFontAttributes
}
@ -90,14 +90,14 @@ class StatusItemView: NSView {
locationView.leadingAnchor.constraint(equalTo: leadingAnchor),
locationView.trailingAnchor.constraint(equalTo: trailingAnchor),
locationView.topAnchor.constraint(equalTo: topAnchor, constant: 7),
locationView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35)
locationView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35),
])
NSLayoutConstraint.activate([
timeView.leadingAnchor.constraint(equalTo: leadingAnchor),
timeView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0),
timeView.topAnchor.constraint(equalTo: locationView.bottomAnchor),
timeView.bottomAnchor.constraint(equalTo: bottomAnchor)
timeView.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}

7
Clocker/Onboarding/OnboardingSearchController.swift

@ -135,7 +135,8 @@ class OnboardingSearchController: NSViewController {
private func setupLabelHidingTimer() {
Timer.scheduledTimer(withTimeInterval: 5,
repeats: false) { _ in
repeats: false)
{ _ in
OperationQueue.main.addOperation {
self.setInfoLabel(CLEmptyString)
}
@ -227,7 +228,7 @@ class OnboardingSearchController: NSViewController {
"latitude": latitude,
"longitude": longitude,
"nextUpdate": CLEmptyString,
CLCustomLabel: filteredAddress
CLCustomLabel: filteredAddress,
] as [String: Any]
DataStore.shared().addTimezone(TimezoneData(with: newTimeZone))
@ -413,7 +414,7 @@ class OnboardingSearchController: NSViewController {
CLTimezoneName: formattedAddress,
CLCustomLabel: formattedAddress,
CLTimezoneID: CLEmptyString,
CLPlaceIdentifier: result.placeId
CLPlaceIdentifier: result.placeId,
] as [String: Any]
return TimezoneData(with: totalPackage)

4
Clocker/Overall App/ConfigExport.swift

@ -29,7 +29,7 @@ struct ConfigExport {
CLDefaultMenubarMode,
CLInstallHomeIndicatorObject,
CLSwitchToCompactModeAlert,
CLDisplayDSTTransitionInfo
CLDisplayDSTTransitionInfo,
])
let dictionaryRep = UserDefaults.standard.dictionaryRepresentation()
var clockerPrefs: [String: Any] = [:]
@ -53,7 +53,7 @@ struct ConfigExport {
"Latitude": customObject.latitude ?? 0.0,
"Longitude": customObject.longitude ?? 0.0,
"Place Identifier": customObject.placeID ?? "0.0",
"Selection Type": "\(customObject.selectionType)"
"Selection Type": "\(customObject.selectionType)",
]
return timezoneDictionary
}

1
Clocker/Overall App/DateFormatterManager.swift

@ -3,7 +3,6 @@
import Cocoa
class DateFormatterManager: NSObject {
private static var dateFormatter = DateFormatter()
private static var calendarDateFormatter = DateFormatter()
private static var simpleFormatter = DateFormatter()

3
Clocker/Overall App/Themer.swift

@ -459,7 +459,8 @@ extension Themer {
_ darkImage: NSImage,
_ systemImage: NSImage,
_ solarizedLightImage: NSImage,
_ solarizedDarkImage: NSImage) -> NSImage {
_ solarizedDarkImage: NSImage) -> NSImage
{
if #available(macOS 10.14, *) {
switch themeIndex {
case .light:

2
Clocker/Panel/Data Layer/TimezoneDataOperations.swift

@ -283,7 +283,7 @@ extension TimezoneDataOperations {
let unableToConvertDateParameters = [
"New Date": newDate,
"Timezone": dataObject.timezone(),
"Locale": dateFormatter.locale.identifier
"Locale": dateFormatter.locale.identifier,
] as [String: Any]
Logger.log(object: unableToConvertDateParameters, for: "Date conversion failure - New Date is nil")
return CLEmptyString

10
Clocker/Panel/Notes Popover/NotesPopover.swift

@ -73,7 +73,7 @@ class NotesPopover: NSViewController {
"1 hour before",
"2 hour before",
"1 day before",
"2 days before"
"2 days before",
]
alertPopupButton.removeAllItems()
@ -240,7 +240,7 @@ class NotesPopover: NSViewController {
let attributesDictionary = [
NSAttributedString.Key.font: font,
NSAttributedString.Key.foregroundColor: Themer.shared().mainTextColor(),
NSAttributedString.Key.paragraphStyle: style
NSAttributedString.Key.paragraphStyle: style,
]
button.attributedTitle = NSAttributedString(string: title,
@ -322,7 +322,8 @@ class NotesPopover: NSViewController {
}
private func updateTimezoneInDefaultPreferences(with override: Int,
_: OverrideType) {
_: OverrideType)
{
let timezones = DataStore.shared().timezones()
var timezoneObjects: [TimezoneData] = []
@ -391,7 +392,8 @@ class NotesPopover: NSViewController {
timezone: model.timezone(),
alertIndex: alertIndex,
reminderDate: reminderPicker.dateValue,
additionalNotes: model.note) {
additionalNotes: model.note)
{
showSuccessMessage()
}
}

2
Clocker/Panel/Notes Popover/TextViewWithPlaceholder.swift

@ -18,7 +18,7 @@ class TextViewWithPlaceholder: NSTextView {
if let placeHolderFont = NSFont(name: "Avenir", size: 14) {
let textDict = [
NSAttributedString.Key.foregroundColor: NSColor.gray,
NSAttributedString.Key.font: placeHolderFont
NSAttributedString.Key.font: placeHolderFont,
]
return NSAttributedString(string: " Add your notes here.", attributes: textDict)
}

5
Clocker/Panel/PanelController.swift

@ -154,7 +154,8 @@ class PanelController: ParentPanelController {
}
if let statusWindow = statusBackgroundWindow,
let statusButton = statusView {
let statusButton = statusView
{
var statusItemFrame = statusWindow.convertToScreen(statusButton.frame)
var statusItemScreen = NSScreen.main
var testPoint = statusItemFrame.origin
@ -221,7 +222,7 @@ class PanelController: ParentPanelController {
"Show Upcoming Event View": showUpcomingEventView == "YES" ? "Yes" : "No",
"Country": country,
"Calendar Access Provided": EventCenter.sharedCenter().calendarAccessGranted() ? "Yes" : "No",
"Number of Timezones": preferences.count
"Number of Timezones": preferences.count,
]
Logger.log(object: panelEvent, for: "openedPanel")

33
Clocker/Panel/ParentPanelController.swift

@ -175,9 +175,9 @@ class ParentPanelController: NSWindowController {
// Set the background color of the bottom buttons view to something different to indicate we're not in a release candidate
#if DEBUG
stackView.arrangedSubviews.last?.layer?.backgroundColor = NSColor(deviceRed: 255.0/255.0,
green: 150.0/255.0,
blue: 122.0/255.0,
stackView.arrangedSubviews.last?.layer?.backgroundColor = NSColor(deviceRed: 255.0 / 255.0,
green: 150.0 / 255.0,
blue: 122.0 / 255.0,
alpha: 0.5).cgColor
stackView.arrangedSubviews.last?.toolTip = "Clocker is running in Debug Mode"
#endif
@ -197,7 +197,8 @@ class ParentPanelController: NSWindowController {
object: nil)
NotificationCenter.default.addObserver(forName: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: self,
queue: OperationQueue.main) { [weak self] _ in
queue: OperationQueue.main)
{ [weak self] _ in
if let sSelf = self {
sSelf.mainTableView.reloadData()
sSelf.setScrollViewConstraint()
@ -349,7 +350,7 @@ class ParentPanelController: NSWindowController {
let styleAttributes = [
NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13) ?? NSFont.systemFont(ofSize: 13)
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13) ?? NSFont.systemFont(ofSize: 13),
]
let leftButtonAttributedTitle = NSAttributedString(string: leftButton.title, attributes: styleAttributes)
@ -425,7 +426,8 @@ class ParentPanelController: NSWindowController {
newHeight += 20
} else if DataStore.shared().shouldDisplay(.dstTransitionInfo),
let obj = object,
TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil {
TimezoneDataOperations(with: obj).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) != nil
{
newHeight += 20
}
}
@ -613,7 +615,8 @@ class ParentPanelController: NSWindowController {
if $0 < mainTableView.numberOfRows,
let cellView = mainTableView.view(atColumn: 0, row: $0, makeIfNecessary: false) as? TimezoneCellView,
let model = TimezoneData.customObject(from: current) {
let model = TimezoneData.customObject(from: current)
{
if let futureSliderCell = futureSlider.cell as? CustomSliderCell, futureSliderCell.tracking == true {
return
}
@ -633,7 +636,8 @@ class ParentPanelController: NSWindowController {
if let note = model.note, !note.isEmpty {
cellView.noteLabel.stringValue = note
} else if DataStore.shared().shouldDisplay(.dstTransitionInfo),
let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue) {
let value = TimezoneDataOperations(with: model).nextDaylightSavingsTransitionIfAvailable(with: futureSliderValue)
{
cellView.noteLabel.stringValue = value
} else {
cellView.noteLabel.stringValue = CLEmptyString
@ -733,7 +737,8 @@ class ParentPanelController: NSWindowController {
@IBAction func calendarButtonAction(_ sender: NSButton) {
if sender.title == NSLocalizedString("Click here to start.",
comment: "Button Title for no Calendar access") {
comment: "Button Title for no Calendar access")
{
showPermissionsWindow()
} else {
retrieveCalendarEvents()
@ -824,7 +829,8 @@ class ParentPanelController: NSWindowController {
if let events = eventCenter.eventsForDate[NSCalendar.autoupdatingCurrent.startOfDay(for: now)], events.isEmpty == false {
OperationQueue.main.addOperation {
if self.upcomingEventCollectionView != nil,
let upcomingEvents = eventCenter.upcomingEventsForDay(events) {
let upcomingEvents = eventCenter.upcomingEventsForDay(events)
{
self.upcomingEventsDataSource.updateEventsDataSource(upcomingEvents)
self.upcomingEventCollectionView.reloadData()
return
@ -904,7 +910,7 @@ class ParentPanelController: NSWindowController {
let styleAttributes = [
NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13)!
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13)!,
]
leftButton.attributedTitle = NSAttributedString(string: "Not Really", attributes: styleAttributes)
rightButton.attributedTitle = NSAttributedString(string: "Yes!", attributes: styleAttributes)
@ -940,7 +946,7 @@ class ParentPanelController: NSWindowController {
let styleAttributes = [
NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13)!
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13)!,
]
if leftButton.attributedTitle.string == "Not Really" {
@ -1124,7 +1130,8 @@ extension ParentPanelController: NSSharingServicePickerDelegate {
stride(from: 0, to: sortedByTime.count, by: 1).forEach {
if $0 < sortedByTime.count,
let dataModel = TimezoneData.customObject(from: sortedByTime[$0]) {
let dataModel = TimezoneData.customObject(from: sortedByTime[$0])
{
let dataOperations = TimezoneDataOperations(with: dataModel)
let date = dataOperations.todaysDate(with: 0)
let time = dataOperations.time(with: 0)

2
Clocker/Panel/UI/PanelTableView.swift

@ -32,7 +32,7 @@ class PanelTableView: NSTableView {
let options: NSTrackingArea.Options = [
.mouseMoved,
.mouseEnteredAndExited,
.activeAlways
.activeAlways,
]
let clipRect = enclosingScrollView?.contentView.bounds ?? .zero

6
Clocker/Panel/UI/TimezoneCellView.swift

@ -199,7 +199,7 @@ class TimezoneCellView: NSTableCellView {
}
override func mouseDown(with event: NSEvent) {
if (event.clickCount == 1) {
if event.clickCount == 1 {
// Text is copied in the following format: Chicago - 1625185925
let clipboardCopy = "\(customName.stringValue) - \(time.stringValue)"
let pasteboard = NSPasteboard.general
@ -209,8 +209,8 @@ class TimezoneCellView: NSTableCellView {
window?.contentView?.makeToast("Copied to Clipboard".localized())
window?.endEditing(for: nil)
} else if (event.clickCount == 2) {
//TODO: Favourite this timezone
} else if event.clickCount == 2 {
// TODO: Favourite this timezone
}
}

3
Clocker/Panel/Upcoming Events/UpcomingEventViewItem.swift

@ -40,7 +40,8 @@ class UpcomingEventViewItem: NSCollectionViewItem {
_ color: NSColor,
_ link: URL?,
_ delegate: UpcomingEventPanelDelegate?,
_ isCancelled: Bool) {
_ isCancelled: Bool)
{
if leadingConstraint.constant != UpcomingEventViewItem.EventLeadingConstraint / 2 {
leadingConstraint.animator().constant = UpcomingEventViewItem.EventLeadingConstraint / 2
}

2
Clocker/Preferences/About/PointingHandCursorButton.swift

@ -3,7 +3,7 @@
import Cocoa
class PointingHandCursorButton: NSButton {
let pointingHandCursor: NSCursor = NSCursor.pointingHand
let pointingHandCursor: NSCursor = .pointingHand
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)

5
Clocker/Preferences/App Feedback/AppFeedbackWindowController.swift

@ -80,7 +80,8 @@ class AppFeedbackWindowController: NSWindowController {
themeDidChangeNotification = NotificationCenter.default.addObserver(forName: .themeDidChangeNotification,
object: nil,
queue: OperationQueue.main) { _ in
queue: OperationQueue.main)
{ _ in
self.window?.backgroundColor = Themer.shared().mainBackgroundColor()
self.setup()
}
@ -201,7 +202,7 @@ class AppFeedbackWindowController: NSWindowController {
AppFeedbackConstants.CLOperatingSystemVersion: osVersion,
AppFeedbackConstants.CLClockerVersion: versionInfo,
AppFeedbackConstants.CLAppFeedbackDateProperty: todaysDate(),
AppFeedbackConstants.CLAppFeedbackUserPreferences: generateUserPreferences()
AppFeedbackConstants.CLAppFeedbackUserPreferences: generateUserPreferences(),
]
}

5
Clocker/Preferences/Appearance/AppearanceViewController.swift

@ -60,7 +60,7 @@ class AppearanceViewController: ParentViewController {
"4 days",
"5 days",
"6 days",
"7 days"
"7 days",
])
if #available(macOS 11.0, *) {} else {
@ -188,7 +188,8 @@ class AppearanceViewController: ParentViewController {
refresh(panel: true, floating: true)
if let selectedFormat = sender.selectedItem?.title,
selectedFormat.contains("ss") {
selectedFormat.contains("ss")
{
Logger.info("Selected format contains timezone format")
guard let panelController = PanelController.panel() else { return }
panelController.pauseTimer()

8
Clocker/Preferences/Calendar/CalendarViewController.swift

@ -113,7 +113,7 @@ class CalendarViewController: ParentViewController {
let attributesDictionary: [NSAttributedString.Key: Any] = [
NSAttributedString.Key.paragraphStyle: style,
NSAttributedString.Key.font: boldFont,
NSAttributedString.Key.foregroundColor: Themer.shared().mainTextColor()
NSAttributedString.Key.foregroundColor: Themer.shared().mainTextColor(),
]
let attributedString = NSAttributedString(string: title,
attributes: attributesDictionary)
@ -242,13 +242,15 @@ extension CalendarViewController: NSTableViewDelegate {
func tableView(_ tableView: NSTableView, viewFor _: NSTableColumn?, row: Int) -> NSView? {
if let currentSource = calendars[row] as? String,
let message = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "sourceCellView"), owner: self) as? SourceTableViewCell {
let message = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "sourceCellView"), owner: self) as? SourceTableViewCell
{
message.sourceName.stringValue = currentSource
return message
}
if let currentSource = calendars[row] as? CalendarInfo,
let calendarCell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "calendarCellView"), owner: self) as? CalendarTableViewCell {
let calendarCell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "calendarCellView"), owner: self) as? CalendarTableViewCell
{
calendarCell.calendarName.stringValue = currentSource.calendar.title
calendarCell.calendarSelected.state = currentSource.selected ? NSControl.StateValue.on : NSControl.StateValue.off
calendarCell.calendarSelected.target = self

7
Clocker/Preferences/General/PreferencesDataSource.swift

@ -104,7 +104,8 @@ extension PreferencesDataSource: NSTableViewDataSource {
var selectedDataSource: TimezoneData?
if selectedTimezones.count > row,
let model = TimezoneData.customObject(from: selectedTimezones[row]) {
let model = TimezoneData.customObject(from: selectedTimezones[row])
{
selectedDataSource = model
}
@ -161,7 +162,7 @@ extension PreferencesDataSource: NSTableViewDataSource {
if selectedTimezones.count > row {
Logger.log(object: [
"Old Label": dataObject.customLabel ?? "Error",
"New Label": formattedValue
"New Label": formattedValue,
],
for: "Custom Label Changed")
@ -174,7 +175,7 @@ extension PreferencesDataSource: NSTableViewDataSource {
Logger.log(object: [
"MethodName": "SetObjectValue",
"Selected Timezone Count": selectedTimezones.count,
"Current Row": row
"Current Row": row,
],
for: "Error in selected row count")
}

12
Clocker/Preferences/General/PreferencesViewController.swift

@ -95,7 +95,8 @@ class PreferencesViewController: ParentViewController {
NotificationCenter.default.addObserver(forName: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
object: self,
queue: OperationQueue.main) { [weak self] _ in
queue: OperationQueue.main)
{ [weak self] _ in
if let sSelf = self {
sSelf.refreshTimezoneTableView()
}
@ -250,7 +251,7 @@ class PreferencesViewController: ParentViewController {
[timezoneNameSortButton, labelSortButton, timezoneSortButton].forEach {
$0?.attributedTitle = NSAttributedString(string: $0?.title ?? CLEmptyString, attributes: [
NSAttributedString.Key.foregroundColor: Themer.shared().mainTextColor(),
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13)!
NSAttributedString.Key.font: NSFont(name: "Avenir-Light", size: 13)!,
])
}
@ -348,7 +349,8 @@ extension PreferencesViewController: NSTableViewDataSource, NSTableViewDelegate
if let appDelegate = NSApplication.shared.delegate as? AppDelegate,
let menubarFavourites = DataStore.shared().menubarTimezones(),
menubarFavourites.isEmpty,
DataStore.shared().shouldDisplay(.showMeetingInMenubar) == false {
DataStore.shared().shouldDisplay(.showMeetingInMenubar) == false
{
appDelegate.invalidateMenubarTimer(true)
}
@ -512,7 +514,7 @@ extension PreferencesViewController {
CLTimezoneName: formattedAddress,
CLCustomLabel: formattedAddress,
CLTimezoneID: CLEmptyString,
CLPlaceIdentifier: $0.placeId
CLPlaceIdentifier: $0.placeId,
] as [String: Any]
finalResults.append(TimezoneData(with: totalPackage))
@ -604,7 +606,7 @@ extension PreferencesViewController {
"latitude": dataObject.latitude!,
"longitude": dataObject.longitude!,
"nextUpdate": CLEmptyString,
CLCustomLabel: filteredAddress
CLCustomLabel: filteredAddress,
] as [String: Any]
// Mark if the timezone is same as local timezone

42
Clocker/Preferences/General/SearchDataSource.swift

@ -102,27 +102,27 @@ class SearchDataSource: NSObject {
timezoneArray.append(utcTimezone)
for identifier in TimeZone.knownTimeZoneIdentifiers {
guard let timezoneObject = TimeZone(identifier: identifier) else {
continue
if let timezoneObject = TimeZone(identifier: identifier) {
// Force-cast explicity since we get the identifier from `knownTimeZoneIdentifiers`
let abbreviation = timezoneObject.abbreviation()!
let identifier = timezoneObject.identifier
var tags: Set<String> = [abbreviation.lowercased(), identifier.lowercased()]
var extraTags: [String] = []
if let tagsPresent = timezoneMetadataDictionary[abbreviation] {
extraTags = tagsPresent
}
extraTags.forEach { tag in
tags.insert(tag)
}
let timezoneIdentifier = NSTimeZone(name: identifier)!
let timezoneMetadata = TimezoneMetadata(timezone: timezoneIdentifier,
tags: tags,
formattedName: identifier,
abbreviation: abbreviation)
timezoneArray.append(timezoneMetadata)
}
let abbreviation = timezoneObject.abbreviation() ?? "Empty"
let identifier = timezoneObject.identifier
var tags: Set<String> = [abbreviation.lowercased(), identifier.lowercased()]
var extraTags: [String] = []
if let tagsPresent = timezoneMetadataDictionary[abbreviation] {
extraTags = tagsPresent
}
extraTags.forEach { tag in
tags.insert(tag)
}
let timezoneIdentifier = NSTimeZone(name: identifier)!
let timezoneMetadata = TimezoneMetadata(timezone: timezoneIdentifier,
tags: tags,
formattedName: identifier,
abbreviation: abbreviation)
timezoneArray.append(timezoneMetadata)
}
}
@ -157,7 +157,7 @@ class SearchDataSource: NSObject {
timezoneFilteredArray = timezoneArray.filter { timezoneMetadata -> Bool in
let tags = timezoneMetadata.tags
for tag in tags where tag.contains(searchString) {
for tag in tags where tag.contains(searchString.lowercased()) {
return true
}
return false

15
Clocker/Preferences/Menu Bar/StatusContainerView.swift

@ -37,10 +37,12 @@ func compactWidth(for timezone: TimezoneData) -> Int {
if timeFormat == DateFormat.twelveHour
|| timeFormat == DateFormat.twelveHourWithSeconds
|| timeFormat == DateFormat.twelveHourWithZero
|| timeFormat == DateFormat.twelveHourWithSeconds {
|| timeFormat == DateFormat.twelveHourWithSeconds
{
totalWidth += 20
} else if timeFormat == DateFormat.twentyFourHour
|| timeFormat == DateFormat.twentyFourHourWithSeconds {
|| timeFormat == DateFormat.twentyFourHourWithSeconds
{
totalWidth += 0
}
@ -81,7 +83,8 @@ class StatusContainerView: NSView {
if showUpcomingEventView,
let events = EventCenter.sharedCenter().eventsForDate[NSCalendar.autoupdatingCurrent.startOfDay(for: Date())],
events.isEmpty == false,
let upcomingEvent = EventCenter.sharedCenter().nextOccuring(events) {
let upcomingEvent = EventCenter.sharedCenter().nextOccuring(events)
{
let calculatedWidth = bestWidth(for: upcomingEvent)
let frame = NSRect(x: previousX, y: 0, width: calculatedWidth, height: 30)
let calendarItemView = UpcomingEventStatusItemView(frame: frame)
@ -100,7 +103,7 @@ class StatusContainerView: NSView {
let timeBasedAttributes = [
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
func containerWidth(for timezones: [Data]) -> CGFloat {
@ -163,7 +166,7 @@ class StatusContainerView: NSView {
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
let operation = TimezoneDataOperations(with: timezone)
@ -185,7 +188,7 @@ class StatusContainerView: NSView {
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
let bestSize = compactModeTimeFont.size(eventInfo.metadataForMeeting(),

5
Clocker/Preferences/Menu Bar/StatusItemHandler.swift

@ -115,7 +115,8 @@ class StatusItemHandler: NSObject {
userNotificationsDidChangeNotif = center.addObserver(forName: UserDefaults.didChangeNotification,
object: self,
queue: mainQueue) { _ in
queue: mainQueue)
{ _ in
self.setupStatusItem()
}
@ -202,7 +203,7 @@ class StatusItemHandler: NSObject {
let timezonesSupportingSeconds = syncedTimezones.filter { data in
if let timezoneObj = TimezoneData.customObject(from: data) {
return timezoneObj.shouldShowSeconds(DataStore.shared().timezoneFormat())
return timezoneObj.shouldShowSeconds(DataStore.shared().timezoneFormat())
}
return false
}

8
Clocker/Preferences/Menu Bar/StatusItemView.swift

@ -50,7 +50,7 @@ class StatusItemView: NSView {
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return attributes
}
@ -62,7 +62,7 @@ class StatusItemView: NSView {
NSAttributedString.Key.font: NSFont.boldSystemFont(ofSize: 10),
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return textFontAttributes
}
@ -91,14 +91,14 @@ class StatusItemView: NSView {
locationView.leadingAnchor.constraint(equalTo: leadingAnchor),
locationView.trailingAnchor.constraint(equalTo: trailingAnchor),
locationView.topAnchor.constraint(equalTo: topAnchor, constant: 7),
locationView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35)
locationView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35),
])
NSLayoutConstraint.activate([
timeView.leadingAnchor.constraint(equalTo: leadingAnchor),
timeView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0),
timeView.topAnchor.constraint(equalTo: locationView.bottomAnchor),
timeView.bottomAnchor.constraint(equalTo: bottomAnchor)
timeView.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}

8
Clocker/Preferences/Menu Bar/UpcomingEventStatusItemView.swift

@ -21,7 +21,7 @@ class UpcomingEventStatusItemView: NSView {
NSAttributedString.Key.font: compactModeTimeFont,
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return attributes
}
@ -33,7 +33,7 @@ class UpcomingEventStatusItemView: NSView {
NSAttributedString.Key.font: NSFont.boldSystemFont(ofSize: 10),
NSAttributedString.Key.foregroundColor: textColor,
NSAttributedString.Key.backgroundColor: NSColor.clear,
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle
NSAttributedString.Key.paragraphStyle: defaultParagraphStyle,
]
return textFontAttributes
}
@ -54,14 +54,14 @@ class UpcomingEventStatusItemView: NSView {
nextEventField.leadingAnchor.constraint(equalTo: leadingAnchor),
nextEventField.trailingAnchor.constraint(equalTo: trailingAnchor),
nextEventField.topAnchor.constraint(equalTo: topAnchor, constant: 7),
nextEventField.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35)
nextEventField.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.35),
])
NSLayoutConstraint.activate([
etaField.leadingAnchor.constraint(equalTo: leadingAnchor),
etaField.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 0),
etaField.topAnchor.constraint(equalTo: nextEventField.bottomAnchor),
etaField.bottomAnchor.constraint(equalTo: bottomAnchor)
etaField.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}

6
Clocker/StartupKit/Package.swift

@ -6,13 +6,13 @@ import PackageDescription
let package = Package(
name: "StartupKit",
platforms: [
.macOS(.v10_12)
.macOS(.v10_12),
],
products: [
.library(
name: "StartupKit",
targets: ["StartupKit"]
)
),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
@ -22,6 +22,6 @@ let package = Package(
.target(
name: "StartupKit",
dependencies: []
)
),
]
)

Loading…
Cancel
Save