Fix general upload tab file selection

- Implement URI to File conversion using FileController.saveContentUriToFile()
- Properly extract filename from URI using ContentResolver
- Store actual File object instead of null, enabling uploads to work
This commit is contained in:
2025-12-27 22:12:19 -05:00
parent d40814ec4c
commit 41363028aa

View File

@@ -233,14 +233,22 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
fun handleFileSelection(uri: Uri) {
viewModelScope.launch(Dispatchers.IO) {
try {
// TODO: Convert URI to File using FileController
// For now, store URI info
val fileName = uri.lastPathSegment ?: "Unknown file"
// Get filename from URI
val fileName = getFileNameFromUri(uri)
Log.d(TAG, "File selected from URI: $fileName")
// Convert URI to File using FileController
val file = FileController.saveContentUriToFile(
getApplication(),
uri,
fileName
)
_uiState.value = _uiState.value.copy(
selectedFileName = fileName,
selectedFile = null // Will need to implement URI to File conversion
selectedFile = file
)
Log.d(TAG, "File selected: $fileName")
Log.d(TAG, "File saved to cache: ${file.absolutePath}, size: ${file.length()} bytes")
} catch (e: Exception) {
Log.e(TAG, "Error handling file selection", e)
_uiState.value = _uiState.value.copy(
@@ -250,6 +258,33 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
}
/**
* Get filename from URI using ContentResolver
*/
private fun getFileNameFromUri(uri: Uri): String {
var fileName = "selected_file_${System.currentTimeMillis()}"
// Try to get the display name from the content resolver
try {
getApplication<Application>().contentResolver.query(
uri, null, null, null, null
)?.use { cursor ->
if (cursor.moveToFirst()) {
val nameIndex = cursor.getColumnIndex(android.provider.OpenableColumns.DISPLAY_NAME)
if (nameIndex != -1) {
fileName = cursor.getString(nameIndex) ?: fileName
}
}
}
} catch (e: Exception) {
Log.w(TAG, "Could not get filename from URI, using default", e)
// Fall back to using last path segment if available
fileName = uri.lastPathSegment ?: fileName
}
return fileName
}
/**
* Toggle dumpstate file selection
*/