Merge remote-tracking branch 'origin/master'

This commit is contained in:
Vineyro 2023-11-21 16:24:00 +07:00
commit dcf6580a95
4 changed files with 32 additions and 14 deletions

View File

@ -51,6 +51,7 @@ import llc.arma.ble.domain.usecase.FftAxis
import llc.arma.ble.domain.usecase.FftFrequency import llc.arma.ble.domain.usecase.FftFrequency
import llc.arma.ble.domain.usecase.FftViewMode import llc.arma.ble.domain.usecase.FftViewMode
import llc.arma.ble.domain.usecase.GetAccelerometerHistoryBySerial import llc.arma.ble.domain.usecase.GetAccelerometerHistoryBySerial
import llc.arma.ble.domain.usecase.GetBleBySerial
import llc.arma.ble.domain.usecase.MeasureData import llc.arma.ble.domain.usecase.MeasureData
import java.util.Date import java.util.Date
@ -78,7 +79,7 @@ fun AccelerometerHistory(
val state = viewModel.viewState.value val state = viewModel.viewState.value
LaunchedEffect(ble.serial) { LaunchedEffect(ble.serial) {
viewModel.setEvent(AccelerometerHistoryContract.Event.OnStart(ble.serial, accelScale, accelMode, fftAxis, fftMode, frequency)) viewModel.setEvent(AccelerometerHistoryContract.Event.OnStart(ble.name, ble.serial, accelScale, accelMode, fftAxis, fftMode, frequency))
} }
/*DisposableEffect("ble") { /*DisposableEffect("ble") {
@ -130,7 +131,7 @@ fun AccelerometerHistory(
IconButton( IconButton(
onClick = { onClick = {
viewModel.setEvent(AccelerometerHistoryContract.Event.OnRefreshHistory(ble.serial, accelScale, accelMode, fftAxis, fftMode, frequency)) viewModel.setEvent(AccelerometerHistoryContract.Event.OnRefreshHistory(ble.name, ble.serial, accelScale, accelMode, fftAxis, fftMode, frequency))
}, },
enabled = when(state){ enabled = when(state){
is AccelerometerHistoryContract.State.Display -> state.loadingHistoryState is ProgressState.Finished is AccelerometerHistoryContract.State.Display -> state.loadingHistoryState is ProgressState.Finished
@ -425,6 +426,7 @@ class AccelerometerHistoryContract {
object OnExport : Event() object OnExport : Event()
data class OnStart( data class OnStart(
val bleName: String,
val serial: String, val serial: String,
val accelScale: AccelScale, val accelScale: AccelScale,
val accelMode: AccelViewMode, val accelMode: AccelViewMode,
@ -434,6 +436,7 @@ class AccelerometerHistoryContract {
) : Event() ) : Event()
data class OnRefreshHistory( data class OnRefreshHistory(
val bleName: String,
val serial: String, val serial: String,
val accelScale: AccelScale, val accelScale: AccelScale,
val accelMode: AccelViewMode, val accelMode: AccelViewMode,
@ -447,6 +450,7 @@ class AccelerometerHistoryContract {
sealed class State : ViewState { sealed class State : ViewState {
data class Display( data class Display(
val bleName: String,
val loadingHistoryState : ProgressState<List<Ble.Accelerometer.HistoryPoint>> val loadingHistoryState : ProgressState<List<Ble.Accelerometer.HistoryPoint>>
) : State() ) : State()
@ -465,7 +469,8 @@ class AccelerometerHistoryContract {
@HiltViewModel @HiltViewModel
class AccelerometerHistoryViewModel @Inject constructor( class AccelerometerHistoryViewModel @Inject constructor(
private val getAccelerometerHistoryBySerial: GetAccelerometerHistoryBySerial, private val getAccelerometerHistoryBySerial: GetAccelerometerHistoryBySerial,
private val exportToXlsx: ExportToXlsx private val exportToXlsx: ExportToXlsx,
private val getBleBySerial: GetBleBySerial
) : BaseViewModel<AccelerometerHistoryContract.State, AccelerometerHistoryContract.Event, AccelerometerHistoryContract.Effect>() { ) : BaseViewModel<AccelerometerHistoryContract.State, AccelerometerHistoryContract.Event, AccelerometerHistoryContract.Effect>() {
var measureJob: Job? = null var measureJob: Job? = null
@ -473,6 +478,7 @@ class AccelerometerHistoryViewModel @Inject constructor(
private var lastSerial: String? = null private var lastSerial: String? = null
override fun setInitialState() = AccelerometerHistoryContract.State.Display( override fun setInitialState() = AccelerometerHistoryContract.State.Display(
"",
ProgressState.Indeterminate ProgressState.Indeterminate
) )
@ -492,7 +498,7 @@ class AccelerometerHistoryViewModel @Inject constructor(
if(state is AccelerometerHistoryContract.State.Display){ if(state is AccelerometerHistoryContract.State.Display){
if(state.loadingHistoryState is ProgressState.Finished){ if(state.loadingHistoryState is ProgressState.Finished){
exportToXlsx.invoke(state.loadingHistoryState.data) exportToXlsx.invoke(state.bleName, state.loadingHistoryState.data)
} }
} }
@ -526,7 +532,7 @@ class AccelerometerHistoryViewModel @Inject constructor(
lastSerial = event.serial lastSerial = event.serial
setState { setState {
AccelerometerHistoryContract.State.Display(ProgressState.Indeterminate) AccelerometerHistoryContract.State.Display(event.bleName, ProgressState.Indeterminate)
} }
measureJob?.cancel() measureJob?.cancel()
@ -536,7 +542,7 @@ class AccelerometerHistoryViewModel @Inject constructor(
it.fold( it.fold(
onSuccess = { onSuccess = {
setState { setState {
AccelerometerHistoryContract.State.Display(it) AccelerometerHistoryContract.State.Display(event.bleName, it)
} }
}, },
onFailure = { onFailure = {
@ -562,7 +568,7 @@ class AccelerometerHistoryViewModel @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
setState { setState {
AccelerometerHistoryContract.State.Display(ProgressState.Indeterminate) AccelerometerHistoryContract.State.Display("", ProgressState.Indeterminate)
} }
measureJob?.cancel() measureJob?.cancel()
@ -572,7 +578,7 @@ class AccelerometerHistoryViewModel @Inject constructor(
it.fold( it.fold(
onSuccess = { onSuccess = {
setState { setState {
AccelerometerHistoryContract.State.Display(it) AccelerometerHistoryContract.State.Display(event.bleName, it)
} }
}, },
onFailure = { onFailure = {

View File

@ -23,11 +23,17 @@ class XlsxRepositoryImpl @Inject constructor(
private val application: Application private val application: Application
) : XlsxRepository { ) : XlsxRepository {
override fun exportToXls(data: List<Ble.Accelerometer.HistoryPoint>): File { override fun exportToXls(
bleName: String,
data: List<Ble.Accelerometer.HistoryPoint>
): File {
val fileNameDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
val fileName = "$bleName ${fileNameDateFormat.format(Date(System.currentTimeMillis()))}.xlsx"
val formatter = SimpleDateFormat("dd.MM.yyyy HH:mm") val formatter = SimpleDateFormat("dd.MM.yyyy HH:mm")
val mailFile = File(application.filesDir, "${UUID.randomUUID()}.xlsx") val mailFile = File(application.filesDir, fileName)
mailFile.createNewFile() mailFile.createNewFile()
when(data.firstOrNull()){ when(data.firstOrNull()){
@ -84,7 +90,7 @@ class XlsxRepositoryImpl @Inject constructor(
workbook.write(saveFos) workbook.write(saveFos)
saveFos.close() saveFos.close()
val sharedFile = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "${UUID.randomUUID()}.xlsx") val sharedFile = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName)
sharedFile.createNewFile() sharedFile.createNewFile()
val sharedSaveFos = FileOutputStream(sharedFile) val sharedSaveFos = FileOutputStream(sharedFile)

View File

@ -6,6 +6,9 @@ import java.io.File
interface XlsxRepository { interface XlsxRepository {
fun exportToXls(data: List<Ble.Accelerometer.HistoryPoint>): File fun exportToXls(
bleName: String,
data: List<Ble.Accelerometer.HistoryPoint>
): File
} }

View File

@ -24,9 +24,12 @@ class ExportToXlsx @Inject constructor(
private val emailRepository: EmailRepository private val emailRepository: EmailRepository
) { ) {
operator fun invoke(data: List<Ble.Accelerometer.HistoryPoint>){ operator fun invoke(
bleName: String,
data: List<Ble.Accelerometer.HistoryPoint>
){
val file = xlsxRepository.exportToXls(data) val file = xlsxRepository.exportToXls(bleName, data)
emailRepository.sendFile(file) emailRepository.sendFile(file)
} }