Welcome!

Welcome to the official BlackBerry Support Community Forums.

This is your resource to discuss support topics with your peers, and learn from each other.

inside custom component

Native Development

Reply
Developer
smiley
Posts: 1,497
Registered: ‎07-14-2008
My Device: Z10
Accepted Solution

MessageService messagesAdded signal not firing

I'm trying to connect the messagesAdded signal but it is not firing for QList message.

 

When I have several messages in my inbox on the server and then I goto the Hub and do a refresh the Hub downloads the messages but the message app signal is not firing. 

 

If there is only one message then the signal fires for that signal but not this signal.

 

In the messages example app by BlackBerry they have this.

 

in the .h file

private Q_SLOTS:
    // Filters the messages in the model according to the filter property
    void filterMessages();

in the C++ file

connect(m_messageService, SIGNAL(messagesAdded(bb::pim::account::AccountKey, QList<bb::pim::message::ConversationKey>, QList<bb::pim::message::MessageKey>)), SLOT(filterMessages()));

void Messages::filterMessages()
{
}
Developer
smiley
Posts: 1,497
Registered: ‎07-14-2008
My Device: Z10

Re: MessageService messagesAdded signal not firing

what is it everything so difficult to do and hard to figure out and examples do not work?

 

since i couldn't get the messagesAdded() signal to work so i tried

 

    ok = connect(m_messageService, SIGNAL(folderSyncCompleted(bb::pim::account::AccountKey, bb::pim::message::MessageFolderKey)),
    			SLOT(folderSyncDone(bb::pim::account::AccountKey, bb::pim::message::MessageFolderKey)));

 The connection returns true and yet when i get new messages from the Hub the signal is not fired.

 

why aren't there more messaging examples.   I need help!! :Surrender:

 

 

 

 

 

 

Developer
jalue
Posts: 196
Registered: ‎03-04-2013
My Device: BB Z10

Re: MessageService messagesAdded signal not firing

[ Edited ]

Hey there,

 

Well, I played around with that Message Service sample app and found something that might be what you're missing.  Not 100% sure but it could be.

 

In the API description of messagesAdded:

This signal is usually emitted on initial sync or if the server has been out of sync for some time.

 

When you refresh the Hub, is the app open?  According to that description, it should work when you first start the app and the messages are already in the Hub.  Don't think you can actually get the 2nd part of the description to happen - where the server is out of sync...

 

I commented out 3 of the connect functions and left the QList entry there.  First attempt I had the app open when refreshing the Hub and the messages weren't retrieved by the app.  Second attempt I made sure the app was closed when I refreshed the Hub.  Started the app and the messages were retrieved into the app.

 

This was all on the Simulator btw... I don't have a BB.... yet....

 

--Edit--

 

My bad..  I didn't notice the extra filterMessages() right below the connect functions which would actually bring the messages in... doh...

Developer
smiley
Posts: 1,497
Registered: ‎07-14-2008
My Device: Z10

Re: MessageService messagesAdded signal not firing

Hey,

 

thanks for looking into this.

 

The messages sample app should be running at all times in the "background".

 

if you send a msg to the account that the message app is set to listen then it should receive the messageAdded() signal.  Of course you enter the correct filter.  Usually if you use "F" or any letter in the message should work.

 

You should see the messages listview updated when you do a hub refresh.

 

This works fine if you send a single message but if you have like 2 or 3 messages the messageAdded() signal won't fire.  Reading the doc my assumption was the messagesAdded() signal should fire and give me the list of new msgs with the QList<> var.

 

In summary:  if you send a single message in the account that the message app is listening then it works.

If will NOT work if you have more than one messages on mail server when doing a Hub refresh.

 

Hope you get what i'm trying to say.

Developer
jalue
Posts: 196
Registered: ‎03-04-2013
My Device: BB Z10

Re: MessageService messagesAdded signal not firing

[ Edited ]

Yes, I understand what you're saying, but that little key phrase..  initial sync...  When does that actually happen?

 

I think it works for me when I refresh the Hub and have 3 messages there.. They are brought into the app and yes, the app is open when I refreshed.

 

