Hi,

I have dbus plugin which listening for ReceivedImMsg and SentImMsg signals.
I wrote it in free pascal which doesn't have dbus bindings yet so I can't
use such functions like "setup_with_mainloop". I use low lewel dbus api.
This code connect to pidgin dbus:

  { Initializes the errors }
  dbus_error_init(@FDBErr);

  { Connection }
  FDBConn := dbus_bus_get(DBUS_BUS_SESSION, @FDBErr);

  { Filters }
  dbus_bus_add_match(FDBConn,
'type=''signal'',interface=''im.pidgin.purple.PurpleInterface'',member=''ReceivedImMsg''',
@FDBErr);
  dbus_bus_add_match(FDBConn,
'type=''signal'',interface=''im.pidgin.purple.PurpleInterface'',member=''SentImMsg''',
@FDBErr);
  dbus_connection_add_filter(FDBConn,@MsgHandler,nil,nil);
  dbus_connection_flush(FDBConn);

And I have a timer which every 50 miliseconds call:
  dbus_connection_read_write_dispatch(FDBConn,0);

All messages are handled in dbus filter method:

function MsgHandler(connection: PDBusConnection; message_: PDBusMessage;
  user_data: Pointer): DBusHandlerResult; cdecl;
begin
  Logger.Log('Some message');
  Result := DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
  if (dbus_message_is_signal(message_, 'im.pidgin.purple.PurpleInterface',
'ReceivedImMsg')<>0) then
  begin
    Logger.Log('Received');
    Exit(DBUS_HANDLER_RESULT_HANDLED);
  end;
  if (dbus_message_is_signal(message_, 'im.pidgin.purple.PurpleInterface',
'SentImMsg')<>0) then
  begin
    Logger.Log('Sent');
    Exit(DBUS_HANDLER_RESULT_HANDLED);
  end;
end;

This worked well for some time. But now, I notify that it doesn't "catch"
all signals. I notify that after upgrade pidgin to 2.8.0. Before, even if
timer had 500 miliseconds interval, it catch all signals. Any idea?

Regards.
_______________________________________________
[email protected] mailing list
Want to unsubscribe?  Use this link:
http://pidgin.im/cgi-bin/mailman/listinfo/support

Reply via email to