Bug fix
This commit is contained in:
@@ -20,7 +20,7 @@ android {
|
|||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 57
|
versionCode 57
|
||||||
versionName "5.0-alpha2"
|
versionName "5.0-alpha3"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"filters": [],
|
"filters": [],
|
||||||
"properties": [],
|
"properties": [],
|
||||||
"versionCode": 57,
|
"versionCode": 57,
|
||||||
"versionName": "5.0-alpha2",
|
"versionName": "5.0-alpha3",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"outputFile": "app-release.apk"
|
"outputFile": "app-release.apk"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,19 +53,21 @@ class UpdateBroadcastReceiver : BroadcastReceiver() {
|
|||||||
.setFilterById(downloadID)
|
.setFilterById(downloadID)
|
||||||
|
|
||||||
val uri = downloadManager.query(query).use { cursor ->
|
val uri = downloadManager.query(query).use { cursor ->
|
||||||
cursor.moveToFirst()
|
if (cursor.moveToFirst()) {
|
||||||
|
|
||||||
cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)).let {
|
cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)).let {
|
||||||
val uri = Uri.parse(it)
|
val uri = Uri.parse(it)
|
||||||
|
|
||||||
when (uri.scheme) {
|
when (uri.scheme) {
|
||||||
"file" ->
|
"file" ->
|
||||||
FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!))
|
FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!)
|
||||||
|
)
|
||||||
"content" -> uri
|
"content" -> uri
|
||||||
else -> return
|
else -> null
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else
|
||||||
|
null
|
||||||
|
} ?: return
|
||||||
|
|
||||||
// Build Notification
|
// Build Notification
|
||||||
|
|
||||||
|
|||||||
@@ -240,21 +240,25 @@ class DownloadService : Service() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cancel() {
|
fun cancel(startId: Int? = null) {
|
||||||
client.dispatcher().queuedCalls().filter {
|
client.dispatcher().queuedCalls().filter {
|
||||||
it.request().tag() is Tag
|
it.request().tag() is Tag
|
||||||
}.forEach {
|
}.forEach {
|
||||||
|
(it.request().tag() as? Tag)?.startId?.let { stopSelf(it) }
|
||||||
it.cancel()
|
it.cancel()
|
||||||
}
|
}
|
||||||
client.dispatcher().runningCalls().filter {
|
client.dispatcher().runningCalls().filter {
|
||||||
it.request().tag() is Tag
|
it.request().tag() is Tag
|
||||||
}.forEach {
|
}.forEach {
|
||||||
|
(it.request().tag() as? Tag)?.startId?.let { stopSelf(it) }
|
||||||
it.cancel()
|
it.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.clear()
|
progress.clear()
|
||||||
notification.clear()
|
notification.clear()
|
||||||
notificationManager.cancelAll()
|
notificationManager.cancelAll()
|
||||||
|
|
||||||
|
startId?.let { stopSelf(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cancel(galleryID: Int, startId: Int? = null) {
|
fun cancel(galleryID: Int, startId: Int? = null) {
|
||||||
@@ -324,7 +328,7 @@ class DownloadService : Service() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reader.requestBuilders.filterIndexed { index, _ -> !progress[galleryID]!![index].isInfinite() }.forEachIndexed { index, it ->
|
reader.requestBuilders.filterIndexed { index, _ -> progress[galleryID]?.get(index)?.isInfinite() != true }.forEachIndexed { index, it ->
|
||||||
val request = it.tag(Tag(galleryID, index, startId)).build()
|
val request = it.tag(Tag(galleryID, index, startId)).build()
|
||||||
client.newCall(request).enqueue(callback)
|
client.newCall(request).enqueue(callback)
|
||||||
}
|
}
|
||||||
@@ -374,7 +378,7 @@ class DownloadService : Service() {
|
|||||||
COMMAND_DOWNLOAD -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0)
|
COMMAND_DOWNLOAD -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0)
|
||||||
download(it, intent.getBooleanExtra(KEY_PRIORITY, false), startId)
|
download(it, intent.getBooleanExtra(KEY_PRIORITY, false), startId)
|
||||||
}
|
}
|
||||||
COMMAND_CANCEL -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) cancel(it, startId) else cancel() }
|
COMMAND_CANCEL -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) cancel(it, startId) else cancel(startId = startId) }
|
||||||
COMMAND_DELETE -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) delete(it, startId) }
|
COMMAND_DELETE -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) delete(it, startId) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -819,7 +819,9 @@ class MainActivity : AppCompatActivity() {
|
|||||||
val currentQuery = query.split(" ").last().replace('_', ' ')
|
val currentQuery = query.split(" ").last().replace('_', ' ')
|
||||||
|
|
||||||
suggestionJob = CoroutineScope(Dispatchers.IO).launch {
|
suggestionJob = CoroutineScope(Dispatchers.IO).launch {
|
||||||
val suggestions = ArrayList(getSuggestionsForQuery(currentQuery).map { TagSuggestion(it) })
|
val suggestions = kotlin.runCatching {
|
||||||
|
getSuggestionsForQuery(currentQuery).map { TagSuggestion(it) }.toMutableList()
|
||||||
|
}.getOrElse { mutableListOf() }
|
||||||
|
|
||||||
suggestions.filter {
|
suggestions.filter {
|
||||||
val tag = "${it.n}:${it.s.replace(Regex("\\s"), "_")}"
|
val tag = "${it.n}:${it.s.replace(Regex("\\s"), "_")}"
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import androidx.preference.Preference
|
|||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import okhttp3.*
|
import okhttp3.*
|
||||||
import xyz.quaver.pupil.Pupil
|
|
||||||
import xyz.quaver.pupil.R
|
import xyz.quaver.pupil.R
|
||||||
import xyz.quaver.pupil.client
|
import xyz.quaver.pupil.client
|
||||||
import xyz.quaver.pupil.favorites
|
import xyz.quaver.pupil.favorites
|
||||||
@@ -45,12 +44,14 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initPreferences() {
|
private fun initPreferences() {
|
||||||
|
val context = context ?: return
|
||||||
|
|
||||||
findPreference<Preference>("backup")?.setOnPreferenceClickListener {
|
findPreference<Preference>("backup")?.setOnPreferenceClickListener {
|
||||||
val request = Request.Builder()
|
val request = Request.Builder()
|
||||||
.url(getString(R.string.backup_url))
|
.url(getString(R.string.backup_url))
|
||||||
.post(
|
.post(
|
||||||
FormBody.Builder()
|
FormBody.Builder()
|
||||||
.add("f:1", File(ContextCompat.getDataDir(requireContext()), "favorites.json").readText())
|
.add("f:1", File(ContextCompat.getDataDir(context), "favorites.json").readText())
|
||||||
.build()
|
.build()
|
||||||
).build()
|
).build()
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
|
|||||||
type = "text/plain"
|
type = "text/plain"
|
||||||
putExtra(Intent.EXTRA_TEXT, response.body()?.use { it.string() }?.replace("\n", ""))
|
putExtra(Intent.EXTRA_TEXT, response.body()?.use { it.string() }?.replace("\n", ""))
|
||||||
}.let {
|
}.let {
|
||||||
context?.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share)))
|
context.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -73,11 +74,11 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
findPreference<Preference>("restore")?.setOnPreferenceClickListener {
|
findPreference<Preference>("restore")?.setOnPreferenceClickListener {
|
||||||
val editText = EditText(requireContext()).apply {
|
val editText = EditText(context).apply {
|
||||||
setText(getString(R.string.backup_url), TextView.BufferType.EDITABLE)
|
setText(getString(R.string.backup_url), TextView.BufferType.EDITABLE)
|
||||||
}
|
}
|
||||||
|
|
||||||
AlertDialog.Builder(requireContext())
|
AlertDialog.Builder(context)
|
||||||
.setTitle(R.string.settings_restore_title)
|
.setTitle(R.string.settings_restore_title)
|
||||||
.setView(editText)
|
.setView(editText)
|
||||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
.setPositiveButton(android.R.string.ok) { _, _ ->
|
||||||
|
|||||||
@@ -32,10 +32,7 @@ import xyz.quaver.pupil.R
|
|||||||
import xyz.quaver.pupil.histories
|
import xyz.quaver.pupil.histories
|
||||||
import xyz.quaver.pupil.util.byteToString
|
import xyz.quaver.pupil.util.byteToString
|
||||||
import xyz.quaver.pupil.util.downloader.DownloadManager
|
import xyz.quaver.pupil.util.downloader.DownloadManager
|
||||||
import xyz.quaver.pupil.util.getDownloadDirectory
|
|
||||||
import java.io.BufferedReader
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.InputStreamReader
|
|
||||||
|
|
||||||
class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener {
|
class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener {
|
||||||
|
|
||||||
@@ -48,14 +45,16 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onPreferenceClick(preference: Preference?): Boolean {
|
override fun onPreferenceClick(preference: Preference?): Boolean {
|
||||||
|
val context = context ?: return false
|
||||||
|
|
||||||
with(preference) {
|
with(preference) {
|
||||||
this ?: return false
|
this ?: return false
|
||||||
|
|
||||||
when (key) {
|
when (key) {
|
||||||
"delete_cache" -> {
|
"delete_cache" -> {
|
||||||
val dir = File(requireContext().cacheDir, "imageCache")
|
val dir = File(context.cacheDir, "imageCache")
|
||||||
|
|
||||||
AlertDialog.Builder(requireContext()).apply {
|
AlertDialog.Builder(context).apply {
|
||||||
setTitle(R.string.warning)
|
setTitle(R.string.warning)
|
||||||
setMessage(R.string.settings_clear_cache_alert_message)
|
setMessage(R.string.settings_clear_cache_alert_message)
|
||||||
setPositiveButton(android.R.string.yes) { _, _ ->
|
setPositiveButton(android.R.string.yes) { _, _ ->
|
||||||
@@ -81,7 +80,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
|
|||||||
"delete_downloads" -> {
|
"delete_downloads" -> {
|
||||||
val dir = DownloadManager.getInstance(context).downloadFolder
|
val dir = DownloadManager.getInstance(context).downloadFolder
|
||||||
|
|
||||||
AlertDialog.Builder(requireContext()).apply {
|
AlertDialog.Builder(context).apply {
|
||||||
setTitle(R.string.warning)
|
setTitle(R.string.warning)
|
||||||
setMessage(R.string.settings_clear_downloads_alert_message)
|
setMessage(R.string.settings_clear_downloads_alert_message)
|
||||||
setPositiveButton(android.R.string.yes) { _, _ ->
|
setPositiveButton(android.R.string.yes) { _, _ ->
|
||||||
@@ -114,7 +113,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
|
|||||||
}.show()
|
}.show()
|
||||||
}
|
}
|
||||||
"clear_history" -> {
|
"clear_history" -> {
|
||||||
AlertDialog.Builder(requireContext()).apply {
|
AlertDialog.Builder(context).apply {
|
||||||
setTitle(R.string.warning)
|
setTitle(R.string.warning)
|
||||||
setMessage(R.string.settings_clear_history_alert_message)
|
setMessage(R.string.settings_clear_history_alert_message)
|
||||||
setPositiveButton(android.R.string.yes) { _, _ ->
|
setPositiveButton(android.R.string.yes) { _, _ ->
|
||||||
@@ -132,10 +131,12 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initPreferences() {
|
private fun initPreferences() {
|
||||||
|
val context = context ?: return
|
||||||
|
|
||||||
with(findPreference<Preference>("delete_cache")) {
|
with(findPreference<Preference>("delete_cache")) {
|
||||||
this ?: return@with
|
this ?: return@with
|
||||||
|
|
||||||
val dir = File(requireContext().cacheDir, "imageCache")
|
val dir = File(context.cacheDir, "imageCache")
|
||||||
|
|
||||||
summary = getString(R.string.settings_storage_usage, byteToString(0))
|
summary = getString(R.string.settings_storage_usage, byteToString(0))
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
|||||||
@@ -135,11 +135,11 @@ class Cache private constructor(context: Context, val galleryID: Int) : ContextW
|
|||||||
suspend fun getThumbnail(): ByteArray? =
|
suspend fun getThumbnail(): ByteArray? =
|
||||||
findFile(".thumbnail")?.readBytes()
|
findFile(".thumbnail")?.readBytes()
|
||||||
?: getGalleryBlock()?.thumbnails?.firstOrNull()?.let { withContext(Dispatchers.IO) {
|
?: getGalleryBlock()?.thumbnails?.firstOrNull()?.let { withContext(Dispatchers.IO) {
|
||||||
|
kotlin.runCatching {
|
||||||
val request = Request.Builder()
|
val request = Request.Builder()
|
||||||
.url(it)
|
.url(it)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
kotlin.runCatching {
|
|
||||||
client.newCall(request).execute().body()?.use { it.bytes() }
|
client.newCall(request).execute().body()?.use { it.bytes() }
|
||||||
}.getOrNull()?.also { kotlin.run {
|
}.getOrNull()?.also { kotlin.run {
|
||||||
cacheFolder.getChild(".thumbnail").writeBytes(it)
|
cacheFolder.getChild(".thumbnail").writeBytes(it)
|
||||||
|
|||||||
Reference in New Issue
Block a user