Skip to content

Commit 78b1534

Browse files
authored
Merge pull request #454 from Coding/plugin-api-update
add onDidFileOpen API
2 parents 304eabd + 453146c commit 78b1534

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

app/commands/commandBindings/file.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as Modal from '../../components/Modal/actions'
55
import uniqueId from 'lodash/uniqueId'
66
import TabStore from 'components/Tab/store'
77
import TabState from 'components/Tab/state'
8-
import FileState from 'commons/File/state'
8+
import FileState, { extState } from 'commons/File/state'
99
import FileStore from 'commons/File/store'
1010
import { notify, NOTIFY_TYPE } from '../../components/Notification/actions'
1111
import i18n from 'utils/createI18n'
@@ -158,6 +158,9 @@ export function openFile (obj, callback) {
158158
return api.readFile(path, encoding || currentEncoding).then((data) => {
159159
FileStore.loadNodeData(data)
160160
FileState.initData.set(path, {})
161+
for (const listener of extState.didOpenListeners) {
162+
listener(FileState.entities.get(path))
163+
}
161164
return data
162165
}).then(() => {
163166
const activeTabGroup = TabStore.getState().activeTabGroup

app/commons/File/state.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ const state = observable({
2020
get root () {
2121
return this.entities.get(ROOT_PATH)
2222
},
23+
})
24+
25+
// for plugin
26+
const extState = observable({
2327
createdListeners: [],
28+
didOpenListeners: [],
2429
})
2530

2631
// state.entities.intercept((change) => {
@@ -45,8 +50,8 @@ class FileNode {
4550
}
4651
state.entities.set(this.path, this)
4752
// 文件创建钩子
48-
if (state.createdListeners && state.createdListeners.length > 0) {
49-
for (const createdListener of state.createdListeners) {
53+
if (extState.createdListeners && extState.createdListeners.length > 0) {
54+
for (const createdListener of extState.createdListeners) {
5055
createdListener(this)
5156
}
5257
}
@@ -171,4 +176,4 @@ function hydrate (json) {
171176
}
172177

173178
export default state
174-
export { state, FileNode, hydrate }
179+
export { state, FileNode, hydrate, extState }

app/extensions/File.ext.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import dispatchCommand from 'commands/dispatchCommand'
2-
import FileState from 'commons/File/state'
2+
import FileState, { extState } from 'commons/File/state'
33
import * as fileApi from 'backendAPI/fileAPI'
44
import { fileIconProviders } from 'components/FileTree/state'
55
import { fileIconOptions } from 'settings'
@@ -21,12 +21,23 @@ export function getFileContent (filePath) {
2121
})
2222
}
2323

24+
function removeFileDidOpenListener (fn) {
25+
extState.didOpenListeners = extState.didOpenListeners.filter(f => f !== fn)
26+
}
27+
28+
export function onDidFileOpen (fn) {
29+
extState.didOpenListeners.push(fn)
30+
return () => {
31+
removeFileDidOpenListener(fn)
32+
}
33+
}
34+
2435
export function removeFileNodeCreatedListener (fn) {
25-
FileState.createdListeners = FileState.createdListeners.filter(f => f !== fn)
36+
extState.createdListeners = extState.createdListeners.filter(f => f !== fn)
2637
}
2738

2839
export function onDidFileNodeCreated (fn) {
29-
FileState.createdListeners.push(fn)
40+
extState.createdListeners.push(fn)
3041
return () => {
3142
removeFileNodeCreatedListener(fn)
3243
}

0 commit comments

Comments
 (0)