|
|
@ -6,20 +6,18 @@ import android.view.View
|
|
|
|
import com.common.commonlib.db.DBUtils
|
|
|
|
import com.common.commonlib.db.DBUtils
|
|
|
|
import com.common.commonlib.db.entity.Gas
|
|
|
|
import com.common.commonlib.db.entity.Gas
|
|
|
|
import com.common.commonlib.db.entity.Video
|
|
|
|
import com.common.commonlib.db.entity.Video
|
|
|
|
import com.common.commonlib.net.bean.BaseResponse
|
|
|
|
|
|
|
|
import com.common.commonlib.net.callback.RequestResultCallBack
|
|
|
|
|
|
|
|
import com.yinuo.library.vlc.utils.LogUtils
|
|
|
|
import com.yinuo.library.vlc.utils.LogUtils
|
|
|
|
import com.yinuo.safetywatcher.R
|
|
|
|
import com.yinuo.safetywatcher.R
|
|
|
|
import com.yinuo.safetywatcher.TestUtils
|
|
|
|
|
|
|
|
import com.yinuo.safetywatcher.databinding.ActivityCloudBinding
|
|
|
|
import com.yinuo.safetywatcher.databinding.ActivityCloudBinding
|
|
|
|
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
|
|
|
|
import com.yinuo.safetywatcher.watcher.base.NoOptionsActivity
|
|
|
|
import com.yinuo.safetywatcher.watcher.bean.LastTimeResponse
|
|
|
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.constant.GAS_CLOUD_UPLOAD_SIZE_ONCE
|
|
|
|
import com.yinuo.safetywatcher.watcher.constant.GAS_CLOUD_UPLOAD_SIZE_ONCE
|
|
|
|
import com.yinuo.safetywatcher.watcher.net.DevicesApi
|
|
|
|
import com.yinuo.safetywatcher.watcher.net.DevicesApi
|
|
|
|
import com.yinuo.safetywatcher.watcher.net.UploadFileApi
|
|
|
|
import com.yinuo.safetywatcher.watcher.net.UploadFileApi
|
|
|
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.utils.showToast
|
|
|
|
import kotlinx.coroutines.DelicateCoroutinesApi
|
|
|
|
import kotlinx.coroutines.DelicateCoroutinesApi
|
|
|
|
import kotlinx.coroutines.GlobalScope
|
|
|
|
import kotlinx.coroutines.GlobalScope
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
import java.util.concurrent.atomic.AtomicBoolean
|
|
|
|
|
|
|
|
|
|
|
|
class CloudActivity : NoOptionsActivity() {
|
|
|
|
class CloudActivity : NoOptionsActivity() {
|
|
|
|
private val mBinding: ActivityCloudBinding by lazy {
|
|
|
|
private val mBinding: ActivityCloudBinding by lazy {
|
|
|
@ -34,7 +32,10 @@ class CloudActivity : NoOptionsActivity() {
|
|
|
|
DevicesApi()
|
|
|
|
DevicesApi()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun getTopBarTitle(): String? {
|
|
|
|
private var uploadingGas = AtomicBoolean(false)
|
|
|
|
|
|
|
|
private var uploadingVideo = AtomicBoolean(false)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun getTopBarTitle(): String {
|
|
|
|
return getString(R.string.cloud)
|
|
|
|
return getString(R.string.cloud)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -45,14 +46,32 @@ class CloudActivity : NoOptionsActivity() {
|
|
|
|
override fun initView() {
|
|
|
|
override fun initView() {
|
|
|
|
mBinding.apply {
|
|
|
|
mBinding.apply {
|
|
|
|
syncSensor.setOnClickListener {
|
|
|
|
syncSensor.setOnClickListener {
|
|
|
|
|
|
|
|
if (uploadingGas.get()) {
|
|
|
|
|
|
|
|
showToast(getString(R.string.repeat_click_sync_tip))
|
|
|
|
|
|
|
|
return@setOnClickListener
|
|
|
|
|
|
|
|
}
|
|
|
|
showLoadingDialog()
|
|
|
|
showLoadingDialog()
|
|
|
|
uploadSensorData()
|
|
|
|
GlobalScope.launch {
|
|
|
|
|
|
|
|
uploadSensorData()
|
|
|
|
|
|
|
|
closeLoadingDialog()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
syncVedio.setOnClickListener {
|
|
|
|
syncVedio.setOnClickListener {
|
|
|
|
|
|
|
|
if (uploadingVideo.get()) {
|
|
|
|
|
|
|
|
showToast(getString(R.string.repeat_click_sync_tip))
|
|
|
|
|
|
|
|
return@setOnClickListener
|
|
|
|
|
|
|
|
}
|
|
|
|
showLoadingDialog()
|
|
|
|
showLoadingDialog()
|
|
|
|
uploadVideo()
|
|
|
|
GlobalScope.launch {
|
|
|
|
|
|
|
|
uploadVideo()
|
|
|
|
|
|
|
|
closeLoadingDialog()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
syncOnce.setOnClickListener {
|
|
|
|
syncOnce.setOnClickListener {
|
|
|
|
|
|
|
|
if (uploadingGas.get() && uploadingVideo.get()) {
|
|
|
|
|
|
|
|
showToast(getString(R.string.repeat_click_sync_tip))
|
|
|
|
|
|
|
|
return@setOnClickListener
|
|
|
|
|
|
|
|
}
|
|
|
|
showLoadingDialog()
|
|
|
|
showLoadingDialog()
|
|
|
|
uploadOnece()
|
|
|
|
uploadOnece()
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -60,98 +79,92 @@ class CloudActivity : NoOptionsActivity() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun uploadOnece() {
|
|
|
|
private fun uploadOnece() {
|
|
|
|
uploadSensorData()
|
|
|
|
GlobalScope.launch {
|
|
|
|
uploadVideo()
|
|
|
|
uploadSensorData()
|
|
|
|
|
|
|
|
uploadVideo()
|
|
|
|
|
|
|
|
closeLoadingDialog()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun uploadVideo() {
|
|
|
|
private suspend fun uploadVideo() {
|
|
|
|
// 1.拿到云端最新数据时间
|
|
|
|
if (!uploadingVideo.get()) {
|
|
|
|
devicesApi.getVideoLastTime(object : RequestResultCallBack<LastTimeResponse>() {
|
|
|
|
uploadingVideo.set(true)
|
|
|
|
override fun onResult(result: LastTimeResponse) {
|
|
|
|
// 1.拿到云端最新数据时间
|
|
|
|
if (result.isOk()) {
|
|
|
|
val timeResponse = devicesApi.getVideoLastTime()
|
|
|
|
val cloudTime = result.data
|
|
|
|
if (timeResponse.isOk()) {
|
|
|
|
// 2. 拿到待上传文件列表 上传
|
|
|
|
val cloudTime = timeResponse.data
|
|
|
|
getFileListAndUpload(cloudTime)
|
|
|
|
// 2. 拿到待上传文件列表 上传
|
|
|
|
} else {
|
|
|
|
getFileListAndUpload(cloudTime)
|
|
|
|
LogUtils.e("getVideoLastTime error code = ${result.code}")
|
|
|
|
LogUtils.v("uploadVideo ok")
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
LogUtils.e("getVideoLastTime error code = ${timeResponse.code}")
|
|
|
|
|
|
|
|
|
|
|
|
override fun onError(error: String?) {
|
|
|
|
|
|
|
|
LogUtils.e(error)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
uploadingVideo.set(false)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun uploadSensorData() {
|
|
|
|
private suspend fun uploadSensorData() {
|
|
|
|
// 1.拿到云端最新数据时间
|
|
|
|
if (!uploadingGas.get()) {
|
|
|
|
devicesApi.getVideoLastTime(object : RequestResultCallBack<LastTimeResponse>() {
|
|
|
|
uploadingGas.set(true)
|
|
|
|
override fun onResult(result: LastTimeResponse) {
|
|
|
|
// 1.拿到云端最新数据时间
|
|
|
|
if (result.isOk()) {
|
|
|
|
val lastTimeResponse = devicesApi.getDetectionLastTime()
|
|
|
|
val cloudTime = result.data
|
|
|
|
if (lastTimeResponse.isOk()) {
|
|
|
|
// 2. 查询本地数据库中该时间之后的数据
|
|
|
|
val cloudTime = lastTimeResponse.data
|
|
|
|
// 3. 上传数据给服务器
|
|
|
|
// 2. 查询本地数据库中该时间之后的数据
|
|
|
|
getSensorDataUpload(cloudTime)
|
|
|
|
// 3. 上传数据给服务器
|
|
|
|
} else {
|
|
|
|
getSensorDataUpload(cloudTime)
|
|
|
|
LogUtils.e("getVideoLastTime error code = ${result.code}")
|
|
|
|
LogUtils.v("uploadSensorData ok")
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
LogUtils.e("getVideoLastTime error code = ${lastTimeResponse.code}")
|
|
|
|
|
|
|
|
|
|
|
|
override fun onError(error: String?) {
|
|
|
|
|
|
|
|
LogUtils.e(error)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
uploadingGas.set(false)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun getSensorDataUpload(cloudTime: Long) {
|
|
|
|
private suspend fun getSensorDataUpload(cloudTime: Long) {
|
|
|
|
GlobalScope.launch {
|
|
|
|
val gasList = DBUtils.gasDao().getAllBySyncFlagOrTime(false, cloudTime)
|
|
|
|
val gasList = DBUtils.gasDao().getAllBySyncFlagOrTime(false, cloudTime)
|
|
|
|
val tempList = arrayListOf<Gas>()
|
|
|
|
val tempList = arrayListOf<Gas>()
|
|
|
|
gasList.forEach {
|
|
|
|
gasList.forEach {
|
|
|
|
tempList.add(it)
|
|
|
|
tempList.add(it)
|
|
|
|
if (tempList.size == GAS_CLOUD_UPLOAD_SIZE_ONCE) {
|
|
|
|
if (tempList.size == GAS_CLOUD_UPLOAD_SIZE_ONCE) {
|
|
|
|
val response = devicesApi.uploadGasData(tempList)
|
|
|
|
val cloneList: ArrayList<Gas> = tempList.clone() as ArrayList<Gas>
|
|
|
|
if (response.isOk()) {
|
|
|
|
devicesApi.uploadGasData(cloneList, UploadGasCallback(tempList))
|
|
|
|
val gasDao = DBUtils.gasDao()
|
|
|
|
tempList.clear()
|
|
|
|
tempList.forEach { gas ->
|
|
|
|
|
|
|
|
gas.syncFlag = true
|
|
|
|
|
|
|
|
gasDao.update(gas)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
tempList.clear()
|
|
|
|
if (tempList.isNotEmpty()) {
|
|
|
|
|
|
|
|
devicesApi.uploadGasData(tempList, UploadGasCallback(tempList))
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (tempList.isNotEmpty()) {
|
|
|
|
|
|
|
|
val response = devicesApi.uploadGasData(tempList)
|
|
|
|
private fun getFileListAndUpload(cloudTime: Long) {
|
|
|
|
if (response.isOk()) {
|
|
|
|
GlobalScope.launch {
|
|
|
|
val gasDao = DBUtils.gasDao()
|
|
|
|
val videoDao = DBUtils.videoDao()
|
|
|
|
tempList.forEach {
|
|
|
|
val videoList = videoDao.getAllByTime(cloudTime, System.currentTimeMillis())
|
|
|
|
it.syncFlag = true
|
|
|
|
// 上传
|
|
|
|
gasDao.update(it)
|
|
|
|
videoList.forEach {
|
|
|
|
}
|
|
|
|
uploadFile(it)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun uploadFile(video: Video) {
|
|
|
|
private suspend fun getFileListAndUpload(cloudTime: Long) {
|
|
|
|
TestUtils.testUploadFile(uploadApi, video, loadingDialog)
|
|
|
|
val videoDao = DBUtils.videoDao()
|
|
|
|
}
|
|
|
|
val videoList = videoDao.getAllByTime(cloudTime, System.currentTimeMillis())
|
|
|
|
|
|
|
|
// 上传
|
|
|
|
class UploadGasCallback(private val upLoadList: ArrayList<Gas>) :
|
|
|
|
videoList.forEach {
|
|
|
|
RequestResultCallBack<BaseResponse>() {
|
|
|
|
uploadFile(it)
|
|
|
|
override fun onResult(result: BaseResponse) {
|
|
|
|
|
|
|
|
GlobalScope.launch {
|
|
|
|
|
|
|
|
if (result.isOk()) {
|
|
|
|
|
|
|
|
val gasDao = DBUtils.gasDao()
|
|
|
|
|
|
|
|
upLoadList.forEach {
|
|
|
|
|
|
|
|
it.syncFlag = true
|
|
|
|
|
|
|
|
gasDao.update(it)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onError(error: String?) {
|
|
|
|
private suspend fun uploadFile(video: Video) {
|
|
|
|
LogUtils.e("UploadGasCallback $error")
|
|
|
|
val response = uploadApi.singleUpload(video.path, video.time)
|
|
|
|
|
|
|
|
if (response.isOk()) {
|
|
|
|
|
|
|
|
val videoDaoImpl = DBUtils.videoDao()
|
|
|
|
|
|
|
|
video.uploaded = true
|
|
|
|
|
|
|
|
videoDaoImpl.update(video)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|