diff --git a/phpmon/Domain/SiteList/SiteListVC.swift b/phpmon/Domain/SiteList/SiteListVC.swift index 5079589..4f551c9 100644 --- a/phpmon/Domain/SiteList/SiteListVC.swift +++ b/phpmon/Domain/SiteList/SiteListVC.swift @@ -16,6 +16,8 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource { @IBOutlet weak var tableView: NSTableView! + public var editorAvailability: [String] = [] + // MARK: - Display public static func show(delegate: NSWindowDelegate? = nil) { @@ -37,7 +39,15 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource { // MARK: - Lifecycle - override func viewDidLoad() {} + override func viewDidLoad() { + if (Shell.fileExists("/usr/local/bin/code")) { + self.editorAvailability.append("vscode") + } + + if (Shell.fileExists("/Applications/PhpStorm.app/Contents/Info.plist")) { + self.editorAvailability.append("phpstorm") + } + } override func viewWillAppear() {} @@ -86,32 +96,79 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource { } menu.addItem( - withTitle: site.secured ? "Unsecure" : "Secure", + withTitle: site.secured + ? "site_list.unsecure".localized + : "site_list.secure".localized, action: #selector(self.secure), keyEquivalent: "L" ) + + if (self.editorAvailability.count > 0) { + menu.addItem(NSMenuItem.separator()) + + if self.editorAvailability.contains("vscode") { + menu.addItem( + withTitle: "site_list.open_with_vs_code".localized, + action: #selector(self.openWithVSCode), + keyEquivalent: "" + ) + } + + if editorAvailability.contains("phpstorm") { + menu.addItem( + withTitle: "site_list.open_with_pstorm".localized, + action: #selector(self.openWithPhpStorm), + keyEquivalent: "" + ) + } + + menu.addItem(NSMenuItem.separator()) + } + menu.addItem( - withTitle: "Open in Browser...", + withTitle: "site_list.open_in_finder".localized, + action: #selector(self.openInFinder), + keyEquivalent: "F" + ) + menu.addItem( + withTitle: "site_list.open_in_browser".localized, action: #selector(self.openInBrowser), keyEquivalent: "O" ) tableView.menu = menu } + // MARK: Secure / unsecure + @objc public func secure() { } + // MARK: Open with IDE / Editor + + @objc public func openWithPhpStorm() { + let site = Valet.shared.sites[self.tableView.selectedRow] + Shell.run("open -a /Applications/PhpStorm.app \(site.absolutePath)") + } + + @objc public func openWithVSCode() { + let site = Valet.shared.sites[self.tableView.selectedRow] + Shell.run("/usr/local/bin/code \(site.absolutePath)") + } + + // MARK: Open in Browser & Finder + @objc public func openInBrowser() { - if self.tableView.selectedRow == -1 { - return - } - let site = Valet.shared.sites[self.tableView.selectedRow] let prefix = site.secured ? "https://" : "http://" let url = "\(prefix)\(site.name).\(Valet.shared.config.tld)" NSWorkspace.shared.open(URL(string: url)!) } + + @objc public func openInFinder() { + let site = Valet.shared.sites[self.tableView.selectedRow] + Shell.run("open \(site.absolutePath)") + } // MARK: - Deinitialization diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 9784d79..e854285 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -51,6 +51,15 @@ "site_list.title" = "Linked & Parked Domains"; +// SITE LIST ACTIONS + +"site_list.secure" = "Secure"; +"site_list.unsecure" = "Unsecure"; +"site_list.open_in_finder" = "Open in Finder"; +"site_list.open_in_browser" = "Open in Browser"; +"site_list.open_with_vs_code" = "Open with Visual Studio Code"; +"site_list.open_with_pstorm" = "Open with PhpStorm"; + // PREFERENCES "prefs.title" = "PHP Monitor";