feat(client): Plugin:register_note_post_interruptor API
This commit is contained in:
		
							parent
							
								
									60d81d74e3
								
							
						
					
					
						commit
						e7de5f6051
					
				
					 3 changed files with 26 additions and 4 deletions
				
			
		|  | @ -69,6 +69,7 @@ import getAcct from '../../misc/acct/render'; | |||
| import { formatTimeString } from '../../misc/format-time-string'; | ||||
| import { selectDriveFile } from '../scripts/select-drive-file'; | ||||
| import { noteVisibilities } from '../../types'; | ||||
| import { utils } from '@syuilo/aiscript'; | ||||
| 
 | ||||
| export default Vue.extend({ | ||||
| 	components: { | ||||
|  | @ -533,9 +534,8 @@ export default Vue.extend({ | |||
| 			localStorage.setItem('drafts', JSON.stringify(data)); | ||||
| 		}, | ||||
| 
 | ||||
| 		post() { | ||||
| 			this.posting = true; | ||||
| 			this.$root.api('notes/create', { | ||||
| 		async post() { | ||||
| 			let data = { | ||||
| 				text: this.text == '' ? undefined : this.text, | ||||
| 				fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined, | ||||
| 				replyId: this.reply ? this.reply.id : undefined, | ||||
|  | @ -546,7 +546,17 @@ export default Vue.extend({ | |||
| 				visibility: this.visibility, | ||||
| 				visibleUserIds: this.visibility == 'specified' ? this.visibleUsers.map(u => u.id) : undefined, | ||||
| 				viaMobile: this.$root.isMobile | ||||
| 			}).then(data => { | ||||
| 			}; | ||||
| 
 | ||||
| 			// plugin | ||||
| 			if (this.$store.state.notePostInterruptors.length > 0) { | ||||
| 				for (const interruptor of this.$store.state.notePostInterruptors) { | ||||
| 					data = utils.valToJs(await interruptor.handler(JSON.parse(JSON.stringify(data)))); | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			this.posting = true; | ||||
| 			this.$root.api('notes/create', data).then(() => { | ||||
| 				this.clear(); | ||||
| 				this.deleteDraft(); | ||||
| 				this.$emit('posted'); | ||||
|  |  | |||
|  | @ -73,6 +73,9 @@ export function createPluginEnv(vm, opts) { | |||
| 		'Plugin:register_note_view_interruptor': values.FN_NATIVE(([handler]) => { | ||||
| 			vm.$store.commit('registerNoteViewInterruptor', { pluginId: opts.plugin.id, handler }); | ||||
| 		}), | ||||
| 		'Plugin:register_note_post_interruptor': values.FN_NATIVE(([handler]) => { | ||||
| 			vm.$store.commit('registerNotePostInterruptor', { pluginId: opts.plugin.id, handler }); | ||||
| 		}), | ||||
| 		'Plugin:open_url': values.FN_NATIVE(([url]) => { | ||||
| 			window.open(url.value, '_blank'); | ||||
| 		}), | ||||
|  |  | |||
|  | @ -112,6 +112,7 @@ export default () => new Vuex.Store({ | |||
| 		userActions: [], | ||||
| 		noteActions: [], | ||||
| 		noteViewInterruptors: [], | ||||
| 		notePostInterruptors: [], | ||||
| 	}, | ||||
| 
 | ||||
| 	getters: { | ||||
|  | @ -283,6 +284,14 @@ export default () => new Vuex.Store({ | |||
| 				} | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
| 		registerNotePostInterruptor(state, { pluginId, handler }) { | ||||
| 			state.notePostInterruptors.push({ | ||||
| 				handler: (note) => { | ||||
| 					return state.pluginContexts.get(pluginId).execFn(handler, [utils.jsToVal(note)]); | ||||
| 				} | ||||
| 			}); | ||||
| 		}, | ||||
| 	}, | ||||
| 
 | ||||
| 	actions: { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue