/* Copyright 2017 Andrew Dawson * * This file is a part of Tusky. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with Tusky; if not, * see . */ package com.keylesspalace.tusky.db; import androidx.sqlite.db.SupportSQLiteDatabase; import androidx.room.Database; import androidx.room.RoomDatabase; import androidx.room.migration.Migration; import androidx.annotation.NonNull; /** * DB version & declare DAO */ @Database(entities = {TootEntity.class, AccountEntity.class, InstanceEntity.class}, version = 10) public abstract class AppDatabase extends RoomDatabase { public abstract TootDao tootDao(); public abstract AccountDao accountDao(); public abstract InstanceDao instanceDao(); public static final Migration MIGRATION_2_3 = new Migration(2, 3) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("CREATE TABLE TootEntity2 (uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, text TEXT, urls TEXT, contentWarning TEXT);"); database.execSQL("INSERT INTO TootEntity2 SELECT * FROM TootEntity;"); database.execSQL("DROP TABLE TootEntity;"); database.execSQL("ALTER TABLE TootEntity2 RENAME TO TootEntity;"); } }; public static final Migration MIGRATION_3_4 = new Migration(3, 4) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("ALTER TABLE TootEntity ADD COLUMN inReplyToId TEXT"); database.execSQL("ALTER TABLE TootEntity ADD COLUMN inReplyToText TEXT"); database.execSQL("ALTER TABLE TootEntity ADD COLUMN inReplyToUsername TEXT"); database.execSQL("ALTER TABLE TootEntity ADD COLUMN visibility INTEGER"); } }; public static final Migration MIGRATION_4_5 = new Migration(4, 5) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("CREATE TABLE `AccountEntity` (" + "`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + "`domain` TEXT NOT NULL, `accessToken` TEXT NOT NULL, " + "`isActive` INTEGER NOT NULL, `accountId` TEXT NOT NULL, " + "`username` TEXT NOT NULL, `displayName` TEXT NOT NULL, " + "`profilePictureUrl` TEXT NOT NULL, " + "`notificationsEnabled` INTEGER NOT NULL, " + "`notificationsMentioned` INTEGER NOT NULL, " + "`notificationsFollowed` INTEGER NOT NULL, " + "`notificationsReblogged` INTEGER NOT NULL, " + "`notificationsFavorited` INTEGER NOT NULL, " + "`notificationSound` INTEGER NOT NULL, " + "`notificationVibration` INTEGER NOT NULL, " + "`notificationLight` INTEGER NOT NULL, " + "`lastNotificationId` TEXT NOT NULL, " + "`activeNotifications` TEXT NOT NULL)"); database.execSQL("CREATE UNIQUE INDEX `index_AccountEntity_domain_accountId` ON `AccountEntity` (`domain`, `accountId`)"); } }; public static final Migration MIGRATION_5_6 = new Migration(5, 6) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("CREATE TABLE IF NOT EXISTS `EmojiListEntity` (`instance` TEXT NOT NULL, `emojiList` TEXT NOT NULL, PRIMARY KEY(`instance`))"); } }; public static final Migration MIGRATION_6_7 = new Migration(6, 7) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("CREATE TABLE IF NOT EXISTS `InstanceEntity` (`instance` TEXT NOT NULL, `emojiList` TEXT, `maximumTootCharacters` INTEGER, PRIMARY KEY(`instance`))"); database.execSQL("INSERT OR REPLACE INTO `InstanceEntity` SELECT `instance`,`emojiList`, NULL FROM `EmojiListEntity`;"); database.execSQL("DROP TABLE `EmojiListEntity`;"); } }; public static final Migration MIGRATION_7_8 = new Migration(7, 8) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `emojis` TEXT NOT NULL DEFAULT '[]'"); } }; public static final Migration MIGRATION_8_9 = new Migration(8, 9) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("ALTER TABLE `TootEntity` ADD COLUMN `descriptions` TEXT DEFAULT '[]'"); } }; public static final Migration MIGRATION_9_10 = new Migration(9, 10) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `defaultPostPrivacy` INTEGER NOT NULL DEFAULT 1"); database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `defaultMediaSensitivity` INTEGER NOT NULL DEFAULT 0"); database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `alwaysShowSensitiveMedia` INTEGER NOT NULL DEFAULT 0"); database.execSQL("ALTER TABLE `AccountEntity` ADD COLUMN `mediaPreviewEnabled` INTEGER NOT NULL DEFAULT '1'"); } }; }