diff --git a/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift b/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift index a6003c56..d857ae50 100644 --- a/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift +++ b/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift @@ -96,6 +96,7 @@ class DefaultLightProviderManager: LightProviderManager { fatalError("Unrecognized VPN protocol: \(vpnProtocol)") } return providerManager.categories(name, vpnProtocol: vpnProtocolType) + .sorted() .map(DefaultLightProviderCategory.init) } diff --git a/Passepartout/Mac/Constants/Constants+Mac.swift b/Passepartout/Mac/Constants/Constants+Mac.swift index 414b71c6..796fd595 100644 --- a/Passepartout/Mac/Constants/Constants+Mac.swift +++ b/Passepartout/Mac/Constants/Constants+Mac.swift @@ -27,7 +27,7 @@ import Foundation extension Constants { enum Mac { - private static var bundle: Bundle { + static var bundle: Bundle { Bundle(for: PassepartoutMac.self) } diff --git a/Passepartout/Mac/Constants/Theme.swift b/Passepartout/Mac/Constants/Theme.swift index 7afc97d4..4fb977d1 100644 --- a/Passepartout/Mac/Constants/Theme.swift +++ b/Passepartout/Mac/Constants/Theme.swift @@ -26,9 +26,7 @@ import Foundation import AppKit -private var bundle: Bundle { - Bundle(for: PassepartoutMenu.StatusButton.self) -} +private let bundle = Constants.Mac.bundle extension LightVPNStatus { var localizedDescription: String { diff --git a/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift index 0c2a29a0..dbead214 100644 --- a/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift +++ b/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift @@ -58,6 +58,10 @@ extension ProviderProfileItem { return category.name == profile.providerServer?.categoryName } + func connectTo() { + vpnManager.connect(with: profile.id) + } + func downloadIfNeeded() { providerManager.downloadIfNeeded(providerName, vpnProtocol: vpnProtocol) } diff --git a/Passepartout/Mac/Menu/ProviderProfileItem.swift b/Passepartout/Mac/Menu/ProviderProfileItem.swift index 1fc4ef4c..db1e6318 100644 --- a/Passepartout/Mac/Menu/ProviderProfileItem.swift +++ b/Passepartout/Mac/Menu/ProviderProfileItem.swift @@ -51,12 +51,21 @@ struct ProviderProfileItem: Item { private func submenu() -> NSMenu { let menu = NSMenu() let categories = viewModel.categories - if categories.isEmpty { + guard !categories.isEmpty else { let downloadItem = TextItem(L10n.Global.Strings.download) { viewModel.downloadIfNeeded() } menu.addItem(downloadItem.asMenuItem(withParent: menu)) - } else if categories.count > 1 { + return menu + } + + let connectItem = TextItem(L10n.Global.Strings.connect) { + viewModel.connectTo() + } + menu.addItem(connectItem.asMenuItem(withParent: menu)) + menu.addItem(.separator()) + + if categories.count > 1 { viewModel.categories.forEach { menu.addItem(categoryItem(with: $0, parent: menu)) } @@ -65,6 +74,7 @@ struct ProviderProfileItem: Item { menu.addItem(locationItem(with: $0, parent: menu)) } } + return menu }