mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-14 21:18:56 +01:00
Add product flavors. Switch to evernote's job scheduler
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package eu.kanade.tachiyomi.data.library
|
||||
|
||||
import com.evernote.android.job.Job
|
||||
import com.evernote.android.job.JobManager
|
||||
import com.evernote.android.job.JobRequest
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
class LibraryUpdateJob : Job() {
|
||||
|
||||
override fun onRunJob(params: Params): Result {
|
||||
LibraryUpdateService.start(context)
|
||||
return Job.Result.SUCCESS
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "LibraryUpdate"
|
||||
|
||||
fun setupTask(prefInterval: Int? = null) {
|
||||
val preferences = Injekt.get<PreferencesHelper>()
|
||||
val interval = prefInterval ?: preferences.libraryUpdateInterval().getOrDefault()
|
||||
if (interval > 0) {
|
||||
val restrictions = preferences.libraryUpdateRestriction()
|
||||
val acRestriction = "ac" in restrictions
|
||||
val wifiRestriction = if ("wifi" in restrictions)
|
||||
JobRequest.NetworkType.UNMETERED
|
||||
else
|
||||
JobRequest.NetworkType.CONNECTED
|
||||
|
||||
JobRequest.Builder(TAG)
|
||||
.setPeriodic(interval * 60 * 60 * 1000L)
|
||||
.setRequiredNetworkType(wifiRestriction)
|
||||
.setRequiresCharging(acRestriction)
|
||||
.setPersisted(true)
|
||||
.setUpdateCurrent(true)
|
||||
.build()
|
||||
.schedule()
|
||||
}
|
||||
}
|
||||
|
||||
fun cancelTask() {
|
||||
JobManager.instance().cancelAllForTag(TAG)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -267,7 +267,7 @@ class LibraryUpdateService : Service() {
|
||||
} else {
|
||||
showResultNotification(newUpdates, failedUpdates)
|
||||
}
|
||||
LibraryUpdateTrigger.setupTask(this)
|
||||
LibraryUpdateJob.setupTask()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
package eu.kanade.tachiyomi.data.library
|
||||
|
||||
import android.content.Context
|
||||
import com.google.android.gms.gcm.*
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
class LibraryUpdateTrigger : GcmTaskService() {
|
||||
|
||||
override fun onInitializeTasks() {
|
||||
setupTask(this)
|
||||
}
|
||||
|
||||
override fun onRunTask(params: TaskParams): Int {
|
||||
LibraryUpdateService.start(this)
|
||||
return GcmNetworkManager.RESULT_SUCCESS
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun setupTask(context: Context, prefInterval: Int? = null) {
|
||||
val preferences = Injekt.get<PreferencesHelper>()
|
||||
val interval = prefInterval ?: preferences.libraryUpdateInterval().getOrDefault()
|
||||
if (interval > 0) {
|
||||
val restrictions = preferences.libraryUpdateRestriction()
|
||||
val acRestriction = "ac" in restrictions
|
||||
val wifiRestriction = if ("wifi" in restrictions)
|
||||
Task.NETWORK_STATE_UNMETERED
|
||||
else
|
||||
Task.NETWORK_STATE_ANY
|
||||
|
||||
val task = PeriodicTask.Builder()
|
||||
.setService(LibraryUpdateTrigger::class.java)
|
||||
.setTag("Library periodic update")
|
||||
.setPeriod(interval * 60 * 60L)
|
||||
.setFlex(5 * 60)
|
||||
.setRequiredNetwork(wifiRestriction)
|
||||
.setRequiresCharging(acRestriction)
|
||||
.setUpdateCurrent(true)
|
||||
.setPersisted(true)
|
||||
.build()
|
||||
|
||||
GcmNetworkManager.getInstance(context).schedule(task)
|
||||
}
|
||||
}
|
||||
|
||||
fun cancelTask(context: Context) {
|
||||
GcmNetworkManager.getInstance(context).cancelAllTasks(LibraryUpdateTrigger::class.java)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package eu.kanade.tachiyomi.data.updater
|
||||
|
||||
import android.support.v4.app.NotificationCompat
|
||||
import com.evernote.android.job.Job
|
||||
import com.evernote.android.job.JobManager
|
||||
import com.evernote.android.job.JobRequest
|
||||
import eu.kanade.tachiyomi.Constants.NOTIFICATION_UPDATER_ID
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.util.notificationManager
|
||||
|
||||
class UpdateCheckerJob : Job() {
|
||||
|
||||
override fun onRunJob(params: Params): Result {
|
||||
return GithubUpdateChecker()
|
||||
.checkForUpdate()
|
||||
.map { result ->
|
||||
if (result is GithubUpdateResult.NewUpdate) {
|
||||
val url = result.release.downloadLink
|
||||
|
||||
NotificationCompat.Builder(context).update {
|
||||
setContentTitle(context.getString(R.string.app_name))
|
||||
setContentText(context.getString(R.string.update_check_notification_update_available))
|
||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||
// Download action
|
||||
addAction(android.R.drawable.stat_sys_download_done,
|
||||
context.getString(R.string.action_download),
|
||||
UpdateNotificationReceiver.downloadApkIntent(context, url))
|
||||
}
|
||||
}
|
||||
Job.Result.SUCCESS
|
||||
}
|
||||
.onErrorReturn { Job.Result.FAILURE }
|
||||
// Sadly, the task needs to be synchronous.
|
||||
.toBlocking()
|
||||
.single()
|
||||
}
|
||||
|
||||
fun NotificationCompat.Builder.update(block: NotificationCompat.Builder.() -> Unit) {
|
||||
block()
|
||||
context.notificationManager.notify(NOTIFICATION_UPDATER_ID, build())
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "UpdateChecker"
|
||||
|
||||
fun setupTask() {
|
||||
JobRequest.Builder(TAG)
|
||||
.setPeriodic(24 * 60 * 60 * 1000)
|
||||
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
|
||||
.setPersisted(true)
|
||||
.setUpdateCurrent(true)
|
||||
.build()
|
||||
.schedule()
|
||||
}
|
||||
|
||||
fun cancelTask() {
|
||||
JobManager.instance().cancelAllForTag(TAG)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
package eu.kanade.tachiyomi.data.updater
|
||||
|
||||
import android.content.Context
|
||||
import android.support.v4.app.NotificationCompat
|
||||
import com.google.android.gms.gcm.*
|
||||
import eu.kanade.tachiyomi.Constants.NOTIFICATION_UPDATER_ID
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.util.notificationManager
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
class UpdateCheckerService : GcmTaskService() {
|
||||
|
||||
override fun onInitializeTasks() {
|
||||
val preferences: PreferencesHelper = Injekt.get()
|
||||
if (preferences.automaticUpdates()) {
|
||||
setupTask(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRunTask(params: TaskParams): Int {
|
||||
return checkVersion()
|
||||
}
|
||||
|
||||
fun checkVersion(): Int {
|
||||
return GithubUpdateChecker()
|
||||
.checkForUpdate()
|
||||
.map { result ->
|
||||
if (result is GithubUpdateResult.NewUpdate) {
|
||||
val url = result.release.downloadLink
|
||||
|
||||
NotificationCompat.Builder(this).update {
|
||||
setContentTitle(getString(R.string.app_name))
|
||||
setContentText(getString(R.string.update_check_notification_update_available))
|
||||
setSmallIcon(android.R.drawable.stat_sys_download_done)
|
||||
// Download action
|
||||
addAction(android.R.drawable.stat_sys_download_done,
|
||||
getString(R.string.action_download),
|
||||
UpdateNotificationReceiver.downloadApkIntent(
|
||||
this@UpdateCheckerService, url))
|
||||
}
|
||||
}
|
||||
GcmNetworkManager.RESULT_SUCCESS
|
||||
}
|
||||
.onErrorReturn { GcmNetworkManager.RESULT_FAILURE }
|
||||
// Sadly, the task needs to be synchronous.
|
||||
.toBlocking()
|
||||
.single()
|
||||
}
|
||||
|
||||
fun NotificationCompat.Builder.update(block: NotificationCompat.Builder.() -> Unit) {
|
||||
block()
|
||||
notificationManager.notify(NOTIFICATION_UPDATER_ID, build())
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun setupTask(context: Context) {
|
||||
val task = PeriodicTask.Builder()
|
||||
.setService(UpdateCheckerService::class.java)
|
||||
.setTag("Updater")
|
||||
// 24 hours
|
||||
.setPeriod(24 * 60 * 60)
|
||||
// Run between the last two hours
|
||||
.setFlex(2 * 60 * 60)
|
||||
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
|
||||
.setPersisted(true)
|
||||
.setUpdateCurrent(true)
|
||||
.build()
|
||||
|
||||
GcmNetworkManager.getInstance(context).schedule(task)
|
||||
}
|
||||
|
||||
fun cancelTask(context: Context) {
|
||||
GcmNetworkManager.getInstance(context).cancelAllTasks(UpdateCheckerService::class.java)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user