Skip to content

Commit 3ec2edd

Browse files
author
Zhicheng Chen
committed
feat: add mulitu upload
1 parent 567cb82 commit 3ec2edd

File tree

5 files changed

+537
-12
lines changed

5 files changed

+537
-12
lines changed

package-lock.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,8 @@
2525
"devDependencies": {
2626
"@skpm/builder": "^0.5.11"
2727
},
28-
"author": "Zhicheng Chen <[email protected]>"
28+
"author": "Zhicheng Chen <[email protected]>",
29+
"dependencies": {
30+
"sketch-module-web-view": "^3.0.7"
31+
}
2932
}

src/manifest.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@
1515
"script": "./snatch.js",
1616
"handler" : "uploadSelect"
1717
},
18+
{
19+
"name": "One Key Upload",
20+
"identifier": "snaptchAll",
21+
"shortcut": "ctrl command o",
22+
"script": "./snatch.js",
23+
"handler" : "uploadAll"
24+
},
1825
{
1926
"script" : "./snatch.js",
2027
"handler" : "setting",
@@ -24,10 +31,6 @@
2431
],
2532
"menu": {
2633
"title": "Snatch",
27-
"items": [
28-
"snaptchSelect",
29-
"-",
30-
"serverUrl"
31-
]
34+
"items": ["snaptchSelect", "snaptchAll", "-", "serverUrl"]
3235
}
3336
}

src/snatch.js

Lines changed: 107 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,115 @@
11
const Settings = require('sketch/settings');
22
const UI = require('sketch/ui');
3+
const sketch = require('sketch');
4+
const BrowserWindow = require('sketch-module-web-view');
35

46
export function uploadSelect(context) {
57
onRun(context, false);
68
}
79
export function setting(e) {
810
onRun(context, true);
911
}
12+
export function uploadAll(context) {
13+
const url = Settings.settingForKey('url');
14+
const doc = context.document;
15+
16+
if (!url) {
17+
UI.getInputFromUser(
18+
'Input the server address.',
19+
{
20+
initialValue: url || 'https://'
21+
},
22+
(err, value) => {
23+
if (err) {
24+
return;
25+
}
26+
return Settings.setSettingForKey('url', value);
27+
}
28+
);
29+
return;
30+
}
31+
32+
const document = require('sketch/dom').getSelectedDocument();
33+
const options = {
34+
identifier: 'unique.id1',
35+
width: 540,
36+
height: 300
37+
};
38+
39+
const artBoards = document.selectedPage.layers.filter(
40+
layer => layer.name === '切图' || layer.name === 'slices'
41+
)[0];
1042

11-
function exportLayerAsBitmap(document, layer, scale) {
43+
if (!artBoards) {
44+
return doc.showMessage(
45+
'Select page doesn\'t include artBoard with name "切图" or slices.'
46+
);
47+
}
48+
49+
const browserWindow = new BrowserWindow(options);
50+
51+
const layers = artBoards.layers.map(layer => layer.name);
52+
53+
browserWindow.webContents
54+
.executeJavaScript('sendUrl("' + url + '")')
55+
.then(res => {
56+
console.log(res);
57+
});
58+
59+
browserWindow.webContents
60+
.executeJavaScript('sendLayer(' + JSON.stringify(layers) + ')')
61+
.then(res => {
62+
console.log(res);
63+
});
64+
65+
browserWindow.webContents.on('nativeLog', function(s, id) {
66+
let layer = document.selectedPage.layers
67+
.filter(layer => layer.name === '切图')[0]
68+
.layers.filter(layer => layer.name === s)[0];
69+
if (!layer) {
70+
return sketch.UI.message(s + ' not found!');
71+
}
72+
const layerName = layer.name;
73+
const bitmap = sketch
74+
.export(
75+
[
76+
document.selectedPage.layers
77+
.filter(layer => layer.name === '切图')[0]
78+
.layers.filter(layer => layer.name === s)[0]
79+
],
80+
{ formats: 'png', output: false }
81+
)[0]
82+
.toString('base64');
83+
84+
fetch(url + '/sketch/' + id, {
85+
method: 'POST',
86+
headers: {
87+
Accept: 'application/json',
88+
'Content-Type': 'application/json'
89+
},
90+
body: { image: bitmap, name: layerName }
91+
})
92+
.then(response => response.text())
93+
.then(text => {
94+
browserWindow.webContents
95+
.executeJavaScript('uploadSuccess()')
96+
.then(res => {
97+
console.log(res);
98+
});
99+
})
100+
.catch(e => {
101+
browserWindow.webContents
102+
.executeJavaScript('uploadFail()')
103+
.then(res => {
104+
console.log(res);
105+
});
106+
});
107+
});
108+
109+
browserWindow.loadURL(require('./ui.html'));
110+
}
111+
112+
function exportSelectAsBitmap(document, layer, scale) {
12113
var slice,
13114
result = {},
14115
rect = layer.absoluteRect(),
@@ -48,23 +149,23 @@ const onRun = function(context, setting) {
48149
if (err) {
49150
return;
50151
}
51-
return Settings.setSettingForKey('url', value);
152+
return Settings.setSettingForKey('url', value);
52153
}
53154
);
54-
return ;
155+
return;
55156
}
56157

57158
const doc = context.document;
58159
const selection = context.selection;
160+
59161
if (selection.count() == 0) {
60162
doc.showMessage('Please select the layer to upload.');
61163
} else {
62164
for (let i = 0; i < selection.count(); i++) {
63165
const layer = selection[i];
64166
const layerName = layer.name();
65-
const { bitmap } = exportLayerAsBitmap(doc, layer, 1);
66-
67-
fetch(url, {
167+
const { bitmap } = exportSelectAsBitmap(doc, layer, 1);
168+
fetch(url + '/sketch/arroast', {
68169
method: 'POST',
69170
headers: {
70171
Accept: 'application/json',

0 commit comments

Comments
 (0)