--Edit--

Nevermind.. Not working..  Tried it again..

Developer
smiley
Posts: 1,497
Registered: ‎07-14-2008
My Device: Z10

Re: MessageService messagesAdded signal not firing

The message sample app isn't really a good example because of the filtering.

 

what i'm trying to do is catch new messages coming from the mail server when you do a refresh in the Hub.

I'm not interested in the messages already in the Hub.

 

if you run the messages app and select an account and set a filter and then send 2 msgs to that account and then do a refresh in the Hub.  Those two messages including all the message for that account should show up in the message app.

 

in the messagesAdded() slot function put a debug in there and see it calls it when you do a fresh in the Hub.

Developer
Royster86
Posts: 102
Registered: ‎03-13-2012
My Device: 9360, P'9981, Z10

Re: MessageService messagesAdded signal not firing

Hi, I'm also having the same issue:

 

When individual messages are received, app detects them and fires the slot.

 

If I turn off push, and do a manual sync on my emails after I have sent a few test emails, 2 or more are downloaded to the inbox. The app, which is running in the background does nothing.

 

I looked into it and found I was only doing messageAdded, so I created a new connection using the messagesAdded signal. Same thing happens.

 

The messages example only seems to refresh when the account is reloaded/reselected, so can't really test that.

 

I've also looked through the other options in the API and nothing seems to fit the requirement..

 

Also, its my interpretation that "This signal is usually emitted on initial sync or if the server has been out of sync for some time." is exactly what I'm using it for (not for initial sync, but if the server has been out of sync - which I test by doing a manual refresh).

 

Only thing I'm wondering is if by me manually refreshing it, for some reason it doesn't trigger.

 

I'll try and set a sync every x minutes under account settings and see if this works.

 

Either way, to me it looks like an issue with the API not working correctly.

Developer
Royster86
Posts: 102
Registered: ‎03-13-2012
My Device: 9360, P'9981, Z10

Re: MessageService messagesAdded signal not firing

It also does not work when there are queued messages on the server and they are downloaded when the device polls (not manually refreshed).

 

I've added https://www.blackberry.com/jira/browse/BBTEN-1225 - please vote it up!

 

 

Contributor
gtirado
Posts: 13
Registered: ‎06-14-2011
My Device: -

Re: MessageService messagesAdded signal not firing

I had problems connecting the 'messagesAdded' signal too. I got to identify when the signal is launched, but when this happens it was throwing the following error message:

 

QObject::connect: Cannot queue arguments of type 'QList<bb::pim::message::ConversationKey>'
(Make sure 'QList<bb::pim::message::ConversationKey>' is registered using qRegisterMetaType().)

 

This thread helped me to fix it: http://qt-project.org/forums/viewthread/2884

 

Adding the following lines I could connect and handle the signal:

 

In .hpp file:

Q_DECLARE_METATYPE(QList<bb::pim::message::ConversationKey>)


 

in .cpp file:

qRegisterMetaType<QList<bb::pim::message::ConversationKey> >("QList<bb::pim::message::ConversationKey>");
qRegisterMetaType<QList<bb::pim::message::MessageKey> >("QList<bb::pim::message::MessageKey>");

...

connect(_messageService, SIGNAL(messagesAdded(bb::pim::account::AccountKey,QList<bb::pim::message::ConversationKey>,QList<bb::pim::message::MessageKey>)),
SLOT(onNewMessages(bb::pim::account::AccountKey, QList<bb::pim::message::ConversationKey>,QList<bb::pim::message::MessageKey>)),
                  Qt::QueuedConnection);

 

The signal is sent when a new messaging account is added (an email account, for example) or when multiple messages arrive from the server at once. To test the program is more convenient to try the first case, because we have not much control to force the second one.

 

Hope this will help.

Developer
Royster86
Posts: 102
Registered: ‎03-13-2012
My Device: 9360, P'9981, Z10

Re: MessageService messagesAdded signal not firing

Hi gtirado,

Apologies, I think I forgot to reply to this thread once I found the resolution.

As far as I can remember, I did exactly what you did to resolve the issue (although I registered the types within the main.cpp file).