diff options
author | Aleksey Lim <alsroot@member.fsf.org> | 2009-04-29 01:21:34 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@member.fsf.org> | 2009-04-29 01:21:34 (GMT) |
commit | 5967b145b3619e9c03f32d66d26b90eee6ad8b43 (patch) | |
tree | f5ac4caacc79b74300ebe8edfca91572a6c06c3b /Speak.activity/brain.py | |
parent | c9b1ac16ba7058d775401fb458cc705bf9a41d31 (diff) |
Switch to sugar-port; add "Robot" tab
Diffstat (limited to 'Speak.activity/brain.py')
-rw-r--r-- | Speak.activity/brain.py | 103 |
1 files changed, 86 insertions, 17 deletions
diff --git a/Speak.activity/brain.py b/Speak.activity/brain.py index 2086f20..cc969cd 100644 --- a/Speak.activity/brain.py +++ b/Speak.activity/brain.py @@ -17,24 +17,93 @@ # You should have received a copy of the GNU General Public License # along with HablarConSara.activity. If not, see <http://www.gnu.org/licenses/>. -import bot.aiml +import gtk +import gobject from gettext import gettext as _ -class defaultBrain: - def __init__(self, voice): - self.language = voice.language - self.kernel = bot.aiml.Kernel() - - if self.language=="es": - self.kernel.loadBrain("bot/sara.brn") - self.kernel.setBotPredicate("nombre_bot","Sara") - self.kernel.setBotPredicate("botmaster","la comunidad Azucar") - elif self.language=="en-uk": - self.kernel.loadBrain("bot/alice.brn") - self.kernel.setBotPredicate("name","Alice") - self.kernel.setBotPredicate("master","the Sugar Community") - else: - self.kernel.respond = lambda x: x +import logging +logger = logging.getLogger('speak') + +from port.toolcombobox import ToolComboBox + +import bot.aiml +import voice + +BOTS = { + _('Spanish'): { 'name': 'Sara', + 'brain': 'bot/sara.brn', + 'predicates': { 'nombre_bot': 'Sara', + 'botmaster': 'la comunidad Azucar' } }, + _('English'): { 'name': 'Alice', + 'brain': 'bot/alice.brn', + 'predicates': { 'name': 'Alice', + 'master': 'the Sugar Community' } } } + +DEFAULT = voice.defaultVoice() +if not BOTS.has_key(DEFAULT): + DEFAULT = _('English') + +class Toolbar(gtk.Toolbar): + def __init__(self, activity): + gtk.Toolbar.__init__(self) + self.activity = activity + self._kernels = {} + self._first_session = True + + self.voices = ToolComboBox() + + 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() + + self.insert(self.voices, -1) + + def _changed_cb(self, combo): + self.activity.change_voice(combo.props.value, False) + + def update_voice(self): + voice = self.activity.voice_combo.props.value.friendlyname + new_voice = BOTS.has_key(voice) and voice or DEFAULT + + if voice != new_voice: + self.activity.change_voice(new_voice, True) + self.voices.combo.select(new_voice) + else: + self.voices.combo.select(voice) + + if not self._kernels.has_key(new_voice): + def load_brain(old_cursor, is_first_session): + try: + brain = BOTS[new_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[new_voice] = kernel + finally: + self.activity.set_cursor(old_cursor) + + if is_first_session: + self.activity.face.say( + _("Hello, I'am a robot \"%s\". " \ + "Ask me any question.") % BOTS[new_voice]['name']) + + old_cursor = self.activity.get_cursor() + self.activity.set_cursor(gtk.gdk.WATCH) + gobject.idle_add(load_brain, old_cursor, self._first_session) + + elif voice != new_voice: + self.activity.face.say( + _("Sorry, I can speak %s, let's speak %s instead.") \ + % (voice, new_voice)) + + self._first_session = False def respond(self, text): - return self.kernel.respond(text) + voice = self.voices.combo.props.value + return self._kernels[voice].respond(text) |