Use sub directories to store message files

pull/209/head
M66B 2 years ago
parent 728d5b796c
commit 673af2028e

File diff suppressed because it is too large Load Diff

@ -68,7 +68,7 @@ import javax.mail.internet.InternetAddress;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 245,
version = 246,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -2477,6 +2477,12 @@ public abstract class DB extends RoomDatabase {
db.execSQL("UPDATE account SET keep_alive_noop = 1" +
" WHERE host = 'outlook.office365.com' AND pop = " + EntityAccount.TYPE_IMAP);
}
}).addMigrations(new Migration(245, 246) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
logMigration(startVersion, endVersion);
EntityMessage.convert(context);
}
}).addMigrations(new Migration(998, 999) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {

@ -577,10 +577,28 @@ public class EntityMessage implements Serializable {
}
static File getFile(Context context, Long id) {
File dir = Helper.ensureExists(new File(context.getFilesDir(), "messages"));
File root = new File(context.getFilesDir(), "messages");
File dir = Helper.ensureExists(new File(root, Long.toString(id / 1000)));
return new File(dir, id.toString());
}
static void convert(Context context) {
File root = new File(context.getFilesDir(), "messages");
File[] files = root.listFiles();
if (files == null)
return;
for (File file : files)
if (file.isFile())
try {
long id = Long.parseLong(file.getName());
File target = getFile(context, id);
if (!file.renameTo(target))
throw new IllegalArgumentException("Failed renaming to " + target);
} catch (Throwable ex) {
Log.e(ex);
}
}
File getFile(Context context) {
return getFile(context, id);
}

@ -2390,6 +2390,18 @@ public class Helper {
return size;
}
static List<File> listFiles(File dir) {
List<File> result = new ArrayList<>();
File[] files = dir.listFiles();
if (files != null)
for (File file : files)
if (file.isDirectory())
result.addAll(listFiles(file));
else
result.add(file);
return result;
}
static long getAvailableStorageSpace() {
StatFs stats = new StatFs(Environment.getDataDirectory().getAbsolutePath());
return stats.getAvailableBlocksLong() * stats.getBlockSizeLong();

@ -206,7 +206,7 @@ public class WorkerCleanup extends Worker {
long now = new Date().getTime();
List<File> files = new ArrayList<>();
File[] messages = new File(context.getFilesDir(), "messages").listFiles();
File[] messages = Helper.listFiles(new File(context.getFilesDir(), "messages")).toArray(new File[0]);
File[] revision = new File(context.getFilesDir(), "revision").listFiles();
File[] references = new File(context.getFilesDir(), "references").listFiles();
File[] encryption = new File(context.getFilesDir(), "encryption").listFiles();

Loading…
Cancel
Save