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())
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.strip())
73 self.__nextRecievedId += 1
75 def do_reset_state_machine(self, args):
77 self._report_new_message("No arguments supported")
81 for machine in self._conn.session.stateMachine._machines:
82 machine.reset_timers()
84 self._report_new_message(str(e))
86 def do_get_state(self, args):
88 self._report_new_message("No arguments supported")
92 state = self._conn.session.stateMachine.state
93 self._report_new_message(str(state))
95 self._report_new_message(str(e))
97 def do_is_authed(self, args):
99 self._report_new_message("No arguments supported")
103 isAuthed = self._conn.session.backend.is_authed()
104 self._report_new_message(str(isAuthed))
106 self._report_new_message(str(e))
108 def do_is_dnd(self, args):
110 self._report_new_message("No arguments supported")
114 isDnd = self._conn.session.backend.is_dnd()
115 self._report_new_message(str(isDnd))
117 self._report_new_message(str(e))
119 def do_get_account_number(self, args):
121 self._report_new_message("No arguments supported")
125 number = self._conn.session.backend.get_account_number()
126 self._report_new_message(number)
128 self._report_new_message(str(e))
130 def do_get_callback_numbers(self, args):
132 self._report_new_message("No arguments supported")
136 numbers = self._conn.session.backend.get_callback_numbers()
137 numbersDisplay = "\n".join(
138 "%s: %s" % (name, number)
139 for (number, name) in numbers.iteritems()
141 self._report_new_message(numbersDisplay)
143 self._report_new_message(str(e))
145 def do_get_callback_number(self, args):
147 self._report_new_message("No arguments supported")
151 number = self._conn.session.backend.get_callback_number()
152 self._report_new_message(number)
154 self._report_new_message(str(e))
156 def do_call(self, args):
158 self._report_new_message("Must specify the phone number and only the phone nunber")
163 self._conn.session.backend.call(number)
165 self._report_new_message(str(e))
167 def do_send_sms(self, args):
169 self._report_new_message("Must specify the phone number and then message")
174 message = " ".join(args[1:])
175 self._conn.session.backend.send_sms(number, message)
177 self._report_new_message(str(e))