From dd69a404535f440cb5b19951b2b41e86834b8732 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Fri, 27 Nov 2020 09:29:02 +1100 Subject: [PATCH] add github plugin --- .../workflows/alfred-mvns | 1 - .../CHANGELOG.md | 98 +++ .../LICENSE | 21 + .../README.md | 112 ++++ .../action.php | 106 +++ .../curl.php | 155 +++++ .../icon.png | Bin 0 -> 5557 bytes .../icons/branch.png | Bin 0 -> 4753 bytes .../icons/clone.png | Bin 0 -> 2972 bytes .../icons/commits.png | Bin 0 -> 3516 bytes .../icons/dashboard.png | Bin 0 -> 5915 bytes .../icons/file.png | Bin 0 -> 2645 bytes .../icons/fork.png | Bin 0 -> 4522 bytes .../icons/gists.png | Bin 0 -> 2890 bytes .../icons/graphs.png | Bin 0 -> 2144 bytes .../icons/issue.png | Bin 0 -> 5079 bytes .../icons/logout.png | Bin 0 -> 2967 bytes .../icons/milestone.png | Bin 0 -> 2450 bytes .../icons/mirror.png | Bin 0 -> 4500 bytes .../icons/notifications.png | Bin 0 -> 3564 bytes .../icons/organization.png | Bin 0 -> 4304 bytes .../icons/private-fork.png | Bin 0 -> 7118 bytes .../icons/private-mirror.png | Bin 0 -> 6730 bytes .../icons/private-repo.png | Bin 0 -> 2268 bytes .../icons/project.png | Bin 0 -> 2431 bytes .../icons/pull-request.png | Bin 0 -> 4232 bytes .../icons/pulse.png | Bin 0 -> 3598 bytes .../icons/releases.png | Bin 0 -> 3805 bytes .../icons/repo.png | Bin 0 -> 2690 bytes .../icons/search.png | Bin 0 -> 5018 bytes .../icons/settings.png | Bin 0 -> 4739 bytes .../icons/stars.png | Bin 0 -> 3767 bytes .../icons/update.png | Bin 0 -> 4531 bytes .../icons/user.png | Bin 0 -> 3485 bytes .../icons/wiki.png | Bin 0 -> 2824 bytes .../info.plist | 602 +++++++++++++++++ .../item.php | 177 +++++ .../search.php | 610 ++++++++++++++++++ .../server.php | 66 ++ .../workflow.php | 440 +++++++++++++ 40 files changed, 2387 insertions(+), 1 deletion(-) delete mode 120000 alfred/Alfred.alfredpreferences/workflows/alfred-mvns create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/CHANGELOG.md create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/LICENSE create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/README.md create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/action.php create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/curl.php create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icon.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/branch.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/clone.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/commits.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/dashboard.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/file.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/fork.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/gists.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/graphs.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/issue.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/logout.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/milestone.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/mirror.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/notifications.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/organization.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-fork.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-mirror.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-repo.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/project.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/pull-request.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/pulse.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/releases.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/repo.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/search.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/settings.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/stars.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/update.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/user.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/wiki.png create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/info.plist create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/item.php create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/search.php create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/server.php create mode 100644 alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/workflow.php diff --git a/alfred/Alfred.alfredpreferences/workflows/alfred-mvns b/alfred/Alfred.alfredpreferences/workflows/alfred-mvns deleted file mode 120000 index edcc215..0000000 --- a/alfred/Alfred.alfredpreferences/workflows/alfred-mvns +++ /dev/null @@ -1 +0,0 @@ -/Users/junwei.zhao/.nvm/versions/node/v10.20.1/lib/node_modules/alfred-mvns \ No newline at end of file diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/CHANGELOG.md b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/CHANGELOG.md new file mode 100644 index 0000000..49d5cd8 --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/CHANGELOG.md @@ -0,0 +1,98 @@ +Changelog +========= + +Version 1.6.2 – 2018-02-13 +-------------------------- + +### Bugfixes + +* Api pagination didn't work correctly any more (missing results from page > 2) + + +Version 1.6.1 – 2017-09-23 +-------------------------- + +### Bugfixes + +* Support for macOS 10.13 High Sierra +* Commit search results had wrong urls on GitHub Enterprise (@beparker) + + +Version 1.6 – 2017-05-07 +------------------------ + +### Features + +* new command `gh user/repo projects` (@dagio) +* new command `gh my pulls review requested` (@AeroEchelon) +* better sorting for issues (most recently updated on top) and commits (most recent on top) (@danielma) + +### Bugfixes + +* On macOS 10.12.5 Beta URLs didn't opened in browser anymore + + +Version 1.5 – 2016-12-13 +------------------------ + +### Features + +* new commands for searching repos and users globally in GitHub (`gh s repo` and `gh s @user`) +* new command `gh my repos` (@jacobkossman) +* new command `gh > delete database` +* source repos with higher priority than forks + +### Bugfixes + +* in some situations private repos were missing (@lxynox) +* after saving GitHub Enterprise url the workflow didn't reopen correctly +* updated user sub commands ("Activity" tab does not exist any more on GitHub) + + +Version 1.4.1 – 2016-22-07 +-------------------------- + +* fixed reading environment variables (important for hotkey support) + + +Version 1.4 – 2016-22-07 +------------------------ + +* Hotkey support +* use native update mechanism of Alfred (to keep your hotkeys) +* new command `gh user/repo releases` (@altern8tif) +* cache warmup after login +* lower cpu usage in multi curl +* fixed autocomplete values in GitHub Enterprise + + +Version 1.3 – 2016-17-07 +------------------------ + +**Important:** This is the last version for Alfred 2. + +* Disabled updates in Alfred 2 +* Updates in Alfred 3 are loaded from new location (GitHub releases) + + +Version 1.2 – 2016-04-17 +------------------------ + +### Features + +* New sub commands for `gh my issues/pull`: `created`, `assigned` and `mentioned` +* New help command: `gh > help` +* Longer cache lifetime + + +Version 1.1 – 2015-01-10 +------------------------ + +### Features + +* GitHub Enterprise support (use `ghe`) +* Commit search (`gh user/repo *hash`) + +### Bugfixes + +* A space after `gh` is required to avoid confusion when using commands of other workflows like `ghost` diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/LICENSE b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/LICENSE new file mode 100644 index 0000000..410a945 --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Gregor Harlan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/README.md b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/README.md new file mode 100644 index 0000000..4ff8bc8 --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/README.md @@ -0,0 +1,112 @@ +GitHub Workflow for [Alfred 3](http://www.alfredapp.com) +============================== + +[![Gitter](https://badges.gitter.im/gharlan/alfred-github-workflow.svg)](https://gitter.im/gharlan/alfred-github-workflow?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +You can search through GitHub (`gh`) and your GitHub Enterprise instance (`ghe`). + +You have to login (`gh > login`) before you can use the workflow. The login uses OAuth, so you do not have to enter your credentials. + +**[DOWNLOAD](https://github.com/gharlan/alfred-github-workflow/releases)** + +![Workflow Screenshot](screenshot.png) + +Setup +----- + +### For github.com + +In Alfred type (`gh > login`) to authenticate against your account. The login uses OAuth, so you do not have to enter your credentials. + +### For github enterprise + +1. In Alfred type (`ghe > url https://github.mycompany.com`) +2. Create a new Personal Access Token (`ghe > generate token` or `https://github.mycompany.com/settings/applications`). It only needs access to your repos. Copy this token to your clipboard. +3. In Alfred type (`ghe > login `) +4. You can now `ghe your_enterprise_repo_name` + +Key Combinations +---------------- + +Key Combination | Action +---------------------- | ------ +`enter` | Open entry in default browser +`cmd` + `c` | Copy URL of the entry +`cmd` + `enter` | Paste URL to front most app +`shift` or `cmd` + `y` | Open URL in QuickLook + +Commands +-------- + +To search through your GitHub Enterprise instance replace `gh` by `ghe`. + +### Repo commands + +* `gh user/repo` +* `gh user/repo #123` +* `gh user/repo @branch` +* `gh user/repo *commit` +* `gh user/repo /path/to/file` +* `gh user/repo admin` +* `gh user/repo clone` +* `gh user/repo graphs` +* `gh user/repo issues` +* `gh user/repo milestones` +* `gh user/repo network` +* `gh user/repo new issue` +* `gh user/repo new pull` +* `gh user/repo projects` +* `gh user/repo pulls` +* `gh user/repo pulse` +* `gh user/repo releases` +* `gh user/repo wiki` +* `gh user/repo projects` + +### User commands + +* `gh @user` +* `gh @user overview` +* `gh @user repositories` +* `gh @user stars` +* `gh @user gists` + +### Search commands + +* `gh s repo` +* `gh s @user` + +### "My" commands + +* `gh my dashboard` +* `gh my notifications` +* `gh my profile` +* `gh my issues` +* `gh my issues created` +* `gh my issues assigned` +* `gh my issues mentioned` +* `gh my pulls` +* `gh my pulls created` +* `gh my pulls assigned` +* `gh my pulls mentioned` +* `gh my pulls review requested` +* `gh my repos` +* `gh my settings` +* `gh my stars` +* `gh my gists` + +### Workflow commands + +* `gh > login` +* `gh > logout` +* `gh > delete cache` +* `gh > delete database` +* `gh > update` +* `gh > activate autoupdate` +* `gh > deactivate autoupdate` +* `gh > help` +* `gh > changelog` +* `ghe > url` (GitHub Enterprise only) +* `ghe > generate token` (GitHub Enterprise only) +* `ghe > enterprise reset` (GitHub Enterprise only) + + diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/action.php b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/action.php new file mode 100644 index 0000000..9bf66ff --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/action.php @@ -0,0 +1,106 @@ +' !== $query[0] && 0 !== strpos($query, 'e >')) { + if ('.git' == substr($query, -4)) { + $query = 'github-mac://openRepo/'.substr($query, 0, -4); + } + exec('open '.$query); + return; +} + +$enterprise = 0 === strpos($query, 'e '); +if ($enterprise) { + $query = substr($query, 2); +} +$parts = explode(' ', $query); + +Workflow::init($enterprise); + +switch ($parts[1]) { + case 'enterprise-url': + Workflow::setConfig('enterprise_url', rtrim($parts[2], '/')); + exec('osascript -e "tell application \"Alfred 3\" to search \"ghe \""'); + break; + + case 'enterprise-reset': + Workflow::removeConfig('enterprise_url'); + Workflow::removeConfig('enterprise_access_token'); + Workflow::deleteCache(); + break; + + case 'login': + if (isset($parts[2]) && $parts[2]) { + Workflow::setAccessToken($parts[2]); + echo 'Successfully logged in'; + } elseif (!$enterprise) { + Workflow::startServer(); + $state = version_compare(PHP_VERSION, '5.4', '<') ? 'm' : ''; + $url = Workflow::getBaseUrl().'/login/oauth/authorize?client_id=2d4f43826cb68e11c17c&scope=repo&state='.$state; + exec('open '.escapeshellarg($url)); + } + break; + + case 'logout': + Workflow::removeAccessToken(); + Workflow::deleteCache(); + echo 'Successfully logged out'; + break; + + case 'delete-cache': + Workflow::deleteCache(); + echo 'Successfully deleted cache'; + break; + + case 'delete-database': + Workflow::deleteDatabase(); + echo 'Successfully deleted database'; + break; + + case 'refresh-cache': + $curl = new Curl(); + foreach (explode(',', $parts[2]) as $url) { + Workflow::requestCache($url, $curl, null, false, 0, false); + } + $curl->execute(); + Workflow::cleanCache(); + break; + + case 'activate-autoupdate': + Workflow::setConfig('autoupdate', 1); + echo 'Activated auto updating'; + break; + + case 'deactivate-autoupdate': + Workflow::setConfig('autoupdate', 0); + echo 'Deactivated auto updating'; + break; + + case 'update': + $release = json_decode(Workflow::request('https://api.github.com/repos/gharlan/alfred-github-workflow/releases/latest')); + if (!isset($release->assets[0]->browser_download_url)) { + echo 'Update failed'; + exit; + } + $response = Workflow::request($release->assets[0]->browser_download_url, null, null, false); + if (!$response) { + echo 'Update failed'; + exit; + } + $path = getenv('alfred_workflow_data').'/github.alfredworkflow'; + file_put_contents($path, $response); + exec('open '.escapeshellarg($path)); + break; +} diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/curl.php b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/curl.php new file mode 100644 index 0000000..8a08857 --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/curl.php @@ -0,0 +1,155 @@ +requests[$request->url] = $request; + if ($this->running) { + $this->addHandle($request); + } + } + + public function execute() + { + $this->running = true; + if (!is_resource(self::$multiHandle)) { + self::$multiHandle = curl_multi_init(); + } + + foreach ($this->requests as $request) { + $this->addHandle($request); + } + + $finish = false; + $running = true; + do { + $finish = !$running; + while (CURLM_CALL_MULTI_PERFORM == $execrun = curl_multi_exec(self::$multiHandle, $running)); + if ($execrun != CURLM_OK) { + break; + } + while ($done = curl_multi_info_read(self::$multiHandle)) { + $ch = $done['handle']; + $info = curl_getinfo($ch); + $url = self::getHeader($info['request_header'], 'X-Url'); + $request = $this->requests[$url]; + $rawResponse = curl_multi_getcontent($ch); + if (preg_match("@^HTTP/\\d\\.\\d 200 Connection established\r\n\r\n@i", $rawResponse)) { + list(, $header, $body) = explode("\r\n\r\n", $rawResponse, 3); + } else { + list($header, $body) = explode("\r\n\r\n", $rawResponse, 2); + } + $response = new CurlResponse(); + $response->request = $request; + $response->status = $info['http_code']; + $headerNames = array( + 'etag' => 'ETag', + 'contentType' => 'Content-Type', + 'link' => 'Link', + ); + foreach ($headerNames as $key => $name) { + $response->$key = self::getHeader($header, $name); + } + if (200 == $response->status) { + $response->content = $body; + } + $callback = $request->callback; + $callback($response); + curl_multi_remove_handle(self::$multiHandle, $ch); + curl_close($ch); + } + if ($running || !$finish) { + if (curl_multi_select(self::$multiHandle, 1) === -1) { + usleep(250); + } + } + } while ($running || !$finish); + + $this->running = false; + return true; + } + + private function addHandle(CurlRequest $request) + { + $defaultOptions = array( + CURLOPT_HEADER => true, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_USERAGENT => 'alfred-github-workflow', + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_MAXREDIRS => 5, + CURLINFO_HEADER_OUT => true, + ); + if ($this->debug) { + $defaultOptions[CURLOPT_PROXY] = 'localhost'; + $defaultOptions[CURLOPT_PROXYPORT] = 8888; + $defaultOptions[CURLOPT_SSL_VERIFYPEER] = 0; + } + + $ch = curl_init(); + $options = $defaultOptions; + $options[CURLOPT_URL] = $request->url; + $header = array(); + $header[] = 'X-Url: '.$request->url; + if ($request->token) { + $header[] = 'Authorization: token '.$request->token; + } + if ($request->etag) { + $header[] = 'If-None-Match: '.$request->etag; + } + $options[CURLOPT_HTTPHEADER] = $header; + curl_setopt_array($ch, $options); + curl_multi_add_handle(self::$multiHandle, $ch); + } + + public static function getHeader($header, $key) + { + if (preg_match('/^'.preg_quote($key, '/').': (\V*)/mi', $header, $match)) { + return $match[1]; + } + return null; + } +} + +class CurlRequest +{ + public $url; + public $etag; + public $token; + public $callback; + + public function __construct($url, $etag, $token, $callback) + { + $this->url = $url; + $this->etag = $etag; + $this->token = $token; + $this->callback = $callback; + } +} + +class CurlResponse +{ + /** @var CurlRequest */ + public $request; + public $status; + public $contentType; + public $etag; + public $link; + public $content; +} diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icon.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc150e349afb28afbcf3b1bab87a5ddaf4c36ffa GIT binary patch literal 5557 zcmV;m6-w%fP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 DVr4_+ literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/branch.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/branch.png new file mode 100644 index 0000000000000000000000000000000000000000..89c4994e7ecbeabc2dda7553d181479970bece34 GIT binary patch literal 4753 zcmV;C5^n8@P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 ZZ(M@phV-4ZV~xz`Hrlp-wvz;!hM_(lW(bRGZ* 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 O0RRqbYgTSTy!jui{zwo2 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/dashboard.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..502b4c0b20d28d0b6e75ad57a19a6c7009c883cb GIT binary patch literal 5915 zcmV+$7v$)PP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt7MMvyK~#9!?VWpo6vefNzZsT?%S#bu!Gy>702CBNU@!5_0ER2X zSF$Qd$MT4L$!h#ZoWf2e%Sspw2 zV_9}#r>m=bx~jTo`};?n>ghf;_1o(1Q>V^};4yK?rU|V$ht`}$3vy^kEw8UqZ8*et zY~xEdP{4XNv5ox+PcIPh>O^s9LKph*%W$}ra*!99!%DV!BLoiw5RcG?JRb5+Od%2^ z8N)0J5~b;#Ce1;M=g^NyrhkiS%@AfLirjzQwE*JKfw5d|y8j`-+dRlW-Q5yg3LxHv zX|y-p?~qEY;f}-#=U;OnfOu=B)6H~$LsGDm{)qx-UvVgaczwq5JJbCP5s=SAiM{fN zI}$*=2MbL1FGPZ#iG{L0*JR}o#{S>I3h_~ndgD1 z%(>!y!r>1b5!S`~*dJEI?tnP4!OSq-n-Evr6x$nHRwz8gMgZ{$lNn{YA0e*k#mTV+ zA_)iu5RdX415NiKBrS4j5u00>v}zUzARb{lx0|*0Q zp(71r^HWQ}QUI~R;k`eD$YpQgvQ!Nget>u%=9soQ#AEs<=2rbMr2s;=PlnQ_s%t2P z0OHx~3!{57l)5K6h*Nn2r-Z|wvE-llL6xBnSNt-Z6IKdO5J0>>drVsxqL>Di;{{H< z1&lFmU5IkVR{o#kW`OYNznW0#ZQ%GBV7h6`LbOn6oGZ-$@h*H|+OiN$bS;k{J|=)T zd`dghc7MVZ0OL&C6rz=*?*d0}0r4hmGi_0bW|}6p zRm=eWOj{G8oqlk128c&FV%nMz14I+avKgSYX-h(k(5CzrkZ0PG5F_M41maK{E&x|c zl0>6GPB{G4ln70tKxfl-gczes6zFT(iV$P;iNv8KOzc)|IT$579R6xdttdIBZ3r<* zlvbuq2r)^Nb4;5MVv=a+2Cm*jIm@&OAts5^!n6q?CJEmHsyR^_nl>TCBvERbHX+0$ zQh5SHGM7*Q)toHT2AHHC4QaqhoJ0+v4hJaV5c@g89(Hobw0T;nRsx97j5BFY4msq| z*d|NnPKqg}n6D{hBT|`{14tyEO#dW)=QPgaT-wr#+AhzKWGfrkz~`*Zu$dvF1&~cg zI&%?CJUr(CRW0GK?nOZ=$=r- z-&h>z*&w3?(30Ntpq}>YZs1K82lUw>V+7ESJh~c;Z{N*)-eQO8pTRL1Ab==Wl1EF^ zW&np+%uK#9ZH6NPE`SJKxt*A4Gb(YI`TUu0O`9Q2pasy8yL~nI<&^Liud>gy8BzpR z0L}QdugjP2V+M25d`YauExg4}rFI5V05!Rp8w23QUdLn#U4OeNBRQKb3{@(D01Dtd z?hQ;F+Y#pQJU_VjW-h~zzR>=Qp$eZV0w#c3^yfN{UiNlT#BTPmhmvDMRF^1q$>uap zrLjj_rdBb+;jJLb?c`PJrOH_#Py%Sl{b}xF`IZ7UQOH+prNs8=hP0p+F=A;fBW+~} z#g4vl3ip@ia65)N2?R(0efhQPzsX`&vYIs%x%_?>ZMlFBv~_5K^WksL1Du-T^H2D_ zOWVZ+L;$rJMBLRkH?oA~o_XtQ(}hduO19L|PKQ6j^$bY4it!D@73J{@gaC3F&6$qB zRm{6AW{U!QYI6}i$+d~6b2|KW8Op^eTMD_aIzI!nWvs*4^&~5p%SuX>+I1Se=}jYx zR;R-s;~~yS+430=D0C|MUI3Re%+UkbK^8Jw$=`h{vbda^`EixcoeqCb{@bFLAM!8< z6!yU90=Sle4qo~WGmn?G`{AQpM!(}c6V8Ue7Qf}E7H#kG2#1wg?`r|vM1SdHlPqF} z>!McB1^Pc;zI#k%0Q{(HZqQXnKsr1 z*8V<#5*}uyMr(X0fYuC?dhuJtWQpY*|B=lQF12jk$Ag+5W_>1rri_QH*Glvr1)%s#{v-f`v5*>l&iQwFYt)~YBJn5Th$H)!>^tww{VN_y=FP%48G6! zL;!c%Zt&R6umBFf$lq7S0vh3y9z zAE+gtn%v2?Hpl$HXjYjv^cY435V2kOof@cTe>;C4z;5pMl`Gq*0Isx2?6OQE+~YAC zSNUum6QpgpEyZWNpX4c@1bT~+@%I6Iz*wKY%@`BF4Z_w%fpGoW`}@j!GfD9VFZUR#7;+{T z2wD#@!;D#ui1DP<@c)JXaXI`QH1xud0RB_hI?vc1KY6+{MG)Ru!7QF|c{A(9|GLPE z;1nYQsKb?l)`Pra!YBvSVlX2F;hp6qnd*AI?<$56p||qB7!kl_)D^TY^m(GyrsNC5 zJIgu3B;Ig&jjI?;1n4dyv-B|X5Gcy_lVrA|bFE1cO06=sUdG=CaF7Z7!{s%~hac+l z6Ba4#jS&Gf;(S5t3Wu)Ji5e{z?dLt7{fy!hmshD6et;`7PXLz)?>lq#8zf0X?xT~` zk^6Xn&s<)m*KxxSooJvmVBEknz@>t=Vyzn^ozR|VB!_c7s_wydl zW=6Pvhv}7a_@N^;71krtJ_B?Sv~BR&S~);-9+w{ebqq;k_^o22PZG|V>7rc#7Yf?m z(`}3`J$cGDX1Sb|3{B&4?JB|B#YGBxsQDI?0+F7=> zb8sG~Xr2K?lUcFrhbI-B&SMUSe*t6Dyib25XgkNF$_1&=EP!(bZ7Y2g0g%fxw2?mg zRVJmqzpsG3mTfgTM_Erb-vZhS+E#0|q!t~C(TKW7WB9XlU(TpwMnM&e;(LV z%Ey9-%{Hu2^gC!3Kn-E7A5~qfN+bHwgOfZsQz`kp2i+wLS!j z-l+AYN4vta;orw_Plq3V5V*l=lcVSt(JBB@C%mfaBcc)adNlky8SHw&#~RU1po#QZ zoZ%Y*=@;9@#n0lg?Rzlvc3k6pTmeuV~#uBq`gP?QCD zw}$J>1$2m5#yActv~UMUETbjrE4rpe0f;m#vy7U$hR`k2vq!oQfD3q3@?G4mrKRlQ z6pJ=hGl0fhfM_p(nLN49SfC+X&ALKhT?c1zf<^&|Qo)+alAFRu07Q2i zzwVvYjr9zm>R#=W89-goW3aFmKnBbJqD%QP7~BNb?-(^4oW%(m1t6N{jpwWM3D(Qy zs^&H|ALWLDjvb*8VrfPJ+u>JUlDejupiNcCoKI!|m0KSw zSjc*p-+Y068tfDO1{pB}h^Am20w`rPyIg#45pQX*PW&6F2}9K^fX#w7^+{0yiW% z7rQKD-fD5Sg1t7W_>OV3rZ>4l??aL=_&am8-22NA_$PpoAWdY0HA;Z zBAmjhDV@+q*u@U*^*ySE0M-fw(23Wy+LB}^JN0&7Ky6|6l(ovPt2srCs3Yflv~w?* zTp*}6TBNXimSzF06XepVDXb!r>2wyfsmz_CSpYu>w?M1SitA@0!oI7_o}@idqyH;JL#5i62Uz$2r;sutLyQPiam}KXaL&ZL`v9quK>fAPfxYq1zl^ki`{(R<#NA zwF{tB7%kI{lXV;91H`>{TX;qe0|g_N2->pfrQaaqh-!lsD|U|=5Wp(oO`wmmJurUd z$HENi^6M7vFd%@#!bz=(bawts;pf6|xFyo(afgw*f$s`iZ;(7oX3&W4g4QpU*HAVh zfX{@H0p|#-iewtU5T=6nDi5(WhH3|kJN7FLF~a_!5myUZ50g-Cfgu4b6oiPw+117= z+)uCs1WSZ_DZIgu0QNFp*nU^F*e=@Kra1KL8f-8m0C-)v*RCnonKDcxcMI1(R zY?nOFV|Ye93^ruEO~_l4KWf^FT8<9{08?!<;9P1uar&QZCh{YjW8O(KlaX_LA%H#n z!Pf2Z3vM=TW?E$N5NFvOvz2GG+vN)Zz>1Wq6_4k3t~YI_YogpoC!1rA@QC&u$-WT) zJS`}kTF%`8y%E&peu+rOm-yU(ZN3pe38N(RpT|9cdmKE8vBI4{Wqh1Q4zqOdjR0Va z?F%75-+;XoHsUec$se{e-cZpD9|-^!^M=GxKVgEh8d_e{l*zV_esGY7H3Wa9##aJ> zKS}L`yMW2Uq>6r_BachinPigd{DtY`GXWf792+H$YsFL>kGg3hT+1U;32>ihu}M4Q zdg2Zoa2iu=R?EsrGMni>tv7ZuL+L7YBo%xgG z@W0O#!?yZx1^|dLNwQq>VP-SKM};TrF@WBZuc{w0()bMKQvpC*CXy|A>?WotOr$1H zgv%Kyy?Ffz4=Sq!hYp4pYEd)==OgMSKozX-7L+ zxsF9R!b`mDn+Lzj1V{i7C6C+E&L{jGg=}Uk+bCi;dr~|n)S>~6$RUTOw4#-?L&}P+ zJYpo;M}|NN0H8HPY3b=1_p_H$4s(EPqGVB@Iv$=q$vZq_Al6TozzG1dxSn4IB!$d3 z(cU(usDo z@u)0q5o=h@N`<9db(0myCl_f-S<70W1~J;wiWn_jEbVM(6Pwt;XBjl`H&u+0lsG+d)Uo)6tRtMY~_2?<|`!2;J!p7Bq^pi zFn&7qMA>B8gbE6?Nw!5H0b@*C5@LigiKF|iW|_7m#0ay>a|8u@MKi=L1xE#tNHWy4 zEg{+&k|?dn5;oJcH6hxW3C9GG*v8wY?FrG!+leBmoF{OkX^TR%@?hD2Dg^LJxJFuy zSi?Wd{&7qI2?AP;A;b-Llo#r%ly@buf~BVI3em#S#4-2(@rif(o3<=O3zf$CxD027 z-^NZM*R*vZipft@dg(tQ=}o-85Azs>cuRvsrA(S9QisznR$YI0I@(Fld{olCCUe{?$YQ zeNEdM;yHa2DRzNbB)TqKAKObW(-wz#$dJSfsXn&MbRJvA$)QgmW5{Q8Vaf(e0TdEj zKyx~pwmifGX7FDLizY#>gF<3+Y2o{Pj3IVB&wzww+_$jUMPV{Fhlb&eAkgIVn}i_j z-=^A0A+h;{kAuNw2%{6i1Edn*$NMnHbWcKD&^KYb?N71-LcBGfyRMcHVum&eiR>?u zg?JJL)MJ|I9)(ErEOljuUwQ^8Bi@4rrh675LC?fO*+U(b;z}%}0r{qT7b0W|4djR4 z;S5klyfxG5X1bptDOgH>xrx65mk)OFE<8s&)BO#p#HS2MxXAS2yc#0_i50Y`L%5sB zC%jEZ&UZ8Xu4jO9;!Wtsqo(^`tr^P9L>jeeJb1T{M`=wS4~2dLtt1)4EY>B`%m#{|2h=-Vt|0utop?002ovPDHLkV1iL1^)LVc literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/file.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/file.png new file mode 100644 index 0000000000000000000000000000000000000000..1494b2d800df295cba5c32ce489658246dbc1f49 GIT binary patch literal 2645 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 Q$X^dQ+q>J{wFyf7FY9QTnE(I) literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/fork.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/fork.png new file mode 100644 index 0000000000000000000000000000000000000000..e15fe235dbb0ef4706f786fdf731efa01fd0e158 GIT binary patch literal 4522 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/gists.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/gists.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d1de74a136e85de2c672b244935330b2620cc8 GIT binary patch literal 2890 zcmb_eX*`sD7ryT?lYPsQ-FSw{9-%DBSQ;Z+*2(e=Q@yD~wlbE7+pZ@uc2kxqGm1nL zWl4-8l%$bRLLm*ZgwojF@qB(iyuaW3emd7V*ZFe(zyEcebM=Iit+0Tc0002Ob~qbX z006lV1o+_G@H58$J2$`sEFCQYfRQD*NknjSL z()HsiDZ|74G==lh_pY0;FbURw$awjUDmFAUm>q5~Gi#&F{Mu;w92^k2xH13hdGEq} zuK{8&I{DCtrYzoXQ*i~XcG%hdTljZNe!2#|wz1t}0VZ8~L%z4;spNMODgAvHnxj6< z25TH%=SeC)Wh^VcR}87$f9$}=+}xgYOG=4?fA^=03+HcW>&*KrKB4;w4qha-nT@YM zmzPE+OU-|=V=v1yiG+!#FAnhw3y9U6g{E1PhcroL*B7RGmES`Eaeqvddvps{IJ2%@ z`1QPsfh4lHOZSjn)<8P7?0c~4_NM?<%(}5Hy(^%@|Gt^@uNnq|@8h=_UKYyW)IlaX zQm0Sxw1C)^Fl@BLiwyNT?Y@l!WM6p7C(rl=^$_%Y>2`2k#S?2>sKEx!_OxL~Xa;FQ2INy%d@Z5EGup`kA)9 zHPkxks!-h^eOC*^7qgxnaRnvr`H)JYJ%(LIs0Tj|YO}2-(jsoZPc+>Cp9Sxs8_4qy zOo})@WmEu(l#3ZoKU^U%WeHnZB@GF@S z2T^LRN8;eiI-r&D>m*iFMxOC&>+%_Khl?a>*0jA;FC6t#hoMs@>A%xNcvzm`3Q| zpM3K~^s(qM9!XNc>kG4K9-EoBBhvK`sxYHVb27;XBbWC^+NA;99Hr@O@7=LNF_y;r zLa@ImBo$VGiC=amW)FNl=SwZBO-B(D;-miNgukNkkU_9jT@gdpzR2l7G`g8WVI9BV z?>VbG__3VKeB;Omj;2iwNw1oRI{*dprq zt|es&OyQuhZVvI%t2y4rmn*&*CtJydfdpZrdt3swX&x4JIPy-;q=xh{U5oC)dO{Ao zI~yom_oBhBjg%z9=6(~Vet;shjfaMInegsJSnFV!0Z5Zts@)#tM^-{vYcnSR4a8=( zMIj8QJ`uQOB83b>Y~HtMfYBV)) zx<4ewaz(QL82asj_S^wd9%w5PwfR(>2Xqz7r$?up=Oio)9^CjeTV(FFJYO-st>nc-$q7Gf|);}S<;Cs(OLM~ zp+elC56D#3DF^dUq?%}#bm8)!FC1}KlH>@oZLn1>dYm`OK>TDqcg+}$DVG&4762j~ znwxATc+#nU*W3L!{gcOQ^W9!qcb{O{@>^OT03!9(x!Uwo?7+trQ z6lLT|vDnwqQAtPfzZw_2uXz`~?6i~~PDKu_uAJT%I=o|uH#*>QB=M`*x)2PpXd1U7?>Lx`!t&Mgn15+*vNj?(~7#A&5^kTynywdgTeqQ6r8^xd07%Z!A{!-@E0gqP$Cyfr1a;=M}S^~G5 bpdB8yQ)fOBBTO8)2QFZD%*m$4%0Kbn7Um+C literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/graphs.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/graphs.png new file mode 100644 index 0000000000000000000000000000000000000000..000d94fd90dd685b73531ab3b8db6f5ab3ac047b GIT binary patch literal 2144 zcmb_dc{Cg77XJiIP-~G&i7lnHwN`4K*jiOfih6cIs}!%68hc}D?DbOB3Z%BkTocZUwzu*17bMLv|{oQkOuQ=O@iy}k; z0OIzSY+V5m;6nib6XKigrd5;}&{a}P5=c;)c%GNKIa{$X<|pc+XrVwa&8I(pGt3^{tvfnjYz-I%TZ zje_%+rtbc5viKqmYAMh5JK(O3NNy*72M;dw!!M>73clo)SQVI52{^IyRzv&I5mttX zmQEHf^L1)My1x0K+r0&miol~qy|p+Mw+48O<*});+|l-qV@8=cCNcSVgA>dM#t3HS z-72T}Im)OIk(+@Neblw!`sq-rf?d?u?p(%{*7U~WBTUZ%P-JF(;jxpx2{TmQ&Etc! z38I2gtMm*%7U!%ma-l@oYj<25#%P~MNO(6j$?D&GhL638^$G&FEZ!{=wvsL@^cZtA zU%+v$U`;BkaS{uO<(WOrKLVXcF!OaOla3I-ei4j9Yd`>?3KJ=l_QfcolIonKt!mSf zY5R^x`B7xoJDP6soevO+&-T;J{wL~&G(X#>ocD+;qzTO%&yb8iys%;G08%>8cyq8(xXfmPrd|%yo8>ohg0^ z8FY3jV|Z%s`-b?Bg8Arn{G!LQ{9bL86~FlX)`}}K&!4U*rDtZRAvwRIqL;-mB{V2A z{s1M4N0jtI={GD&YpMgx;9LP;GkjZxqwB^PS8gB@62%bY{#fDQx&gY#b9Q?1F!r;b zu-D;JwFd@p29afGUw;EHUt%Ie*SP0}MQJ6^5r0}0_?stIz0M3W!VgC9V2$Ub4=s~_ z17}%9Ik~L&HkPz4R8aMaAs~@J!2!3o>UrQ?_?M!$Ra%hdxg-hwaiqXXYlZbl>Z%Wj2TrO)H0}kin4Fp92-gKD;byMwn%g?hv#%(fL<^`+Guu|1dr; zn$MW3e=OVZMm1Ao57Eut=$?pKVj}-ols~!D|NNT*3A+&dPuau>7#vdhXqr;_0>6!{m9{dkSde{H0zx%8&awrA67UL2;-!%08w z4x2O!Z?MUhNpx3&{Er@;jMdQF+`zUJGu``JU00<3EfqCKFTRMXg=TfsPhTSFA8L)T z%u>(!0fwd6NjXSg{Qa!(JXD(b@A^BvF9CIZ1S>L?vyIR$v*}h)_8wKeNVNk;8p%?I z-=x!|Ia&iFJurrGtP6~6{#uP8XmL0hNX%^u%gV#ih}_P&KX~XGD+MV?G9{#N;>kwS zvW`esuth=5n*6#3z+_o*5>f7V@rtLqPi-c1a#8LfwFf0)^YP}*751)QqP8pCA|dOH zXigodd}gB)|#&YK-cxx{38rESAj&4U~zvGb|9Uj=zCv0kIvMw3hV-C}2aQr=G&B|x$% zn#BmyrAYZ?W1p}co(}p`x#i5ts}A2W?8Bof*$J?+mdT`;y7Ut~7KwND`DR;84zyYL zudH#0N7O~SZsJV*^J&A|J9Om&Q>n(#9^N}r2N&bB|K4PP_B0aeL3J};9@e=pk|;Ns zi{}^>ipK8HdRKK%0sek)S!r!`{Bbv}t50b5)X&5qC8}prq0m=_a2s^$Ix^s~89|j} zR0NdvomZ+II^7%l?uxIp`g-H(Pg!W`@d1A>_4*f&ZfMEU<0v7FR}-dvoW9gRpSvxN ze;zOG%`9j$#on(sPhw^d_P*`vnuvI2Ql;>9EOWGZYIm-d>hw|Lh+alC?pwG3Pr2Vk W*E-R9XoA1?f&B$%TdH+H#=ijIFsO+D literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/issue.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/issue.png new file mode 100644 index 0000000000000000000000000000000000000000..50da295b850a527f249372bc688c83d979394be8 GIT binary patch literal 5079 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/logout.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..14dbf2566e06e1ca79f319c136842acc9d3079c1 GIT binary patch literal 2967 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 USN(n)*`frT9NdYOcK+;t1KJ%ns{jB1 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/mirror.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/mirror.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b57791d91da20234edd46dcf0a0362136e4c8c GIT binary patch literal 4500 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 H3;E=KJ{W0E literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/notifications.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..298cc77825a07e6e8c2148b0919effc1b1d40720 GIT binary patch literal 3564 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/organization.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/organization.png new file mode 100644 index 0000000000000000000000000000000000000000..30bb704dbdc140643ed9ad03028273b545b7f40d GIT binary patch literal 4304 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-fork.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-fork.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f525492aa16e5b94fb9cf41c247c4d7be7081f GIT binary patch literal 7118 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 z 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 R&<7rH`-V2A^g1^5e*jcoV^9D9 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-repo.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/private-repo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7873958ee3702cb5592e9353bc6721fc49352a GIT binary patch literal 2268 zcmd^9`CF4$7QWxd4rPF#qM%4o!G*=zK3GL00wDs1C1D#xh&TwyP+6p4Q1XF@5(Gk& zvIIjg?4lqjC=tov1A=iK|8=VW-g zW3@F6H30zHE=Qg406+>80_sW%h^+PZR)BKY5!?{~?&WBGI;o;Ko18j|#{obx0{}?_ zU{&El1OUYE1z>>)z`+6l45Eu$ybb{XYkD5@#wZ9*f8urGIN|!W*nc!4PnbK+hcPiU7UUb2tw&+XcB@WLy>y*YDt#=$L1C%HFn6w`{* z4_kH)e7&!+p**nUIz2z`eE=r=71TScdf@^POR?9&u@mO-Qhc&5|wz|rCOeX5u`FJ@#^_sFz zi|RMF`;X-_e(xTDvzc7@ycjSVq|EY~IFb*d(%LaY6(`y)o@$oomOH!V$*(;3EP ztxag;FU!VD57Z{7DGa5m?yXFfR#nf&X=#?=E9$}pG0%qCjIOEs2_9lrA~nmfH!B~h z8GqQe*-qKF`yhG~Nv#&&C+!ey;>1n@j9@({b_!fp!23XPm;uud^mw35wd~-42Hiq| zc0WF?3w;*(VYhoFYd_jezp`JSlW|?35{~HOjpN>wHfGKjkCRq%%dvfK@V8d8Um93h zE!y%Yo}Y>Z*<<9+@@F4PL_&>C!OAbImavD;Z;ERhlnkxc0N8hjXWIv>)^7HOZ3mm1 z*3!aa#I}8QVOwXYFVu=3X(~rsjj7eIA@jLn+qzk(*8wU{L@1`8G=DJrJ%D(Dy1Of+7e~Pkz2Atx-XR)+ zNzxS0$Qj-!-{L^*P!E{U5J3O15W6=i2`eQ5$BSF1oJmoQ0M#zt=!j2MNCCKE#B;f%omq#!<^B z{!lmqWD+UCr{}PwO=%_S!8@z}O1y_t`NT58^b^c$=$Vi;x0f6!orQdHYAc&ba#LgC zk|AnF>ku;MHX{w5as^0I@Ka&1tn(vD17x4|npPK*!^n@n0MEuxbV;Y>CMVhJz_UCf z`!n|P1rPh40xLBRCi?B00c$;3)nG&L+$w=Poh+a8IPf$SN;}rgMt=PDU(nk)?=Q7o zQ++7s#3TQW8CmL;syp|fliHP($Q zHZ4z+{?tmI1#GTXKVbJOHrvmZ?Lfaivs^2e!UvX)SJy48h8H?)SM+ob%5>LOJJ|n7 zldh>wE9_son4Fs#1l4wFQ!goCRNKUr`!zA|ywG5WU`zdT9^|y1q+Yd98*07eS0+K*9P_`f+q0f&Zyko%ikw67yw6rPGR;dB1+1&0#ZB8;WsteQwu0+tAoS z`(-%J__(qJ-fr$e^**>AqgKHR#zuTL@jfeXgn>8=AY^`BuR;OhVY literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/project.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/project.png new file mode 100644 index 0000000000000000000000000000000000000000..aa87421c49aac2dcbc53930ac1f42346b03e7e66 GIT binary patch literal 2431 zcmds3S5T9Q7XA}Lmy%F|pcFv?QHX+414L<|7ZDL5G>HmAP(g^S1lZ6t(i~9}N?1`= zflx#d7KpTmwmiX-*>(-Vn3S-SMCvP_ZARYn$(ysupBa}$r z03Z$p0E@u@VDS(DkOW$jmz6L94Rvv}0|Xg4AKCywf`_%koJkm69>+xm;P-d0vsiSb zKeh7l^YEI6#r|{0&v6u+Jl#|gGl9DFgUB(v3dG>3`%H<+OW9cCro7Z&RW6Nm83qS7 zYx(M3(9Bb$HyAz6EmfjCtQf@@GlxwK5z8J61NH~PP9U+WtlDvfFY|o!`9y0|aNn2J zA6rSYVV3i>xliG;mmHC=rsFp!Pex%(Eo!Sre*3g7UwDjcy6)jREpwq$G2#~=@tzZ4 z*1k{V+j}OpuCAQvokFT~z@9!_1TZ~NsZ{>v)b38|Z4Hm%Se-vO>ADaQ3dvL4J zmgCrODD{nc?8-xwu!=N0GT&E!`kv0Jc$rS$tk}!HIkbI-jVa*7(c~6Ov(B8EgW#}J zU@M}p^O^LC)oVq-1=+r7eK5{xT%Ac-&pIzTw1;V*0LQ%!N;3&ZzUrJIhc;+%B$%@V zm|Q>~PL-X}yMC_0FXcJJY|=lem$)*ZX!&Vxo42`8>CB0oDA8(0`IrSRi2JsR6GT+% zi|b8BN;PnaVO_vxgNFmRns=q*6i~h2@5T)ehjGtc(b)1BXvyGQUuE83YG z-rx2)r%d`n`d)?C(+Bm?L8VDZR2140J5C=E_-{#--W2FKTgx0t7Bve+8%vgjTNeHS zZM@AJAx0p2=9P0aTa`&7AE(^GM6BjKfx}CLxipiOM|pOy=rOx;E)X7*=#Cg_$ET13 zNnrbZ?p>W4Dt~CefT<3SI1z4<$bJBFN*f%>OzA<+;~>OJ{DDJ6C1;c^oD!EN&~1RXJiB6q~@x5t%x0MAdOuwZ!BUi&htaY|8@dN52TiSZju;hUzc~e z`dKx)CLq=*zD!N6KcZzt`NrPWsW@6UESqBEA9}SB{lS)6gTxKZ_o`a-XH_N0BiEsa zQYotBzg4#f6V%daG>0wYoN{%X#N8>`-Pn4x5@oa_C z|5@tIP@5zVN7k|?#{@8%XUD=#q8A|-+Mg=D9#0Lp`@mq0K-1uS@WK8W4BIvvN8WQg*|?qB~t^_}g4w1gX;_rM&n zfB336^;|aUh4JCc-dX8P)0ukqhP<|;HZb#Zo5SEFZ-#Y{MflsD{fR8e> zLfQyc%nGh+XXm$Rh!%yf=2Umq%@8(uC!w8ah!}$;$1UX6gt6=MChtKw&@~^kXtajp zVq=Mzvz!#aSZF&Hy7Pj1MJ6uxqtK8(B+`lm9Swk0%>?l*;zMg!ScA()=`}pzJuwK; zsh_+I3TAcFml}#6!My5}LASfF}BYku=e+w!TNbrnuImA0oI`PTd$@(J1Mr?6_+h zJFMNHPs=?Q^R!KZQfoVia|1A=DYfD1!FW2&h@ko|?&NAy z>%UY7L4^zagHz-Kd>!^o4L4h-7D+gr-&?Y+6kOb_pZ(%l9w?73A z4rAT==-PkJ;bsk(R{uG*ML$oi+g5wqlaHqH)fz_A?jYAW>-y(auyNpYk)QN;e2vU6 z7Ssy+eJt5A-@ZA<52fHduw9)uMC1<@GmlL$xy97Ak+1gO-pb1^-byXaR_WF=+!kZ3 z47{Ywk)p>am?R~zQV@Oos;p7iK0IoimYgvqh%pV2T((SX7k)(m*52K&`c!c0zX4PF BK34z$ literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/pull-request.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/pull-request.png new file mode 100644 index 0000000000000000000000000000000000000000..45dfd0f2b766ef68841a8e35c43270ebb3c5031d GIT binary patch literal 4232 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/releases.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/releases.png new file mode 100644 index 0000000000000000000000000000000000000000..127bda3fe6a99a0d14347de75a7f32ceda52bed6 GIT binary patch literal 3805 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 SK6D5gLjZHs$@a00Z_GatW8Xpm literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/search.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/search.png new file mode 100644 index 0000000000000000000000000000000000000000..6f26b49aafd1d2bc7801de8806396e8db044501e GIT binary patch literal 5018 zcmV;L6J_j)P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/settings.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..0eac96f56c034dd1210b2f618a7be753f7259868 GIT binary patch literal 4739 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 Nprx*-R);`E{vYT3s#^d6 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/stars.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/stars.png new file mode 100644 index 0000000000000000000000000000000000000000..73f65a501340fe1cebe86f3a43a274270eff75a5 GIT binary patch literal 3767 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 KX#CWW5cNOv^~+!Y literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/update.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/update.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce8e58f42bb5fddbb9365fdb665c229454bf938 GIT binary patch literal 4531 zcmV;k5lrrhP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt5im(aK~#9!?VWpcRn?uxKlcVm2!SZIfJJ#+g~UoE4)W}{EaMRw zDNtKiX)Dz!Fe5r^d=%?A3_2FHwbp8!F0CvCAEPs6#?qRgEa6mZAE;4VGawR_0M3jC zkf?y+k;t7tg65Ls?sM+FXP@7B?2msK?%wz8-#)+Z-RJDrZzu2=3rZQxNJdk^nG9zL z<@E8ol-SV5M>MmGw`pV>J7}iW_OyV6R~NEiFcX-`mB!s#Im%!(l$>4%COIb~$eXOv{6zDW-2$yrW^u35Ri+IA`o&VSK7JvoSEaNNE^)~=(Swcg8 zkAyr0U`^m5s-){}$Y3+`?fTrmmWKeW3RW>iy1s@U*vLG)F}JVeC;+QJ%eYRuo(2Uq z+-e_ipFJl5SQoKgx_$;1OtUw*&FWeJRw*_7t#r){E_sOS>{d4!T?)XeV5@YU3^|eJ zEI021NjKNBW*Ya0js#n+naa4-KNT@ORv zT+B(S^(qM{1z;sv$<@+zFcicjhNtS9(%F&~0Sx0a*RnFKwYgGXpZ$ z3v_)1ES0v-pq*uz|2UxqFmL}cA)_~NVhgZJ+A@PLWcWFw1+XUYvb1FepP2aR3gXWM zV8JHFNZV!biA|i-v5%nh5ir)cKSoqh-SJ1K0B)DI$>1x;`vS)w0oGuer7be}%&B&B zXA5w-v^56bxg3tS09KMuq^&UskhIesEkK2|B?b{HKYawuk+#Gj!W>9|1;@+;a4boa zOaeoU`(sLi!AW4ev>gU9CM1Db(pDJ6n3=HPhzaZ#TaG3vHSUiweUc23w!t7tl9AFT z7$iwDTG|AIBuO(29B-1GDQ$v5k|e{WO)yAedI2#fNx8HM21%0imNvm4iK{q)hUj7h z5OaD-8{i-145XM+`cX_9X`q#Z?B^psmNre0hzp=EXH&`P3}q-~S#up>H+y-9UF_s7 zj!GNtD+w!I_(g(85!H;Nic!w7aJ$gPR{on!Y~he}C43=r0!T21FLOb`z1vTCgXegG zgVGh!Or!+Rj~UEnkcU@nqaK@=X_Ky+HX1umOhy_s0 zJT4X3({hYou`)8Rg`pL|Xl~|ovCvuEyCXEPiA@f(d;=Lt1(j4VFvshEjYFY6 zRxw2H0DZZWFXoWHjhA_WmpGhLDJdp1g;6K$M2g{Fd=9GzU#vMds)O&8vEnF;abOF z%DuQggyGf#FMu(8-7(KruI5e6b~JGvJ00>=alT)-#WMmffCLL2e^sw>6Ce3tOA9yB zmHA}#z z{0XoC&U0AvbD!fYnJyksK6cIzRcA230=QI}`U)FdUdMahRhB)_#kfUq2&@23<~&8} z5q>6W-G3n^;>n5PRfRrNb_tM6BMj4m#7&r3;K^p=p096aHS=u;H>BWVthASQqW6S$bk(h3YHbJ_1x@ClLopWp(%!!U`WJ)@Cj${LnY!~g~{gux8T z<2GN-2mIEDdI$)hifco)WTI!@=Xb927BPa+jAdL7-Mj=hu#I=M*TZK4lrW#!p;|KK z1)s2;?W`j~1s5{a<+k%u7IVG!HP60w15f7xz8X9Ccaml+_w!AD;&KmR1y^df$wvW< z=U+uby9I@I*0X@SXmOGEGVK#Zz6sz0mT8LR9Y)e@U>@rn^YvoBW=nh$z+ZB6&S!T- zosYSPyBt>rozK}?t?)$vRs6H*@At?CZgN;$me3p&(+2?z;#TAStZZSig9IjedIm~Y zv!}g|VE8ik;8{sbH(7k~Irpp^GTIN2udj$M7rB<|vQxeMR~>Z358x z2&iV9W1jU~$?}-HAHY_Q4xZ=wI=P}%0Dt3<-pVq5!akiQgob0vVWG3=tEpU#0;qHt z!Z^r3<}jlceV$jGM^?meO{HoSzzk(-8;i9)*TTs@<&FnkvnbjG(AObe)&trj`-P7; z6luBypsg1$UKv`ofv0s9oRw*=PaD|6df%-Blv`eOt)J2+fGLW!H1`V}voe-xE_3!4 z5`gMJ%Fk&kQ_~|L!FWaLMs{ebPPo~l_*s-{DpQjHhB82rTI>2c@!}Ij%+ru{169Ei zTlll4%7mZn`yNBq0;u-)zaHvi*7TBH03|tGB^NXaKy{*bgQluPf$R;vuEVM|31EmK zZHuO=M1kzv;&TZ~l?$2#aB|j^v=5sd!b&na0?0lH)DnQmSV5&+vG7CJnFyK$ko}cK zBEEN6I8%|PE83{<0U}HfAUmp|YF+1%X%ay8)$Y3bvr*tIMOtJ8Fwkre$wHa(Wb}{; z;KQsby|k`!4>K1kUY(C=TQsLh0J{}wXSlvfyihHmc~e_(JWT>now9kZrmBRS$&6H_ zzN)QUO#)Cov5Ww^Q_R)M^m=V2YZ8EJwcqIx2oU2n-%`$=>{TumDGW^l*s0w1e2KQ| zgpK50(7bVYSa6 zT?LcL7mWf?HCxj(ZgvV2lepU1NkXeDOSNmk8)OicvYQgJ|bR z+M9pS9wO!irt&3MIY(s#lR8{rh~&-OqM-B2(ol!)Xb<4`GtQxZ zj^8PC6NH{^RDFF6b$dV0`&5$lHG%uMLlODH(4907@RV<*`LHPTHCFmoo$%Af4}Cf; zrUPGA1^*{&e5_KKY2o|692C=uPeFWtPMhYS$5G&q-0SpX88c9lvEZm&IHJJ9&-`yf1Br%uybP_yte#WiDb&>|P7g zZ09we6aL+IB6gO`A=a^uAxxo~su-Ln*2)gH(?Emo9X&O|hxs(KhBYJ@&M>~fP)?zk zl7i)+=Y^^zhbilJ4s(>lwD3Or*uyT~3+Tr9K%C~3W@iXa4EUk60b1}qK!hP!7y-l_ zBY>D=1Q2tK0Ah|2K+G`$h&e_8F~7!GvA_QWA)U`y(L$2?<2S{Sgs> z-x7$9`y(R&KP3<)_eV$oen}u&?vIoJ{E$G@+#fLk=$1hA+#fjs=#)Sd-5)^#=#oG* z-5*H-=#W5E-5*f_crAhGx<9f4@KOR%c7KEg;FScT?fys$zzYdP-Te_4K%o+dzWXCD zfI=h?2lvN70QpKF9`28Y0P>MQT-+ZM0pu!y__#kd0?0)IadLl*1mIQz@p6Bx1mH#j zadUsn1mGlr__;rJ0#HdHj_!}40J2FSp6-vO0D6)@T-_g20d$o>eBB>g0c1)b&hCeV z70dvZzEH-U^oq6nV=e&b4;+v-LX^gT^9!>&v(pDJ6s7*rX&pa^X&nrn_cRDjrM25|0iw?nI~&^1< zV1S*mDZ0zvK>GmGr0p|kWtx4$p7^4!=}k?kp=O0pWO>N0Iq`!;_dHf9A4}V5&_bFr zyYsX+^8b#;H1_yBezv!rb`c+M=lhh1PrJ?CxOmO8-2(iR&$WRd-7 zPahX$%b$9YlgyYvWT@e`rXCZr3ZRM9dWLbXwB-g5c!X>0EJ;P#ztu#lj^R{GTW=_k zhgo1}UH4t2`esu)RZF>f5QLf<{@zwB`!7;|yNT4ZnAgGZvWVMkWrl>Ct5`Fsm9B{) z4`$hp+x}b$0IUk$beq=@5GrjK(O+B!inJRk<00u98Cb)n+$QKv>JUoRg3H^KJn?#Tv}z{8YOBvF1jeunUOy>_Ok& zN>afbZZ+cszLI7stJ!K77~RD)r&%zB@yy~1`bgiKNOP1&siU6VcH!3o{vR&h!)B)o RZXy5x002ovPDHLkV1lw02!U+IC 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 literal 0 HcmV?d00001 diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/wiki.png b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/icons/wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcfcecc88e588a71d0414d96164026b002fd759 GIT binary patch literal 2824 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 + + + + bundleid + de.gh01.alfred.github + category + Tools + connections + + 14CA19E2-6328-4201-905E-A751E2BA47B5 + + + destinationuid + ABE8DD6E-CD29-4E70-87CF-1382A0446009 + modifiers + 0 + modifiersubtext + + vitoclose + + + + 29045171-6618-4FA4-BAB0-39C10422CF31 + + + destinationuid + 67ADBB8D-C705-4981-BB9B-7C9238BEFF2E + modifiers + 0 + modifiersubtext + + vitoclose + + + + 94B48881-907F-4752-AAA0-234EA30CFC18 + + + destinationuid + FC76BC27-8BCB-4BEE-AD42-EAC2D9B01F0F + modifiers + 0 + modifiersubtext + + vitoclose + + + + 95CD1A63-A0C6-4458-9817-9C6B1A90C827 + + + destinationuid + 29045171-6618-4FA4-BAB0-39C10422CF31 + modifiers + 0 + modifiersubtext + + vitoclose + + + + destinationuid + 9715D8FA-0199-450F-99B8-64796B5AC6CB + modifiers + 1048576 + modifiersubtext + Copy and paste URL + vitoclose + + + + 9715D8FA-0199-450F-99B8-64796B5AC6CB + + + destinationuid + 87F10E6D-697C-47CE-BD78-E7174F5DF815 + modifiers + 0 + modifiersubtext + + vitoclose + + + + ABE8DD6E-CD29-4E70-87CF-1382A0446009 + + + destinationuid + 95CD1A63-A0C6-4458-9817-9C6B1A90C827 + modifiers + 0 + modifiersubtext + + vitoclose + + + + DAA505B9-F86C-4AF8-818B-8F614F01485E + + + destinationuid + 94B48881-907F-4752-AAA0-234EA30CFC18 + modifiers + 0 + modifiersubtext + + vitoclose + + + + FC76BC27-8BCB-4BEE-AD42-EAC2D9B01F0F + + + destinationuid + 29045171-6618-4FA4-BAB0-39C10422CF31 + modifiers + 0 + modifiersubtext + + vitoclose + + + + destinationuid + 9715D8FA-0199-450F-99B8-64796B5AC6CB + modifiers + 1048576 + modifiersubtext + Copy and paste URL + vitoclose + + + + + createdby + Gregor Harlan + description + GitHub for Alfred + disabled + + name + GitHub + objects + + + config + + action + 0 + argument + 0 + focusedappvariable + + focusedappvariablename + + leftcursor + + modsmode + 2 + relatedAppsMode + 0 + + type + alfred.workflow.trigger.hotkey + uid + DAA505B9-F86C-4AF8-818B-8F614F01485E + version + 2 + + + config + + alfredfiltersresults + + argumenttype + 1 + escaping + 36 + keyword + gh + queuedelaycustom + 3 + queuedelayimmediatelyinitially + + queuedelaymode + 0 + queuemode + 2 + runningsubtext + Loading results… + script + php -f search.php -- github "{query}" + scriptargtype + 0 + scriptfile + + subtext + Search or type a command + title + gh... + type + 0 + withspace + + + type + alfred.workflow.input.scriptfilter + uid + FC76BC27-8BCB-4BEE-AD42-EAC2D9B01F0F + version + 2 + + + config + + concurrently + + escaping + 36 + script + php -f action.php -- "{query}" + scriptargtype + 0 + scriptfile + + type + 0 + + type + alfred.workflow.action.script + uid + 29045171-6618-4FA4-BAB0-39C10422CF31 + version + 2 + + + config + + lastpathcomponent + + onlyshowifquerypopulated + + removeextension + + text + {query} + title + GitHub + + type + alfred.workflow.output.notification + uid + 67ADBB8D-C705-4981-BB9B-7C9238BEFF2E + version + 1 + + + config + + argument + {query} + variables + + hotkey + 1 + + + type + alfred.workflow.utility.argument + uid + 94B48881-907F-4752-AAA0-234EA30CFC18 + version + 1 + + + config + + action + 0 + argument + 0 + focusedappvariable + + focusedappvariablename + + leftcursor + + modsmode + 2 + relatedAppsMode + 0 + + type + alfred.workflow.trigger.hotkey + uid + 14CA19E2-6328-4201-905E-A751E2BA47B5 + version + 2 + + + config + + alfredfiltersresults + + argumenttype + 1 + escaping + 36 + keyword + ghe + queuedelaycustom + 3 + queuedelayimmediatelyinitially + + queuedelaymode + 0 + queuemode + 2 + runningsubtext + Loading results… + script + php -f search.php -- enterprise "{query}" + scriptargtype + 0 + scriptfile + + subtext + Search or type a command (GitHub Enterprise) + title + ghe... + type + 0 + withspace + + + type + alfred.workflow.input.scriptfilter + uid + 95CD1A63-A0C6-4458-9817-9C6B1A90C827 + version + 2 + + + config + + autopaste + + clipboardtext + {query} + transient + + + type + alfred.workflow.output.clipboard + uid + 87F10E6D-697C-47CE-BD78-E7174F5DF815 + version + 2 + + + config + + argument + {query} + variables + + hotkey + 1 + + + type + alfred.workflow.utility.argument + uid + ABE8DD6E-CD29-4E70-87CF-1382A0446009 + version + 1 + + + config + + inputstring + {query} + matchcasesensitive + + matchmode + 2 + matchstring + ^\w+:// + + type + alfred.workflow.utility.filter + uid + 9715D8FA-0199-450F-99B8-64796B5AC6CB + version + 1 + + + readme + Changelog +========= + +Version 1.6.2 – 2018-02-13 +-------------------------- + +### Bugfixes + +* Api pagination didnt work correctly any more (missing results from page > 2) + + +Version 1.6.1 – 2017-09-23 +-------------------------- + +### Bugfixes + +* Support for macOS 10.13 High Sierra +* Commit search results had wrong urls on GitHub Enterprise (@beparker) + + +Version 1.6 – 2017-05-07 +------------------------ + +### Features + +* new command `gh user/repo projects` (@dagio) +* new command `gh my pulls review requested` (@AeroEchelon) +* better sorting for issues (most recently updated on top) and commits (most recent on top) (@danielma) + +### Bugfixes + +* On macOS 10.12.5 Beta URLs didnt opened in browser anymore + + +Version 1.5 – 2016-12-13 +------------------------ + +### Features + +* new commands for searching repos and users globally in GitHub (`gh s repo` and `gh s @user`) +* new command `gh my repos` (@jacobkossman) +* new command `gh > delete database` +* source repos with higher priority than forks + +### Bugfixes + +* in some situations private repos were missing (@lxynox) +* after saving GitHub Enterprise url the workflow didn't reopen correctly +* updated user sub commands (Activity tab does not exist any more on GitHub) + + +Version 1.4.1 – 2016-22-07 +-------------------------- + +* fixed reading environment variables (important for hotkey support) + + +Version 1.4 – 2016-22-07 +------------------------ + +* Hotkey support +* use native update mechanism of Alfred (to keep your hotkeys) +* new command `gh user/repo releases` (@altern8tif) +* cache warmup after login +* lower cpu usage in multi curl +* fixed autocomplete values in GitHub Enterprise + + +Version 1.3 – 2016-17-07 +------------------------ + +**Important:** This is the last version for Alfred 2. + +* Disabled updates in Alfred 2 +* Updates in Alfred 3 are loaded from new location (GitHub releases) + + +Version 1.2 – 2016-04-17 +------------------------ + +### Features + +* New sub commands for `gh my issues/pull`: `created`, `assigned` and `mentioned` +* New help command: `gh > help` +* Longer cache lifetime + + +Version 1.1 – 2015-01-10 +------------------------ + +### Features + +* GitHub Enterprise support (use `ghe`) +* Commit search (`gh user/repo *hash`) + +### Bugfixes + +* A space after `gh` is required to avoid confusion when using commands of other workflows like `ghost` + + uidata + + 14CA19E2-6328-4201-905E-A751E2BA47B5 + + colorindex + 9 + note + GitHub Enterprise + xpos + 30 + ypos + 230 + + 29045171-6618-4FA4-BAB0-39C10422CF31 + + xpos + 600 + ypos + 40 + + 67ADBB8D-C705-4981-BB9B-7C9238BEFF2E + + xpos + 790 + ypos + 40 + + 87F10E6D-697C-47CE-BD78-E7174F5DF815 + + xpos + 790 + ypos + 230 + + 94B48881-907F-4752-AAA0-234EA30CFC18 + + colorindex + 12 + xpos + 220 + ypos + 70 + + 95CD1A63-A0C6-4458-9817-9C6B1A90C827 + + colorindex + 9 + note + GitHub Enterprise + xpos + 330 + ypos + 230 + + 9715D8FA-0199-450F-99B8-64796B5AC6CB + + xpos + 680 + ypos + 260 + + ABE8DD6E-CD29-4E70-87CF-1382A0446009 + + colorindex + 9 + xpos + 220 + ypos + 260 + + DAA505B9-F86C-4AF8-818B-8F614F01485E + + colorindex + 12 + note + github.com + xpos + 30 + ypos + 40 + + FC76BC27-8BCB-4BEE-AD42-EAC2D9B01F0F + + colorindex + 12 + note + github.com + xpos + 330 + ypos + 40 + + + variables + + hotkey + 0 + + version + 1.6.2 + webaddress + https://github.com/gharlan/alfred-github-workflow + + diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/item.php b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/item.php new file mode 100644 index 0000000..c16655f --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/item.php @@ -0,0 +1,177 @@ +randomUid = true; + return $this; + } + + public function prefix($prefix, $onlyTitle = true) + { + $this->prefix = $prefix; + $this->prefixOnlyTitle = $onlyTitle; + return $this; + } + + public function title($title) + { + $this->title = $title; + return $this; + } + + public function comparator($comparator) + { + $this->comparator = $comparator; + return $this; + } + + public function subtitle($subtitle) + { + $this->subtitle = $subtitle; + return $this; + } + + public function icon($icon) + { + $this->icon = $icon; + return $this; + } + + public function arg($arg) + { + $this->arg = $arg; + return $this; + } + + public function valid($valid, $add = '…') + { + $this->valid = (bool) $valid; + $this->add = $add; + return $this; + } + + public function autocomplete($autocomplete = true) + { + $this->autocomplete = $autocomplete; + return $this; + } + + public function prio($prio) + { + $this->prio = $prio; + return $this; + } + + public function match($query) + { + $comparator = strtolower($this->comparator ?: $this->title); + $query = strtolower($query); + if (!$this->prefixOnlyTitle && stripos($query, $this->prefix) === 0) { + $query = substr($query, strlen($this->prefix)); + } + $this->sameChars = 0; + $queryLength = strlen($query); + for ($i = 0, $k = 0; $i < $queryLength; ++$i, $k++) { + for (; isset($comparator[$k]) && $comparator[$k] !== $query[$i]; ++$k); + if (!isset($comparator[$k])) { + return false; + } + if ($i === $k) { + ++$this->sameChars; + } + } + $this->missingChars = strlen($comparator) - $queryLength; + return true; + } + + public function compare(self $another) + { + if ($this->sameChars != $another->sameChars) { + return $this->sameChars < $another->sameChars ? 1 : -1; + } + if ($this->prio != $another->prio) { + return $this->prio < $another->prio ? 1 : -1; + } + return $this->missingChars > $another->missingChars ? 1 : -1; + } + + /** + * @param self[] $items + * + * @return string + */ + public static function toXml(array $items, $enterprise, $hotkey, $baseUrl) + { + $xml = new SimpleXMLElement(''); + $prefix = $hotkey ? '' : ' '; + foreach ($items as $item) { + $c = $xml->addChild('item'); + $title = $item->prefix.$item->title; + $c->addAttribute('uid', $item->randomUid ? md5(time().$title) : md5($title)); + if ($item->icon && file_exists(__DIR__.'/icons/'.$item->icon.'.png')) { + $c->addChild('icon', 'icons/'.$item->icon.'.png'); + } else { + $c->addChild('icon', 'icon.png'); + } + if ($item->arg) { + $arg = $item->arg; + if ('/' === $arg[0]) { + $arg = $baseUrl.$arg; + } elseif (false === strpos($arg, '://')) { + $arg = ($enterprise ? 'e ' : '').$arg; + } + $c->addAttribute('arg', $arg); + } + if ($item->autocomplete) { + if (is_string($item->autocomplete)) { + $autocomplete = $item->autocomplete; + } elseif (null !== $item->comparator) { + $autocomplete = $item->comparator; + } else { + $autocomplete = $item->title; + } + $c->addAttribute('autocomplete', $prefix.($item->prefixOnlyTitle ? $autocomplete : $item->prefix.$autocomplete)); + } + if (!$item->valid) { + $c->addAttribute('valid', 'no'); + $title .= $item->add; + } + $c->addChild('title', htmlspecialchars($title)); + if ($item->subtitle) { + $c->addChild('subtitle', htmlspecialchars($item->subtitle)); + } + } + return $xml->asXML(); + } +} diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/search.php b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/search.php new file mode 100644 index 0000000..1c04a8c --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/search.php @@ -0,0 +1,610 @@ +') { + self::addSystemCommands(); + Workflow::sortItems(); + return; + } + + $isSearch = 's' === $parts[0] && isset($parts[1]); + $isUser = isset($query[0]) && $query[0] == '@'; + $isRepo = false; + $queryUser = null; + if ($isUser) { + $queryUser = ltrim($parts[0], '@'); + } elseif (!$isSearch && false !== $pos = strpos($parts[0], '/')) { + $queryUser = substr($parts[0], 0, $pos); + $isRepo = true; + } + + if ('my' == $parts[0] && isset($parts[1])) { + self::addMyCommands(); + } elseif ($isSearch && strlen($query) > 5 && '@' !== substr($parts[1], 0, 1)) { + self::addRepoSearchCommands(); + } elseif ($isSearch && strlen($query) > 6 && '@' === substr($parts[1], 0, 1)) { + self::addUserSearchCommands(); + } elseif ($isUser && isset($parts[1])) { + self::addUserSubCommands($queryUser); + } elseif (!$isUser && $isRepo && isset($parts[1])) { + self::addRepoSubCommands(); + } else { + self::addDefaultCommands($isSearch, $isUser, $isRepo, $queryUser); + } + + Workflow::sortItems(); + + if (!$query) { + return; + } + + if (!$isSearch && !$isUser && !isset($parts[1])) { + Workflow::addItem(Item::create() + ->title('s '.$query) + ->subtitle('Search repo (in alfred workflow)') + ->comparator($query) + ->autocomplete('s '.$query) + ->icon('repo') + ->valid(false) + , false); + } + + if (!$isSearch && !$isRepo && !isset($parts[1])) { + $title = 's @'.ltrim($query, '@'); + Workflow::addItem(Item::create() + ->title($title) + ->subtitle('Search user (in alfred workflow)') + ->comparator($query) + ->autocomplete($title) + ->icon('user') + ->valid(false) + , false); + } + + if (!$isUser && $isRepo && isset($parts[1])) { + $repoQuery = substr($query, strlen($parts[0]) + 1); + Workflow::addItem(Item::create() + ->title("Search '$parts[0]' for '$repoQuery'") + ->icon('search') + ->arg('/'.$parts[0].'/search?q='.urlencode($repoQuery)) + ->autocomplete(false) + , false); + } + + $path = $isUser ? $queryUser : 'search?q='.urlencode($query); + $name = self::$enterprise ? 'GitHub Enterprise' : 'GitHub'; + Workflow::addItem(Item::create() + ->title("Search $name for '$query'") + ->icon('search') + ->arg('/'.$path) + ->autocomplete(false) + , false); + } + + private static function addEmptyQueryCommand() + { + Workflow::addItem(Item::create() + ->title(self::$enterprise ? 'ghe' : 'gh') + ->subtitle('Search or type a command'.(self::$enterprise ? ' (GitHub Enterprise)' : '')) + ->comparator('') + ->valid(false) + , false); + } + + private static function addUpdateCommands() + { + $cmds = array( + 'update' => 'There is an update for this Alfred workflow', + 'deactivate autoupdate' => 'Deactivate auto updating this Alfred Workflow', + ); + foreach ($cmds as $cmd => $desc) { + Workflow::addItem(Item::create() + ->title('> '.$cmd) + ->subtitle($desc) + ->icon($cmd) + ->arg('> '.str_replace(' ', '-', $cmd)) + ->randomUid() + , false); + } + + Workflow::addItem(Item::create() + ->title('> changelog') + ->subtitle('View the changelog') + ->icon('file') + ->arg('https://github.com/gharlan/alfred-github-workflow/blob/master/CHANGELOG.md') + ->randomUid() + , false); + } + + private static function addEnterpriseUrlCommand() + { + $url = null; + if (count(self::$parts) > 1 && self::$parts[0] == '>' && self::$parts[1] == 'url' && isset(self::$parts[2])) { + $url = self::$parts[2]; + } + Workflow::addItem(Item::create() + ->title('> url '.$url) + ->subtitle('Set the GitHub Enterprise URL') + ->arg('> enterprise-url '.$url) + ->valid((bool) $url, '') + ->randomUid() + , false); + } + + private static function addLoginCommands() + { + Workflow::removeAccessToken(); + $token = null; + if (count(self::$parts) > 1 && self::$parts[0] == '>' && self::$parts[1] == 'login' && isset(self::$parts[2])) { + $token = self::$parts[2]; + } + if (!$token && !self::$enterprise) { + Workflow::addItem(Item::create() + ->title('> login') + ->subtitle('Generate OAuth access token') + ->arg('> login') + ->randomUid() + , false); + } + Workflow::addItem(Item::create() + ->title('> login '.$token) + ->subtitle('Save access token') + ->arg('> login '.$token) + ->valid((bool) $token, '') + ->randomUid() + , false); + if (!$token && self::$enterprise) { + Workflow::addItem(Item::create() + ->title('> generate token') + ->subtitle('Generate a new access token') + ->arg('/settings/applications') + ->randomUid() + , false); + Workflow::addItem(Item::create() + ->title('> enterprise reset') + ->subtitle('Reset the GitHub Enterprise URL') + ->arg('> enterprise-reset') + ->randomUid() + , false); + } + } + + private static function addDefaultCommands($isSearch, $isUser, $isRepo, $queryUser) + { + $users = array(); + $repos = array(); + + $curl = new Curl(); + + if (!$isSearch && !$isUser) { + $getRepos = function ($url, $prio) use ($curl, &$repos) { + Workflow::requestApi($url, $curl, function ($urlRepos) use (&$repos, $prio) { + foreach ($urlRepos as $repo) { + $repo->score = 300 + $prio + ($repo->fork ? 0 : 10); + $repos[$repo->id] = $repo; + } + }); + }; + if ($isRepo) { + if ($queryUser != self::$user->login) { + $urls = array('/users/'.$queryUser.'/repos', '/orgs/'.$queryUser.'/repos'); + } else { + $urls = array('/user/repos'); + } + } else { + Workflow::requestApi('/user/orgs', $curl, function ($orgs) use ($getRepos) { + foreach ($orgs as $org) { + $getRepos('/orgs/'.$org->login.'/repos', 0); + } + }); + $urls = array('/user/starred', '/user/subscriptions', '/user/repos'); + } + foreach ($urls as $prio => $url) { + $getRepos($url, $prio + 1); + } + } + + if (!$isSearch && !$isRepo) { + Workflow::requestApi('/user/following', $curl, function ($urlUsers) use (&$users) { + $users = $urlUsers; + }); + } + + $curl->execute(); + + self::addRepos($repos); + + foreach ($users as $user) { + Workflow::addItem(Item::create() + ->prefix('@', false) + ->title($user->login.' ') + ->subtitle($user->type) + ->arg($user->html_url) + ->icon(lcfirst($user->type)) + ->prio(200) + ); + } + + Workflow::addItem(Item::create() + ->title('s '.substr(self::$query, 2, 4)) + ->subtitle('Search repo or @user (min 4 chars)') + ->prio(110) + ->valid(false) + ); + + Workflow::addItem(Item::create() + ->title('my ') + ->subtitle('Dashboard, settings, and more') + ->prio(100) + ->valid(false) + ); + } + + private static function addRepoSearchCommands() + { + $q = substr(self::$query, 2); + $repos = Workflow::requestApi('/search/repositories?q='.urlencode($q), null, null, true); + + self::addRepos($repos, 's '); + } + + private static function addUserSearchCommands() + { + $q = substr(self::$query, 3); + $users = Workflow::requestApi('/search/users?q='.urlencode($q), null, null, true); + + self::addUsers($users, 's @'); + } + + private static function addRepos($repos, $comparatorPrefix = '') + { + foreach ($repos as $repo) { + $icon = 'repo'; + if ($repo->fork) { + $icon = 'fork'; + } elseif ($repo->mirror_url) { + $icon = 'mirror'; + } + if ($repo->private) { + $icon = 'private-'.$icon; + } + Workflow::addItem(Item::create() + ->title($repo->full_name.' ') + ->comparator($comparatorPrefix.$repo->full_name) + ->autocomplete($repo->full_name.' ') + ->subtitle($repo->description) + ->icon($icon) + ->arg('/'.$repo->full_name) + ->prio($repo->score) + ); + } + } + + private static function addUsers($users, $comparatorPrefix = '') + { + foreach ($users as $user) { + Workflow::addItem(Item::create() + ->prefix('@', false) + ->title($user->login.' ') + ->comparator($comparatorPrefix.$user->login) + ->autocomplete($user->login.' ') + ->subtitle($user->type) + ->arg($user->html_url) + ->icon(lcfirst($user->type)) + ->prio(isset($user->score) ? $user->score : 200) + ); + } + } + + private static function addRepoSubCommands() + { + $parts = self::$parts; + if (isset($parts[1][0]) && in_array($parts[1][0], array('#', '@', '*', '/'))) { + switch ($parts[1][0]) { + case '*': + $commits = Workflow::requestApi('/repos/'.$parts[0].'/commits'); + foreach ($commits as $commit) { + Workflow::addItem(Item::create() + ->title($commit->commit->message) + ->comparator($parts[0].' *'.$commit->sha) + ->subtitle($commit->commit->author->date.' ('.$commit->sha.')') + ->icon('commits') + ->arg('/'.$parts[0].'/commit/'.$commit->sha) + ->prio(strtotime($commit->commit->author->date)) + ); + } + break; + case '@': + $branches = Workflow::requestApi('/repos/'.$parts[0].'/branches'); + foreach ($branches as $branch) { + Workflow::addItem(Item::create() + ->title('@'.$branch->name) + ->comparator($parts[0].' @'.$branch->name) + ->subtitle($branch->commit->sha) + ->icon('branch') + ->arg('/'.$parts[0].'/tree/'.$branch->name) + ); + } + break; + case '/': + $repo = Workflow::requestApi('/repos/'.$parts[0]); + $files = Workflow::requestApi('/repos/'.$parts[0].'/git/trees/'.$repo->default_branch.'?recursive=1'); + foreach ($files->tree as $file) { + if ('blob' === $file->type) { + Workflow::addItem(Item::create() + ->title(basename($file->path)) + ->subtitle('/'.$file->path) + ->comparator($parts[0].' /'.$file->path) + ->icon('file') + ->arg('/'.$parts[0].'/blob/'.$repo->default_branch.'/'.$file->path) + ); + } + } + break; + case '#': + $issues = Workflow::requestApi('/repos/'.$parts[0].'/issues?sort=updated&state=all'); + foreach ($issues as $issue) { + Workflow::addItem(Item::create() + ->title('#'.$issue->number) + ->comparator($parts[0].' #'.$issue->number) + ->subtitle($issue->title) + ->icon($issue->pull_request ? 'pull-request' : 'issue') + ->arg($issue->html_url) + ->prio(strtotime($issue->updated_at)) + ); + } + break; + } + } else { + $subs = array( + 'admin' => array('Manage this repo', 'settings'), + 'graphs' => array('All the graphs'), + 'issues ' => array('List, show and create issues', 'issue'), + 'milestones' => array('View milestones', 'milestone'), + 'network' => array('See the network', 'graphs'), + 'projects' => array('View projects', 'project'), + 'pulls' => array('Show open pull requests', 'pull-request'), + 'pulse' => array('See recent activity'), + 'wiki' => array('Pull up the wiki'), + 'commits' => array('View commit history'), + 'releases' => array('See latest releases'), + ); + foreach ($subs as $key => $sub) { + Workflow::addItem(Item::create() + ->title($parts[0].' '.$key) + ->subtitle($sub[0]) + ->icon(isset($sub[1]) ? $sub[1] : $key) + ->arg('/'.$parts[0].'/'.$key) + ); + } + Workflow::addItem(Item::create() + ->title($parts[0].' new issue') + ->subtitle('Create new issue') + ->icon('issue') + ->arg('/'.$parts[0].'/issues/new?source=c') + ); + Workflow::addItem(Item::create() + ->title($parts[0].' new pull') + ->subtitle('Create new pull request') + ->icon('pull-request') + ->arg('/'.$parts[0].'/pull/new?source=c') + ); + if (empty($parts[1])) { + $subs = array( + '#' => array('Show a specific issue by number', 'issue'), + '@' => array('Show a specific branch', 'branch'), + '*' => array('Show a specific commit', 'commits'), + '/' => array('Show a blob', 'file'), + ); + foreach ($subs as $key => $sub) { + Workflow::addItem(Item::create() + ->title($parts[0].' '.$key) + ->subtitle($sub[0]) + ->icon($sub[1]) + ->arg($key.' '.$parts[0]) + ->valid(false) + ); + } + } + Workflow::addItem(Item::create() + ->title($parts[0].' clone') + ->subtitle('Clone this repo') + ->icon('clone') + ->arg('/'.$parts[0].'.git') + ); + } + } + + private static function addUserSubCommands($queryUser) + { + $subs = array( + 'overview' => array($queryUser, "View $queryUser's overview", 'user'), + 'repositories' => array($queryUser.'?tab=repositories', "View $queryUser's repositories", 'repo'), + 'stars' => array($queryUser.'?tab=stars', "View $queryUser's stars"), + ); + $prio = count($subs) + 2; + foreach ($subs as $key => $sub) { + Workflow::addItem(Item::create() + ->title('@'.$queryUser.' '.$key) + ->subtitle($sub[1]) + ->icon(isset($sub[2]) ? $sub[2] : $key) + ->arg('/'.$sub[0]) + ->prio($prio--) + ); + } + Workflow::addItem(Item::create() + ->title('@'.$queryUser.' gists') + ->subtitle("View $queryUser's' gists") + ->icon('gists') + ->arg(Workflow::getGistUrl().'/'.$queryUser) + ->prio(2) + ); + + Workflow::addItem(Item::create() + ->title($queryUser.'/') + ->comparator('@'.$queryUser.' ') + ->autocomplete($queryUser.'/') + ->subtitle("View $queryUser's' repositories (in alfred workflow)") + ->icon('repo') + ->prio(1) + ->valid(false) + ); + } + + private static function addMyCommands() + { + $parts = self::$parts; + if (isset($parts[2]) && in_array($parts[1], array('pulls', 'issues'))) { + $icon = $parts[1] === 'pulls' ? 'pull-request' : 'issue'; + $items = $icon.'s'; + $subs = array( + 'created' => array($parts[1], 'View your '.$items), + 'assigned' => array($parts[1].'/assigned', 'View your assigned '.$items), + 'mentioned' => array($parts[1].'/mentioned', 'View '.$items.' that mentioned you'), + ); + if ('pulls' === $parts[1]) { + $subs['review requested'] = array($parts[1].'/review-requested', 'View '.$items.' that require review'); + } + foreach ($subs as $key => $sub) { + Workflow::addItem(Item::create() + ->title('my '.$parts[1].' '.$key) + ->subtitle($sub[1]) + ->icon($icon) + ->arg('/'.$sub[0]) + ->prio(1) + ); + } + return; + } + + $myPages = array( + 'dashboard' => array('', 'View your dashboard'), + 'pulls ' => array('pulls', 'View your pull requests', 'pull-request'), + 'issues ' => array('issues', 'View your issues', 'issue'), + 'stars' => array('stars', 'View your starred repositories'), + 'profile' => array(self::$user->login, 'View your public user profile', 'user'), + 'settings' => array('settings', 'View or edit your account settings'), + 'notifications' => array('notifications', 'View all your notifications'), + ); + foreach ($myPages as $key => $my) { + Workflow::addItem(Item::create() + ->title('my '.$key) + ->subtitle($my[1]) + ->icon(isset($my[2]) ? $my[2] : rtrim($key)) + ->arg('/'.$my[0]) + ->prio(1) + ); + } + Workflow::addItem(Item::create() + ->title('my gists') + ->subtitle('View your gists') + ->icon('gists') + ->arg(Workflow::getGistUrl().'/'.self::$user->login) + ->prio(1) + ); + + Workflow::addItem(Item::create() + ->title('my repos') + ->subtitle('View your repos') + ->icon('repo') + ->arg('/'.self::$user->login.'?tab=repositories') + ->prio(1) + ); + } + + private static function addSystemCommands() + { + $cmds = array( + 'delete cache' => 'Delete GitHub Cache', + 'logout' => 'Log out this workflow', + 'delete database' => 'Delete database (contains login, config and cache)', + 'update' => 'Update this Alfred workflow', + ); + if (Workflow::getConfig('autoupdate', true)) { + $cmds['deactivate autoupdate'] = 'Deactivate auto updating this Alfred Workflow'; + } else { + $cmds['activate autoupdate'] = 'Activate auto updating this Alfred Workflow'; + } + if (self::$enterprise) { + $cmds['enterprise reset'] = 'Reset the GitHub Enterprise URL'; + } + foreach ($cmds as $cmd => $desc) { + Workflow::addItem(Item::create() + ->title('> '.$cmd) + ->subtitle($desc) + ->icon($cmd) + ->arg('> '.str_replace(' ', '-', $cmd)) + ); + } + + $cmds = array( + 'help' => 'readme', + 'changelog' => 'changelog', + ); + foreach ($cmds as $cmd => $file) { + Workflow::addItem(Item::create() + ->title('> '.$cmd) + ->subtitle('View the '.$file) + ->icon('file') + ->arg('https://github.com/gharlan/alfred-github-workflow/blob/master/'.strtoupper($file).'.md') + ); + } + } +} + +Search::run($argv[1], $argv[2], getenv('hotkey')); +echo Workflow::getItemsAsXml(); diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/server.php b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/server.php new file mode 100644 index 0000000..b269e6c --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/server.php @@ -0,0 +1,66 @@ + + + + + + alfred-github-workflow + + + +
+ +

