Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Speak.activity/brain.py
diff options
context:
space:
mode:
Diffstat (limited to 'Speak.activity/brain.py')
-rw-r--r--Speak.activity/brain.py110
1 files changed, 43 insertions, 67 deletions
diff --git a/Speak.activity/brain.py b/Speak.activity/brain.py
index b53f030..6edfe94 100644
--- a/Speak.activity/brain.py
+++ b/Speak.activity/brain.py
@@ -8,12 +8,12 @@
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
-#
+#
# HablarConSara.activity is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with HablarConSara.activity. If not, see <http://www.gnu.org/licenses/>.
@@ -24,7 +24,7 @@ from gettext import gettext as _
import logging
logger = logging.getLogger('speak')
-from port.widgets import ToolComboBox
+from toolkit.combobox import ComboBox
import bot.aiml
import voice
@@ -39,82 +39,58 @@ BOTS = {
'predicates': { 'name': 'Alice',
'master': 'the Sugar Community' } } }
-DEFAULT = voice.defaultVoice()
-if not BOTS.has_key(DEFAULT):
- DEFAULT = voice.allVoices()[_('English')]
-
-class Toolbar(gtk.Toolbar):
- def __init__(self, activity):
- gtk.Toolbar.__init__(self)
- self.activity = activity
- self._kernels = {}
-
- self.voices = ToolComboBox()
+_kernels = {}
- for lang in sorted(BOTS.keys()):
- self.voices.combo.append_item(lang, lang)
- self.voices.combo.set_active(0)
- self.voices.combo.connect('changed', self._changed_cb)
- self.voices.show()
+def get_default_voice():
+ default_voice = voice.defaultVoice()
+ if default_voice.friendlyname not in BOTS:
+ return voice.allVoices()[_('English')]
+ else:
+ return default_voice
- self.insert(self.voices, -1)
- def _load_brain(self, voice, sorry=''):
- def load_brain(old_cursor):
- is_first_session = (len(self._kernels) == 0)
+def get_voices():
+ voices = ComboBox()
+ for lang in sorted(BOTS.keys()):
+ voices.append_item(voice.allVoices()[lang], lang)
+ return voices.get_model()
- try:
- brain = BOTS[voice]
- logger.debug('Load bot: %s' % brain)
- kernel = bot.aiml.Kernel()
- kernel.loadBrain(brain['brain'])
- for name, value in brain['predicates'].items():
- kernel.setBotPredicate(name, value)
- self._kernels[voice] = kernel
- finally:
- self.activity.set_cursor(old_cursor)
+def respond(voice, text):
+ return _kernels[voice].respond(text)
- if is_first_session:
- hello = _("Hello, I'am a robot \"%s\". Ask me any question.") \
- % BOTS[voice]['name']
- hello += ' ' + sorry
- self.activity.face.say_notification(hello)
- elif sorry:
- self.activity.face.say_notification(sorry)
-
- old_cursor = self.activity.get_cursor()
- self.activity.set_cursor(gtk.gdk.WATCH)
- gobject.idle_add(load_brain, old_cursor)
- def _changed_cb(self, combo):
- voice = combo.props.value
- self.activity.change_voice(voice, False)
- if not self._kernels.has_key(voice):
- self._load_brain(voice)
+def load(activity, voice, sorry=None):
+ if voice in _kernels:
+ return False
- def update_voice(self):
- voice = self.activity.voice_combo.props.value.friendlyname
- new_voice = BOTS.has_key(voice) and voice or DEFAULT.friendlyname
+ old_cursor = activity.get_cursor()
+ activity.set_cursor(gtk.gdk.WATCH)
- if voice != new_voice:
- self.activity.change_voice(new_voice, True)
+ def load_brain():
+ is_first_session = (len(_kernels) == 0)
try:
- self.voices.combo.handler_block_by_func(self._changed_cb)
- self.voices.combo.select(new_voice)
+ brain = BOTS[voice.friendlyname]
+ logger.debug('Load bot: %s' % brain)
+
+ kernel = bot.aiml.Kernel()
+ kernel.loadBrain(brain['brain'])
+ for name, value in brain['predicates'].items():
+ kernel.setBotPredicate(name, value)
+ _kernels[voice] = kernel
finally:
- self.voices.combo.handler_unblock_by_func(self._changed_cb)
+ activity.set_cursor(old_cursor)
- sorry = _("Sorry, I can speak %s, let's speak %s instead.") \
- % (voice, new_voice)
-
- if not self._kernels.has_key(new_voice):
- self._load_brain(new_voice, (voice != new_voice) and sorry or '')
- elif voice != new_voice:
- self.activity.face.say_notification(sorry)
+ if is_first_session:
+ hello = _("Hello, I'am a robot \"%s\". Ask me any question.") \
+ % BOTS[voice.friendlyname]['name']
+ if sorry:
+ hello += ' ' + sorry
+ activity.face.say_notification(hello)
+ elif sorry:
+ activity.face.say_notification(sorry)
- def respond(self, text):
- voice = self.voices.combo.props.value
- return self._kernels[voice].respond(text)
+ gobject.idle_add(load_brain)
+ return True