Trac is being migrated to new services! Issues can be found in our new 
YouTrack instance and WIKI pages can be found on our 
website.
        
      
    
      
      
      
        - Timestamp:
- 
            Feb 29, 2016, 8:54:47 AM (8 years ago)
        
- Author:
- 
          lew21
        
- Comment:
- 
          
          
Update to pydbus and Python 3.
 
        
          Legend:
          
            - Unmodified
- Added
- Removed
- Modified
 
        
  
      - 
        
        
              
              
                
                  | v8 | v9 |  |  
                          | 13 | 13 | You do the listening and calling; Pidgin does the emitting and replying. |  
                          | 14 | 14 |  |  
                          |  | 15 | == Setup == |  
                          |  | 16 |  |  
                          |  | 17 | To interact with Pidgin you need to get a reference to Pidgin's D-Bus interface. |  
                          |  | 18 |  |  
                          |  | 19 | {{{ |  
                          |  | 20 | #!python |  
                          |  | 21 | from pydbus import SessionBus |  
                          |  | 22 |  |  
                          |  | 23 | bus = SessionBus() |  
                          |  | 24 | purple = bus.get("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") |  
                          |  | 25 | }}} |  
                          | 15 | 26 | == Listening to signals == |  
                          | 16 | 27 |  |  
                  | … | … |  |  
                          | 20 | 31 | {{{ |  
                          | 21 | 32 | #!python |  
                        | 22 |  | bus.add_signal_receiver(my_func, |  
                        | 23 |  | dbus_interface="im.pidgin.purple.PurpleInterface", |  
                        | 24 |  | signal_name="ReceivedImMsg") |  
                        |  | 33 | purple.ReceivedImMsg.connect(my_func) |  
                          | 25 | 34 | }}} |  
                          | 26 | 35 |  |  
                  | … | … |  |  
                          | 30 | 39 | {{{ |  
                          | 31 | 40 | #!python |  
                        | 32 |  |    def my_func(account, sender, message, conversation, flags): |  
                        | 33 |  |    print sender, "said:", message |  
                        |  | 41 | def my_func(account, sender, message, conversation, flags): |  
                        |  | 42 | print(sender, "said:", message) |  
                          | 34 | 43 | }}} |  
                          | 35 | 44 |  |  
                  | … | … |  |  
                          | 40 | 49 |  |  
                          | 41 | 50 | def my_func(account, sender, message, conversation, flags): |  
                        | 42 |  | print sender, "said:", message |  
                        | 43 |  |  |  
                        | 44 |  | import dbus, gobject |  
                        | 45 |  | from dbus.mainloop.glib import DBusGMainLoop |  
                        | 46 |  | dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) |  
                        | 47 |  | bus = dbus.SessionBus() |  
                        | 48 |  |  |  
                        | 49 |  | bus.add_signal_receiver(my_func, |  
                        | 50 |  | dbus_interface="im.pidgin.purple.PurpleInterface", |  
                        | 51 |  | signal_name="ReceivedImMsg") |  
                        | 52 |  |  |  
                        | 53 |  | loop = gobject.MainLoop() |  
                        | 54 |  | loop.run() |  
                        |  | 51 | print(sender, "said:", message) |  
                        |  | 52 |  |  
                        |  | 53 | from pydbus import SessionBus |  
                        |  | 54 | from gi.repository import GObject |  
                        |  | 55 |  |  
                        |  | 56 | bus = SessionBus() |  
                        |  | 57 | purple = bus.get("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") |  
                        |  | 58 | purple.ReceivedImMsg.connect(my_func) |  
                        |  | 59 |  |  
                        |  | 60 | GObject.MainLoop().run() |  
                          | 55 | 61 | }}} |  
                          | 56 | 62 |  |  
                  | … | … |  |  
                          | 142 | 148 | Most of Pidgin's functions can be called through the D-Bus interface. The D-Bus functions have similar names as the C functions, and this is not unlike writing actual Pidgin plugins in C or Perl or Tcl instead. |  
                          | 143 | 149 |  |  
                        | 144 |  | To start calling Pidgin functions, you need to get a reference to Pidgin's D-Bus interface. This is in Python: |  
                        | 145 |  | {{{ |  
                        | 146 |  | #!python |  
                        | 147 |  | bus = dbus.SessionBus() |  
                        | 148 |  | obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") |  
                        | 149 |  | purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") |  
                        | 150 |  | }}} |  
                        | 151 |  |  |  
                        | 152 |  | Now you can call Pidgin functions as if they were members of the `purple` object. For example, to send a message to all your IM windows, you can do: |  
                        | 153 |  | {{{ |  
                        | 154 |  | #!python |  
                        | 155 |  | for conv in purple.PurpleGetIms(): |  
                        | 156 |  | purple.PurpleConvImSend(purple.PurpleConvIm(conv), "Ignore.") |  
                        |  | 150 | For example, to send a message to all your IM windows, you can do: |  
                        |  | 151 | {{{ |  
                        |  | 152 | #!python |  
                        |  | 153 | for conv in purple.PurpleGetIms()[0]: |  
                        |  | 154 | purple.PurpleConvImSend(purple.PurpleConvIm(conv)[0], "Ignore.") |  
                          | 157 | 155 | }}} |  
                          | 158 | 156 |  |  
                  | … | … |  |  
                          | 162 | 160 | def set_message(message): |  
                          | 163 | 161 | # Get current status type (Available/Away/etc.) |  
                        | 164 |  | current = purple.PurpleSavedstatusGetType(purple.PurpleSavedstatusGetCurrent() ) |  
                        |  | 162 | current = purple.PurpleSavedstatusGetType(purple.PurpleSavedstatusGetCurrent()[0])[0] |  
                          | 165 | 163 | # Create new transient status and activate it |  
                        | 166 |  | status = purple.PurpleSavedstatusNew("", current)  |  
                        |  | 164 | status = purple.PurpleSavedstatusNew("", current)[0] |  
                          | 167 | 165 | purple.PurpleSavedstatusSetMessage(status, message) |  
                          | 168 | 166 | purple.PurpleSavedstatusActivate(status) |  
 
 
       
   
     
    
        All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public.  Do not post confidential information, especially passwords!