﻿B4J=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=10
@EndOfDesignText@
#IgnoreWarnings:12

#Event: result (phrases As List)
#Event: resultMatch(userSaid As string, commandText As String, phrases As List)
#Event: resultNoMatch (phrases As List)
#Event: soundStart (e As BANanoEvent)
#Event: start (e As BANanoEvent)
#Event: error (e As BANanoEvent)
#Event: errorNetWork (e As BANanoEvent)
#Event: errorPermissionBlocked (e As BANanoEvent)
#Event: errorPermissionDenied (e As BANanoEvent)
#Event: end (e As BANanoEvent)

Sub Class_Globals
	Private annyang As BANanoObject
	Private commands As Map
	Private mCallBack As Object
	Private mEvent As String
	Private BANano As BANano		'ignore
	Public autoRestart As Boolean = True
	Private options As Map
	Public continuous As Boolean = False
End Sub

'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize(Module As Object, EventName As String)
	commands.Initialize
	mCallBack = Module 
	mEvent = EventName
	options.Initialize 
	annyang.Initialize("annyang")
	'add callbacks
	Dim phrases As Object
	Dim cbResult As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_result"$, Array(phrases))
	annyang.RunMethod("addCallback", Array("result", cbResult))
	'
	Dim userSaid As Object
	Dim commandText As Object
	Dim cbresultMatch As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_resultMatch"$, Array(userSaid, commandText, phrases))
	annyang.RunMethod("addCallback", Array("resultMatch", cbresultMatch))
	'
	Dim cbresultNoMatch As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_resultNoMatch"$, Array(phrases))
	annyang.RunMethod("addCallback", Array("resultNoMatch", cbresultNoMatch))
	'
	Dim e As BANanoEvent
	Dim cbSoundStart As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_soundStart"$, Array(e))
	annyang.RunMethod("addCallback", Array("soundstart", cbSoundStart))
	'
	Dim cbStart As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_start"$, Array(e))
	annyang.RunMethod("addCallback", Array("start", cbStart))
	'
	Dim cbError As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_error"$, Array(e))
	annyang.RunMethod("addCallback", Array("error", cbError))
	'
	Dim cbErrorNetwork As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_errorNetwork"$, Array(e))
	annyang.RunMethod("addCallback", Array("errorNetwork", cbErrorNetwork))
	'
	Dim cberrorPermissionBlocked As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_errorPermissionBlocked"$, Array(e))
	annyang.RunMethod("addCallback", Array("errorPermissionBlocked", cberrorPermissionBlocked))
	'
	Dim cberrorPermissionDenied As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_errorPermissionDenied"$, Array(e))
	annyang.RunMethod("addCallback", Array("errorPermissionDenied", cberrorPermissionDenied))
	'
	Dim cbEnd As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_abort"$, Array(e))
	annyang.RunMethod("addCallback", Array("end", cbEnd))
End Sub

'https://github.com/TalAter/annyang/blob/master/docs/FAQ.md#what-languages-are-supported
'annyang.setLanguage('en')
Sub setLanguage(l As String)
	annyang.RunMethod("setLanguage", l)
End Sub

'add an exact command with a callback
Sub addCommand(command As String, MethodName As String)
	Dim cb As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_${MethodName}"$, Null)
	commands.Put(command, cb)
End Sub

'add a command with extra words at the end
'method receives the extra words
Sub addCommandWithExtra(command As String, MethodName As String)
	Dim ncommand As String = $"${command} *tag"$
	Dim extra As Object
	Dim cb As BANanoObject = BANano.CallBack(mCallBack, $"${mEvent}_${MethodName}"$, Array(extra))
	commands.Put(ncommand, cb)
End Sub



'Start listening
Sub start
	options.Put("autoRestart", autoRestart)
	options.Put("continuous", continuous)
	annyang.RunMethod("addCommands", commands)
	annyang.RunMethod("start", options)
End Sub

'Stop listening, and turn off mic.
Sub abort
	annyang.RunMethod("abort", Null)
End Sub

'Pause listening. annyang will stop responding to commands
Sub pause
	annyang.RunMethod("pause", Null)
End Sub

'Resumes listening and restore command callback execution when a command is matched.
Sub resume
	annyang.RunMethod("resume", Null)
End Sub

'Remove all existing commands
Sub removeCommandsAll
	annyang.RunMethod("removeCommands", Null)
End Sub

'Remove a list of commands
Sub removeCommands(theCommands As List)
	annyang.RunMethod("removeCommands", Array(theCommands))
End Sub

'Remove all callbacks
Sub removeCallbackAll
	annyang.RunMethod("removeCallback", Null)
End Sub

'Remove a callbacks
Sub removeCallback(cbName As String)
	annyang.RunMethod("removeCallback", cbName)
End Sub

'Returns true if speech recognition is currently on
Sub isListening As Boolean
	Dim res As Boolean = annyang.RunMethod("isListening", Null).Result
	Return res
End Sub

'Returns the instance of the browser's SpeechRecognition object used by annyang.
Sub getSpeechRecognizer As BANanoObject
	Dim bo As BANanoObject = annyang.RunMethod("getSpeechRecognizer", Null)
	Return bo
End Sub