Make persistent storage per server base.
Signed-off-by: Yahor Berdnikau <egorr.berd@gmail.com>
This commit is contained in:
parent
fa7b8b1c88
commit
334ffbf5e9
|
@ -11,10 +11,14 @@ internal const val STORAGE_DIR_NAME = "persistent_storage"
|
||||||
/**
|
/**
|
||||||
* Provides access to permanent file based storage.
|
* Provides access to permanent file based storage.
|
||||||
*
|
*
|
||||||
|
* [serverId] is currently active server. Should be unique per server so stored data will not
|
||||||
|
* interfere with other server data.
|
||||||
|
*
|
||||||
* Look at [org.moire.ultrasonic.cache.serializers] package for available [Serializer]s.
|
* Look at [org.moire.ultrasonic.cache.serializers] package for available [Serializer]s.
|
||||||
*/
|
*/
|
||||||
class PermanentFileStorage(
|
class PermanentFileStorage(
|
||||||
private val directories: Directories,
|
private val directories: Directories,
|
||||||
|
private val serverId: String,
|
||||||
private val debug: Boolean = false
|
private val debug: Boolean = false
|
||||||
) {
|
) {
|
||||||
private val serializationContext = object : SerializationContext {
|
private val serializationContext = object : SerializationContext {
|
||||||
|
@ -60,7 +64,10 @@ class PermanentFileStorage(
|
||||||
|
|
||||||
private fun getFile(name: String) = File(getStorageDir(), "$name.ser")
|
private fun getFile(name: String) = File(getStorageDir(), "$name.ser")
|
||||||
|
|
||||||
private fun getStorageDir() = File(directories.getInternalDataDir(), STORAGE_DIR_NAME).apply {
|
private fun getStorageDir(): File {
|
||||||
if (!exists()) mkdirs()
|
val mainDir = File(directories.getInternalDataDir(), STORAGE_DIR_NAME)
|
||||||
|
val serverDir = File(mainDir, serverId)
|
||||||
|
if (!serverDir.exists()) serverDir.mkdirs()
|
||||||
|
return serverDir
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,8 @@ abstract class BaseStorageTest {
|
||||||
protected lateinit var mockDirectories: Directories
|
protected lateinit var mockDirectories: Directories
|
||||||
protected lateinit var storage: PermanentFileStorage
|
protected lateinit var storage: PermanentFileStorage
|
||||||
|
|
||||||
|
open val serverId: String = ""
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
mockDirectories = mock<Directories> {
|
mockDirectories = mock<Directories> {
|
||||||
|
@ -28,7 +30,7 @@ abstract class BaseStorageTest {
|
||||||
on { getInternalCacheDir() } `it returns` tempFileRule.newFolder(INTERNAL_CACHE_FOLDER)
|
on { getInternalCacheDir() } `it returns` tempFileRule.newFolder(INTERNAL_CACHE_FOLDER)
|
||||||
on { getExternalCacheDir() } `it returns` tempFileRule.newFolder(EXTERNAL_CACHE_FOLDER)
|
on { getExternalCacheDir() } `it returns` tempFileRule.newFolder(EXTERNAL_CACHE_FOLDER)
|
||||||
}
|
}
|
||||||
storage = PermanentFileStorage(mockDirectories, true)
|
storage = PermanentFileStorage(mockDirectories, serverId, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected val storageDir get() = File(mockDirectories.getInternalDataDir(), STORAGE_DIR_NAME)
|
protected val storageDir get() = File(mockDirectories.getInternalDataDir(), STORAGE_DIR_NAME)
|
||||||
|
|
|
@ -6,17 +6,22 @@ import org.amshove.kluent.`should equal`
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.moire.ultrasonic.cache.serializers.musicFolderSerializer
|
import org.moire.ultrasonic.cache.serializers.musicFolderSerializer
|
||||||
import org.moire.ultrasonic.domain.MusicFolder
|
import org.moire.ultrasonic.domain.MusicFolder
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integration test for [PermanentFileStorage].
|
* Integration test for [PermanentFileStorage].
|
||||||
*/
|
*/
|
||||||
class PermanentFileStorageTest : BaseStorageTest() {
|
class PermanentFileStorageTest : BaseStorageTest() {
|
||||||
|
override val serverId: String
|
||||||
|
get() = "some-server-id"
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Should create storage dir if it is not exist`() {
|
fun `Should create storage dir if it is not exist`() {
|
||||||
val item = MusicFolder("1", "2")
|
val item = MusicFolder("1", "2")
|
||||||
storage.store("test", item, musicFolderSerializer)
|
storage.store("test", item, musicFolderSerializer)
|
||||||
|
|
||||||
storageDir.exists() `should equal to` true
|
storageDir.exists() `should equal to` true
|
||||||
|
getServerStorageDir().exists() `should equal to` true
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -26,7 +31,7 @@ class PermanentFileStorageTest : BaseStorageTest() {
|
||||||
|
|
||||||
storage.store(name, item, musicFolderSerializer)
|
storage.store(name, item, musicFolderSerializer)
|
||||||
|
|
||||||
val storageFiles = storageDir.listFiles()
|
val storageFiles = getServerStorageDir().listFiles()
|
||||||
storageFiles.size `should equal to` 1
|
storageFiles.size `should equal to` 1
|
||||||
storageFiles[0].name `should contain` name
|
storageFiles[0].name `should contain` name
|
||||||
}
|
}
|
||||||
|
@ -62,7 +67,7 @@ class PermanentFileStorageTest : BaseStorageTest() {
|
||||||
|
|
||||||
storage.clearAll()
|
storage.clearAll()
|
||||||
|
|
||||||
storageDir.listFiles().size `should equal to` 0
|
getServerStorageDir().listFiles().size `should equal to` 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -71,4 +76,6 @@ class PermanentFileStorageTest : BaseStorageTest() {
|
||||||
|
|
||||||
loadedItem `should equal` null
|
loadedItem `should equal` null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getServerStorageDir() = File(storageDir, serverId)
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,7 +114,13 @@ public class MusicServiceFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PermanentFileStorage getPermanentFileStorage(final Context context) {
|
private static PermanentFileStorage getPermanentFileStorage(final Context context) {
|
||||||
return new PermanentFileStorage(getDirectories(context), BuildConfig.DEBUG);
|
final SharedPreferences preferences = Util.getPreferences(context);
|
||||||
|
int instance = preferences.getInt(Constants.PREFERENCES_KEY_SERVER_INSTANCE, 1);
|
||||||
|
String serverUrl = preferences.getString(
|
||||||
|
Constants.PREFERENCES_KEY_SERVER_URL + instance, null);
|
||||||
|
String serverId = String.valueOf(Math.abs((serverUrl + instance).hashCode()));
|
||||||
|
|
||||||
|
return new PermanentFileStorage(getDirectories(context), serverId, BuildConfig.DEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Directories getDirectories(final Context context) {
|
private static Directories getDirectories(final Context context) {
|
||||||
|
|
Loading…
Reference in New Issue