Skip to content

Commit 7f17697

Browse files
committed
✨ Feature: add workflow for mac
for uploading images from context menu in macOS
1 parent e5fbe75 commit 7f17697

File tree

6 files changed

+374
-0
lines changed

6 files changed

+374
-0
lines changed

src/main/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
import Uploader from './utils/uploader.js'
44
import { app, BrowserWindow, Tray, Menu, Notification, clipboard, ipcMain, globalShortcut, dialog } from 'electron'
55
import db from '../datastore'
6+
import beforeOpen from './utils/beforeOpen'
67
import pasteTemplate from './utils/pasteTemplate'
78
import updateChecker from './utils/updateChecker'
89
import { getPicBeds } from './utils/getPicBeds'
910
import pkg from '../../package.json'
1011
import picgoCoreIPC from './utils/picgoCoreIPC'
1112
import fixPath from 'fix-path'
1213
import { getUploadFiles } from './utils/handleArgv'
14+
if (process.platform === 'darwin') {
15+
beforeOpen()
16+
}
1317
/**
1418
* Set `__static` path to static files in production
1519
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html

src/main/utils/beforeOpen.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import fs from 'fs-extra'
2+
import path from 'path'
3+
import os from 'os'
4+
if (process.env.NODE_ENV !== 'development') {
5+
global.__static = path.join(__dirname, '/static').replace(/\\/g, '\\\\')
6+
}
7+
if (process.env.DEBUG_ENV === 'debug') {
8+
global.__static = path.join(__dirname, '../../../static').replace(/\\/g, '\\\\')
9+
}
10+
function beforeOpen () {
11+
const dest = `${os.homedir}/Library/Services/Upload pictures with PicGo.workflow`
12+
if (fs.existsSync(dest)) {
13+
return true
14+
} else {
15+
try {
16+
fs.copySync(path.join(__static, 'Upload pictures with PicGo.workflow'), dest)
17+
} catch (e) {
18+
console.log(e)
19+
}
20+
}
21+
}
22+
23+
export default beforeOpen
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>NSServices</key>
6+
<array>
7+
<dict>
8+
<key>NSBackgroundColorName</key>
9+
<string>background</string>
10+
<key>NSBackgroundSystemColorName</key>
11+
<string>systemBlueColor</string>
12+
<key>NSIconName</key>
13+
<string>NSTouchBarShare</string>
14+
<key>NSMenuItem</key>
15+
<dict>
16+
<key>default</key>
17+
<string>Upload pictures with PicGo</string>
18+
</dict>
19+
<key>NSMessage</key>
20+
<string>runWorkflowAsService</string>
21+
<key>NSRequiredContext</key>
22+
<dict>
23+
<key>NSApplicationIdentifier</key>
24+
<string>com.apple.finder</string>
25+
</dict>
26+
<key>NSSendFileTypes</key>
27+
<array>
28+
<string>public.image</string>
29+
</array>
30+
</dict>
31+
</array>
32+
</dict>
33+
</plist>
Binary file not shown.
Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>AMApplicationBuild</key>
6+
<string>444.42</string>
7+
<key>AMApplicationVersion</key>
8+
<string>2.9</string>
9+
<key>AMDocumentVersion</key>
10+
<string>2</string>
11+
<key>actions</key>
12+
<array>
13+
<dict>
14+
<key>action</key>
15+
<dict>
16+
<key>AMAccepts</key>
17+
<dict>
18+
<key>Container</key>
19+
<string>List</string>
20+
<key>Optional</key>
21+
<true/>
22+
<key>Types</key>
23+
<array>
24+
<string>com.apple.cocoa.string</string>
25+
</array>
26+
</dict>
27+
<key>AMActionVersion</key>
28+
<string>2.0.3</string>
29+
<key>AMApplication</key>
30+
<array>
31+
<string>自动操作</string>
32+
</array>
33+
<key>AMParameterProperties</key>
34+
<dict>
35+
<key>COMMAND_STRING</key>
36+
<dict/>
37+
<key>CheckedForUserDefaultShell</key>
38+
<dict/>
39+
<key>inputMethod</key>
40+
<dict/>
41+
<key>shell</key>
42+
<dict/>
43+
<key>source</key>
44+
<dict/>
45+
</dict>
46+
<key>AMProvides</key>
47+
<dict>
48+
<key>Container</key>
49+
<string>List</string>
50+
<key>Types</key>
51+
<array>
52+
<string>com.apple.cocoa.string</string>
53+
</array>
54+
</dict>
55+
<key>ActionBundlePath</key>
56+
<string>/System/Library/Automator/Run Shell Script.action</string>
57+
<key>ActionName</key>
58+
<string>运行 Shell 脚本</string>
59+
<key>ActionParameters</key>
60+
<dict>
61+
<key>COMMAND_STRING</key>
62+
<string>/Applications/PicGo.app/Contents/MacOS/PicGo upload "$@" &gt; /dev/null 2&gt;&amp;1 &amp;</string>
63+
<key>CheckedForUserDefaultShell</key>
64+
<true/>
65+
<key>inputMethod</key>
66+
<integer>1</integer>
67+
<key>shell</key>
68+
<string>/bin/bash</string>
69+
<key>source</key>
70+
<string></string>
71+
</dict>
72+
<key>BundleIdentifier</key>
73+
<string>com.apple.RunShellScript</string>
74+
<key>CFBundleVersion</key>
75+
<string>2.0.3</string>
76+
<key>CanShowSelectedItemsWhenRun</key>
77+
<false/>
78+
<key>CanShowWhenRun</key>
79+
<true/>
80+
<key>Category</key>
81+
<array>
82+
<string>AMCategoryUtilities</string>
83+
</array>
84+
<key>Class Name</key>
85+
<string>RunShellScriptAction</string>
86+
<key>InputUUID</key>
87+
<string>79609224-28DD-4ADE-AA8F-5A6C68C18C18</string>
88+
<key>Keywords</key>
89+
<array>
90+
<string>Shell</string>
91+
<string>脚本</string>
92+
<string>命令</string>
93+
<string>运行</string>
94+
<string>Unix</string>
95+
</array>
96+
<key>OutputUUID</key>
97+
<string>35CD6B4C-A616-4F89-8D76-DCD3249C5B4E</string>
98+
<key>UUID</key>
99+
<string>4350A83B-E7E6-4D2B-9768-B1D676CF58F3</string>
100+
<key>UnlocalizedApplications</key>
101+
<array>
102+
<string>Automator</string>
103+
</array>
104+
<key>arguments</key>
105+
<dict>
106+
<key>0</key>
107+
<dict>
108+
<key>default value</key>
109+
<integer>0</integer>
110+
<key>name</key>
111+
<string>inputMethod</string>
112+
<key>required</key>
113+
<string>0</string>
114+
<key>type</key>
115+
<string>0</string>
116+
<key>uuid</key>
117+
<string>0</string>
118+
</dict>
119+
<key>1</key>
120+
<dict>
121+
<key>default value</key>
122+
<string></string>
123+
<key>name</key>
124+
<string>source</string>
125+
<key>required</key>
126+
<string>0</string>
127+
<key>type</key>
128+
<string>0</string>
129+
<key>uuid</key>
130+
<string>1</string>
131+
</dict>
132+
<key>2</key>
133+
<dict>
134+
<key>default value</key>
135+
<false/>
136+
<key>name</key>
137+
<string>CheckedForUserDefaultShell</string>
138+
<key>required</key>
139+
<string>0</string>
140+
<key>type</key>
141+
<string>0</string>
142+
<key>uuid</key>
143+
<string>2</string>
144+
</dict>
145+
<key>3</key>
146+
<dict>
147+
<key>default value</key>
148+
<string></string>
149+
<key>name</key>
150+
<string>COMMAND_STRING</string>
151+
<key>required</key>
152+
<string>0</string>
153+
<key>type</key>
154+
<string>0</string>
155+
<key>uuid</key>
156+
<string>3</string>
157+
</dict>
158+
<key>4</key>
159+
<dict>
160+
<key>default value</key>
161+
<string>/bin/sh</string>
162+
<key>name</key>
163+
<string>shell</string>
164+
<key>required</key>
165+
<string>0</string>
166+
<key>type</key>
167+
<string>0</string>
168+
<key>uuid</key>
169+
<string>4</string>
170+
</dict>
171+
</dict>
172+
<key>isViewVisible</key>
173+
<true/>
174+
<key>location</key>
175+
<string>449.000000:305.000000</string>
176+
<key>nibPath</key>
177+
<string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/Base.lproj/main.nib</string>
178+
</dict>
179+
<key>isViewVisible</key>
180+
<true/>
181+
</dict>
182+
</array>
183+
<key>connectors</key>
184+
<dict/>
185+
<key>workflowMetaData</key>
186+
<dict>
187+
<key>applicationBundleID</key>
188+
<string>com.apple.finder</string>
189+
<key>applicationBundleIDsByPath</key>
190+
<dict>
191+
<key>/System/Library/CoreServices/Finder.app</key>
192+
<string>com.apple.finder</string>
193+
</dict>
194+
<key>applicationPath</key>
195+
<string>/System/Library/CoreServices/Finder.app</string>
196+
<key>applicationPaths</key>
197+
<array>
198+
<string>/System/Library/CoreServices/Finder.app</string>
199+
</array>
200+
<key>backgroundColor</key>
201+
<data>
202+
YnBsaXN0MDDUAQIDBAUGNjdYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVy
203+
VCR0b3ASAAGGoKoHCBMUFR4kKC8zVSRudWxs1QkKCwwNDg8QERJWJGNsYXNz
204+
W05TQ29sb3JOYW1lXE5TQ29sb3JTcGFjZV1OU0NhdGFsb2dOYW1lV05TQ29s
205+
b3KACYADEAaAAoAEVlN5c3RlbV8QD3N5c3RlbUJsdWVDb2xvctUWFwsYCRka
206+
GxwOXE5TQ29tcG9uZW50c1VOU1JHQl8QEk5TQ3VzdG9tQ29sb3JTcGFjZUcw
207+
IDAgMSAxTxARMCAwIDAuOTk4MTg4OTcyNQAQAYAFgAnTHyAJISIjVE5TSURV
208+
TlNJQ0MQB4AGgAjSJQkmJ1dOUy5kYXRhTxEMSAAADEhMaW5vAhAAAG1udHJS
209+
R0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAA
210+
AAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
211+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGE
212+
AAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoA
213+
AAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1
214+
ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAA
215+
JHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8
216+
AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy
217+
ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAA
218+
AAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAA
219+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAA
220+
AAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BY
221+
WVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAA
222+
AAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0
223+
dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
224+
AAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVm
225+
YXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2
226+
MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAA
227+
AAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2lu
228+
ZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJl
229+
bmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA
230+
AAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQT
231+
CwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAA
232+
AAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAA
233+
AAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt
234+
AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA
235+
4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFn
236+
AW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQC
237+
HQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1
238+
AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kE
239+
BgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6
240+
BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0G
241+
rwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghG
242+
CFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEK
243+
Jwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwq
244+
DEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQO
245+
fw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1
246+
ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QT
247+
xRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxay
248+
FtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0a
249+
BBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1w
250+
HZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh
251+
SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4
252+
JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWsp
253+
nSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4W
254+
Lkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQz
255+
DTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgU
256+
OFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9
257+
oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6
258+
Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1J
259+
Y0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+T
260+
T91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9W
261+
XFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0n
262+
XXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBk
263+
lGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/
264+
bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0
265+
FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh
266+
fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE
267+
44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y
268+
jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X
269+
Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBp
270+
oNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyq
271+
j6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSc
272+
tRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/
273+
er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4
274+
yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V
275+
0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE
276+
4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHt
277+
nO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH
278+
+lf65/t3/Af8mP0p/br+S/7c/23//4AH0ikqKyxaJGNsYXNzbmFtZVgkY2xh
279+
c3Nlc11OU011dGFibGVEYXRhoystLlZOU0RhdGFYTlNPYmplY3TSKSowMVxO
280+
U0NvbG9yU3BhY2WiMi5cTlNDb2xvclNwYWNl0ikqNDVXTlNDb2xvcqI0Ll8Q
281+
D05TS2V5ZWRBcmNoaXZlctE4OVRyb290gAEACAARABoAIwAtADIANwBCAEgA
282+
UwBaAGYAcwCBAIkAiwCNAI8AkQCTAJoArAC3AMQAygDfAOcA+wD9AP8BAQEI
283+
AQ0BEwEVARcBGQEeASYNcg10DXkNhA2NDZsNnw2mDa8NtA3BDcQN0Q3WDd4N
284+
4Q3zDfYN+wAAAAAAAAIBAAAAAAAAADoAAAAAAAAAAAAAAAAAAA39
285+
</data>
286+
<key>backgroundColorName</key>
287+
<string>systemBlueColor</string>
288+
<key>inputTypeIdentifier</key>
289+
<string>com.apple.Automator.fileSystemObject.image</string>
290+
<key>outputTypeIdentifier</key>
291+
<string>com.apple.Automator.nothing</string>
292+
<key>presentationMode</key>
293+
<integer>15</integer>
294+
<key>processesInput</key>
295+
<integer>0</integer>
296+
<key>serviceApplicationBundleID</key>
297+
<string>com.apple.finder</string>
298+
<key>serviceApplicationPath</key>
299+
<string>/System/Library/CoreServices/Finder.app</string>
300+
<key>serviceInputTypeIdentifier</key>
301+
<string>com.apple.Automator.fileSystemObject.image</string>
302+
<key>serviceOutputTypeIdentifier</key>
303+
<string>com.apple.Automator.nothing</string>
304+
<key>serviceProcessesInput</key>
305+
<integer>0</integer>
306+
<key>systemImageName</key>
307+
<string>NSTouchBarShare</string>
308+
<key>useAutomaticInputType</key>
309+
<integer>0</integer>
310+
<key>workflowTypeIdentifier</key>
311+
<string>com.apple.Automator.servicesMenu</string>
312+
</dict>
313+
</dict>
314+
</plist>

0 commit comments

Comments
 (0)