NewPipe-app-android/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java

68 lines
2.2 KiB
Java
Raw Normal View History

package org.schabi.newpipe;
2019-05-08 19:17:54 +02:00
import static org.schabi.newpipe.database.AppDatabase.DATABASE_NAME;
import static org.schabi.newpipe.database.Migrations.MIGRATION_1_2;
import static org.schabi.newpipe.database.Migrations.MIGRATION_2_3;
import static org.schabi.newpipe.database.Migrations.MIGRATION_3_4;
import static org.schabi.newpipe.database.Migrations.MIGRATION_4_5;
import android.content.Context;
2020-02-21 14:13:01 +01:00
import android.database.Cursor;
2019-10-04 14:59:08 +02:00
import androidx.annotation.NonNull;
2020-02-21 14:13:01 +01:00
import androidx.room.Room;
import org.schabi.newpipe.database.AppDatabase;
public final class NewPipeDatabase {
private static volatile AppDatabase databaseInstance;
private NewPipeDatabase() {
//no instance
}
private static AppDatabase getDatabase(final Context context) {
return Room
.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME)
2019-05-08 19:17:54 +02:00
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5)
.build();
}
@NonNull
public static AppDatabase getInstance(@NonNull final Context context) {
AppDatabase result = databaseInstance;
if (result == null) {
synchronized (NewPipeDatabase.class) {
result = databaseInstance;
if (result == null) {
databaseInstance = getDatabase(context);
result = databaseInstance;
}
}
}
return result;
}
2020-02-21 14:13:01 +01:00
public static void checkpoint() {
if (databaseInstance == null) {
2020-02-21 14:13:01 +01:00
throw new IllegalStateException("database is not initialized");
}
2020-08-16 10:24:58 +02:00
final Cursor c = databaseInstance.query("pragma wal_checkpoint(full)", null);
if (c.moveToFirst() && c.getInt(0) == 1) {
2020-02-21 14:13:01 +01:00
throw new RuntimeException("Checkpoint was blocked from completing");
}
}
2021-07-10 14:46:51 +02:00
public static void close() {
if (databaseInstance != null) {
synchronized (NewPipeDatabase.class) {
if (databaseInstance != null) {
databaseInstance.close();
databaseInstance = null;
}
}
}
}
}