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