diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-04-08 22:09:34 +0300 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2024-04-12 19:20:49 +0300 |
commit | 88b3e68f93fad5681b27b11ddacc562b03d5ef45 (patch) | |
tree | 03f57722ab74282b862a5aba5433ff928bfdd972 /platform/android/java | |
parent | 029aadef563fb69cf49aa9795b62f27171f8c3f4 (diff) | |
download | redot-engine-88b3e68f93fad5681b27b11ddacc562b03d5ef45.tar.gz |
[FileAccess] Implement `resize` method.
Diffstat (limited to 'platform/android/java')
-rw-r--r-- | platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt | 22 | ||||
-rw-r--r-- | platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt | 9 |
2 files changed, 31 insertions, 0 deletions
diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt index 0f447f0b05..b155c4e488 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/DataAccess.kt @@ -36,7 +36,9 @@ import android.util.Log import org.godotengine.godot.io.StorageScope import java.io.IOException import java.nio.ByteBuffer +import java.nio.channels.ClosedChannelException import java.nio.channels.FileChannel +import java.nio.channels.NonWritableChannelException import kotlin.math.max /** @@ -50,6 +52,11 @@ internal abstract class DataAccess(private val filePath: String) { companion object { private val TAG = DataAccess::class.java.simpleName + private const val OK_ERROR_ID = 0; + private const val FAILED_ERROR_ID = -1; + private const val FILE_CANT_OPEN_ERROR_ID = -2; + private const val INVALID_PARAMETER_ERROR_ID = -3; + fun generateDataAccess( storageScope: StorageScope, context: Context, @@ -135,6 +142,21 @@ internal abstract class DataAccess(private val filePath: String) { seek(positionFromBeginning) } + fun resize(length: Long): Int { + return try { + fileChannel.truncate(length) + OK_ERROR_ID + } catch (e: NonWritableChannelException) { + FILE_CANT_OPEN_ERROR_ID + } catch (e: ClosedChannelException) { + FILE_CANT_OPEN_ERROR_ID + } catch (e: IllegalArgumentException) { + INVALID_PARAMETER_ERROR_ID + } catch (e: IOException) { + FAILED_ERROR_ID + } + } + fun position(): Long { return try { fileChannel.position() diff --git a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt index 50741c1aab..6a8a10e56f 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt +++ b/platform/android/java/lib/src/org/godotengine/godot/io/file/FileAccessHandler.kt @@ -45,6 +45,7 @@ class FileAccessHandler(val context: Context) { companion object { private val TAG = FileAccessHandler::class.java.simpleName + private const val FAILED_ERROR_ID = -1; private const val FILE_NOT_FOUND_ERROR_ID = -1 internal const val INVALID_FILE_ID = 0 private const val STARTING_FILE_ID = 1 @@ -190,6 +191,14 @@ class FileAccessHandler(val context: Context) { } } + fun fileResize(fileId: Int, length: Long): Int { + if (!hasFileId(fileId)) { + return FAILED_ERROR_ID + } + + return files[fileId].resize(length) + } + fun fileGetPosition(fileId: Int): Long { if (!hasFileId(fileId)) { return 0L |