Skip to content

Commit

Permalink
- Implemented: Worker, WorkerFactory
Browse files Browse the repository at this point in the history
  • Loading branch information
danggai committed May 13, 2021
1 parent 36aeeb5 commit fb0ac39
Show file tree
Hide file tree
Showing 2 changed files with 149 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package danggai.app.parcelwhere.worker

import android.content.Context
import androidx.work.ListenableWorker
import androidx.work.WorkerFactory
import androidx.work.WorkerParameters
import danggai.app.parcelwhere.data.api.ApiRepository
import danggai.app.parcelwhere.util.log

class MyWorkerFactory(private val api: ApiRepository): WorkerFactory() {
override fun createWorker(
appContext: Context,
workerClassName: String,
workerParameters: WorkerParameters,
): ListenableWorker? {
log.e(workerClassName)
log.e(RefreshWorker::class.java.name)
return when (workerClassName) {
RefreshWorker::class.java.name -> {
RefreshWorker(api, appContext, workerParameters)
}
else -> null // If you return null, delegate base class to the default workerFactory.
}
}

}
123 changes: 123 additions & 0 deletions app/src/main/java/danggai/app/parcelwhere/worker/RefreshWorker.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package danggai.app.parcelwhere.worker

import android.annotation.SuppressLint
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
import danggai.app.parcelwhere.Constant
import danggai.app.parcelwhere.data.api.ApiInterface
import danggai.app.parcelwhere.data.api.ApiRepository
import danggai.app.parcelwhere.data.db.AppDatabase
import danggai.app.parcelwhere.data.db.track.TrackDao
import danggai.app.parcelwhere.data.db.track.TrackEntity
import danggai.app.parcelwhere.data.local.TrackListItem
import danggai.app.parcelwhere.data.rxbus.RxBusMainSelectAll
import danggai.app.parcelwhere.util.Event
import danggai.app.parcelwhere.util.log
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
import io.reactivex.subjects.PublishSubject

class RefreshWorker (private val api: ApiRepository, context: Context, workerParams: WorkerParameters) :
Worker(context, workerParams) {

private val rxApiCarrierTracks: PublishSubject<Pair<String, String>> = PublishSubject.create()
private val rxDaoUpdate: PublishSubject<TrackEntity> = PublishSubject.create()

private val db = AppDatabase.getInstance(context)
private val dao: TrackDao = db.trackDao()

private val compositeDisposable = CompositeDisposable()

init {
// compositeDisposable.addAll (
// rxApiCarrierTracks
// .observeOn(Schedulers.newThread())
// .switchMap {
// log.e()
// api.carriersTracks(it.first, it.second)
// }
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe({ res ->
// log.e(res)
// when (res.meta.code) {
// Constant.META_CODE_SUCCESS -> {
// rxDaoUpdate.onNext(
// TrackEntity(res.data.trackId, "", res.data.from.name, res.data.carrier.id, res.data.carrier.name, res.data.progresses[res.data.progresses.size-1].time, res.data.state.text, false)
// )
// }
// Constant.META_CODE_BAD_REQUEST,
// Constant.META_CODE_SERVER_ERROR,
//// -> {
//// log.e()
//// lvMakeToast.value = Event(getString(R.string.msg_network_error))
//// goBack()
//// }
// Constant.META_CODE_NOT_FOUND -> {
// log.e()
// }
// else -> {
// log.e()
// }
// }
// }, {
// it.message?.let { msg -> log.e(msg) }
// })
// ,
// rxDaoUpdate
// .observeOn(Schedulers.newThread())
// .map { item ->
// log.e(item)
// TrackEntity(item.trackId, dao.selectItemNameById(item.trackId), item.fromName, item.carrierId, item.carrierName, item.recentTime, item.recentStatus, item.isRefreshed)
// }
// .map { item ->
// dao.update(item)
// item
// }
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe ({ item ->
// log.e(item)
// RxBusMainSelectAll.getSubject()?.onNext(true)
// }, {
// it.message?.let { msg -> log.e(msg) }
// })
//
// )
}

override fun doWork(): Result {
log.e()
try {
Observable.just(true)
.observeOn(Schedulers.newThread())
.switchMap{
log.e()
dao.selectAll()
}
.map { items ->
for (item in items) {
if (!item.recentStatus!!.contains(Constant.STATE_DELIVERY_COMPLETE)) {
rxApiCarrierTracks.onNext(Pair(item.carrierId, item.trackId))
}
}

true
}
.subscribe({
TODO("개발 중")
log.e()
}, {

})
Result.success()
} catch (e: Exception) {
log.e(e.message.toString())
Result.failure()
}

return Result.success()
}

}

0 comments on commit fb0ac39

Please sign in to comment.