12 _moduleLogger = logging.getLogger("channel.text")
15 class DebugPromptChannel(telepathy.server.ChannelTypeText, cmd.Cmd):
17 Look into implementing ChannelInterfaceMessages for rich text formatting
20 def __init__(self, connection, manager, props, contactHandle):
21 self._manager = manager
24 cmd.Cmd.__init__(self, "Debug Prompt")
25 self.use_rawinput = False
27 # HACK Older python-telepathy way
28 telepathy.server.ChannelTypeText.__init__(self, connection, contactHandle)
30 # HACK Newer python-telepathy way
31 telepathy.server.ChannelTypeText.__init__(self, connection, manager, props)
32 self._nextRecievedId = 0
33 self._lastMessageTimestamp = datetime.datetime(1, 1, 1)
35 self._otherHandle = contactHandle
37 @gtk_toolbox.log_exception(_moduleLogger)
38 def Send(self, messageType, text):
39 if messageType != telepathy.CHANNEL_TEXT_MESSAGE_TYPE_NORMAL:
40 raise telepathy.errors.NotImplemented("Unhandled message type: %r" % messageType)
42 self.Sent(int(time.time()), messageType, text)
44 oldStdin, oldStdout = self.stdin, self.stdout
46 self.stdin = currentStdin = StringIO.StringIO()
47 self.stdout = currentStdout = StringIO.StringIO()
50 self.stdin, self.stdout = oldStdin, oldStdout
52 self._report_new_message(currentStdout.getvalue().strip())
54 @gtk_toolbox.log_exception(_moduleLogger)
59 telepathy.server.ChannelTypeText.Close(self)
60 if self._manager.channel_exists(self._props):
61 # HACK Older python-telepathy requires doing this manually
62 self._manager.remove_channel(self)
63 self.remove_from_connection()
65 def _report_new_message(self, message):
66 currentReceivedId = self._nextRecievedId
68 timestamp = int(time.time())
69 type = telepathy.CHANNEL_TEXT_MESSAGE_TYPE_NORMAL
71 self.Received(currentReceivedId, timestamp, self._otherHandle, type, 0, message)
73 self._nextRecievedId += 1
75 def do_reset_state_machine(self, args):
77 self._report_new_message("No arguments supported")
81 self._conn.session.stateMachine.reset_timers()
83 self._report_new_message(str(e))
85 def do_get_state(self, args):
87 self._report_new_message("No arguments supported")
91 state = self._conn.session.stateMachine.get_state()
92 self._report_new_message(str(state))
94 self._report_new_message(str(e))
96 def do_is_authed(self, args):
98 self._report_new_message("No arguments supported")
102 isAuthed = self._conn.session.backend.is_authed()
103 self._report_new_message(str(isAuthed))
105 self._report_new_message(str(e))
107 def do_is_dnd(self, args):
109 self._report_new_message("No arguments supported")
113 isDnd = self._conn.session.backend.is_dnd()
114 self._report_new_message(str(isDnd))
116 self._report_new_message(str(e))
118 def do_get_account_number(self, args):
120 self._report_new_message("No arguments supported")
124 number = self._conn.session.backend.get_account_number()
125 self._report_new_message(number)
127 self._report_new_message(str(e))
129 def do_get_callback_numbers(self, args):
131 self._report_new_message("No arguments supported")
135 numbers = self._conn.session.backend.get_callback_numbers()
136 numbersDisplay = "\n".join(
137 "%s: %s" % (name, number)
138 for (number, name) in numbers.iteritems()
140 self._report_new_message(numbersDisplay)
142 self._report_new_message(str(e))
144 def do_get_callback_number(self, args):
146 self._report_new_message("No arguments supported")
150 number = self._conn.session.backend.get_callback_number()
151 self._report_new_message(number)
153 self._report_new_message(str(e))
155 def do_call(self, args):
157 self._report_new_message("No arguments supported")
162 self._conn.session.backend.call(number)
164 self._report_new_message(str(e))