+from __future__ import with_statement
+
+import os
import cmd
import StringIO
import time
import telepathy
+import constants
import tp
import gtk_toolbox
+import gvoice
-_moduleLogger = logging.getLogger("channel.text")
+_moduleLogger = logging.getLogger("channel.debug_prompt")
class DebugPromptChannel(tp.ChannelTypeText, cmd.Cmd):
- """
- @todo Look into implementing ChannelInterfaceMessages for rich text formatting
- @todo Add a command that initiates a file transfer, giving the log file to the user
- """
def __init__(self, connection, manager, props, contactHandle):
self.__manager = manager
finally:
self.stdin, self.stdout = oldStdin, oldStdout
- self._report_new_message(currentStdout.getvalue())
+ stdoutData = currentStdout.getvalue().strip()
+ if stdoutData:
+ self._report_new_message(stdoutData)
@gtk_toolbox.log_exception(_moduleLogger)
def Close(self):
self.__nextRecievedId += 1
def do_reset_state_machine(self, args):
- if args:
- self._report_new_message("No arguments supported")
- return
-
try:
- for machine in self._conn.session.stateMachine._machines:
- machine.reset_timers()
+ args = args.strip().lower()
+ if not args:
+ args = "all"
+ if args == "all":
+ for machine in self._conn.session.stateMachine._machines:
+ machine.reset_timers()
+ elif args == "contacts":
+ self._conn.session.addressbookStateMachine.reset_timers()
+ elif args == "voicemail":
+ self._conn.session.voicemailsStateMachine.reset_timers()
+ elif args == "texts":
+ self._conn.session.textsStateMachine.reset_timers()
+ else:
+ self._report_new_message('Unknown machine "%s"' % (args, ))
except Exception, e:
self._report_new_message(str(e))
def help_reset_state_machine(self):
- self._report_new_message("Reset the refreshing state machine")
+ self._report_new_message("""Reset the refreshing state machine.
+"reset_state_machine" - resets all
+"reset_state_machine all"
+"reset_state_machine contacts"
+"reset_state_machine voicemail"
+"reset_state_machine texts"
+""")
def do_get_state(self, args):
if args:
def help_get_callback_numbers(self):
self._report_new_message("Print a list of all configured callback numbers")
+ def do_get_sane_callback_number(self, args):
+ if args:
+ self._report_new_message("No arguments supported")
+ return
+
+ try:
+ number = gvoice.backend.get_sane_callback(self._conn.session.backend)
+ self._report_new_message(number)
+ except Exception, e:
+ self._report_new_message(str(e))
+
+ def help_get_sane_callback_number(self):
+ self._report_new_message("Print the best guess of callback numbers to use")
+
def do_get_callback_number(self, args):
if args:
self._report_new_message("No arguments supported")
self._report_new_message("Print the callback number currently enabled")
def do_call(self, args):
- if len(args) != 1:
+ if not args:
self._report_new_message("Must specify the phone number and only the phone nunber")
return
try:
- number = args[0]
+ number = args
self._conn.session.backend.call(number)
except Exception, e:
self._report_new_message(str(e))
self._report_new_message("\n".join(["call NUMBER", "Initiate a callback, Google forwarding the call to the callback number"]))
def do_send_sms(self, args):
+ args = args.split(" ")
if 1 < len(args):
self._report_new_message("Must specify the phone number and then message")
return
def help_send_sms(self):
self._report_new_message("\n".join(["send_sms NUMBER MESSAGE0 MESSAGE1 ...", "Send an sms to number NUMBER"]))
+
+ def do_version(self, args):
+ if args:
+ self._report_new_message("No arguments supported")
+ return
+ self._report_new_message("%s-%s" % (constants.__version__, constants.__build__))
+
+ def help_version(self):
+ self._report_new_message("Prints the version (hint: %s-%s)" % (constants.__version__, constants.__build__))
+
+ def do_get_polling(self, args):
+ if args:
+ self._report_new_message("No arguments supported")
+ return
+ self._report_new_message("\n".join((
+ "Contacts:", repr(self._conn.session.addressbookStateMachine)
+ )))
+ self._report_new_message("\n".join((
+ "Voicemail:", repr(self._conn.session.voicemailsStateMachine)
+ )))
+ self._report_new_message("\n".join((
+ "Texts:", repr(self._conn.session.textsStateMachine)
+ )))
+
+ def help_get_polling(self):
+ self._report_new_message("Prints the frequency each of the state machines updates")
+
+ def do_grab_log(self, args):
+ if args:
+ self._report_new_message("No arguments supported")
+ return
+
+ try:
+ publishProps = self._conn.generate_props(telepathy.CHANNEL_TYPE_FILE_TRANSFER, self.__otherHandle, False)
+ self._conn._channel_manager.channel_for_props(publishProps, signal=True)
+ except Exception, e:
+ self._report_new_message(str(e))
+
+ def help_grab_log(self):
+ self._report_new_message("Download the debug log for including with bug report")
+ self._report_new_message("Warning: this may contain sensitive information")
+
+ def do_save_log(self, args):
+ if not args:
+ self._report_new_message("Must specify a filename to save the log to")
+ return
+
+ try:
+ filename = os.path.expanduser(args)
+ with open(constants._user_logpath_, "r") as f:
+ logLines = f.xreadlines()
+ log = "".join(logLines)
+ with open(filename, "w") as f:
+ f.write(log)
+ except Exception, e:
+ self._report_new_message(str(e))
+
+ def help_save_log(self):
+ self._report_new_message("Save the log to a specified location")