[telepathy-ashes/master] Enabled file transfer code (currently broken).
David Laban
david.laban at collabora.co.uk
Wed Oct 7 04:41:42 PDT 2009
---
ashes/tools/echo_bot.py | 4 ++-
ashes/tools/file_transfer.py | 46 +++++++++++++++++++++++++++++++++++++++
ashes/tools/helper_functions.py | 5 ++++
3 files changed, 54 insertions(+), 1 deletions(-)
create mode 100644 ashes/tools/file_transfer.py
diff --git a/ashes/tools/echo_bot.py b/ashes/tools/echo_bot.py
index 04222b9..7a19e7e 100644
--- a/ashes/tools/echo_bot.py
+++ b/ashes/tools/echo_bot.py
@@ -19,6 +19,7 @@ from media_echoer import MediaChannelEchoer, IceEchoer
from presence import PresenceEchoer, Onlineifier
from groups import ContactAcceptor
from text import TextChannelEchoer
+from file_transfer import FileTransferEchoer
#TODO: wrap everything to 80 chars so that I can hack on my eeepc.
@@ -34,7 +35,8 @@ class EchoBot( PresenceEchoer,
into a nice tasty echo bot.
"""
# Using python's name mangling to avoid name collisions.
- __handler_classes = MediaChannelEchoer, ContactAcceptor, TextChannelEchoer
+ __channel_handler_classes = [MediaChannelEchoer, ContactAcceptor,
+ TextChannelEchoer, FileTransferEchoer]
diff --git a/ashes/tools/file_transfer.py b/ashes/tools/file_transfer.py
new file mode 100644
index 0000000..1fb1c24
--- /dev/null
+++ b/ashes/tools/file_transfer.py
@@ -0,0 +1,46 @@
+
+import telepathy
+
+from bases import ChannelListener
+from helper_functions import get_property, error_printer, printer, green
+
+class FileTransferEchoer(ChannelListener):
+ """
+ Automatically accepts file transfers and sends them back.
+ This might actually be easier with the help of a ConnectionLister subclass.
+ """
+ channel_type = 'org.freedesktop.Telepathy.Channel.Type.FileTransfer'
+ handle_type = telepathy.HANDLE_TYPE_CONTACT
+ capabilities_flag = 3 # send and receive
+
+ def __init__(self, connection, channel, properties):
+ ChannelListener.__init__(self, connection, channel, properties)
+ self.initial_offset = None
+ get_property(channel,
+ 'org.freedesktop.Telepathy.Channel.Type.FileTransfer',
+ 'State',
+ reply_handler=self.FileTransferStateChanged,
+ error_handler=error_printer("get_property(FileTransfer.state)"))
+
+ def FileTransferStateChanged(self, state, reason=0):
+ """Handles Channel.Interface.FileTransfer.FileTransferStateChanged"""
+ if state == 1: # Pending: incoming file.
+ offset = 0
+ self.channel.AcceptFile(address_type, access_control,
+ access_control_param, offset)
+ elif state == 2: # Accepted: outgoing file.
+ pass
+ elif state == 3: # Open
+ pass
+ elif state == 4: # Completed
+ pass
+ elif state == 5: # Cancelled
+ pass
+ else:
+ print "WTF: FileTransferStateChanged(%s, %s)" % (state, reason)
+
+ def InitialOffsetDefined(self, offset):
+ self.initial_offset = offset
+
+ def TransferredBytesChanged(self, count):
+ pass
diff --git a/ashes/tools/helper_functions.py b/ashes/tools/helper_functions.py
index 6f16060..8fc0827 100644
--- a/ashes/tools/helper_functions.py
+++ b/ashes/tools/helper_functions.py
@@ -91,5 +91,10 @@ def red(string):
"""For making things red when you print them in a terminal"""
return '\033[0;31;40m'+string+'\033[0m'
+def error_printer(name):
+ def printer(*args, **kwargs):
+ print name, args, kwargs
+ return printer
+
def printer(*args, **kwargs):
print args, kwargs
\ No newline at end of file
--
1.5.6.5
More information about the telepathy-commits
mailing list