1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-12-25 00:58:50 -05:00

Use a heuristic to try to avoid notifying POP3 users about older mail

messages
This commit is contained in:
Jesse Vincent 2011-01-24 03:27:14 +00:00
parent 7858f72c53
commit 22f422ea29
3 changed files with 86 additions and 8 deletions

View File

@ -78,6 +78,7 @@ public class Account implements BaseAccount
private int mDisplayCount; private int mDisplayCount;
private int mChipColor; private int mChipColor;
private long mLastAutomaticCheckTime; private long mLastAutomaticCheckTime;
private long mLatestOldMessageSeenTime;
private boolean mNotifyNewMail; private boolean mNotifyNewMail;
private boolean mNotifySelfNewMail; private boolean mNotifySelfNewMail;
private String mDraftsFolderName; private String mDraftsFolderName;
@ -257,14 +258,11 @@ public class Account implements BaseAccount
{ {
mDisplayCount = K9.DEFAULT_VISIBLE_LIMIT; mDisplayCount = K9.DEFAULT_VISIBLE_LIMIT;
} }
mLastAutomaticCheckTime = prefs.getLong(mUuid mLastAutomaticCheckTime = prefs.getLong(mUuid + ".lastAutomaticCheckTime", 0);
+ ".lastAutomaticCheckTime", 0); mLatestOldMessageSeenTime = prefs.getLong(mUuid +".latestOldMessageSeenTime",0);
mNotifyNewMail = prefs.getBoolean(mUuid + ".notifyNewMail", mNotifyNewMail = prefs.getBoolean(mUuid + ".notifyNewMail", false);
false); mNotifySelfNewMail = prefs.getBoolean(mUuid + ".notifySelfNewMail", true);
mNotifySelfNewMail = prefs.getBoolean(mUuid + ".notifySelfNewMail", mNotifySync = prefs.getBoolean(mUuid + ".notifyMailCheck", false);
true);
mNotifySync = prefs.getBoolean(mUuid + ".notifyMailCheck",
false);
mDeletePolicy = prefs.getInt(mUuid + ".deletePolicy", 0); mDeletePolicy = prefs.getInt(mUuid + ".deletePolicy", 0);
mDraftsFolderName = prefs.getString(mUuid + ".draftsFolderName", mDraftsFolderName = prefs.getString(mUuid + ".draftsFolderName",
"Drafts"); "Drafts");
@ -445,6 +443,7 @@ public class Account implements BaseAccount
editor.remove(mUuid + ".saveAllHeaders"); editor.remove(mUuid + ".saveAllHeaders");
editor.remove(mUuid + ".idleRefreshMinutes"); editor.remove(mUuid + ".idleRefreshMinutes");
editor.remove(mUuid + ".lastAutomaticCheckTime"); editor.remove(mUuid + ".lastAutomaticCheckTime");
editor.remove(mUuid + ".latestOldMessageSeenTime");
editor.remove(mUuid + ".notifyNewMail"); editor.remove(mUuid + ".notifyNewMail");
editor.remove(mUuid + ".notifySelfNewMail"); editor.remove(mUuid + ".notifySelfNewMail");
editor.remove(mUuid + ".deletePolicy"); editor.remove(mUuid + ".deletePolicy");
@ -546,6 +545,7 @@ public class Account implements BaseAccount
editor.putBoolean(mUuid + ".pushPollOnConnect", mPushPollOnConnect); editor.putBoolean(mUuid + ".pushPollOnConnect", mPushPollOnConnect);
editor.putInt(mUuid + ".displayCount", mDisplayCount); editor.putInt(mUuid + ".displayCount", mDisplayCount);
editor.putLong(mUuid + ".lastAutomaticCheckTime", mLastAutomaticCheckTime); editor.putLong(mUuid + ".lastAutomaticCheckTime", mLastAutomaticCheckTime);
editor.putLong(mUuid + ".latestOldMessageSeenTime", mLatestOldMessageSeenTime);
editor.putBoolean(mUuid + ".notifyNewMail", mNotifyNewMail); editor.putBoolean(mUuid + ".notifyNewMail", mNotifyNewMail);
editor.putBoolean(mUuid + ".notifySelfNewMail", mNotifySelfNewMail); editor.putBoolean(mUuid + ".notifySelfNewMail", mNotifySelfNewMail);
editor.putBoolean(mUuid + ".notifyMailCheck", mNotifySync); editor.putBoolean(mUuid + ".notifyMailCheck", mNotifySync);
@ -850,6 +850,16 @@ public class Account implements BaseAccount
this.mLastAutomaticCheckTime = lastAutomaticCheckTime; this.mLastAutomaticCheckTime = lastAutomaticCheckTime;
} }
public synchronized long getLatestOldMessageSeenTime()
{
return mLatestOldMessageSeenTime;
}
public synchronized void setLatestOldMessageSeenTime(long latestOldMessageSeenTime)
{
this.mLatestOldMessageSeenTime = latestOldMessageSeenTime;
}
public synchronized boolean isNotifyNewMail() public synchronized boolean isNotifyNewMail()
{ {
return mNotifyNewMail; return mNotifyNewMail;

View File

@ -1396,6 +1396,9 @@ public class MessagingController implements Runnable
final LocalFolder localFolder, List<Message> inputMessages, boolean flagSyncOnly) throws MessagingException final LocalFolder localFolder, List<Message> inputMessages, boolean flagSyncOnly) throws MessagingException
{ {
final Date earliestDate = account.getEarliestPollDate(); final Date earliestDate = account.getEarliestPollDate();
Date downloadStarted = new Date(); // now
if (earliestDate != null) if (earliestDate != null)
{ {
if (K9.DEBUG) if (K9.DEBUG)
@ -1540,6 +1543,25 @@ public class MessagingController implements Runnable
}); });
// If the oldest message seen on this sync is newer than
// the oldest message seen on the previous sync, then
// we want to move our high-water mark forward
// this is all here just for pop which only syncs inbox
// this would be a little wrong for IMAP (we'd want a folder-level pref, not an account level pref.)
// fortunately, we just don't care.
Long oldestMessageTime = localFolder.getOldestMessageDate();
if (oldestMessageTime != null)
{
Date oldestExtantMessage = new Date(oldestMessageTime);
if (oldestExtantMessage.before(downloadStarted) &&
oldestExtantMessage.after(new Date(account.getLatestOldMessageSeenTime())))
{
account.setLatestOldMessageSeenTime(oldestExtantMessage.getTime());
account.save(Preferences.getPreferences(mApplication.getApplicationContext()));
}
}
return newMessages.get(); return newMessages.get();
} }
private void evaluateMessageForDownload(final Message message, final String folder, private void evaluateMessageForDownload(final Message message, final String folder,
@ -4693,6 +4715,17 @@ public class MessagingController implements Runnable
return false; return false;
} }
// If the account us a POP3 account and the message is older than
// the oldest message we've previously seen then don't notify about it
if (account.getStoreUri().startsWith("pop3") )
{
if ( message.olderThan(new Date(account.getLatestOldMessageSeenTime())))
{
return false;
}
}
// If we have a message, set the notification to "<From>: <Subject>" // If we have a message, set the notification to "<From>: <Subject>"
StringBuilder messageNotice = new StringBuilder(); StringBuilder messageNotice = new StringBuilder();
final KeyguardManager keyguardService = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); final KeyguardManager keyguardService = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

View File

@ -3281,6 +3281,41 @@ public class LocalStore extends Store implements Serializable
Log.d(K9.LOG_TAG, "Updated last UID for folder " + mName + " to " + lastUid); Log.d(K9.LOG_TAG, "Updated last UID for folder " + mName + " to " + lastUid);
mLastUid = lastUid; mLastUid = lastUid;
} }
public long getOldestMessageDate() throws MessagingException
{
return database.execute(false, new DbCallback<Long>()
{
@Override
public Long doDbWork(final SQLiteDatabase db)
{
Cursor cursor = null;
try
{
open(OpenMode.READ_ONLY);
cursor = db.rawQuery("SELECT MIN(date) FROM messages WHERE folder_id=?", new String[] { Long.toString(mFolderId) });
if (cursor.getCount() > 0)
{
cursor.moveToFirst();
return cursor.getLong(0);
}
}
catch (Exception e)
{
Log.e(K9.LOG_TAG, "Unable to fetch oldest message date: ", e);
}
finally
{
if (cursor != null)
{
cursor.close();
}
}
return null;
}
});
}
} }
public static class LocalTextBody extends TextBody public static class LocalTextBody extends TextBody