PostFileActivity.kt 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. package com.jld.vod.view
  2. import android.app.ProgressDialog
  3. import android.content.Context
  4. import android.os.Handler
  5. import android.os.Message
  6. import android.widget.Toast
  7. import androidx.lifecycle.Observer
  8. import androidx.lifecycle.ViewModelProvider
  9. import androidx.lifecycle.ViewModelProviders
  10. import androidx.lifecycle.observe
  11. import com.jld.vod.R
  12. import com.jld.vod.base.BaseActivity
  13. import com.jld.vod.config.Config
  14. import com.jld.vod.model.bean.BaseBean
  15. import com.jld.vod.model.bean.GameResByNotUploaded
  16. import com.jld.vod.model.bean.MovieResByNotUploaded
  17. import com.jld.vod.model.bean.MusicResByNotUploaded
  18. import com.jld.vod.model.event.UsbStatusChangeEvent
  19. import com.jld.vod.utils.LogUtils
  20. import com.jld.vod.utils.http.HttpFileUtil
  21. import com.jld.vod.utils.http.ProgressListener
  22. import com.jld.vod.utils.http.RetrofitCallback
  23. import com.jld.vod.viewmodel.MainViewModel
  24. import com.jld.vod.viewmodel.PostFileViewModel
  25. import com.jld.vod.viewmodel.SplashViewModel
  26. import okhttp3.Callback
  27. import org.greenrobot.eventbus.EventBus
  28. import org.greenrobot.eventbus.Subscribe
  29. import org.greenrobot.eventbus.ThreadMode
  30. import retrofit2.Call
  31. import retrofit2.Response
  32. import java.io.File
  33. import java.io.IOException
  34. /**
  35. * @author ZhaoFuXin
  36. * @Email:18276061387@163.com
  37. * @description:
  38. * @date :2020/7/27 11:09
  39. */
  40. class PostFileActivity : BaseActivity() {
  41. private var strFilePath:String? = null
  42. private lateinit var postFileViewModel: PostFileViewModel
  43. private lateinit var mainViewModel: MainViewModel
  44. private var progressdialog: ProgressDialog? = null
  45. private var totalitem = 0//数据大小
  46. private var lenitem = 1//当前上传数据下标
  47. private var flag = true
  48. private var context:Context? = null
  49. private val mHandler = Handler(Handler.Callback {
  50. when(it.what)
  51. {
  52. 0->{
  53. val id: Int = it.arg1
  54. val file = it.obj as String
  55. progressdialog!!.setTitle("Uploading Movie ( $lenitem/$totalitem )")
  56. progressdialog!!.progress = id
  57. progressdialog!!.setMessage(file)
  58. progressdialog!!.setCancelable(false)
  59. progressdialog!!.setCanceledOnTouchOutside(false)
  60. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  61. progressdialog!!.show()
  62. if (id == 100)
  63. {
  64. progressdialog!!.dismiss()
  65. }
  66. }
  67. 1->{
  68. val id: Int = it.arg1
  69. val file = it.obj as String
  70. progressdialog!!.setTitle("Uploading Music ( $lenitem/$totalitem )")
  71. progressdialog!!.progress = id
  72. progressdialog!!.setMessage(file)
  73. progressdialog!!.setCancelable(false)
  74. progressdialog!!.setCanceledOnTouchOutside(false)
  75. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  76. progressdialog!!.show()
  77. if (id == 100)
  78. {
  79. progressdialog!!.dismiss()
  80. }
  81. }
  82. 2->{
  83. val id: Int = it.arg1
  84. val file = it.obj as String
  85. progressdialog!!.setTitle("Uploading Game ( $lenitem/$totalitem )")
  86. progressdialog!!.progress = id
  87. progressdialog!!.setMessage(file)
  88. progressdialog!!.setCancelable(false)
  89. progressdialog!!.setCanceledOnTouchOutside(false)
  90. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  91. progressdialog!!.show()
  92. if (id == 100)
  93. {
  94. progressdialog!!.dismiss()
  95. }
  96. }
  97. }
  98. false
  99. })
  100. override fun getLayoutId(): Int {
  101. return R.layout.activity_postfile
  102. }
  103. override fun initView() {
  104. super.initView()
  105. context = this
  106. progressdialog = ProgressDialog(this@PostFileActivity)
  107. }
  108. override fun initData() {
  109. super.initData()
  110. //u盘路径
  111. val mIntent = intent
  112. strFilePath = mIntent.getStringExtra("path")
  113. //接收U盘广播值
  114. EventBus.getDefault().register(this)
  115. //初始化viewmodel
  116. postFileViewModel = ViewModelProvider.AndroidViewModelFactory(application).create(PostFileViewModel::class.java)
  117. //获取未上传电影列表
  118. postFileViewModel.findResByNotUploadedmovie()
  119. //初始化电影列表
  120. initMovieList()
  121. //初始化音乐列表
  122. initMusicList()
  123. //初始化游戏列表
  124. initGameList()
  125. }
  126. /**
  127. * 初始化游戏列表
  128. */
  129. private fun initGameList() {
  130. //监听游戏列表
  131. postFileViewModel.findResByNotUploadedgameliveData.observe(this){res->
  132. LogUtils.logD("game"+res)
  133. when (res?.code) {
  134. BaseBean.SUCCESS -> {
  135. finishLoading()
  136. if (res.data!!.size != 0)
  137. {
  138. for ((index,data) in res.data.withIndex())
  139. {
  140. val file = File(strFilePath, data.gid.toString()+".apk")
  141. val mid = data.mid
  142. val resId = data.gid
  143. if (file.exists())
  144. {
  145. //上传游戏
  146. postFileGame(file,mid,resId)
  147. }
  148. }
  149. }else{
  150. LogUtils.logD("上传数据为空")
  151. }
  152. }
  153. BaseBean.ERROR -> {
  154. finishLoading()
  155. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  156. }
  157. BaseBean.LOADING -> showLoading()
  158. }
  159. }
  160. }
  161. /**
  162. * 初始化音乐列表
  163. */
  164. private fun initMusicList() {
  165. postFileViewModel.findResByNotUploadedmusicliveData.observe(this){res->
  166. when (res?.code) {
  167. BaseBean.SUCCESS -> {
  168. flag = true
  169. finishLoading()
  170. if (res.data!!.size != 0)
  171. {
  172. for ((index,data) in res.data.withIndex())
  173. {
  174. val file = File(strFilePath, data.musicId.toString()+".mp3")
  175. val mid = data.mid
  176. val resId = data.musicId
  177. if (file.exists())
  178. {
  179. //上传音乐
  180. postFileMusic(file,mid,resId)
  181. }else{
  182. if (flag)
  183. {
  184. flag = false
  185. postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  186. }
  187. }
  188. }
  189. }else{
  190. postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  191. }
  192. }
  193. BaseBean.ERROR -> {
  194. finishLoading()
  195. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  196. }
  197. BaseBean.LOADING -> showLoading()
  198. }
  199. }
  200. }
  201. /**
  202. * 初始化电影列表
  203. */
  204. private fun initMovieList() {
  205. postFileViewModel.findResByNotUploadedmovieliveData.observe(this){res->
  206. LogUtils.logD("movie"+res)
  207. when (res?.code) {
  208. BaseBean.SUCCESS -> {
  209. finishLoading()
  210. if (res.data!!.size != 0)
  211. {
  212. for ((index,data) in res.data.withIndex())
  213. {
  214. val file = File(strFilePath, data.movieId.toString()+".mp4")
  215. val mid = data.mid
  216. val resId = data.movieId
  217. if (file.exists())
  218. {
  219. //上传电影
  220. postFileMovie(file,mid,resId)
  221. }else{
  222. if (flag)
  223. {
  224. flag = false
  225. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  226. }
  227. }
  228. }
  229. }else{
  230. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  231. }
  232. }
  233. BaseBean.ERROR -> {
  234. finishLoading()
  235. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  236. }
  237. BaseBean.LOADING -> showLoading()
  238. }
  239. }
  240. }
  241. /**
  242. * 上传游戏
  243. */
  244. private fun postFileGame(file: File,mid : Long,resId:Long) {
  245. totalitem++
  246. HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/game/upload",
  247. object : ProgressListener {
  248. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  249. // Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  250. val progress = (currentBytes * 100 / contentLength).toInt()
  251. if (done == true) {
  252. lenitem++
  253. if (lenitem == totalitem)
  254. {
  255. //数据下标重置
  256. lenitem = 1
  257. totalitem = 0
  258. //postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  259. }
  260. }
  261. val msg: Message = mHandler.obtainMessage()
  262. msg.arg1 = progress
  263. msg.what = 2
  264. msg.obj = file.name
  265. mHandler.sendMessage(msg)
  266. }
  267. }, object : Callback {
  268. override fun onFailure(call: okhttp3.Call, e: IOException) {
  269. LogUtils.logE(e.toString())
  270. }
  271. @Throws(IOException::class)
  272. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  273. val result = response.body!!.string()
  274. LogUtils.logD(result.toString())
  275. }
  276. }, file,mid,resId)
  277. }
  278. /**
  279. * 上传音乐
  280. */
  281. private fun postFileMusic(file: File,mid : Long,resId:Long) {
  282. totalitem++
  283. HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/music/upload",
  284. object : ProgressListener {
  285. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  286. // Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  287. val progress = (currentBytes * 100 / contentLength).toInt()
  288. if (done == true) {
  289. lenitem++
  290. if (lenitem == totalitem)
  291. {
  292. //数据下标重置
  293. lenitem = 1
  294. totalitem = 0
  295. postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  296. }
  297. }
  298. val msg: Message = mHandler.obtainMessage()
  299. msg.arg1 = progress
  300. msg.what = 1
  301. msg.obj = file.name
  302. mHandler.sendMessage(msg)
  303. }
  304. }, object : Callback {
  305. override fun onFailure(call: okhttp3.Call, e: IOException) {
  306. LogUtils.logE(e.toString())
  307. }
  308. @Throws(IOException::class)
  309. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  310. val result = response.body!!.string()
  311. LogUtils.logD(result.toString())
  312. }
  313. }, file,mid,resId)
  314. }
  315. /**
  316. * 上传电影
  317. */
  318. private fun postFileMovie(file: File,mid : Long,resId:Long) {
  319. totalitem++
  320. HttpFileUtil.postFile(this, Config.ApiBaseUrl + "/movie/upload",
  321. object : ProgressListener {
  322. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  323. // Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  324. val progress = (currentBytes * 100 / contentLength).toInt()
  325. if (done == true) {
  326. lenitem++
  327. if (lenitem == totalitem)
  328. {
  329. //数据下标重置
  330. lenitem = 1
  331. totalitem = 0
  332. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  333. }
  334. }
  335. val msg: Message = mHandler.obtainMessage()
  336. msg.arg1 = progress
  337. msg.what = 0
  338. msg.obj = file.name
  339. mHandler.sendMessage(msg)
  340. }
  341. }, object : Callback {
  342. override fun onFailure(call: okhttp3.Call, e: IOException) {
  343. LogUtils.logE(e.toString())
  344. }
  345. @Throws(IOException::class)
  346. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  347. val result = response.body!!.string()
  348. LogUtils.logD(result.toString())
  349. }
  350. }, file,mid,resId)
  351. }
  352. override fun onDestroy() {
  353. super.onDestroy()
  354. progressdialog!!.dismiss()
  355. if (EventBus.getDefault().isRegistered(this)) {
  356. EventBus.getDefault().unregister(this)
  357. }
  358. }
  359. /**
  360. * 广播传来值处理
  361. * @param event
  362. */
  363. @Subscribe(threadMode = ThreadMode.MAIN)
  364. fun onNetworkChangeEvent(event: UsbStatusChangeEvent) {
  365. if (event.isConnected) {
  366. finish()
  367. }
  368. }
  369. }