mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-14 21:45:14 -05:00
Rather than doing a full count of all the unread messages in each and
every folder for each message downloaded in a session, factor the "unread messages" count out into the calling code. It's slightly less clean, but a pretty huge performance gain. Fixes issue 1443
This commit is contained in:
parent
1bea931ed0
commit
d3cc1fdfdc
@ -1681,6 +1681,21 @@ public class MessagingController implements Runnable
|
|||||||
|
|
||||||
final Date earliestDate = account.getEarliestPollDate();
|
final Date earliestDate = account.getEarliestPollDate();
|
||||||
|
|
||||||
|
int tmpRead = 0;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AccountStats stats = account.getStats(mApplication);
|
||||||
|
tmpRead = stats.unreadMessageCount;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (MessagingException e)
|
||||||
|
{
|
||||||
|
Log.e(K9.LOG_TAG, "Unable to getUnreadMessageCount for account: " + account, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
final int unreadBeforeStart = tmpRead;
|
||||||
|
|
||||||
|
|
||||||
if (K9.DEBUG)
|
if (K9.DEBUG)
|
||||||
Log.d(K9.LOG_TAG, "SYNC: Fetching small messages for folder " + folder);
|
Log.d(K9.LOG_TAG, "SYNC: Fetching small messages for folder " + folder);
|
||||||
@ -1723,11 +1738,12 @@ public class MessagingController implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Send a notification of this message
|
// Send a notification of this message
|
||||||
if (notifyAccount(mApplication, account, message) == true)
|
|
||||||
|
|
||||||
|
if (notifyAccount(mApplication, account, message, (unreadBeforeStart + newMessages.get())) == true)
|
||||||
{
|
{
|
||||||
newMessages.incrementAndGet();
|
newMessages.incrementAndGet();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1763,6 +1779,20 @@ public class MessagingController implements Runnable
|
|||||||
final String folder = remoteFolder.getName();
|
final String folder = remoteFolder.getName();
|
||||||
|
|
||||||
final Date earliestDate = account.getEarliestPollDate();
|
final Date earliestDate = account.getEarliestPollDate();
|
||||||
|
|
||||||
|
int unreadBeforeStart = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AccountStats stats = account.getStats(mApplication);
|
||||||
|
unreadBeforeStart = stats.unreadMessageCount;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (MessagingException e)
|
||||||
|
{
|
||||||
|
Log.e(K9.LOG_TAG, "Unable to getUnreadMessageCount for account: " + account, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (K9.DEBUG)
|
if (K9.DEBUG)
|
||||||
Log.d(K9.LOG_TAG, "SYNC: Fetching large messages for folder " + folder);
|
Log.d(K9.LOG_TAG, "SYNC: Fetching large messages for folder " + folder);
|
||||||
|
|
||||||
@ -1868,9 +1898,9 @@ public class MessagingController implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send a notification of this message
|
// Send a notification of this message
|
||||||
if (notifyAccount(mApplication, account, message) == true)
|
if (notifyAccount(mApplication, account, message, (unreadBeforeStart+newMessages.get())) == true)
|
||||||
{
|
{
|
||||||
newMessages.incrementAndGet();
|
newMessages.incrementAndGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4511,19 +4541,8 @@ public class MessagingController implements Runnable
|
|||||||
/** Creates a notification of new email messages
|
/** Creates a notification of new email messages
|
||||||
* ringtone, lights, and vibration to be played
|
* ringtone, lights, and vibration to be played
|
||||||
*/
|
*/
|
||||||
private boolean notifyAccount(Context context, Account account, Message message)
|
private boolean notifyAccount(Context context, Account account, Message message, int unreadMessageCount)
|
||||||
{
|
{
|
||||||
int unreadMessageCount = 0;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
AccountStats stats = account.getStats(context);
|
|
||||||
unreadMessageCount = stats.unreadMessageCount;
|
|
||||||
}
|
|
||||||
catch (MessagingException e)
|
|
||||||
{
|
|
||||||
Log.e(K9.LOG_TAG, "Unable to getUnreadMessageCount for account: " + account, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do not notify if the user does not have notifications
|
// Do not notify if the user does not have notifications
|
||||||
// enabled or if the message has been read
|
// enabled or if the message has been read
|
||||||
if (!account.isNotifyNewMail() || message.isSet(Flag.SEEN))
|
if (!account.isNotifyNewMail() || message.isSet(Flag.SEEN))
|
||||||
@ -4531,6 +4550,7 @@ public class MessagingController implements Runnable
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Folder folder = message.getFolder();
|
Folder folder = message.getFolder();
|
||||||
if (folder != null)
|
if (folder != null)
|
||||||
{
|
{
|
||||||
@ -4596,6 +4616,8 @@ public class MessagingController implements Runnable
|
|||||||
{
|
{
|
||||||
Log.e(K9.LOG_TAG, "Unable to get message information for notification.", e);
|
Log.e(K9.LOG_TAG, "Unable to get message information for notification.", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// If we could not set a per-message notification, revert to a default message
|
// If we could not set a per-message notification, revert to a default message
|
||||||
if (messageNotice.length() == 0)
|
if (messageNotice.length() == 0)
|
||||||
{
|
{
|
||||||
@ -4606,12 +4628,12 @@ public class MessagingController implements Runnable
|
|||||||
NotificationManager notifMgr =
|
NotificationManager notifMgr =
|
||||||
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
|
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
Notification notif = new Notification(R.drawable.stat_notify_email_generic, messageNotice, System.currentTimeMillis());
|
Notification notif = new Notification(R.drawable.stat_notify_email_generic, messageNotice, System.currentTimeMillis());
|
||||||
notif.number = unreadMessageCount;
|
notif.number = unreadMessageCount+1;
|
||||||
|
|
||||||
Intent i = FolderList.actionHandleNotification(context, account, account.getAutoExpandFolderName());
|
Intent i = FolderList.actionHandleNotification(context, account, account.getAutoExpandFolderName());
|
||||||
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
|
PendingIntent pi = PendingIntent.getActivity(context, 0, i, 0);
|
||||||
|
|
||||||
String accountNotice = context.getString(R.string.notification_new_one_account_fmt, unreadMessageCount, account.getDescription());
|
String accountNotice = context.getString(R.string.notification_new_one_account_fmt, (unreadMessageCount+1), account.getDescription());
|
||||||
notif.setLatestEventInfo(context, accountNotice, messageNotice, pi);
|
notif.setLatestEventInfo(context, accountNotice, messageNotice, pi);
|
||||||
|
|
||||||
// Only ring or vibrate if we have not done so already on this
|
// Only ring or vibrate if we have not done so already on this
|
||||||
|
Loading…
Reference in New Issue
Block a user