0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-19 19:42:17 +02:00

fix: nullable getCurrentMultimediaEditableNote

This commit is contained in:
Ashish Yadav 2024-09-06 17:12:11 +05:30 committed by Mike Hardy
parent 7cc16f7940
commit e7b312eb5e
3 changed files with 25 additions and 23 deletions

View File

@ -540,7 +540,7 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su
// ImageIntentManager.saveImageUri(imageUri)
// the field won't exist so it will always be a new card
val note = getCurrentMultimediaEditableNote()
if (note == null) {
if (note.isEmpty) {
Timber.w("Note is null, returning")
return
}
@ -1605,11 +1605,10 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su
insertStringInField(getFieldForTest(fieldIndex), newString)
}
@KotlinCleanup("fix the requireNoNulls")
private suspend fun getCurrentMultimediaEditableNote(): MultimediaEditableNote? {
private suspend fun getCurrentMultimediaEditableNote(): MultimediaEditableNote {
val note = NoteService.createEmptyNote(editorNote!!.notetype)
val fields = currentFieldStrings.requireNoNulls()
withCol { NoteService.updateMultimediaNoteFromFields(this@withCol, fields, editorNote!!.mid, note!!) }
withCol { NoteService.updateMultimediaNoteFromFields(this@withCol, fields, editorNote!!.mid, note) }
return note
}
@ -1773,7 +1772,8 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su
private fun handleMultimediaActions(fieldIndex: Int) {
// Based on the type of multimedia action received, perform the corresponding operation
lifecycleScope.launch {
val note: MultimediaEditableNote = getCurrentMultimediaEditableNote() ?: return@launch
val note: MultimediaEditableNote = getCurrentMultimediaEditableNote()
if (note.isEmpty) return@launch
multimediaViewModel.multimediaAction.first { action ->
when (action) {
@ -1894,7 +1894,7 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su
private fun addMediaFileToField(index: Int, field: IField) {
lifecycleScope.launch {
val note = getCurrentMultimediaEditableNote()
note?.setField(index, field)
note.setField(index, field)
val fieldEditText = editFields!![index]
// Import field media

View File

@ -105,6 +105,9 @@ class MultimediaEditableNote : IMultimediaEditableNote {
return IOUtils.deserialize(IField::class.java, IOUtils.serialize(f!!))
}
val isEmpty: Boolean
get() = fields.isNullOrEmpty()
companion object {
private const val serialVersionUID = -6161821367135636659L
}

View File

@ -51,31 +51,30 @@ object NoteService {
/**
* Creates an empty Note from given Model
*
* @param model the model in JSOBObject format
* @return a new note instance
* @param model the model in JSONObject format
* @return a new MultimediaEditableNote instance
*/
fun createEmptyNote(model: JSONObject): MultimediaEditableNote? {
fun createEmptyNote(model: JSONObject): MultimediaEditableNote {
val note = MultimediaEditableNote()
try {
val fieldsArray = model.getJSONArray("flds")
val numOfFields = fieldsArray.length()
if (numOfFields > 0) {
val note = MultimediaEditableNote()
note.setNumFields(numOfFields)
for (i in 0 until numOfFields) {
val fieldObject = fieldsArray.getJSONObject(i)
val uiTextField = TextField()
uiTextField.name = fieldObject.getString("name")
uiTextField.text = fieldObject.getString("name")
note.setField(i, uiTextField)
note.setNumFields(numOfFields)
for (i in 0 until numOfFields) {
val fieldObject = fieldsArray.getJSONObject(i)
val uiTextField = TextField().apply {
name = fieldObject.getString("name")
text = fieldObject.getString("name")
}
note.modelId = model.getLong("id")
return note
note.setField(i, uiTextField)
}
note.modelId = model.getLong("id")
} catch (e: JSONException) {
// TODO Auto-generated catch block
Timber.w(e)
Timber.w(e, "Error parsing model: %s", model)
// Return note with default/empty fields
}
return null
return note
}
fun updateMultimediaNoteFromFields(