refactor(bridge): file operation call
This commit is contained in:
@@ -6,6 +6,7 @@ import android.os.IBinder
|
||||
import me.rhunk.snapenhance.RemoteSideContext
|
||||
import me.rhunk.snapenhance.SharedContextHolder
|
||||
import me.rhunk.snapenhance.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.bridge.types.FileActionType
|
||||
import me.rhunk.snapenhance.bridge.wrapper.LocaleWrapper
|
||||
import me.rhunk.snapenhance.bridge.wrapper.MessageLoggerWrapper
|
||||
import me.rhunk.snapenhance.download.DownloadProcessor
|
||||
@@ -23,60 +24,35 @@ class BridgeService : Service() {
|
||||
}
|
||||
|
||||
inner class BridgeBinder : BridgeInterface.Stub() {
|
||||
override fun createAndReadFile(fileType: Int, defaultContent: ByteArray?): ByteArray {
|
||||
val file = BridgeFileType.fromValue(fileType)?.resolve(this@BridgeService)
|
||||
?: return defaultContent ?: ByteArray(0)
|
||||
override fun fileOperation(action: Int, fileType: Int, content: ByteArray?): ByteArray {
|
||||
val resolvedFile by lazy { BridgeFileType.fromValue(fileType)?.resolve(this@BridgeService) }
|
||||
|
||||
if (!file.exists()) {
|
||||
if (defaultContent == null) {
|
||||
return ByteArray(0)
|
||||
return when (FileActionType.values()[action]) {
|
||||
FileActionType.CREATE_AND_READ -> {
|
||||
resolvedFile?.let {
|
||||
if (!it.exists()) {
|
||||
return content?.also { content -> it.writeBytes(content) } ?: ByteArray(0)
|
||||
}
|
||||
|
||||
it.readBytes()
|
||||
} ?: ByteArray(0)
|
||||
}
|
||||
FileActionType.READ -> {
|
||||
resolvedFile?.takeIf { it.exists() }?.readBytes() ?: ByteArray(0)
|
||||
}
|
||||
FileActionType.WRITE -> {
|
||||
content?.also { resolvedFile?.writeBytes(content) } ?: ByteArray(0)
|
||||
}
|
||||
FileActionType.DELETE -> {
|
||||
resolvedFile?.takeIf { it.exists() }?.delete()
|
||||
ByteArray(0)
|
||||
}
|
||||
FileActionType.EXISTS -> {
|
||||
if (resolvedFile?.exists() == true)
|
||||
ByteArray(1)
|
||||
else ByteArray(0)
|
||||
}
|
||||
|
||||
file.writeBytes(defaultContent)
|
||||
}
|
||||
|
||||
return file.readBytes()
|
||||
}
|
||||
|
||||
override fun readFile(fileType: Int): ByteArray {
|
||||
val file = BridgeFileType.fromValue(fileType)?.resolve(this@BridgeService)
|
||||
?: return ByteArray(0)
|
||||
|
||||
if (!file.exists()) {
|
||||
return ByteArray(0)
|
||||
}
|
||||
|
||||
return file.readBytes()
|
||||
}
|
||||
|
||||
override fun writeFile(fileType: Int, content: ByteArray?): Boolean {
|
||||
val file = BridgeFileType.fromValue(fileType)?.resolve(this@BridgeService)
|
||||
?: return false
|
||||
|
||||
if (content == null) {
|
||||
return false
|
||||
}
|
||||
|
||||
file.writeBytes(content)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun deleteFile(fileType: Int): Boolean {
|
||||
val file = BridgeFileType.fromValue(fileType)?.resolve(this@BridgeService)
|
||||
?: return false
|
||||
|
||||
if (!file.exists()) {
|
||||
return false
|
||||
}
|
||||
|
||||
return file.delete()
|
||||
}
|
||||
|
||||
override fun isFileExists(fileType: Int): Boolean {
|
||||
val file = BridgeFileType.fromValue(fileType)?.resolve(this@BridgeService)
|
||||
?: return false
|
||||
|
||||
return file.exists()
|
||||
}
|
||||
|
||||
override fun getLoggedMessageIds(conversationId: String, limit: Int) = messageLoggerWrapper.getMessageIds(conversationId, limit).toLongArray()
|
||||
@@ -95,14 +71,6 @@ class BridgeService : Service() {
|
||||
it.locale to it.content
|
||||
}
|
||||
|
||||
override fun getAutoUpdaterTime(): Long {
|
||||
throw UnsupportedOperationException()
|
||||
}
|
||||
|
||||
override fun setAutoUpdaterTime(time: Long) {
|
||||
throw UnsupportedOperationException()
|
||||
}
|
||||
|
||||
override fun enqueueDownload(intent: Intent, callback: DownloadCallback) {
|
||||
DownloadProcessor(
|
||||
remoteSideContext = SharedContextHolder.remote(this@BridgeService),
|
||||
|
||||
@@ -5,46 +5,9 @@ import me.rhunk.snapenhance.bridge.DownloadCallback;
|
||||
|
||||
interface BridgeInterface {
|
||||
/**
|
||||
* Create a file if it doesn't exist, and read it
|
||||
*
|
||||
* @param fileType the type of file to create and read
|
||||
* @param defaultContent the default content to write to the file if it doesn't exist
|
||||
* @return the content of the file
|
||||
*/
|
||||
byte[] createAndReadFile(int fileType, in byte[] defaultContent);
|
||||
|
||||
/**
|
||||
* Read a file
|
||||
*
|
||||
* @param fileType the type of file to read
|
||||
* @return the content of the file
|
||||
*/
|
||||
byte[] readFile(int fileType);
|
||||
|
||||
/**
|
||||
* Write a file
|
||||
*
|
||||
* @param fileType the type of file to write
|
||||
* @param content the content to write to the file
|
||||
* @return true if the file was written successfully
|
||||
*/
|
||||
boolean writeFile(int fileType, in byte[] content);
|
||||
|
||||
/**
|
||||
* Delete a file
|
||||
*
|
||||
* @param fileType the type of file to delete
|
||||
* @return true if the file was deleted successfully
|
||||
*/
|
||||
boolean deleteFile(int fileType);
|
||||
|
||||
/**
|
||||
* Check if a file exists
|
||||
*
|
||||
* @param fileType the type of file to check
|
||||
* @return true if the file exists
|
||||
*/
|
||||
boolean isFileExists(int fileType);
|
||||
* Execute a file operation
|
||||
*/
|
||||
byte[] fileOperation(int action, int fileType, in @nullable byte[] content);
|
||||
|
||||
/**
|
||||
* Get the content of a logged message from the database
|
||||
@@ -89,18 +52,6 @@ interface BridgeInterface {
|
||||
*/
|
||||
Map<String, String> fetchLocales(String userLocale);
|
||||
|
||||
/**
|
||||
* Get check for updates last time
|
||||
* @return the last time check for updates was done
|
||||
*/
|
||||
long getAutoUpdaterTime();
|
||||
|
||||
/**
|
||||
* Set check for updates last time
|
||||
* @param time the time to set
|
||||
*/
|
||||
void setAutoUpdaterTime(long time);
|
||||
|
||||
/**
|
||||
* Enqueue a download
|
||||
*/
|
||||
|
||||
@@ -13,6 +13,7 @@ import de.robv.android.xposed.XposedHelpers
|
||||
import me.rhunk.snapenhance.Logger.xposedLog
|
||||
import me.rhunk.snapenhance.ModContext
|
||||
import me.rhunk.snapenhance.bridge.types.BridgeFileType
|
||||
import me.rhunk.snapenhance.bridge.types.FileActionType
|
||||
import me.rhunk.snapenhance.core.BuildConfig
|
||||
import me.rhunk.snapenhance.data.LocalePair
|
||||
import java.util.concurrent.CompletableFuture
|
||||
@@ -81,18 +82,18 @@ class BridgeClient(
|
||||
fun createAndReadFile(
|
||||
fileType: BridgeFileType,
|
||||
defaultContent: ByteArray
|
||||
): ByteArray = service.createAndReadFile(fileType.value, defaultContent)
|
||||
): ByteArray = service.fileOperation(FileActionType.CREATE_AND_READ.ordinal, fileType.value, defaultContent)
|
||||
|
||||
fun readFile(fileType: BridgeFileType): ByteArray = service.readFile(fileType.value)
|
||||
fun readFile(fileType: BridgeFileType): ByteArray = service.fileOperation(FileActionType.READ.ordinal, fileType.value, null)
|
||||
|
||||
fun writeFile(
|
||||
fileType: BridgeFileType,
|
||||
content: ByteArray?
|
||||
): Boolean = service.writeFile(fileType.value, content)
|
||||
) { service.fileOperation(FileActionType.WRITE.ordinal, fileType.value, content) }
|
||||
|
||||
fun deleteFile(fileType: BridgeFileType) = service.deleteFile(fileType.value)
|
||||
fun deleteFile(fileType: BridgeFileType) { service.fileOperation(FileActionType.DELETE.ordinal, fileType.value, null) }
|
||||
|
||||
fun isFileExists(fileType: BridgeFileType) = service.isFileExists(fileType.value)
|
||||
fun isFileExists(fileType: BridgeFileType) = service.fileOperation(FileActionType.EXISTS.ordinal, fileType.value, null).isNotEmpty()
|
||||
|
||||
fun getLoggedMessageIds(conversationId: String, limit: Int): LongArray = service.getLoggedMessageIds(conversationId, limit)
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package me.rhunk.snapenhance.bridge.types
|
||||
|
||||
enum class FileActionType {
|
||||
CREATE_AND_READ, READ, WRITE, DELETE, EXISTS
|
||||
}
|
||||
Reference in New Issue
Block a user