+ alfred-github-workflow is ready.
+ Have fun. +

+
+ + diff --git a/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/workflow.php b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/workflow.php new file mode 100644 index 0000000..5b1ea9d --- /dev/null +++ b/alfred/Alfred.alfredpreferences/workflows/user.workflow.32EE707F-EC7F-4EBC-847E-01C2E786B242/workflow.php @@ -0,0 +1,440 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + if (!$exists) { + self::createTables(); + } + + if (self::$enterprise) { + self::$baseUrl = self::getConfig('enterprise_url'); + self::$apiUrl = self::$baseUrl ? self::$baseUrl.'/api/v3' : null; + self::$gistUrl = self::$baseUrl ? self::$baseUrl.'/gist' : null; + } + + self::$debug = getenv('alfred_debug') && defined('STDERR'); + + register_shutdown_function(array(__CLASS__, 'shutdown')); + } + + public static function shutdown() + { + if (self::$refreshUrls) { + $urls = implode(',', array_keys(self::$refreshUrls)); + exec('php action.php "> refresh-cache '.$urls.'" > /dev/null 2>&1 &'); + self::log('refreshing cache in background for %s', $urls); + } + } + + public static function setConfig($key, $value) + { + self::getStatement('REPLACE INTO config VALUES(?, ?)')->execute(array($key, $value)); + } + + public static function getConfig($key, $default = null) + { + $stmt = self::getStatement('SELECT value FROM config WHERE key = ?'); + $stmt->execute(array($key)); + $value = $stmt->fetchColumn(); + return false !== $value ? $value : $default; + } + + public static function removeConfig($key) + { + self::getStatement('DELETE FROM config WHERE key = ?')->execute(array($key)); + } + + public static function getBaseUrl() + { + return self::$baseUrl; + } + + public static function getApiUrl($path = null) + { + $url = self::$apiUrl; + + if ($path) { + $paramStart = false === strpos($path, '?') ? '?' : '&'; + $url .= $path.$paramStart.'per_page=100'; + } + + return $url; + } + + public static function getGistUrl() + { + return self::$gistUrl; + } + + public static function setAccessToken($token) + { + self::setConfig(self::$enterprise ? 'enterprise_access_token' : 'access_token', $token); + } + + public static function getAccessToken() + { + return self::getConfig(self::$enterprise ? 'enterprise_access_token' : 'access_token'); + } + + public static function removeAccessToken() + { + self::removeConfig(self::$enterprise ? 'enterprise_access_token' : 'access_token'); + } + + public static function request($url, Curl $curl = null, $callback = null, $withAuthorization = true) + { + self::log('loading content for %s', $url); + + $return = false; + $returnValue = null; + if (!$curl) { + $curl = new Curl(); + $return = true; + $callback = function ($content) use (&$returnValue) { + $returnValue = $content; + }; + } + + $token = $withAuthorization ? self::getAccessToken() : null; + $curl->add(new CurlRequest($url, null, $token, function (CurlResponse $response) use ($callback) { + if (is_callable($callback) && isset($response->content)) { + $callback($response->content); + } + })); + + if ($return) { + $curl->execute(); + } + return $returnValue; + } + + /** + * @param string $url + * @param Curl $curl + * @param callable $callback + * @param bool $firstPageOnly + * @param int $maxAge + * @param bool $refreshInBackground + * + * @return mixed + */ + public static function requestCache($url, Curl $curl = null, $callback = null, $firstPageOnly = false, $maxAge = self::DEFAULT_CACHE_MAX_AGE, $refreshInBackground = true) + { + $return = false; + $returnValue = null; + if (!$curl) { + $curl = new Curl(); + $return = true; + $callback = function ($content) use (&$returnValue) { + $returnValue = $content; + }; + } + + $stmt = self::getStatement('SELECT * FROM request_cache WHERE url = ?'); + $stmt->execute(array($url)); + $stmt->bindColumn('timestamp', $timestamp); + $stmt->bindColumn('etag', $etag); + $stmt->bindColumn('content', $content); + $stmt->bindColumn('refresh', $refresh); + $stmt->fetch(PDO::FETCH_BOUND); + + $shouldRefresh = $timestamp < time() - 60 * $maxAge; + $refreshInBackground = $refreshInBackground && !is_null($content); + + if ($shouldRefresh && $refreshInBackground && $refresh < time() - 3 * 60) { + self::getStatement('UPDATE request_cache SET refresh = ? WHERE url = ?')->execute(array(time(), $url)); + self::$refreshUrls[$url] = true; + } + + if (!$shouldRefresh || $refreshInBackground) { + self::log('using cached content for %s', $url); + $content = json_decode($content); + + if (!$firstPageOnly) { + $stmt = self::getStatement('SELECT url, content FROM request_cache WHERE parent = ? ORDER BY `timestamp` DESC'); + while ($stmt->execute(array($url)) && $data = $stmt->fetchObject()) { + $content = array_merge($content, json_decode($data->content)); + $url = $data->url; + } + } + + if (is_callable($callback)) { + $callback($content); + } + + return $returnValue; + } + + $responses = array(); + + $handleResponse = function (CurlResponse $response, $content, $parent = null) use (&$handleResponse, $curl, &$responses, $stmt, $callback, $firstPageOnly) { + $url = $response->request->url; + if ($response && in_array($response->status, array(200, 304))) { + $checkNext = false; + if (304 == $response->status) { + $response->content = $content; + $checkNext = true; + } elseif (false === stripos($response->contentType, 'json')) { + $response->content = json_encode($response->content); + } + $response->content = json_decode($response->content); + if (isset($response->content->items)) { + $response->content = $response->content->items; + } + $responses[] = $response->content; + Workflow::getStatement('REPLACE INTO request_cache VALUES(?, ?, ?, ?, 0, ?)') + ->execute(array($url, time(), $response->etag, json_encode($response->content), $parent)); + + if ($firstPageOnly) { + // do nothing + } elseif ($checkNext || $response->link && preg_match('/<([^<>]+)>; rel="next"/U', $response->link, $match)) { + $stmt = Workflow::getStatement('SELECT * FROM request_cache WHERE parent = ?'); + $stmt->execute(array($url)); + if ($checkNext) { + $stmt->bindColumn('url', $nextUrl); + } else { + $nextUrl = $match[1]; + } + $stmt->bindColumn('etag', $etag); + $stmt->bindColumn('content', $content); + $stmt->fetch(PDO::FETCH_BOUND); + if ($nextUrl) { + $curl->add(new CurlRequest($nextUrl, $etag, Workflow::getAccessToken(), function (CurlResponse $response) use ($handleResponse, $url, $content) { + $handleResponse($response, $content, $url); + })); + return; + } + } else { + Workflow::getStatement('DELETE FROM request_cache WHERE parent = ?')->execute(array($url)); + } + } else { + Workflow::getStatement('DELETE FROM request_cache WHERE url = ?')->execute(array($url)); + $url = null; + } + + if (is_callable($callback)) { + if (empty($responses)) { + $callback(array()); + return; + } + if (1 === count($responses)) { + $callback($responses[0]); + return; + } + $callback(array_reduce($responses, function ($content, $response) { + return array_merge($content, $response); + }, array())); + } + }; + + self::log('loading content for %s', $url); + $curl->add(new CurlRequest($url, $etag, self::getAccessToken(), function (CurlResponse $response) use (&$responses, $handleResponse, $callback, $content) { + $handleResponse($response, $content); + })); + + if ($return) { + $curl->execute(); + } + return $returnValue; + } + + public static function requestApi($url, Curl $curl = null, $callback = null, $firstPageOnly = false, $maxAge = self::DEFAULT_CACHE_MAX_AGE) + { + $url = self::getApiUrl($url); + return self::requestCache($url, $curl, $callback, $firstPageOnly, $maxAge); + } + + public static function cleanCache() + { + self::$db->exec('DELETE FROM request_cache WHERE timestamp < '.(time() - 100 * 24 * 60 * 60)); + } + + public static function deleteCache() + { + self::$db->exec('DELETE FROM request_cache'); + } + + public static function cacheWarmup() + { + $paths = array('/user', '/user/orgs', '/user/starred', '/user/subscriptions', '/user/repos', '/user/following'); + foreach ($paths as $path) { + self::$refreshUrls[self::getApiUrl($path)] = true; + } + } + + public static function startServer() + { + if (version_compare(PHP_VERSION, '5.4', '>=')) { + self::stopServer(); + shell_exec(sprintf( + 'alfred_workflow_data=%s php -d variables_order=EGPCS -S localhost:2233 server.php > /dev/null 2>&1 & echo $! >> %s', + escapeshellarg(getenv('alfred_workflow_data')), + escapeshellarg(self::$filePids) + )); + } + } + + public static function stopServer() + { + if (file_exists(self::$filePids)) { + $pids = file(self::$filePids); + foreach ($pids as $pid) { + shell_exec('kill -9 '.$pid); + } + unlink(self::$filePids); + } + } + + public static function checkUpdate() + { + if (self::getConfig('version') !== self::VERSION) { + self::setConfig('version', self::VERSION); + } + if (!self::getConfig('autoupdate', 1)) { + return false; + } + $release = self::requestCache('https://api.github.com/repos/gharlan/alfred-github-workflow/releases/latest', null, null, true, 1440); + if (!$release) { + return false; + } + $version = ltrim($release->tag_name, 'v'); + return version_compare($version, self::VERSION) > 0; + } + + private static function createTables() + { + self::$db->exec(' + CREATE TABLE config ( + key TEXT PRIMARY KEY NOT NULL, + value TEXT + ) WITHOUT ROWID + '); + + self::$db->exec(' + CREATE TABLE request_cache ( + url TEXT PRIMARY KEY NOT NULL, + timestamp INTEGER NOT NULL, + etag TEXT, + content TEXT, + refresh INTEGER, + parent TEXT + ) WITHOUT ROWID + '); + self::$db->exec('CREATE INDEX parent_url ON request_cache(parent) WHERE parent IS NOT NULL'); + } + + public static function deleteDatabase() + { + self::closeCursors(); + self::$db = null; + unlink(self::$fileDb); + } + + public static function addItem(Item $item, $check = true) + { + if (!$check || $item->match(self::$query)) { + self::$items[] = $item; + } + } + + public static function sortItems() + { + usort(self::$items, function (Item $a, Item $b) { + return $a->compare($b); + }); + } + + public static function getItemsAsXml() + { + return Item::toXml(self::$items, self::$enterprise, self::$hotkey, self::getBaseUrl()); + } + + public static function log($msg) + { + if (self::$debug) { + fwrite(STDERR, "\n".call_user_func_array('sprintf', func_get_args())); + } + } + + /** + * @param string $query + * + * @return PDOStatement + */ + public static function getStatement($query) + { + if (!isset(self::$statements[$query])) { + self::$statements[$query] = self::$db->prepare($query); + } + return self::$statements[$query]; + } + + protected static function closeCursors() + { + foreach (self::$statements as $statement) { + $statement->closeCursor(); + } + self::$statements = array(); + } +}