4 gem('twitter4r', '>=0.2.1')
8 CONN_MGR_PARAM_FLAG_REQUIRED = 1
9 CONN_MGR_PARAM_FLAG_REGISTER = 2
10 CONN_MGR_PARAM_FLAG_HAS_DEFAULT = 4
11 CONN_MGR_PARAM_FLAG_SECRET = 8
13 class Twitterpathy < DBus::Object
14 # Create an interface.
15 dbus_interface "org.ruby.SampleInterface" do
16 # Create a hello method in that interface.
17 dbus_method :hello, "in name:s, in name2:s" do |name, name2|
18 puts "hello(#{name}, #{name2})"
22 dbus_interface "org.freedesktop.Telepathy.ConnectionManager" do
23 dbus_method :GetParameters, "in proto:s, out parameters:a(susv)" do |proto|
24 puts "GetParameters(#{proto.inspect})"
25 $stderr.puts "Attempt to use unsupported protocol #{proto}" if proto != 'twitter'
27 parameters = [['account', CONN_MGR_PARAM_FLAG_REQUIRED | CONN_MGR_PARAM_FLAG_REGISTER, 's', ['s', '']], ['password', CONN_MGR_PARAM_FLAG_REQUIRED | CONN_MGR_PARAM_FLAG_REGISTER | CONN_MGR_PARAM_FLAG_SECRET, 's', ['s', '']]]
31 dbus_method :ListProtocols, "out protocols:as" do ||
33 protocols = ['twitter']
37 dbus_method :RequestConnection, "in proto:s, in parameters:a{sv}, out service:s, out object:o" do |proto, parameters|
38 puts "RequestConnection(#{proto.inspect}, #{parameters.inspect})"
39 $stderr.puts "Attempt to use unsupported protocol #{proto}" if proto != 'twitter'
41 object = "/org/freedesktop/Telepathy/Connection/Twitterpathy/twitter/#{parameters['account']}"
42 service = "org.freedesktop.Telepathy.Connection.Twitterpathy.twitter.#{parameters['account']}"
44 #Register a new D-BUS service for this connection
45 connection_service = $bus.request_service(service)
47 #Create the connection object, and export it on the new service
48 connection = TwitterConnection.new(object, parameters['account'], parameters['password'])
49 connection_service.export(connection)
51 puts "#{service}, #{object}"
57 class TwitterConnection < DBus::Object
58 def initialize(path, account, password)
59 puts "initialize TwitterConnection(#{path}, #{account}, ***)"
65 dbus_interface 'org.freedesktop.Telepathy.Connection' do
66 dbus_method :Connect, '' do ||
67 puts "Connect, account=#{@account}"
68 @twitter_client = Twitter::Client.new(:login => $account, :password => $password)
71 dbus_method :Disconnect, '' do ||
74 dbus_method :GetInterfaces, 'out interfaces:as' do ||
79 dbus_method :GetProtocol, 'out protocol:s' do ||
86 $bus = DBus::SessionBus.instance
88 service = $bus.request_service("org.freedesktop.Telepathy.ConnectionManager.Twitterpathy")
90 exported_obj = Twitterpathy.new("/org/freedesktop/Telepathy/ConnectionManager/Twitterpathy")
91 service.export(exported_obj)