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)
29 self._requested = props[telepathy.interfaces.CHANNEL_INTERFACE + '.Requested']
30 self._implement_property_get(
31 telepathy.interfaces.CHANNEL_INTERFACE,
32 {"Requested": lambda: self._requested}
35 # HACK Newer python-telepathy way
36 telepathy.server.ChannelTypeText.__init__(self, connection, manager, props)
37 self.__nextRecievedId = 0
38 self.__lastMessageTimestamp = datetime.datetime(1, 1, 1)
40 self.__otherHandle = contactHandle
42 # HACK Older python-telepathy doesn't provide this
43 self._immutable_properties = {
44 'ChannelType': telepathy.server.interfaces.CHANNEL_INTERFACE,
45 'TargetHandle': telepathy.server.interfaces.CHANNEL_INTERFACE,
46 'Interfaces': telepathy.server.interfaces.CHANNEL_INTERFACE,
47 'TargetHandleType': telepathy.server.interfaces.CHANNEL_INTERFACE,
48 'TargetID': telepathy.server.interfaces.CHANNEL_INTERFACE,
49 'Requested': telepathy.server.interfaces.CHANNEL_INTERFACE
53 # HACK Older python-telepathy doesn't provide this
55 for prop, iface in self._immutable_properties.items():
56 props[iface + '.' + prop] = \
57 self._prop_getters[iface][prop]()
60 @gtk_toolbox.log_exception(_moduleLogger)
61 def Send(self, messageType, text):
62 if messageType != telepathy.CHANNEL_TEXT_MESSAGE_TYPE_NORMAL:
63 raise telepathy.errors.NotImplemented("Unhandled message type: %r" % messageType)
65 self.Sent(int(time.time()), messageType, text)
67 oldStdin, oldStdout = self.stdin, self.stdout
69 self.stdin = currentStdin = StringIO.StringIO()
70 self.stdout = currentStdout = StringIO.StringIO()
73 self.stdin, self.stdout = oldStdin, oldStdout
75 self._report_new_message(currentStdout.getvalue())
77 @gtk_toolbox.log_exception(_moduleLogger)
82 telepathy.server.ChannelTypeText.Close(self)
83 if self.__manager.channel_exists(self.__props):
84 # HACK Older python-telepathy requires doing this manually
85 self.__manager.remove_channel(self)
86 self.remove_from_connection()
88 def _report_new_message(self, message):
89 currentReceivedId = self.__nextRecievedId
91 timestamp = int(time.time())
92 type = telepathy.CHANNEL_TEXT_MESSAGE_TYPE_NORMAL
94 self.Received(currentReceivedId, timestamp, self.__otherHandle, type, 0, message.strip())
96 self.__nextRecievedId += 1
98 def do_reset_state_machine(self, args):
100 self._report_new_message("No arguments supported")
104 for machine in self._conn.session.stateMachine._machines:
105 machine.reset_timers()
107 self._report_new_message(str(e))
109 def do_get_state(self, args):
111 self._report_new_message("No arguments supported")
115 state = self._conn.session.stateMachine.state
116 self._report_new_message(str(state))
118 self._report_new_message(str(e))
120 def do_is_authed(self, args):
122 self._report_new_message("No arguments supported")
126 isAuthed = self._conn.session.backend.is_authed()
127 self._report_new_message(str(isAuthed))
129 self._report_new_message(str(e))
131 def do_is_dnd(self, args):
133 self._report_new_message("No arguments supported")
137 isDnd = self._conn.session.backend.is_dnd()
138 self._report_new_message(str(isDnd))
140 self._report_new_message(str(e))
142 def do_get_account_number(self, args):
144 self._report_new_message("No arguments supported")
148 number = self._conn.session.backend.get_account_number()
149 self._report_new_message(number)
151 self._report_new_message(str(e))
153 def do_get_callback_numbers(self, args):
155 self._report_new_message("No arguments supported")
159 numbers = self._conn.session.backend.get_callback_numbers()
160 numbersDisplay = "\n".join(
161 "%s: %s" % (name, number)
162 for (number, name) in numbers.iteritems()
164 self._report_new_message(numbersDisplay)
166 self._report_new_message(str(e))
168 def do_get_callback_number(self, args):
170 self._report_new_message("No arguments supported")
174 number = self._conn.session.backend.get_callback_number()
175 self._report_new_message(number)
177 self._report_new_message(str(e))
179 def do_call(self, args):
181 self._report_new_message("Must specify the phone number and only the phone nunber")
186 self._conn.session.backend.call(number)
188 self._report_new_message(str(e))
190 def do_send_sms(self, args):
192 self._report_new_message("Must specify the phone number and then message")
197 message = " ".join(args[1:])
198 self._conn.session.backend.send_sms(number, message)
200 self._report_new_message(str(e))