mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-15 14:05:05 -05:00
Add a per-account setting to choose how much of each message to download automatically.
This commit is contained in:
parent
e59987fdcb
commit
ae339f1ac8
@ -96,6 +96,39 @@
|
|||||||
<item>365</item>
|
<item>365</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
|
||||||
|
<string-array name="account_settings_autodownload_message_size_entries">
|
||||||
|
<item>@string/account_settings_autodownload_message_size_1</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_2</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_4</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_8</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_16</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_32</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_64</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_128</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_256</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_512</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_1024</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_2048</item>
|
||||||
|
<item>@string/account_settings_autodownload_message_size_0</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="account_settings_autodownload_message_size_values">
|
||||||
|
<item>1024</item>
|
||||||
|
<item>2048</item>
|
||||||
|
<item>4096</item>
|
||||||
|
<item>8192</item>
|
||||||
|
<item>16384</item>
|
||||||
|
<item>32768</item>
|
||||||
|
<item>65536</item>
|
||||||
|
<item>131072</item>
|
||||||
|
<item>262144</item>
|
||||||
|
<item>524288</item>
|
||||||
|
<item>1048576</item>
|
||||||
|
<item>2097152</item>
|
||||||
|
<item>0</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string-array name="account_settings_folder_display_mode_entries">
|
<string-array name="account_settings_folder_display_mode_entries">
|
||||||
<item>@string/account_settings_folder_display_mode_all</item>
|
<item>@string/account_settings_folder_display_mode_all</item>
|
||||||
<item>@string/account_settings_folder_display_mode_first_class</item>
|
<item>@string/account_settings_folder_display_mode_first_class</item>
|
||||||
|
@ -519,6 +519,22 @@ Welcome to K-9 Mail setup. K-9 is an open source mail client for Android origin
|
|||||||
|
|
||||||
<string name="account_settings_mail_display_count_label">Number of messages to display</string>
|
<string name="account_settings_mail_display_count_label">Number of messages to display</string>
|
||||||
|
|
||||||
|
<string name="account_settings_autodownload_message_size_label">Automatically download message content up to</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_1">1Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_2">2Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_4">4Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_8">8Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_16">16Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_32">32Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_64">64Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_128">128Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_256">256Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_512">512Kb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_1024">1Mb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_2048">2Mb</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_any">any size</string>
|
||||||
|
<string name="account_settings_autodownload_message_size_0">only download headers</string>
|
||||||
|
|
||||||
<string name="account_settings_message_age_label">Sync messages newer than</string>
|
<string name="account_settings_message_age_label">Sync messages newer than</string>
|
||||||
<string name="account_settings_message_age_any">the Big Bang</string>
|
<string name="account_settings_message_age_any">the Big Bang</string>
|
||||||
<string name="account_settings_message_age_0">one day</string>
|
<string name="account_settings_message_age_0">one day</string>
|
||||||
|
@ -95,6 +95,13 @@
|
|||||||
android:entryValues="@array/account_settings_message_age_values"
|
android:entryValues="@array/account_settings_message_age_values"
|
||||||
android:dialogTitle="@string/account_settings_message_age_label" />
|
android:dialogTitle="@string/account_settings_message_age_label" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:key="account_autodownload_size"
|
||||||
|
android:title="@string/account_settings_autodownload_message_size_label"
|
||||||
|
android:entries="@array/account_settings_autodownload_message_size_entries"
|
||||||
|
android:entryValues="@array/account_settings_autodownload_message_size_values"
|
||||||
|
android:dialogTitle="@string/account_settings_autodownload_message_size_label" />
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:key="folder_sync_mode"
|
android:key="folder_sync_mode"
|
||||||
android:title="@string/account_settings_folder_sync_mode_label"
|
android:title="@string/account_settings_folder_sync_mode_label"
|
||||||
|
@ -101,6 +101,7 @@ public class Account implements BaseAccount
|
|||||||
private Searchable searchableFolders;
|
private Searchable searchableFolders;
|
||||||
private boolean subscribedFoldersOnly;
|
private boolean subscribedFoldersOnly;
|
||||||
private int maximumPolledMessageAge;
|
private int maximumPolledMessageAge;
|
||||||
|
private int maximumAutoDownloadMessageSize;
|
||||||
// Tracks if we have sent a notification for this account for
|
// Tracks if we have sent a notification for this account for
|
||||||
// current set of fetched messages
|
// current set of fetched messages
|
||||||
private boolean mRingNotified;
|
private boolean mRingNotified;
|
||||||
@ -167,6 +168,7 @@ public class Account implements BaseAccount
|
|||||||
goToUnreadMessageSearch = false;
|
goToUnreadMessageSearch = false;
|
||||||
subscribedFoldersOnly = false;
|
subscribedFoldersOnly = false;
|
||||||
maximumPolledMessageAge = -1;
|
maximumPolledMessageAge = -1;
|
||||||
|
maximumAutoDownloadMessageSize = 32768;
|
||||||
mQuotePrefix = DEFAULT_QUOTE_PREFIX;
|
mQuotePrefix = DEFAULT_QUOTE_PREFIX;
|
||||||
mSyncRemoteDeletions = true;
|
mSyncRemoteDeletions = true;
|
||||||
|
|
||||||
@ -243,6 +245,8 @@ public class Account implements BaseAccount
|
|||||||
false);
|
false);
|
||||||
maximumPolledMessageAge = preferences.getPreferences().getInt(mUuid
|
maximumPolledMessageAge = preferences.getPreferences().getInt(mUuid
|
||||||
+ ".maximumPolledMessageAge", -1);
|
+ ".maximumPolledMessageAge", -1);
|
||||||
|
maximumAutoDownloadMessageSize = preferences.getPreferences().getInt(mUuid
|
||||||
|
+ ".maximumAutoDownloadMessageSize", 32768);
|
||||||
mQuotePrefix = preferences.getPreferences().getString(mUuid + ".quotePrefix", DEFAULT_QUOTE_PREFIX);
|
mQuotePrefix = preferences.getPreferences().getString(mUuid + ".quotePrefix", DEFAULT_QUOTE_PREFIX);
|
||||||
for (String type : networkTypes)
|
for (String type : networkTypes)
|
||||||
{
|
{
|
||||||
@ -415,6 +419,7 @@ public class Account implements BaseAccount
|
|||||||
editor.remove(mUuid + ".goToUnreadMessageSearch");
|
editor.remove(mUuid + ".goToUnreadMessageSearch");
|
||||||
editor.remove(mUuid + ".subscribedFoldersOnly");
|
editor.remove(mUuid + ".subscribedFoldersOnly");
|
||||||
editor.remove(mUuid + ".maximumPolledMessageAge");
|
editor.remove(mUuid + ".maximumPolledMessageAge");
|
||||||
|
editor.remove(mUuid + ".maximumAutoDownloadMessageSize");
|
||||||
editor.remove(mUuid + ".quotePrefix");
|
editor.remove(mUuid + ".quotePrefix");
|
||||||
for (String type : networkTypes)
|
for (String type : networkTypes)
|
||||||
{
|
{
|
||||||
@ -508,6 +513,7 @@ public class Account implements BaseAccount
|
|||||||
editor.putBoolean(mUuid + ".goToUnreadMessageSearch", goToUnreadMessageSearch);
|
editor.putBoolean(mUuid + ".goToUnreadMessageSearch", goToUnreadMessageSearch);
|
||||||
editor.putBoolean(mUuid + ".subscribedFoldersOnly", subscribedFoldersOnly);
|
editor.putBoolean(mUuid + ".subscribedFoldersOnly", subscribedFoldersOnly);
|
||||||
editor.putInt(mUuid + ".maximumPolledMessageAge", maximumPolledMessageAge);
|
editor.putInt(mUuid + ".maximumPolledMessageAge", maximumPolledMessageAge);
|
||||||
|
editor.putInt(mUuid + ".maximumAutoDownloadMessageSize", maximumAutoDownloadMessageSize);
|
||||||
editor.putString(mUuid + ".quotePrefix", mQuotePrefix);
|
editor.putString(mUuid + ".quotePrefix", mQuotePrefix);
|
||||||
|
|
||||||
for (String type : networkTypes)
|
for (String type : networkTypes)
|
||||||
@ -1331,6 +1337,16 @@ public class Account implements BaseAccount
|
|||||||
this.maximumPolledMessageAge = maximumPolledMessageAge;
|
this.maximumPolledMessageAge = maximumPolledMessageAge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized int getMaximumAutoDownloadMessageSize()
|
||||||
|
{
|
||||||
|
return maximumAutoDownloadMessageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void setMaximumAutoDownloadMessageSize(int maximumAutoDownloadMessageSize)
|
||||||
|
{
|
||||||
|
this.maximumAutoDownloadMessageSize = maximumAutoDownloadMessageSize;
|
||||||
|
}
|
||||||
|
|
||||||
public Date getEarliestPollDate()
|
public Date getEarliestPollDate()
|
||||||
{
|
{
|
||||||
int age = getMaximumPolledMessageAge();
|
int age = getMaximumPolledMessageAge();
|
||||||
|
@ -57,6 +57,7 @@ public class AccountSettings extends K9PreferenceActivity
|
|||||||
private static final String PREFERENCE_LED_COLOR = "led_color";
|
private static final String PREFERENCE_LED_COLOR = "led_color";
|
||||||
private static final String PREFERENCE_NOTIFICATION_OPENS_UNREAD = "notification_opens_unread";
|
private static final String PREFERENCE_NOTIFICATION_OPENS_UNREAD = "notification_opens_unread";
|
||||||
private static final String PREFERENCE_MESSAGE_AGE = "account_message_age";
|
private static final String PREFERENCE_MESSAGE_AGE = "account_message_age";
|
||||||
|
private static final String PREFERENCE_MESSAGE_SIZE = "account_autodownload_size";
|
||||||
private static final String PREFERENCE_QUOTE_PREFIX = "account_quote_prefix";
|
private static final String PREFERENCE_QUOTE_PREFIX = "account_quote_prefix";
|
||||||
private static final String PREFERENCE_SYNC_REMOTE_DELETIONS = "account_sync_remote_deletetions";
|
private static final String PREFERENCE_SYNC_REMOTE_DELETIONS = "account_sync_remote_deletetions";
|
||||||
|
|
||||||
@ -67,6 +68,7 @@ public class AccountSettings extends K9PreferenceActivity
|
|||||||
private ListPreference mCheckFrequency;
|
private ListPreference mCheckFrequency;
|
||||||
private ListPreference mDisplayCount;
|
private ListPreference mDisplayCount;
|
||||||
private ListPreference mMessageAge;
|
private ListPreference mMessageAge;
|
||||||
|
private ListPreference mMessageSize;
|
||||||
private CheckBoxPreference mAccountDefault;
|
private CheckBoxPreference mAccountDefault;
|
||||||
private CheckBoxPreference mAccountNotify;
|
private CheckBoxPreference mAccountNotify;
|
||||||
private CheckBoxPreference mAccountNotifySelf;
|
private CheckBoxPreference mAccountNotifySelf;
|
||||||
@ -313,6 +315,25 @@ public class AccountSettings extends K9PreferenceActivity
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mMessageSize = (ListPreference) findPreference(PREFERENCE_MESSAGE_SIZE);
|
||||||
|
mMessageSize.setValue(String.valueOf(mAccount.getMaximumAutoDownloadMessageSize()));
|
||||||
|
mMessageSize.setSummary(mMessageSize.getEntry());
|
||||||
|
mMessageSize.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
|
||||||
|
{
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue)
|
||||||
|
{
|
||||||
|
final String summary = newValue.toString();
|
||||||
|
int index = mMessageSize.findIndexOfValue(summary);
|
||||||
|
mMessageSize.setSummary(mMessageSize.getEntries()[index]);
|
||||||
|
mMessageSize.setValue(summary);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mAccountDefault = (CheckBoxPreference) findPreference(PREFERENCE_DEFAULT);
|
mAccountDefault = (CheckBoxPreference) findPreference(PREFERENCE_DEFAULT);
|
||||||
mAccountDefault.setChecked(
|
mAccountDefault.setChecked(
|
||||||
mAccount.equals(Preferences.getPreferences(this).getDefaultAccount()));
|
mAccount.equals(Preferences.getPreferences(this).getDefaultAccount()));
|
||||||
@ -511,6 +532,7 @@ public class AccountSettings extends K9PreferenceActivity
|
|||||||
mAccount.setShowOngoing(mAccountNotifySync.isChecked());
|
mAccount.setShowOngoing(mAccountNotifySync.isChecked());
|
||||||
mAccount.setDisplayCount(Integer.parseInt(mDisplayCount.getValue()));
|
mAccount.setDisplayCount(Integer.parseInt(mDisplayCount.getValue()));
|
||||||
mAccount.setMaximumPolledMessageAge(Integer.parseInt(mMessageAge.getValue()));
|
mAccount.setMaximumPolledMessageAge(Integer.parseInt(mMessageAge.getValue()));
|
||||||
|
mAccount.setMaximumAutoDownloadMessageSize(Integer.parseInt(mMessageSize.getValue()));
|
||||||
mAccount.setVibrate(mAccountVibrate.isChecked());
|
mAccount.setVibrate(mAccountVibrate.isChecked());
|
||||||
mAccount.setVibratePattern(Integer.parseInt(mAccountVibratePattern.getValue()));
|
mAccount.setVibratePattern(Integer.parseInt(mAccountVibratePattern.getValue()));
|
||||||
mAccount.setVibrateTimes(Integer.parseInt(mAccountVibrateTimes.getText()));
|
mAccount.setVibrateTimes(Integer.parseInt(mAccountVibrateTimes.getText()));
|
||||||
|
@ -101,7 +101,6 @@ public class MessagingController implements Runnable
|
|||||||
* </pre>
|
* </pre>
|
||||||
* So 25k gives good performance and a reasonable data footprint. Sounds good to me.
|
* So 25k gives good performance and a reasonable data footprint. Sounds good to me.
|
||||||
*/
|
*/
|
||||||
private static final int MAX_SMALL_MESSAGE_SIZE = Store.FETCH_BODY_SANE_SUGGESTED_SIZE;
|
|
||||||
|
|
||||||
private static final String PENDING_COMMAND_MOVE_OR_COPY = "com.fsck.k9.MessagingController.moveOrCopy";
|
private static final String PENDING_COMMAND_MOVE_OR_COPY = "com.fsck.k9.MessagingController.moveOrCopy";
|
||||||
private static final String PENDING_COMMAND_MOVE_OR_COPY_BULK = "com.fsck.k9.MessagingController.moveOrCopyBulk";
|
private static final String PENDING_COMMAND_MOVE_OR_COPY_BULK = "com.fsck.k9.MessagingController.moveOrCopyBulk";
|
||||||
@ -1621,7 +1620,7 @@ public class MessagingController implements Runnable
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.getSize() > (MAX_SMALL_MESSAGE_SIZE))
|
if (message.getSize() > account.getMaximumAutoDownloadMessageSize())
|
||||||
{
|
{
|
||||||
largeMessages.add(message);
|
largeMessages.add(message);
|
||||||
}
|
}
|
||||||
@ -1841,11 +1840,11 @@ public class MessagingController implements Runnable
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Mark the message as fully downloaded if the message size is smaller than
|
* Mark the message as fully downloaded if the message size is smaller than
|
||||||
* the FETCH_BODY_SANE_SUGGESTED_SIZE, otherwise mark as only a partial
|
* the account's autodownload size limit, otherwise mark as only a partial
|
||||||
* download. This will prevent the system from downloading the same message
|
* download. This will prevent the system from downloading the same message
|
||||||
* twice.
|
* twice.
|
||||||
*/
|
*/
|
||||||
if (message.getSize() < Store.FETCH_BODY_SANE_SUGGESTED_SIZE)
|
if (message.getSize() < account.getMaximumAutoDownloadMessageSize())
|
||||||
{
|
{
|
||||||
localMessage.setFlag(Flag.X_DOWNLOADED_FULL, true);
|
localMessage.setFlag(Flag.X_DOWNLOADED_FULL, true);
|
||||||
}
|
}
|
||||||
|
@ -22,13 +22,6 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public abstract class Store
|
public abstract class Store
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* A global suggestion to Store implementors on how much of the body
|
|
||||||
* should be returned on FetchProfile.Item.BODY_SANE requests.
|
|
||||||
*/
|
|
||||||
//Matching MessagingController.MAX_SMALL_MESSAGE_SIZE
|
|
||||||
public static final int FETCH_BODY_SANE_SUGGESTED_SIZE = (50 * 1024);
|
|
||||||
|
|
||||||
protected static final int SOCKET_CONNECT_TIMEOUT = 30000;
|
protected static final int SOCKET_CONNECT_TIMEOUT = 30000;
|
||||||
protected static final int SOCKET_READ_TIMEOUT = 60000;
|
protected static final int SOCKET_READ_TIMEOUT = 60000;
|
||||||
|
|
||||||
|
@ -1205,7 +1205,7 @@ public class ImapStore extends Store
|
|||||||
}
|
}
|
||||||
if (fp.contains(FetchProfile.Item.BODY_SANE))
|
if (fp.contains(FetchProfile.Item.BODY_SANE))
|
||||||
{
|
{
|
||||||
fetchFields.add(String.format("BODY.PEEK[]<0.%d>", FETCH_BODY_SANE_SUGGESTED_SIZE));
|
fetchFields.add(String.format("BODY.PEEK[]<0.%d>", mAccount.getMaximumAutoDownloadMessageSize()));
|
||||||
}
|
}
|
||||||
if (fp.contains(FetchProfile.Item.BODY))
|
if (fp.contains(FetchProfile.Item.BODY))
|
||||||
{
|
{
|
||||||
@ -1327,7 +1327,7 @@ public class ImapStore extends Store
|
|||||||
String partId = parts[0];
|
String partId = parts[0];
|
||||||
if ("TEXT".equalsIgnoreCase(partId))
|
if ("TEXT".equalsIgnoreCase(partId))
|
||||||
{
|
{
|
||||||
fetch = String.format("BODY.PEEK[TEXT]<0.%d>", FETCH_BODY_SANE_SUGGESTED_SIZE);
|
fetch = String.format("BODY.PEEK[TEXT]<0.%d>", mAccount.getMaximumAutoDownloadMessageSize());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -697,7 +697,7 @@ public class Pop3Store extends Store
|
|||||||
* divided by the maximum line size (76).
|
* divided by the maximum line size (76).
|
||||||
*/
|
*/
|
||||||
fetchBody(pop3Message,
|
fetchBody(pop3Message,
|
||||||
FETCH_BODY_SANE_SUGGESTED_SIZE / 76);
|
(mAccount.getMaximumAutoDownloadMessageSize() / 76));
|
||||||
}
|
}
|
||||||
else if (fp.contains(FetchProfile.Item.STRUCTURE))
|
else if (fp.contains(FetchProfile.Item.STRUCTURE))
|
||||||
{
|
{
|
||||||
|
@ -1537,9 +1537,8 @@ public class WebDavStore extends Store
|
|||||||
|
|
||||||
if (fp.contains(FetchProfile.Item.BODY_SANE))
|
if (fp.contains(FetchProfile.Item.BODY_SANE))
|
||||||
{
|
{
|
||||||
fetchMessages(messages, listener, FETCH_BODY_SANE_SUGGESTED_SIZE / 76);
|
fetchMessages(messages, listener, (mAccount.getMaximumAutoDownloadMessageSize() / 76));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fp.contains(FetchProfile.Item.BODY))
|
if (fp.contains(FetchProfile.Item.BODY))
|
||||||
{
|
{
|
||||||
fetchMessages(messages, listener, -1);
|
fetchMessages(messages, listener, -1);
|
||||||
|
Loading…
Reference in New Issue
Block a user