NextcloudDatabase.kt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Nextcloud - Android Client
  3. *
  4. * SPDX-FileCopyrightText: 2022 Álvaro Brey <alvaro@alvarobrey.com>
  5. * SPDX-FileCopyrightText: 2022 Nextcloud GmbH
  6. * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
  7. */
  8. package com.nextcloud.client.database
  9. import android.content.Context
  10. import androidx.room.AutoMigration
  11. import androidx.room.Database
  12. import androidx.room.Room
  13. import androidx.room.RoomDatabase
  14. import com.nextcloud.client.core.Clock
  15. import com.nextcloud.client.core.ClockImpl
  16. import com.nextcloud.client.database.dao.ArbitraryDataDao
  17. import com.nextcloud.client.database.dao.FileDao
  18. import com.nextcloud.client.database.entity.ArbitraryDataEntity
  19. import com.nextcloud.client.database.entity.CapabilityEntity
  20. import com.nextcloud.client.database.entity.ExternalLinkEntity
  21. import com.nextcloud.client.database.entity.FileEntity
  22. import com.nextcloud.client.database.entity.FilesystemEntity
  23. import com.nextcloud.client.database.entity.ShareEntity
  24. import com.nextcloud.client.database.entity.SyncedFolderEntity
  25. import com.nextcloud.client.database.entity.UploadEntity
  26. import com.nextcloud.client.database.entity.VirtualEntity
  27. import com.nextcloud.client.database.migrations.DatabaseMigrationUtil
  28. import com.nextcloud.client.database.migrations.Migration67to68
  29. import com.nextcloud.client.database.migrations.RoomMigration
  30. import com.nextcloud.client.database.migrations.addLegacyMigrations
  31. import com.owncloud.android.db.ProviderMeta
  32. @Database(
  33. entities = [
  34. ArbitraryDataEntity::class,
  35. CapabilityEntity::class,
  36. ExternalLinkEntity::class,
  37. FileEntity::class,
  38. FilesystemEntity::class,
  39. ShareEntity::class,
  40. SyncedFolderEntity::class,
  41. UploadEntity::class,
  42. VirtualEntity::class
  43. ],
  44. version = ProviderMeta.DB_VERSION,
  45. autoMigrations = [
  46. AutoMigration(from = 65, to = 66),
  47. AutoMigration(from = 66, to = 67),
  48. AutoMigration(from = 68, to = 69),
  49. AutoMigration(from = 69, to = 70),
  50. AutoMigration(from = 70, to = 71, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
  51. AutoMigration(from = 71, to = 72),
  52. AutoMigration(from = 72, to = 73),
  53. AutoMigration(from = 73, to = 74, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
  54. AutoMigration(from = 74, to = 75),
  55. AutoMigration(from = 75, to = 76),
  56. AutoMigration(from = 76, to = 77),
  57. AutoMigration(from = 77, to = 78),
  58. AutoMigration(from = 78, to = 79, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
  59. AutoMigration(from = 79, to = 80),
  60. AutoMigration(from = 80, to = 81),
  61. AutoMigration(from = 81, to = 82),
  62. AutoMigration(from = 82, to = 83)
  63. ],
  64. exportSchema = true
  65. )
  66. @Suppress("Detekt.UnnecessaryAbstractClass") // needed by Room
  67. abstract class NextcloudDatabase : RoomDatabase() {
  68. abstract fun arbitraryDataDao(): ArbitraryDataDao
  69. abstract fun fileDao(): FileDao
  70. companion object {
  71. const val FIRST_ROOM_DB_VERSION = 65
  72. private var instance: NextcloudDatabase? = null
  73. @JvmStatic
  74. @Suppress("DeprecatedCallableAddReplaceWith")
  75. @Deprecated("Here for legacy purposes, inject this class or use getInstance(context, clock) instead")
  76. fun getInstance(context: Context): NextcloudDatabase {
  77. return getInstance(context, ClockImpl())
  78. }
  79. @JvmStatic
  80. fun getInstance(context: Context, clock: Clock): NextcloudDatabase {
  81. if (instance == null) {
  82. instance = Room
  83. .databaseBuilder(context, NextcloudDatabase::class.java, ProviderMeta.DB_NAME)
  84. .allowMainThreadQueries()
  85. .addLegacyMigrations(clock, context)
  86. .addMigrations(RoomMigration())
  87. .addMigrations(Migration67to68())
  88. .fallbackToDestructiveMigration()
  89. .build()
  90. }
  91. return instance!!
  92. }
  93. }
  94. }