From 87713bbe64ead62e7803b1514b2e1ea566b1684d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 3 Dec 2021 20:55:38 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20options=20to=20open=20site=20?= =?UTF-8?q?with=20Code=20/=20PhpStorm=20(#58)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SiteList/SiteListVC.swift | 71 ++++++++++++++++++++++--- phpmon/Localizable.strings | 9 ++++ 2 files changed, 73 insertions(+), 7 deletions(-) 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";